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 {{msg}}\n \n
\n\n'),e.put("help-text.html",'\n \n
\n \n'),e.put("loading.html",'\n'),e.put("time-amount-picker.html",'\n
\n \n {{ hour }} \n \n \n
\n h\n
\n \n {{ minute }} \n \n \n
\n m\n
\n'),e.put("timepicker-select.html",'{{ selector.placeholder }} \n{{ option }} \n'),e.put("civihr-ui-select/choices.tpl.html",'\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'),e.put("civihr-ui-select/select-contacts.tpl.html",'\n'),e.put("civihr-ui-select/select-multiple.tpl.html",'\n'),e.put("civihr-ui-select/select.tpl.html",'\n'),e.put("components/heatmap.html",'\n \n {{day.name.short}}\n \n \n'),e.put("contact-actions/contact-actions.html",'\n'),e.put("contact-actions/modals/form.html",'\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)}
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
-
+
+
+
+ {{absenceType.title}}
-
-
-
-
- AT
-
-
Accrued TOIL
-
-
-
-
-
- AT
-
-
Requested Accrued TOIL
-
-
-
-
-
-
-
-
+
+
+
+
+ {{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 @@
-
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 @@
-
-
+
-
+
+
From d68bb17639a82e12de9fdfaa3ce3db87f2b95d63 Mon Sep 17 00:00:00 2001
From: Igor Pavlov
Date: Thu, 17 May 2018 16:41:47 +0100
Subject: [PATCH 127/251] PCHR-3520: Avoid unneeded REST sequences
---
.../components/leave-calendar.component.js | 8 ++--
.../leave-calendar-admin.controller.js | 41 ++++++++++---------
2 files changed, 24 insertions(+), 25 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 232b265619d..e94c4ef138e 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
@@ -67,16 +67,14 @@ define([
.then(initWatchers)
.then(injectSubController)
.then(makeSureMonthIsNotInjected)
- .then(loadAbsencePeriods)
.then(function () {
return $q.all([
+ loadAbsencePeriods(),
loadContacts(),
- loadSupportData()
+ loadSupportData(),
+ vm.showFilters ? loadFiltersOptionValues() : _.noop
]);
})
- .then(function () {
- return vm.showFilters ? loadFiltersOptionValues() : _.noop;
- })
.then(function () {
injectAndShowMonth();
setMonthPaginatorsAvailability();
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 88a456d8e1f..3d90ccc1629 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
@@ -46,21 +46,21 @@ define([
*/
function loadContactIdsToReduceTo () {
return loadContracts()
- .then(function (contracts) {
- var contractsInAbsencePeriod = contracts.filter(function (contract) {
- var details = contract.info.details;
+ .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) &&
+ 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;
- }));
- });
+ return _.uniq(contractsInAbsencePeriod.map(function (contract) {
+ return contract.contact_id;
+ }));
+ });
}
/**
@@ -81,17 +81,18 @@ define([
return lookupContacts(filterByAssignee)
.then(function (contacts) {
vm.lookupContacts = contacts;
- })
- .then(function () {
- return (filterByAssignee !== 'me'
- ? loadContactIdsToReduceTo() : $q.resolve(null));
- })
- .then(function (contactIdsToReduceTo) {
- vm.contactIdsToReduceTo = contactIdsToReduceTo;
- return loadContacts();
+ return $q.all([
+ loadContacts(),
+ filterByAssignee !== 'me'
+ ? loadContactIdsToReduceTo() : $q.resolve(null)
+ ]);
})
- .then(function (contacts) {
+ .then(function (results) {
+ var contacts = results[0];
+
+ vm.contactIdsToReduceTo = results[1];
+
return contacts;
});
}
From 738bc1f0bf40845c268ed283a0bf0c567efcae74 Mon Sep 17 00:00:00 2001
From: Igor Pavlov
Date: Thu, 17 May 2018 16:44:08 +0100
Subject: [PATCH 128/251] PCHR-3520: Add dist files
---
.../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 +++++-----
5 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css
index 73a04318327..c02c51be25f 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__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}
+#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__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 7abfc209cc8..995f0bfa908 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 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(){});
+!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(t){return v.lookupContacts=t,a.all([l(),"me"!==e?c():a.resolve(null)])}).then(function(e){var t=e[0];return v.contactIdsToReduceTo=e[1],t})}}}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/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,o,s,i,r,c,u,l,d){function m(){for(var e=[],n=t(U.selectedPeriod.start_date).clone().startOf("month"),a=t(U.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");U.months=e}function f(e){return e.year()+"-"+e.month()}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(x(),M(),O())})}function h(e){U.injectMonth=!0,E("injected").then(function(){O(e)}).then(function(){U.loading.calendar=!1})}function v(){B=n("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(t){U.absencePeriods=e.sortBy(t,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}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(t){U.supportData.absenceTypes=t[0],U.supportData.publicHolidays=t[1],U.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(t[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:t().year(e.year()).month(e.month())}}function R(e){var t="previous"===e?"subtract":"add",n=U.selectedMonth.moment[t](1,"month");U.selectedMonthIndex=f(n),x(),M(),I("month")}function I(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(P).then("period"===t?m:e.noop).then("period"===t?k:e.noop).then("contacts"===t?q:e.noop).then("month"===t?M:e.noop).then(function(){h("contacts"===t)})}function w(){var t=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),t!==U.selectedPeriod.id&&m(),S(),M(),I("month")}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function S(){U.selectedMonthIndex=t().year()+"-"+t().month(),x()}function k(){U.selectedMonthIndex=U.months[0].index,x()}function L(n){var a="previous"===n?"first":"last",o=e[a](U.months),s=t().year(o.year).month(o.month);U.monthPaginatorsAvailability[n]=!U.selectedMonth.moment.isSame(s,"month")}function M(){L("previous"),L("next")}function x(){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(t){return a(function(n){var a=s.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}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.paginateMonth=R,U.refresh=I,U.selectCurrentMonth=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})}()}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,o,s){"use strict";function i(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(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 u(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}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=o.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?r(t):c(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id]
+;[l,m,f,d,u].forEach(function(n){n.call(this,e,t)})}function h(e,t){o(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=i,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",["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,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.year()+"-"+e.month(),month: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(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 t(e,c.serverDateFormat)}function h(e){var t=b(e);t&&(M(t),j(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(Y[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 _(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:U(n),isAccruedTOIL:A(n,"toil"),isRequested:D(n),isAM:T("half_day_am",n,e.date),isPM:T("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.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,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=R(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 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,n,a){var o=V.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 A(e,t){return e.request_type===t}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=V.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function R(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.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(t){var n=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(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: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 t=V.month.days[0].date,n=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(t){return e.includes(V.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=R(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 x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(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:P(t.date)})}),s.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(t){return $(e,t.id)}))}))}function B(e,t){V.currentPage=0,V.visible=!0,(t||!W)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(V.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!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(t){return $(t,e.contact_id,!0)}))}n.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=t().month(V.month.month).year(V.month.year);y(),C(),V.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||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],n):"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&&U(),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 T(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){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 D(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():A()}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(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 F(){return h(te.request.from_date)===h(te.request.to_date)}function U(){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")&&F()||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=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")&&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(D).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?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 A(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function D(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=P,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}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){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 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 A(){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 P(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function D(){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 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(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"],o=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),o.balanceChanges[n]-=t.balance_change,a.forEach(function(e){o.remainder[e]-=t.balance_change})}function j(){Y.loading.content=!0,n.all([P(),A()]).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: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: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: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([P(),A()])}).then($).then(function(){Y.loading.content=!1}),F()}()}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 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,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(D)).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 A(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){O(e,!0)})})}function D(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(){i.uiOptions.times[e].loading=!1,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"),D("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?D("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=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 A(){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 D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),A(),D())}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(),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(){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))}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=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,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 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 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 F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(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?F():U("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){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){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){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=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 Te(){Oe.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")})}t.debug("RequestCtrl");var De,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=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})}()}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/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js
index a8b822498c6..ded31e09380 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 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(){});
+!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 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+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/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.year()+"-"+e.month()}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(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(e){var t="previous"===e?"subtract":"add",n=N.selectedMonth.moment[t](1,"month");N.selectedMonthIndex=m(n),M(),E(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t?f:e.noop).then("period"===t?I:e.noop).then("contacts"===t?q:e.noop).then("month"===t?E:e.noop).then(function(){h("contacts"===t)})}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),E(),S("month")}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){N.selectedMonthIndex=t().year()+"-"+t().month(),M()}function I(){N.selectedMonthIndex=N.months[0].index,M()}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(){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.paginateMonth=D,N.refresh=S,N.selectCurrentMonth=T,function(){L().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.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.year()+"-"+e.month(),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(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::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=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.month&&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 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(e,t){Y.currentPage=0,Y.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(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 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.month).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 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 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),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(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: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(),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 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(){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 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(Te,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(){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=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 646ecfac622..54efd0a9328 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 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(){});
+!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=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+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(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.year()+"-"+e.month()}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(e){var t="previous"===e?"subtract":"add",n=N.selectedMonth.moment[t](1,"month");N.selectedMonthIndex=m(n),E(),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t?f:e.noop).then("period"===t?I:e.noop).then("contacts"===t?q:e.noop).then("month"===t?M:e.noop).then(function(){h("contacts"===t)})}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(),S("month")}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){N.selectedMonthIndex=t().year()+"-"+t().month(),E()}function I(){N.selectedMonthIndex=N.months[0].index,E()}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(){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.paginateMonth=D,N.refresh=S,N.selectCurrentMonth=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.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.year()+"-"+e.month(),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(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&&(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(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::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=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.month&&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 M(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 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 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(e,t){Y.currentPage=0,Y.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(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 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=E,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.month).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 E()}).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 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),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),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(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: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 G(){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 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 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=G,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,Y(),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(){});
//# 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 16802c581eb..e4d94540985 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(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(){});
+!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 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+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(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.year()+"-"+e.month()}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(e){var t="previous"===e?"subtract":"add",n=N.selectedMonth.moment[t](1,"month");N.selectedMonthIndex=f(n),M(),E(),T("month")}function T(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t?m:e.noop).then("period"===t?O:e.noop).then("contacts"===t?q:e.noop).then("month"===t?E:e.noop).then(function(){h("contacts"===t)})}function S(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),x(),E(),T("month")}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){N.selectedMonthIndex=t().year()+"-"+t().month(),M()}function O(){N.selectedMonthIndex=N.months[0].index,M()}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(){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.paginateMonth=D,N.refresh=T,N.selectCurrentMonth=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.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.year()+"-"+e.month(),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(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::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=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.month&&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([O(),x()]).then(I).then(k).then(function(){H=!0,Y.month.loading=!1})}function x(){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 O(){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(e,t){Y.currentPage=0,Y.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(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.month).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(),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(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,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),Y()))})}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),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")&&(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 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),(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 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=x,te.isLeaveType=O,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 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){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:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},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),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 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!==Oe)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: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=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
From 7db15b040034b02ac638bf7c2dade5cdf52fb872 Mon Sep 17 00:00:00 2001
From: Igor Pavlov
Date: Mon, 21 May 2018 10:56:50 +0100
Subject: [PATCH 129/251] PCHR-3520: PR Feedback
---
.../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 +--
.../leave-calendar-month.component.js | 2 +-
.../components/leave-calendar.component.js | 70 +++++++++++--------
.../leave-calendar-month.component.spec.js | 2 +-
.../leave-calendar.component.spec.js | 17 ++---
.../shared/components/leave-calendar.html | 3 +-
9 files changed, 68 insertions(+), 60 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 995f0bfa908..e66c374e9df 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(t){return v.lookupContacts=t,a.all([l(),"me"!==e?c():a.resolve(null)])}).then(function(e){var t=e[0];return v.contactIdsToReduceTo=e[1],t})}}}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/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,o,s,i,r,c,u,l,d){function m(){for(var e=[],n=t(U.selectedPeriod.start_date).clone().startOf("month"),a=t(U.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");U.months=e}function f(e){return e.year()+"-"+e.month()}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(x(),M(),O())})}function h(e){U.injectMonth=!0,E("injected").then(function(){O(e)}).then(function(){U.loading.calendar=!1})}function v(){B=n("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(t){U.absencePeriods=e.sortBy(t,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}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(t){U.supportData.absenceTypes=t[0],U.supportData.publicHolidays=t[1],U.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(t[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:t().year(e.year()).month(e.month())}}function R(e){var t="previous"===e?"subtract":"add",n=U.selectedMonth.moment[t](1,"month");U.selectedMonthIndex=f(n),x(),M(),I("month")}function I(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(P).then("period"===t?m:e.noop).then("period"===t?k:e.noop).then("contacts"===t?q:e.noop).then("month"===t?M:e.noop).then(function(){h("contacts"===t)})}function w(){var t=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),t!==U.selectedPeriod.id&&m(),S(),M(),I("month")}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function S(){U.selectedMonthIndex=t().year()+"-"+t().month(),x()}function k(){U.selectedMonthIndex=U.months[0].index,x()}function L(n){var a="previous"===n?"first":"last",o=e[a](U.months),s=t().year(o.year).month(o.month);U.monthPaginatorsAvailability[n]=!U.selectedMonth.moment.isSame(s,"month")}function M(){L("previous"),L("next")}function x(){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(t){return a(function(n){var a=s.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}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.paginateMonth=R,U.refresh=I,U.selectCurrentMonth=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})}()}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,o,s){"use strict";function i(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(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 u(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}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=o.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?r(t):c(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id]
-;[l,m,f,d,u].forEach(function(n){n.call(this,e,t)})}function h(e,t){o(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=i,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",["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,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.year()+"-"+e.month(),month: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(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 t(e,c.serverDateFormat)}function h(e){var t=b(e);t&&(M(t),j(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(Y[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 _(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:U(n),isAccruedTOIL:A(n,"toil"),isRequested:D(n),isAM:T("half_day_am",n,e.date),isPM:T("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.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,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=R(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 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,n,a){var o=V.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 A(e,t){return e.request_type===t}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=V.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function R(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.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(t){var n=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(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: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 t=V.month.days[0].date,n=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(t){return e.includes(V.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=R(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 x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(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:P(t.date)})}),s.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(t){return $(e,t.id)}))}))}function B(e,t){V.currentPage=0,V.visible=!0,(t||!W)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(V.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!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(t){return $(t,e.contact_id,!0)}))}n.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=t().month(V.month.month).year(V.month.year);y(),C(),V.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||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],n):"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&&U(),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 T(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){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 D(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():A()}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(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 F(){return h(te.request.from_date)===h(te.request.to_date)}function U(){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")&&F()||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=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")&&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(D).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?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 A(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function D(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=P,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}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){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 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 A(){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 P(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function D(){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 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(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"],o=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),o.balanceChanges[n]-=t.balance_change,a.forEach(function(e){o.remainder[e]-=t.balance_change})}function j(){Y.loading.content=!0,n.all([P(),A()]).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: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: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: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([P(),A()])}).then($).then(function(){Y.loading.content=!1}),F()}()}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 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,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(D)).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 A(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){O(e,!0)})})}function D(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(){i.uiOptions.times[e].loading=!1,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"),D("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?D("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=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 A(){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 D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),A(),D())}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(),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(){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))}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=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,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 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 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 F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(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?F():U("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){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){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){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=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 Te(){Oe.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")})}t.debug("RequestCtrl");var De,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=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})}()}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(){});
+!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(t){return v.lookupContacts=t,a.all([l(),"me"!==e?c():a.resolve(null)])}).then(function(e){var t=e[0];return v.contactIdsToReduceTo=e[1],t})}}}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/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,o,s,i,r,c,u,l,d){function m(){for(var e=[],n=t(U.selectedPeriod.start_date).clone().startOf("month"),a=t(U.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.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,t){null!==t&&e!==t&&(x(),M(),O())})}function h(e){U.injectMonth=!0,E("injected").then(function(){O(e)}).then(function(){U.loading.calendar=!1})}function v(){B=n("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(t){U.absencePeriods=e.sortBy(t,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}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(t){U.supportData.absenceTypes=t[0],U.supportData.publicHolidays=t[1],U.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(t[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:t().year(e.year()).month(e.month())}}function R(){var t=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),t!==U.selectedPeriod.id&&m(),S(),M(),w("month")}function I(e){var t="previous"===e?"subtract":"add";x(U.selectedMonth.moment[t](1,"month")),M(),w("month")}function w(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(P).then("period"===t&&m).then("period"===t&&k).then("contacts"===t&&q).then("month"===t&&M).then(function(){h("contacts"===t)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function S(){x(t())}function k(){x(U.months[0].moment)}function L(n){var a="previous"===n?"first":"last",o=e[a](U.months),s=t().year(o.year).month(o.month);U.monthPaginatorsAvailability[n]=!U.selectedMonth.moment.isSame(s,"month")}function M(){L("previous"),L("next")}function x(t){t&&(U.selectedMonthIndex=f(t)),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(t){return a(function(n){var a=s.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}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})}()}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,o,s){"use strict";function i(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(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 u(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}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=o.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?r(t):c(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(n){n.call(this,e,t)})}function h(e,t){o(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=i,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",["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,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(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(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 t(e,c.serverDateFormat)}function h(e){var t=b(e);t&&(M(t),j(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 _(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:U(n),isAccruedTOIL:A(n,"toil"),isRequested:D(n),isAM:T("half_day_am",n,e.date),isPM:T("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.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,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=R(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 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,n,a){var o=V.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 A(e,t){return e.request_type===t}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=V.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function R(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.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(t){var n=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(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: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 t=V.month.days[0].date,n=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(t){return e.includes(V.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=R(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 x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(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:P(t.date)})}),s.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(t){return $(e,t.id)}))}))}function B(e,t){V.currentPage=0,V.visible=!0,(t||!W)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(V.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!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(t){return $(t,e.contact_id,!0)}))}n.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=t().month(V.month.month).year(V.month.year);y(),C(),V.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||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],n):"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&&U(),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 T(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){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 D(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():A()}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(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 F(){return h(te.request.from_date)===h(te.request.to_date)}function U(){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")&&F()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function Y(){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 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 G(),e=t!==te.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),Y(),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=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")&&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(Y).then(D).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?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 A(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function D(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=P,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}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(){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){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 t=Y[e.status];t?t(e.leaveRequest):G.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){G.absencePeriods=e.sortBy(t,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(t){G.absenceTypes=t,G.absenceTypesIndexed=e.indexBy(t,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var t={contact_id:G.contactId,period_id:G.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){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 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 n.all([r.breakdown({contact_id:G.contactId,period_id:G.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){G.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(t){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})}},t),null,"from_date ASC",null,!1)}function w(e,t){return I(t).then(function(t){G.sections[e].data=t.list})}function O(){return n.all(Object.values(G.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){G.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(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 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 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(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&&N(t,a))})}function N(t,n){var a=["future","current"],o=G.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),o.balanceChanges[n]-=t.balance_change,a.forEach(function(e){o.remainder[e]-=t.balance_change})}function j(){G.loading.content=!0,n.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return n.all([O(),v()])})}function W(e){var t=G.sections[e];t.open=!t.open,t.open&&!t.data.length&&M(t)}function H(t){return e.find(G.leaveRequestStatuses,function(e){return e.name===t
+}).value}t.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:S}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){n.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return n.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}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 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,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(D)).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 A(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){O(e,!0)})})}function D(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(){i.uiOptions.times[e].loading=!1,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"),D("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?D("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=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 A(){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 D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),A(),D())}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(),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(){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))}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=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,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 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 O(){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 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 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?F():U("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 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: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){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){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){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=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 Te(){Oe.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")})}t.debug("RequestCtrl");var De,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=G,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,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})}()}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/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js
index ded31e09380..4fb1e614490 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 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+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/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.year()+"-"+e.month()}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(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(e){var t="previous"===e?"subtract":"add",n=N.selectedMonth.moment[t](1,"month");N.selectedMonthIndex=m(n),M(),E(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t?f:e.noop).then("period"===t?I:e.noop).then("contacts"===t?q:e.noop).then("month"===t?E:e.noop).then(function(){h("contacts"===t)})}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),E(),S("month")}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){N.selectedMonthIndex=t().year()+"-"+t().month(),M()}function I(){N.selectedMonthIndex=N.months[0].index,M()}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(){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.paginateMonth=D,N.refresh=S,N.selectCurrentMonth=T,function(){L().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.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.year()+"-"+e.month(),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(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::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=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.month&&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 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(e,t){Y.currentPage=0,Y.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(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 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.month).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 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 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),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(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: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(),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 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(){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 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(Te,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(){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=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),
+!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 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+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;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,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(),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(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 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(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.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 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([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: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 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 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!==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=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 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 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 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),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),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(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/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 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 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(){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=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(){});
//# 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 54efd0a9328..f3922cb37c6 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