diff --git a/com.civicrm.hrjobroles/info.xml b/com.civicrm.hrjobroles/info.xml index 869358d8eee..df324a0db2f 100644 --- a/com.civicrm.hrjobroles/info.xml +++ b/com.civicrm.hrjobroles/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/com.civicrm.hrjobroles/js/dist/job-roles.min.js b/com.civicrm.hrjobroles/js/dist/job-roles.min.js index 6f010dec8c6..d00dd05318c 100644 --- a/com.civicrm.hrjobroles/js/dist/job-roles.min.js +++ b/com.civicrm.hrjobroles/js/dist/job-roles.min.js @@ -12,6 +12,6 @@ Build date: 2014-01-10 */ -define("job-roles/modules/job-roles.config",["common/angular"],function(e){"use strict";function t(e,t,n,r,a){t.debugEnabled(a.debug),r.resolveForAll({format:["DateFormat",function(e){return e.getDateFormat()}]}).when("/",{templateUrl:a.pathBaseUrl+a.pathTpl+"mainTemplate.html?v=1",resolve:{},controller:"JobRolesController",controllerAs:"jobroles"}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,e.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("hrjobroles.config",["hrjobroles.constants"]).config(t),t.$inject=["$httpProvider","$logProvider","$resourceProvider","$routeProvider","settings"]}),define("job-roles/modules/job-roles.constants",["common/angular"],function(e){"use strict";e.module("hrjobroles.constants",[]).constant("settings",{classNamePrefix:"hrjobroles-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:CRM.vars.hrjobroles.path,pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.hrjobroles.baseURL+"/",pathTpl:"views/",pathIncludeTpl:"views/include/"})}),define("job-roles/controllers/job-roles.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function r(r,a,o,i,s,l,u,c,d,f,m,p,b,h,v,g,_){function $(e,t){void 0===Ce.editData[e]&&(Ce.editData[e]={}),"cost_centre"===t?(void 0!==Ce.editData[e].cost_centers&&Ce.editData[e].cost_centers instanceof Array||(Ce.editData[e].cost_centers=[]),Ce.editData[e].cost_centers.push({id:Ce.editData[e].cost_centers.length+1,cost_centre_id:"",type:"1",percentage:"0",amount:"0"})):(void 0!==Ce.editData[e].funders&&Ce.editData[e].funders instanceof Array||(Ce.editData[e].funders=[]),Ce.editData[e].funders.push({id:Ce.editData[e].funders.length+1,funder_id:"",type:"1",percentage:"0",amount:"0"}))}function w(){Ce.add_new=!0}function y(){Ce.add_new=!1,delete Ce.editData.new_role_id}function D(e,t){Ce.viewTab[e]=t}function E(t,n){K(t)&&(t=null),K(n)&&(n=null);var r=!0;return!!t&&(e.forEach(Ce.contractsData,function(e){ye(t)===ye(e.start_date)&&ye(n)===ye(e.end_date)&&(r=!1)}),r)}function j(){return void 0===Ce.editData.new_role_id||void 0===Ce.editData.new_role_id.title||""===Ce.editData.new_role_id.title||void 0===Ce.editData.new_role_id.job_contract_id||""===Ce.editData.new_role_id.job_contract_id}function C(e){Ce.collapsedRows[e]=!Ce.collapsedRows[e]}function R(e){return g.getContracts(e).then(function(e){for(var t=[],n={},r=0;r-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function $e(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!_e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function we(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var ye=r("formatDate"),De={},Ee=r("getActiveValues"),je=["funders","cost_centers"],Ce=this;Ce.contactId=m.contactId,Ce.format=p.DATE_FORMAT,Ce.loading=!0,Ce.pastJobRoles=[],Ce.presentJobRoles=[],Ce.collapsedRows=[],Ce.contactList=[],Ce.editData={},Ce.viewTab=[],Ce.CalendarShow=[],Ce.contractsData=[],Ce.DepartmentsData={},Ce.LevelsData={},Ce.LocationsData={},Ce.RegionsData={},Ce.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Ce.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Ce.rowTypes={},Ce.rowTypes[0]={id:0,name:"Fixed"},Ce.rowTypes[1]={id:1,name:"%"},Ce.addAdditionalRow=$,Ce.addNewRole=w,Ce.cancelNewRole=y,Ce.changeTab=D,Ce.checkIfDatesAreCustom=E,Ce.checkNewRole=j,Ce.collapseRow=C,Ce.deleteAdditionalRow=x,Ce.dpOpen=S,Ce.getContactList=J,Ce.getCostLabel=U,Ce.initData=P,Ce.isChanged=G,Ce.isOpen=Z,Ce.isRowCollapsed=X,Ce.isTab=Q,Ce.onAfterSave=ee,Ce.onCancel=te,Ce.onContractEdited=ne,Ce.onContractSelected=re,Ce.open=ae,Ce.removeRole=ie,Ce.saveNewRole=se,Ce.select=le,Ce.showRowType=ue,Ce.showSave=ce,Ce.status="",Ce.today=fe,Ce.updateAdditionalRowType=me,Ce.updateRole=ve,Ce.validateRole=$e,Ce.validateTitle=we,Ce.openOptionsEditor=q,function(){de(),Ce.today(),o.all([W(),I(Ce.contactId),Ce.getContactList()]).then(function(){Ce.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
',noformTpl:'',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
',noformTpl:'',controlsTpl:'
',inputTpl:"",errorTpl:'
', -buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function we(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!$e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function ye(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var De=r("formatDate"),Ee={},je=r("getActiveValues"),Ce=["funders","cost_centers"],Re=this;Re.contactId=m.contactId,Re.format=p.DATE_FORMAT,Re.loading=!0,Re.pastJobRoles=[],Re.presentJobRoles=[],Re.collapsedRows=[],Re.contactList=[],Re.editData={},Re.viewTab=[],Re.CalendarShow=[],Re.contractsData=[],Re.DepartmentsData={},Re.LevelsData={},Re.LocationsData={},Re.RegionsData={},Re.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Re.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Re.rowTypes={},Re.rowTypes[0]={id:0,name:"Fixed"},Re.rowTypes[1]={id:1,name:"%"},Re.addAdditionalRow=$,Re.addNewRole=w,Re.cancelNewRole=y,Re.changeTab=D,Re.checkIfDatesAreCustom=E,Re.checkNewRole=j,Re.collapseRow=C,Re.deleteAdditionalRow=x,Re.dpOpen=S,Re.getContactList=J,Re.getCostLabel=U,Re.initData=P,Re.isChanged=G,Re.isOpen=Z,Re.isRowCollapsed=X,Re.isTab=Q,Re.onAfterSave=ee,Re.onCancel=te,Re.onContractEdited=ne,Re.onContractSelected=re,Re.open=ae,Re.removeRole=ie,Re.saveNewRole=se,Re.select=le,Re.showRowType=ue,Re.showSave=ce,Re.status="",Re.today=fe,Re.updateAdditionalRowType=me,Re.updateRole=ve,Re.validateRole=we,Re.validateTitle=ye,Re.openOptionsEditor=q,function(){de(),Re.today(),o.all([W(),I(Re.contactId),Re.getContactList()]).then(function(){Re.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
',noformTpl:'',controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
',noformTpl:'', +controlsTpl:'
',inputTpl:"",errorTpl:'
',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;cLocation:
-
+
- - -
+
+ + + +
-
+
- - -
+
+ + + +
-
+
- - -
+
+ + + +
-
+
- - -
+
+ + + +
diff --git a/com.civicrm.hrjobroles/views/include/job_role_panel.html b/com.civicrm.hrjobroles/views/include/job_role_panel.html index 0ed4738f9e3..8d0ee2b8189 100755 --- a/com.civicrm.hrjobroles/views/include/job_role_panel.html +++ b/com.civicrm.hrjobroles/views/include/job_role_panel.html @@ -153,13 +153,13 @@ -
+

{{jobroles.LocationsData[jobroles.editData[job_roles_data.id]['location']]['title'] || '-'}}

-
+
- - -
+
+ + + +
-
+

{{jobroles.RegionsData[jobroles.editData[job_roles_data.id]['region']]['title'] || '-'}}

-
+
- - -
+
+ + + +
-
+

{{jobroles.DepartmentsData[jobroles.editData[job_roles_data.id]['department']]['title'] || '-'}}

-
+
- - -
+
+ + + +
-
+

{{jobroles.LevelsData[jobroles.editData[job_roles_data.id]['level']]['title'] || '-'}}

-
+
- - -
+
+ + + +
diff --git a/contactaccessrights/info.xml b/contactaccessrights/info.xml index 91804b6cf8e..7929c8cb8f9 100644 --- a/contactaccessrights/info.xml +++ b/contactaccessrights/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/contactsummary/info.xml b/contactsummary/info.xml index e5e1fe90a3b..a2f768b4085 100644 --- a/contactsummary/info.xml +++ b/contactsummary/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/contactsummary/js/dist/contact-summary.min.js b/contactsummary/js/dist/contact-summary.min.js index 87668e6b8b2..18f1e921d40 100644 --- a/contactsummary/js/dist/contact-summary.min.js +++ b/contactsummary/js/dist/contact-summary.min.js @@ -1,3 +1,3 @@ -define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(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); +define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return n.contact_id&&n.period_id||s.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){ +return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/contactsummary/js/dist/contact-summary.min.js.map \ No newline at end of file diff --git a/contactsummary/scss/components/_info-button.scss b/contactsummary/scss/components/_info-button.scss deleted file mode 100644 index cee121bca94..00000000000 --- a/contactsummary/scss/components/_info-button.scss +++ /dev/null @@ -1,8 +0,0 @@ -button.info-button { - background: none; - border: none; - - .fa { - color: $brand-primary; - } -} diff --git a/hrbank/info.xml b/hrbank/info.xml index ed780473a44..546c3fbd227 100644 --- a/hrbank/info.xml +++ b/hrbank/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrcareer/info.xml b/hrcareer/info.xml index 21310fadf93..8d591903165 100644 --- a/hrcareer/info.xml +++ b/hrcareer/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrcase/info.xml b/hrcase/info.xml index 4d274954e41..981dcd95970 100644 --- a/hrcase/info.xml +++ b/hrcase/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrdemog/info.xml b/hrdemog/info.xml index 20aba3312d5..5df28806d93 100644 --- a/hrdemog/info.xml +++ b/hrdemog/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrim/info.xml b/hrim/info.xml index 877fcc16b88..5a12b786a31 100644 --- a/hrim/info.xml +++ b/hrim/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 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/hrjobcontract/config.rb b/hrjobcontract/config.rb index 8d2a21fb10a..5eadc0a78d0 100644 --- a/hrjobcontract/config.rb +++ b/hrjobcontract/config.rb @@ -17,7 +17,7 @@ # relative_assets = true # To disable debugging comments that display the original location of your selectors. Uncomment: -# line_comments = false +line_comments = false # If you prefer the indented syntax, you might want to regenerate this diff --git a/hrjobcontract/css/hrjc.css b/hrjobcontract/css/hrjc.css index 8256735a85d..27e6c0f1c11 100644 --- a/hrjobcontract/css/hrjc.css +++ b/hrjobcontract/css/hrjc.css @@ -1,5 +1,4 @@ @charset "UTF-8"; -/* line 8, ../scss/hrjc.scss */ #hrjob-contract { /** * Unset Eric Meyer's Reset CSS styles. @@ -61,6 +60,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; /** @@ -71,7 +71,6 @@ * Ad-hoc customizations */ } -/* line 7, ../scss/civihr/modules/_unset.scss */ #hrjob-contract html, #hrjob-contract body, #hrjob-contract div, @@ -145,7 +144,6 @@ border: initial; vertical-align: initial; } -/* line 79, ../scss/civihr/modules/_unset.scss */ #hrjob-contract ol, #hrjob-contract ul { padding-start: 40px; @@ -153,48 +151,39 @@ -webkit-padding-start: 40px; list-style: initial; } -/* line 86, ../scss/civihr/modules/_unset.scss */ #hrjob-contract blockquote, #hrjob-contract q { quotes: initial; } -/* line 90, ../scss/civihr/modules/_unset.scss */ #hrjob-contract blockquote:before, #hrjob-contract blockquote:after, #hrjob-contract q:before, #hrjob-contract q:after { content: initial; } -/* line 98, ../scss/civihr/modules/_unset.scss */ #hrjob-contract ins { text-decoration: initial; } -/* line 101, ../scss/civihr/modules/_unset.scss */ #hrjob-contract del { text-decoration: initial; } -/* line 106, ../scss/civihr/modules/_unset.scss */ #hrjob-contract table { border-collapse: initial; border-spacing: initial; } -/* line 110, ../scss/civihr/modules/_unset.scss */ #hrjob-contract table td, #hrjob-contract table th { color: inherit; font-size: inherit; } -/* line 123, ../scss/civihr/modules/_unset.scss */ #hrjob-contract input, #hrjob-contract select, #hrjob-contract textarea { font-family: initial; } -/* line 128, ../scss/civihr/modules/_unset.scss */ #hrjob-contract textarea { font-size: initial; line-height: initial; } -/* line 32, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract article, #hrjob-contract aside, #hrjob-contract details, @@ -210,7 +199,6 @@ #hrjob-contract summary { display: block; } -/* line 53, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract audio, #hrjob-contract canvas, #hrjob-contract progress, @@ -218,53 +206,42 @@ display: inline-block; vertical-align: baseline; } -/* line 66, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract audio:not([controls]) { display: none; height: 0; } -/* line 76, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract [hidden], #hrjob-contract template { display: none; } -/* line 88, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract a { background-color: transparent; } -/* line 96, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract a:active, #hrjob-contract a:hover { outline: 0; } -/* line 108, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract abbr[title] { border-bottom: 1px dotted; } -/* line 116, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract b, #hrjob-contract strong { font-weight: bold; } -/* line 125, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract dfn { font-style: italic; } -/* line 134, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract h1 { font-size: 2em; margin: 0.67em 0; } -/* line 143, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract mark { background: #ff0; color: #000; } -/* line 152, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract small { font-size: 80%; } -/* line 160, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract sub, #hrjob-contract sup { font-size: 75%; @@ -272,37 +249,29 @@ position: relative; vertical-align: baseline; } -/* line 168, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract sup { top: -0.5em; } -/* line 172, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract sub { bottom: -0.25em; } -/* line 183, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract img { border: 0; } -/* line 191, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract svg:not(:root) { overflow: hidden; } -/* line 202, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract figure { margin: 1em 40px; } -/* line 210, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } -/* line 220, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract pre { overflow: auto; } -/* line 228, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract code, #hrjob-contract kbd, #hrjob-contract pre, @@ -310,7 +279,6 @@ font-family: monospace, monospace; font-size: 1em; } -/* line 251, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button, #hrjob-contract input, #hrjob-contract optgroup, @@ -320,16 +288,13 @@ font: inherit; margin: 0; } -/* line 265, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button { overflow: visible; } -/* line 276, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button, #hrjob-contract select { text-transform: none; } -/* line 289, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button, #hrjob-contract input[type="button"], #hrjob-contract input[type="reset"], @@ -337,75 +302,61 @@ -webkit-appearance: button; cursor: pointer; } -/* line 301, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button[disabled], #hrjob-contract input[disabled] { cursor: default; } -/* line 310, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button::-moz-focus-inner, #hrjob-contract input::-moz-focus-inner { border: 0; padding: 0; } -/* line 321, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input { line-height: normal; } -/* line 333, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="checkbox"], #hrjob-contract input[type="radio"] { box-sizing: border-box; padding: 0; } -/* line 345, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="number"]::-webkit-inner-spin-button, #hrjob-contract input[type="number"]::-webkit-outer-spin-button { height: auto; } -/* line 356, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; } -/* line 369, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="search"]::-webkit-search-cancel-button, #hrjob-contract input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } -/* line 378, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } -/* line 389, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract legend { border: 0; padding: 0; } -/* line 398, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract textarea { overflow: auto; } -/* line 407, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract optgroup { font-weight: bold; } -/* line 418, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract table { border-collapse: collapse; border-spacing: 0; } -/* line 423, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract td, #hrjob-contract th { padding: 0; } @media print { - /* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract *, #hrjob-contract *:before, #hrjob-contract *:after { @@ -414,78 +365,62 @@ box-shadow: none !important; text-shadow: none !important; } - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract a, #hrjob-contract a:visited { text-decoration: underline; } - /* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract a[href]:after { content: " (" attr(href) ")"; } - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract abbr[title]:after { content: " (" attr(title) ")"; } - /* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract a[href^="#"]:after, #hrjob-contract a[href^="javascript:"]:after { content: ""; } - /* line 38, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract pre, #hrjob-contract blockquote { border: 1px solid #999; page-break-inside: avoid; } - /* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract thead { display: table-header-group; } - /* line 48, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract tr, #hrjob-contract img { page-break-inside: avoid; } - /* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract img { max-width: 100% !important; } - /* line 57, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract p, #hrjob-contract h2, #hrjob-contract h3 { orphans: 3; widows: 3; } - /* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract h2, #hrjob-contract h3 { page-break-after: avoid; } - /* line 72, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .navbar { display: none; } - /* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .btn > .caret, #hrjob-contract .dropup > .btn > .caret { border-top-color: #000 !important; } - /* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .label { border: 1px solid #000; } - /* line 85, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .table { border-collapse: collapse !important; } - /* line 88, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .table td, #hrjob-contract .table th { background-color: #fff !important; } - /* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .table-bordered th, #hrjob-contract .table-bordered td { border: 1px solid #ddd !important; @@ -493,10 +428,9 @@ } @font-face { font-family: 'Glyphicons Halflings'; - src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot"); - src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); + src: url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.eot")); + src: url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix")) format("embedded-opentype"), url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.woff")) format("woff"), url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.ttf")) format("truetype"), url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular")) format("svg"); } -/* line 26, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon { position: relative; top: 1px; @@ -508,804 +442,604 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -/* line 39, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-asterisk:before { content: "\2a"; } -/* line 40, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-plus:before { content: "\2b"; } -/* line 42, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-euro:before, #hrjob-contract .glyphicon-eur:before { content: "\20ac"; } -/* line 43, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-minus:before { content: "\2212"; } -/* line 44, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cloud:before { content: "\2601"; } -/* line 45, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-envelope:before { content: "\2709"; } -/* line 46, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-pencil:before { content: "\270f"; } -/* line 47, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-glass:before { content: "\e001"; } -/* line 48, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-music:before { content: "\e002"; } -/* line 49, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-search:before { content: "\e003"; } -/* line 50, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-heart:before { content: "\e005"; } -/* line 51, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-star:before { content: "\e006"; } -/* line 52, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-star-empty:before { content: "\e007"; } -/* line 53, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-user:before { content: "\e008"; } -/* line 54, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-film:before { content: "\e009"; } -/* line 55, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-th-large:before { content: "\e010"; } -/* line 56, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-th:before { content: "\e011"; } -/* line 57, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-th-list:before { content: "\e012"; } -/* line 58, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ok:before { content: "\e013"; } -/* line 59, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-remove:before { content: "\e014"; } -/* line 60, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-zoom-in:before { content: "\e015"; } -/* line 61, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-zoom-out:before { content: "\e016"; } -/* line 62, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-off:before { content: "\e017"; } -/* line 63, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-signal:before { content: "\e018"; } -/* line 64, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cog:before { content: "\e019"; } -/* line 65, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-trash:before { content: "\e020"; } -/* line 66, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-home:before { content: "\e021"; } -/* line 67, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-file:before { content: "\e022"; } -/* line 68, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-time:before { content: "\e023"; } -/* line 69, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-road:before { content: "\e024"; } -/* line 70, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-download-alt:before { content: "\e025"; } -/* line 71, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-download:before { content: "\e026"; } -/* line 72, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-upload:before { content: "\e027"; } -/* line 73, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-inbox:before { content: "\e028"; } -/* line 74, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-play-circle:before { content: "\e029"; } -/* line 75, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-repeat:before { content: "\e030"; } -/* line 76, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-refresh:before { content: "\e031"; } -/* line 77, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-list-alt:before { content: "\e032"; } -/* line 78, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-lock:before { content: "\e033"; } -/* line 79, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-flag:before { content: "\e034"; } -/* line 80, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-headphones:before { content: "\e035"; } -/* line 81, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-volume-off:before { content: "\e036"; } -/* line 82, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-volume-down:before { content: "\e037"; } -/* line 83, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-volume-up:before { content: "\e038"; } -/* line 84, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-qrcode:before { content: "\e039"; } -/* line 85, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-barcode:before { content: "\e040"; } -/* line 86, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tag:before { content: "\e041"; } -/* line 87, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tags:before { content: "\e042"; } -/* line 88, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-book:before { content: "\e043"; } -/* line 89, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bookmark:before { content: "\e044"; } -/* line 90, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-print:before { content: "\e045"; } -/* line 91, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-camera:before { content: "\e046"; } -/* line 92, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-font:before { content: "\e047"; } -/* line 93, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bold:before { content: "\e048"; } -/* line 94, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-italic:before { content: "\e049"; } -/* line 95, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-text-height:before { content: "\e050"; } -/* line 96, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-text-width:before { content: "\e051"; } -/* line 97, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-left:before { content: "\e052"; } -/* line 98, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-center:before { content: "\e053"; } -/* line 99, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-right:before { content: "\e054"; } -/* line 100, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-justify:before { content: "\e055"; } -/* line 101, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-list:before { content: "\e056"; } -/* line 102, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-indent-left:before { content: "\e057"; } -/* line 103, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-indent-right:before { content: "\e058"; } -/* line 104, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-facetime-video:before { content: "\e059"; } -/* line 105, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-picture:before { content: "\e060"; } -/* line 106, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-map-marker:before { content: "\e062"; } -/* line 107, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-adjust:before { content: "\e063"; } -/* line 108, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tint:before { content: "\e064"; } -/* line 109, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-edit:before { content: "\e065"; } -/* line 110, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-share:before { content: "\e066"; } -/* line 111, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-check:before { content: "\e067"; } -/* line 112, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-move:before { content: "\e068"; } -/* line 113, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-step-backward:before { content: "\e069"; } -/* line 114, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fast-backward:before { content: "\e070"; } -/* line 115, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-backward:before { content: "\e071"; } -/* line 116, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-play:before { content: "\e072"; } -/* line 117, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-pause:before { content: "\e073"; } -/* line 118, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-stop:before { content: "\e074"; } -/* line 119, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-forward:before { content: "\e075"; } -/* line 120, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fast-forward:before { content: "\e076"; } -/* line 121, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-step-forward:before { content: "\e077"; } -/* line 122, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-eject:before { content: "\e078"; } -/* line 123, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-left:before { content: "\e079"; } -/* line 124, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-right:before { content: "\e080"; } -/* line 125, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-plus-sign:before { content: "\e081"; } -/* line 126, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-minus-sign:before { content: "\e082"; } -/* line 127, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-remove-sign:before { content: "\e083"; } -/* line 128, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ok-sign:before { content: "\e084"; } -/* line 129, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-question-sign:before { content: "\e085"; } -/* line 130, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-info-sign:before { content: "\e086"; } -/* line 131, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-screenshot:before { content: "\e087"; } -/* line 132, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-remove-circle:before { content: "\e088"; } -/* line 133, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ok-circle:before { content: "\e089"; } -/* line 134, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ban-circle:before { content: "\e090"; } -/* line 135, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-left:before { content: "\e091"; } -/* line 136, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-right:before { content: "\e092"; } -/* line 137, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-up:before { content: "\e093"; } -/* line 138, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-down:before { content: "\e094"; } -/* line 139, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-share-alt:before { content: "\e095"; } -/* line 140, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-full:before { content: "\e096"; } -/* line 141, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-small:before { content: "\e097"; } -/* line 142, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-exclamation-sign:before { content: "\e101"; } -/* line 143, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-gift:before { content: "\e102"; } -/* line 144, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-leaf:before { content: "\e103"; } -/* line 145, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fire:before { content: "\e104"; } -/* line 146, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-eye-open:before { content: "\e105"; } -/* line 147, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-eye-close:before { content: "\e106"; } -/* line 148, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-warning-sign:before { content: "\e107"; } -/* line 149, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-plane:before { content: "\e108"; } -/* line 150, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-calendar:before { content: "\e109"; } -/* line 151, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-random:before { content: "\e110"; } -/* line 152, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-comment:before { content: "\e111"; } -/* line 153, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-magnet:before { content: "\e112"; } -/* line 154, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-up:before { content: "\e113"; } -/* line 155, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-down:before { content: "\e114"; } -/* line 156, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-retweet:before { content: "\e115"; } -/* line 157, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-shopping-cart:before { content: "\e116"; } -/* line 158, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-folder-close:before { content: "\e117"; } -/* line 159, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-folder-open:before { content: "\e118"; } -/* line 160, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-vertical:before { content: "\e119"; } -/* line 161, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-horizontal:before { content: "\e120"; } -/* line 162, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hdd:before { content: "\e121"; } -/* line 163, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bullhorn:before { content: "\e122"; } -/* line 164, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bell:before { content: "\e123"; } -/* line 165, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-certificate:before { content: "\e124"; } -/* line 166, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-thumbs-up:before { content: "\e125"; } -/* line 167, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-thumbs-down:before { content: "\e126"; } -/* line 168, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-right:before { content: "\e127"; } -/* line 169, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-left:before { content: "\e128"; } -/* line 170, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-up:before { content: "\e129"; } -/* line 171, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-down:before { content: "\e130"; } -/* line 172, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-right:before { content: "\e131"; } -/* line 173, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-left:before { content: "\e132"; } -/* line 174, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-up:before { content: "\e133"; } -/* line 175, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-down:before { content: "\e134"; } -/* line 176, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-globe:before { content: "\e135"; } -/* line 177, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-wrench:before { content: "\e136"; } -/* line 178, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tasks:before { content: "\e137"; } -/* line 179, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-filter:before { content: "\e138"; } -/* line 180, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-briefcase:before { content: "\e139"; } -/* line 181, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fullscreen:before { content: "\e140"; } -/* line 182, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-dashboard:before { content: "\e141"; } -/* line 183, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-paperclip:before { content: "\e142"; } -/* line 184, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-heart-empty:before { content: "\e143"; } -/* line 185, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-link:before { content: "\e144"; } -/* line 186, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-phone:before { content: "\e145"; } -/* line 187, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-pushpin:before { content: "\e146"; } -/* line 188, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-usd:before { content: "\e148"; } -/* line 189, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-gbp:before { content: "\e149"; } -/* line 190, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort:before { content: "\e150"; } -/* line 191, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-alphabet:before { content: "\e151"; } -/* line 192, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-alphabet-alt:before { content: "\e152"; } -/* line 193, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-order:before { content: "\e153"; } -/* line 194, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-order-alt:before { content: "\e154"; } -/* line 195, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-attributes:before { content: "\e155"; } -/* line 196, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-attributes-alt:before { content: "\e156"; } -/* line 197, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-unchecked:before { content: "\e157"; } -/* line 198, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-expand:before { content: "\e158"; } -/* line 199, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-collapse-down:before { content: "\e159"; } -/* line 200, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-collapse-up:before { content: "\e160"; } -/* line 201, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-log-in:before { content: "\e161"; } -/* line 202, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-flash:before { content: "\e162"; } -/* line 203, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-log-out:before { content: "\e163"; } -/* line 204, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-new-window:before { content: "\e164"; } -/* line 205, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-record:before { content: "\e165"; } -/* line 206, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-save:before { content: "\e166"; } -/* line 207, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-open:before { content: "\e167"; } -/* line 208, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-saved:before { content: "\e168"; } -/* line 209, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-import:before { content: "\e169"; } -/* line 210, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-export:before { content: "\e170"; } -/* line 211, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-send:before { content: "\e171"; } -/* line 212, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-disk:before { content: "\e172"; } -/* line 213, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-saved:before { content: "\e173"; } -/* line 214, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-remove:before { content: "\e174"; } -/* line 215, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-save:before { content: "\e175"; } -/* line 216, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-open:before { content: "\e176"; } -/* line 217, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-credit-card:before { content: "\e177"; } -/* line 218, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-transfer:before { content: "\e178"; } -/* line 219, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cutlery:before { content: "\e179"; } -/* line 220, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-header:before { content: "\e180"; } -/* line 221, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-compressed:before { content: "\e181"; } -/* line 222, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-earphone:before { content: "\e182"; } -/* line 223, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-phone-alt:before { content: "\e183"; } -/* line 224, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tower:before { content: "\e184"; } -/* line 225, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-stats:before { content: "\e185"; } -/* line 226, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sd-video:before { content: "\e186"; } -/* line 227, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hd-video:before { content: "\e187"; } -/* line 228, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-subtitles:before { content: "\e188"; } -/* line 229, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-stereo:before { content: "\e189"; } -/* line 230, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-dolby:before { content: "\e190"; } -/* line 231, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-5-1:before { content: "\e191"; } -/* line 232, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-6-1:before { content: "\e192"; } -/* line 233, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-7-1:before { content: "\e193"; } -/* line 234, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-copyright-mark:before { content: "\e194"; } -/* line 235, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-registration-mark:before { content: "\e195"; } -/* line 236, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cloud-download:before { content: "\e197"; } -/* line 237, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cloud-upload:before { content: "\e198"; } -/* line 238, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tree-conifer:before { content: "\e199"; } -/* line 239, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tree-deciduous:before { content: "\e200"; } @@ -1316,7 +1050,6 @@ font-weight: normal; font-style: normal; } -/* line 16, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa { display: inline-block; font: normal normal normal 14px/1 FontAwesome; @@ -1325,44 +1058,35 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -/* line 25, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } -/* line 30, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-2x { font-size: 2em; } -/* line 33, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-3x { font-size: 3em; } -/* line 36, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-4x { font-size: 4em; } -/* line 39, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-5x { font-size: 5em; } -/* line 42, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fw { width: 1.28571429em; text-align: center; } -/* line 46, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ul { padding-left: 0; margin-left: 2.14285714em; list-style-type: none; } -/* line 51, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ul > li { position: relative; } -/* line 54, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-li { position: absolute; left: -2.14285714em; @@ -1370,33 +1094,26 @@ top: 0.14285714em; text-align: center; } -/* line 61, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-li.fa-lg { left: -1.85714286em; } -/* line 64, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; border-radius: .1em; } -/* line 69, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .pull-right { float: right; } -/* line 72, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .pull-left { float: left; } -/* line 75, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa.pull-left { margin-right: .3em; } -/* line 78, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa.pull-right { margin-left: .3em; } -/* line 81, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; @@ -1421,42 +1138,36 @@ transform: rotate(359deg); } } -/* line 105, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } -/* line 111, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } -/* line 117, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } -/* line 123, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } -/* line 129, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } -/* line 135, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract :root .fa-rotate-90, #hrjob-contract :root .fa-rotate-180, #hrjob-contract :root .fa-rotate-270, @@ -1464,7 +1175,6 @@ #hrjob-contract :root .fa-flip-vertical { filter: none; } -/* line 142, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack { position: relative; display: inline-block; @@ -1473,7 +1183,6 @@ line-height: 2em; vertical-align: middle; } -/* line 150, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-1x, #hrjob-contract .fa-stack-2x { position: absolute; @@ -1481,1753 +1190,1330 @@ width: 100%; text-align: center; } -/* line 157, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-1x { line-height: inherit; } -/* line 160, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-2x { font-size: 2em; } -/* line 163, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-inverse { color: #ffffff; } -/* line 168, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-glass:before { content: "\f000"; } -/* line 171, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-music:before { content: "\f001"; } -/* line 174, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-search:before { content: "\f002"; } -/* line 177, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-envelope-o:before { content: "\f003"; } -/* line 180, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-heart:before { content: "\f004"; } -/* line 183, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star:before { content: "\f005"; } -/* line 186, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star-o:before { content: "\f006"; } -/* line 189, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-user:before { content: "\f007"; } -/* line 192, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-film:before { content: "\f008"; } -/* line 195, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-th-large:before { content: "\f009"; } -/* line 198, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-th:before { content: "\f00a"; } -/* line 201, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-th-list:before { content: "\f00b"; } -/* line 204, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check:before { content: "\f00c"; } -/* line 207, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-remove:before, #hrjob-contract .fa-close:before, #hrjob-contract .fa-times:before { content: "\f00d"; } -/* line 212, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-search-plus:before { content: "\f00e"; } -/* line 215, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-search-minus:before { content: "\f010"; } -/* line 218, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-power-off:before { content: "\f011"; } -/* line 221, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-signal:before { content: "\f012"; } -/* line 224, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gear:before, #hrjob-contract .fa-cog:before { content: "\f013"; } -/* line 228, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trash-o:before { content: "\f014"; } -/* line 231, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-home:before { content: "\f015"; } -/* line 234, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-o:before { content: "\f016"; } -/* line 237, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-clock-o:before { content: "\f017"; } -/* line 240, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-road:before { content: "\f018"; } -/* line 243, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-download:before { content: "\f019"; } -/* line 246, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-down:before { content: "\f01a"; } -/* line 249, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-up:before { content: "\f01b"; } -/* line 252, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-inbox:before { content: "\f01c"; } -/* line 255, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-play-circle-o:before { content: "\f01d"; } -/* line 258, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-right:before, #hrjob-contract .fa-repeat:before { content: "\f01e"; } -/* line 262, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-refresh:before { content: "\f021"; } -/* line 265, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list-alt:before { content: "\f022"; } -/* line 268, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lock:before { content: "\f023"; } -/* line 271, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flag:before { content: "\f024"; } -/* line 274, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-headphones:before { content: "\f025"; } -/* line 277, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-volume-off:before { content: "\f026"; } -/* line 280, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-volume-down:before { content: "\f027"; } -/* line 283, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-volume-up:before { content: "\f028"; } -/* line 286, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-qrcode:before { content: "\f029"; } -/* line 289, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-barcode:before { content: "\f02a"; } -/* line 292, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tag:before { content: "\f02b"; } -/* line 295, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tags:before { content: "\f02c"; } -/* line 298, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-book:before { content: "\f02d"; } -/* line 301, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bookmark:before { content: "\f02e"; } -/* line 304, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-print:before { content: "\f02f"; } -/* line 307, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-camera:before { content: "\f030"; } -/* line 310, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-font:before { content: "\f031"; } -/* line 313, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bold:before { content: "\f032"; } -/* line 316, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-italic:before { content: "\f033"; } -/* line 319, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-text-height:before { content: "\f034"; } -/* line 322, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-text-width:before { content: "\f035"; } -/* line 325, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-left:before { content: "\f036"; } -/* line 328, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-center:before { content: "\f037"; } -/* line 331, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-right:before { content: "\f038"; } -/* line 334, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-justify:before { content: "\f039"; } -/* line 337, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list:before { content: "\f03a"; } -/* line 340, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dedent:before, #hrjob-contract .fa-outdent:before { content: "\f03b"; } -/* line 344, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-indent:before { content: "\f03c"; } -/* line 347, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-video-camera:before { content: "\f03d"; } -/* line 350, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-photo:before, #hrjob-contract .fa-image:before, #hrjob-contract .fa-picture-o:before { content: "\f03e"; } -/* line 355, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pencil:before { content: "\f040"; } -/* line 358, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-map-marker:before { content: "\f041"; } -/* line 361, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-adjust:before { content: "\f042"; } -/* line 364, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tint:before { content: "\f043"; } -/* line 367, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-edit:before, #hrjob-contract .fa-pencil-square-o:before { content: "\f044"; } -/* line 371, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-square-o:before { content: "\f045"; } -/* line 374, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-square-o:before { content: "\f046"; } -/* line 377, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows:before { content: "\f047"; } -/* line 380, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-step-backward:before { content: "\f048"; } -/* line 383, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fast-backward:before { content: "\f049"; } -/* line 386, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-backward:before { content: "\f04a"; } -/* line 389, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-play:before { content: "\f04b"; } -/* line 392, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pause:before { content: "\f04c"; } -/* line 395, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stop:before { content: "\f04d"; } -/* line 398, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-forward:before { content: "\f04e"; } -/* line 401, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fast-forward:before { content: "\f050"; } -/* line 404, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-step-forward:before { content: "\f051"; } -/* line 407, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eject:before { content: "\f052"; } -/* line 410, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-left:before { content: "\f053"; } -/* line 413, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-right:before { content: "\f054"; } -/* line 416, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus-circle:before { content: "\f055"; } -/* line 419, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus-circle:before { content: "\f056"; } -/* line 422, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-times-circle:before { content: "\f057"; } -/* line 425, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-circle:before { content: "\f058"; } -/* line 428, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-question-circle:before { content: "\f059"; } -/* line 431, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-info-circle:before { content: "\f05a"; } -/* line 434, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-crosshairs:before { content: "\f05b"; } -/* line 437, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-times-circle-o:before { content: "\f05c"; } -/* line 440, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-circle-o:before { content: "\f05d"; } -/* line 443, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ban:before { content: "\f05e"; } -/* line 446, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-left:before { content: "\f060"; } -/* line 449, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-right:before { content: "\f061"; } -/* line 452, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-up:before { content: "\f062"; } -/* line 455, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-down:before { content: "\f063"; } -/* line 458, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mail-forward:before, #hrjob-contract .fa-share:before { content: "\f064"; } -/* line 462, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-expand:before { content: "\f065"; } -/* line 465, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-compress:before { content: "\f066"; } -/* line 468, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus:before { content: "\f067"; } -/* line 471, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus:before { content: "\f068"; } -/* line 474, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-asterisk:before { content: "\f069"; } -/* line 477, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-exclamation-circle:before { content: "\f06a"; } -/* line 480, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gift:before { content: "\f06b"; } -/* line 483, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-leaf:before { content: "\f06c"; } -/* line 486, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fire:before { content: "\f06d"; } -/* line 489, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eye:before { content: "\f06e"; } -/* line 492, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eye-slash:before { content: "\f070"; } -/* line 495, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-warning:before, #hrjob-contract .fa-exclamation-triangle:before { content: "\f071"; } -/* line 499, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plane:before { content: "\f072"; } -/* line 502, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-calendar:before { content: "\f073"; } -/* line 505, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-random:before { content: "\f074"; } -/* line 508, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comment:before { content: "\f075"; } -/* line 511, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-magnet:before { content: "\f076"; } -/* line 514, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-up:before { content: "\f077"; } -/* line 517, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-down:before { content: "\f078"; } -/* line 520, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-retweet:before { content: "\f079"; } -/* line 523, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-shopping-cart:before { content: "\f07a"; } -/* line 526, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder:before { content: "\f07b"; } -/* line 529, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder-open:before { content: "\f07c"; } -/* line 532, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows-v:before { content: "\f07d"; } -/* line 535, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows-h:before { content: "\f07e"; } -/* line 538, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bar-chart-o:before, #hrjob-contract .fa-bar-chart:before { content: "\f080"; } -/* line 542, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-twitter-square:before { content: "\f081"; } -/* line 545, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-facebook-square:before { content: "\f082"; } -/* line 548, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-camera-retro:before { content: "\f083"; } -/* line 551, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-key:before { content: "\f084"; } -/* line 554, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gears:before, #hrjob-contract .fa-cogs:before { content: "\f085"; } -/* line 558, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comments:before { content: "\f086"; } -/* line 561, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-o-up:before { content: "\f087"; } -/* line 564, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-o-down:before { content: "\f088"; } -/* line 567, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star-half:before { content: "\f089"; } -/* line 570, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-heart-o:before { content: "\f08a"; } -/* line 573, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sign-out:before { content: "\f08b"; } -/* line 576, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-linkedin-square:before { content: "\f08c"; } -/* line 579, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumb-tack:before { content: "\f08d"; } -/* line 582, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-external-link:before { content: "\f08e"; } -/* line 585, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sign-in:before { content: "\f090"; } -/* line 588, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trophy:before { content: "\f091"; } -/* line 591, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-github-square:before { content: "\f092"; } -/* line 594, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-upload:before { content: "\f093"; } -/* line 597, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lemon-o:before { content: "\f094"; } -/* line 600, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-phone:before { content: "\f095"; } -/* line 603, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-square-o:before { content: "\f096"; } -/* line 606, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bookmark-o:before { content: "\f097"; } -/* line 609, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-phone-square:before { content: "\f098"; } -/* line 612, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-twitter:before { content: "\f099"; } -/* line 615, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-facebook:before { content: "\f09a"; } -/* line 618, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-github:before { content: "\f09b"; } -/* line 621, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unlock:before { content: "\f09c"; } -/* line 624, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-credit-card:before { content: "\f09d"; } -/* line 627, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rss:before { content: "\f09e"; } -/* line 630, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hdd-o:before { content: "\f0a0"; } -/* line 633, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bullhorn:before { content: "\f0a1"; } -/* line 636, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell:before { content: "\f0f3"; } -/* line 639, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-certificate:before { content: "\f0a3"; } -/* line 642, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-right:before { content: "\f0a4"; } -/* line 645, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-left:before { content: "\f0a5"; } -/* line 648, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-up:before { content: "\f0a6"; } -/* line 651, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-down:before { content: "\f0a7"; } -/* line 654, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-left:before { content: "\f0a8"; } -/* line 657, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-right:before { content: "\f0a9"; } -/* line 660, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-up:before { content: "\f0aa"; } -/* line 663, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-down:before { content: "\f0ab"; } -/* line 666, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-globe:before { content: "\f0ac"; } -/* line 669, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wrench:before { content: "\f0ad"; } -/* line 672, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tasks:before { content: "\f0ae"; } -/* line 675, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-filter:before { content: "\f0b0"; } -/* line 678, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-briefcase:before { content: "\f0b1"; } -/* line 681, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows-alt:before { content: "\f0b2"; } -/* line 684, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-group:before, #hrjob-contract .fa-users:before { content: "\f0c0"; } -/* line 688, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chain:before, #hrjob-contract .fa-link:before { content: "\f0c1"; } -/* line 692, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cloud:before { content: "\f0c2"; } -/* line 695, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flask:before { content: "\f0c3"; } -/* line 698, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cut:before, #hrjob-contract .fa-scissors:before { content: "\f0c4"; } -/* line 702, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-copy:before, #hrjob-contract .fa-files-o:before { content: "\f0c5"; } -/* line 706, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paperclip:before { content: "\f0c6"; } -/* line 709, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-save:before, #hrjob-contract .fa-floppy-o:before { content: "\f0c7"; } -/* line 713, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-square:before { content: "\f0c8"; } -/* line 716, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-navicon:before, #hrjob-contract .fa-reorder:before, #hrjob-contract .fa-bars:before { content: "\f0c9"; } -/* line 721, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list-ul:before { content: "\f0ca"; } -/* line 724, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list-ol:before { content: "\f0cb"; } -/* line 727, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-strikethrough:before { content: "\f0cc"; } -/* line 730, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-underline:before { content: "\f0cd"; } -/* line 733, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-table:before { content: "\f0ce"; } -/* line 736, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-magic:before { content: "\f0d0"; } -/* line 739, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-truck:before { content: "\f0d1"; } -/* line 742, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pinterest:before { content: "\f0d2"; } -/* line 745, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pinterest-square:before { content: "\f0d3"; } -/* line 748, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google-plus-square:before { content: "\f0d4"; } -/* line 751, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google-plus:before { content: "\f0d5"; } -/* line 754, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-money:before { content: "\f0d6"; } -/* line 757, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-down:before { content: "\f0d7"; } -/* line 760, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-up:before { content: "\f0d8"; } -/* line 763, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-left:before { content: "\f0d9"; } -/* line 766, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-right:before { content: "\f0da"; } -/* line 769, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-columns:before { content: "\f0db"; } -/* line 772, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unsorted:before, #hrjob-contract .fa-sort:before { content: "\f0dc"; } -/* line 776, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-down:before, #hrjob-contract .fa-sort-desc:before { content: "\f0dd"; } -/* line 780, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-up:before, #hrjob-contract .fa-sort-asc:before { content: "\f0de"; } -/* line 784, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-envelope:before { content: "\f0e0"; } -/* line 787, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-linkedin:before { content: "\f0e1"; } -/* line 790, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-left:before, #hrjob-contract .fa-undo:before { content: "\f0e2"; } -/* line 794, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-legal:before, #hrjob-contract .fa-gavel:before { content: "\f0e3"; } -/* line 798, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dashboard:before, #hrjob-contract .fa-tachometer:before { content: "\f0e4"; } -/* line 802, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comment-o:before { content: "\f0e5"; } -/* line 805, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comments-o:before { content: "\f0e6"; } -/* line 808, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flash:before, #hrjob-contract .fa-bolt:before { content: "\f0e7"; } -/* line 812, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sitemap:before { content: "\f0e8"; } -/* line 815, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-umbrella:before { content: "\f0e9"; } -/* line 818, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paste:before, #hrjob-contract .fa-clipboard:before { content: "\f0ea"; } -/* line 822, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lightbulb-o:before { content: "\f0eb"; } -/* line 825, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-exchange:before { content: "\f0ec"; } -/* line 828, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cloud-download:before { content: "\f0ed"; } -/* line 831, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cloud-upload:before { content: "\f0ee"; } -/* line 834, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-user-md:before { content: "\f0f0"; } -/* line 837, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stethoscope:before { content: "\f0f1"; } -/* line 840, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-suitcase:before { content: "\f0f2"; } -/* line 843, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell-o:before { content: "\f0a2"; } -/* line 846, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-coffee:before { content: "\f0f4"; } -/* line 849, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cutlery:before { content: "\f0f5"; } -/* line 852, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-text-o:before { content: "\f0f6"; } -/* line 855, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-building-o:before { content: "\f0f7"; } -/* line 858, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hospital-o:before { content: "\f0f8"; } -/* line 861, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ambulance:before { content: "\f0f9"; } -/* line 864, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-medkit:before { content: "\f0fa"; } -/* line 867, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fighter-jet:before { content: "\f0fb"; } -/* line 870, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-beer:before { content: "\f0fc"; } -/* line 873, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-h-square:before { content: "\f0fd"; } -/* line 876, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus-square:before { content: "\f0fe"; } -/* line 879, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-left:before { content: "\f100"; } -/* line 882, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-right:before { content: "\f101"; } -/* line 885, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-up:before { content: "\f102"; } -/* line 888, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-down:before { content: "\f103"; } -/* line 891, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-left:before { content: "\f104"; } -/* line 894, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-right:before { content: "\f105"; } -/* line 897, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-up:before { content: "\f106"; } -/* line 900, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-down:before { content: "\f107"; } -/* line 903, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-desktop:before { content: "\f108"; } -/* line 906, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-laptop:before { content: "\f109"; } -/* line 909, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tablet:before { content: "\f10a"; } -/* line 912, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mobile-phone:before, #hrjob-contract .fa-mobile:before { content: "\f10b"; } -/* line 916, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle-o:before { content: "\f10c"; } -/* line 919, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-quote-left:before { content: "\f10d"; } -/* line 922, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-quote-right:before { content: "\f10e"; } -/* line 925, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spinner:before { content: "\f110"; } -/* line 928, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle:before { content: "\f111"; } -/* line 931, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mail-reply:before, #hrjob-contract .fa-reply:before { content: "\f112"; } -/* line 935, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-github-alt:before { content: "\f113"; } -/* line 938, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder-o:before { content: "\f114"; } -/* line 941, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder-open-o:before { content: "\f115"; } -/* line 944, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-smile-o:before { content: "\f118"; } -/* line 947, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-frown-o:before { content: "\f119"; } -/* line 950, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-meh-o:before { content: "\f11a"; } -/* line 953, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gamepad:before { content: "\f11b"; } -/* line 956, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-keyboard-o:before { content: "\f11c"; } -/* line 959, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flag-o:before { content: "\f11d"; } -/* line 962, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flag-checkered:before { content: "\f11e"; } -/* line 965, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-terminal:before { content: "\f120"; } -/* line 968, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-code:before { content: "\f121"; } -/* line 971, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mail-reply-all:before, #hrjob-contract .fa-reply-all:before { content: "\f122"; } -/* line 975, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star-half-empty:before, #hrjob-contract .fa-star-half-full:before, #hrjob-contract .fa-star-half-o:before { content: "\f123"; } -/* line 980, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-location-arrow:before { content: "\f124"; } -/* line 983, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-crop:before { content: "\f125"; } -/* line 986, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-code-fork:before { content: "\f126"; } -/* line 989, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unlink:before, #hrjob-contract .fa-chain-broken:before { content: "\f127"; } -/* line 993, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-question:before { content: "\f128"; } -/* line 996, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-info:before { content: "\f129"; } -/* line 999, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-exclamation:before { content: "\f12a"; } -/* line 1002, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-superscript:before { content: "\f12b"; } -/* line 1005, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-subscript:before { content: "\f12c"; } -/* line 1008, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eraser:before { content: "\f12d"; } -/* line 1011, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-puzzle-piece:before { content: "\f12e"; } -/* line 1014, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-microphone:before { content: "\f130"; } -/* line 1017, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-microphone-slash:before { content: "\f131"; } -/* line 1020, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-shield:before { content: "\f132"; } -/* line 1023, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-calendar-o:before { content: "\f133"; } -/* line 1026, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fire-extinguisher:before { content: "\f134"; } -/* line 1029, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rocket:before { content: "\f135"; } -/* line 1032, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-maxcdn:before { content: "\f136"; } -/* line 1035, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-left:before { content: "\f137"; } -/* line 1038, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-right:before { content: "\f138"; } -/* line 1041, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-up:before { content: "\f139"; } -/* line 1044, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-down:before { content: "\f13a"; } -/* line 1047, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-html5:before { content: "\f13b"; } -/* line 1050, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-css3:before { content: "\f13c"; } -/* line 1053, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-anchor:before { content: "\f13d"; } -/* line 1056, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unlock-alt:before { content: "\f13e"; } -/* line 1059, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bullseye:before { content: "\f140"; } -/* line 1062, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ellipsis-h:before { content: "\f141"; } -/* line 1065, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ellipsis-v:before { content: "\f142"; } -/* line 1068, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rss-square:before { content: "\f143"; } -/* line 1071, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-play-circle:before { content: "\f144"; } -/* line 1074, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ticket:before { content: "\f145"; } -/* line 1077, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus-square:before { content: "\f146"; } -/* line 1080, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus-square-o:before { content: "\f147"; } -/* line 1083, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-level-up:before { content: "\f148"; } -/* line 1086, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-level-down:before { content: "\f149"; } -/* line 1089, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-square:before { content: "\f14a"; } -/* line 1092, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pencil-square:before { content: "\f14b"; } -/* line 1095, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-external-link-square:before { content: "\f14c"; } -/* line 1098, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-square:before { content: "\f14d"; } -/* line 1101, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-compass:before { content: "\f14e"; } -/* line 1104, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-down:before, #hrjob-contract .fa-caret-square-o-down:before { content: "\f150"; } -/* line 1108, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-up:before, #hrjob-contract .fa-caret-square-o-up:before { content: "\f151"; } -/* line 1112, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-right:before, #hrjob-contract .fa-caret-square-o-right:before { content: "\f152"; } -/* line 1116, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-euro:before, #hrjob-contract .fa-eur:before { content: "\f153"; } -/* line 1120, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gbp:before { content: "\f154"; } -/* line 1123, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dollar:before, #hrjob-contract .fa-usd:before { content: "\f155"; } -/* line 1127, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rupee:before, #hrjob-contract .fa-inr:before { content: "\f156"; } -/* line 1131, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cny:before, #hrjob-contract .fa-rmb:before, #hrjob-contract .fa-yen:before, #hrjob-contract .fa-jpy:before { content: "\f157"; } -/* line 1137, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ruble:before, #hrjob-contract .fa-rouble:before, #hrjob-contract .fa-rub:before { content: "\f158"; } -/* line 1142, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-won:before, #hrjob-contract .fa-krw:before { content: "\f159"; } -/* line 1146, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bitcoin:before, #hrjob-contract .fa-btc:before { content: "\f15a"; } -/* line 1150, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file:before { content: "\f15b"; } -/* line 1153, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-text:before { content: "\f15c"; } -/* line 1156, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-alpha-asc:before { content: "\f15d"; } -/* line 1159, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-alpha-desc:before { content: "\f15e"; } -/* line 1162, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-amount-asc:before { content: "\f160"; } -/* line 1165, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-amount-desc:before { content: "\f161"; } -/* line 1168, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-numeric-asc:before { content: "\f162"; } -/* line 1171, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-numeric-desc:before { content: "\f163"; } -/* line 1174, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-up:before { content: "\f164"; } -/* line 1177, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-down:before { content: "\f165"; } -/* line 1180, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-youtube-square:before { content: "\f166"; } -/* line 1183, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-youtube:before { content: "\f167"; } -/* line 1186, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-xing:before { content: "\f168"; } -/* line 1189, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-xing-square:before { content: "\f169"; } -/* line 1192, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-youtube-play:before { content: "\f16a"; } -/* line 1195, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dropbox:before { content: "\f16b"; } -/* line 1198, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-overflow:before { content: "\f16c"; } -/* line 1201, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-instagram:before { content: "\f16d"; } -/* line 1204, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flickr:before { content: "\f16e"; } -/* line 1207, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-adn:before { content: "\f170"; } -/* line 1210, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bitbucket:before { content: "\f171"; } -/* line 1213, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bitbucket-square:before { content: "\f172"; } -/* line 1216, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tumblr:before { content: "\f173"; } -/* line 1219, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tumblr-square:before { content: "\f174"; } -/* line 1222, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-down:before { content: "\f175"; } -/* line 1225, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-up:before { content: "\f176"; } -/* line 1228, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-left:before { content: "\f177"; } -/* line 1231, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-right:before { content: "\f178"; } -/* line 1234, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-apple:before { content: "\f179"; } -/* line 1237, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-windows:before { content: "\f17a"; } -/* line 1240, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-android:before { content: "\f17b"; } -/* line 1243, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-linux:before { content: "\f17c"; } -/* line 1246, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dribbble:before { content: "\f17d"; } -/* line 1249, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-skype:before { content: "\f17e"; } -/* line 1252, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-foursquare:before { content: "\f180"; } -/* line 1255, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trello:before { content: "\f181"; } -/* line 1258, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-female:before { content: "\f182"; } -/* line 1261, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-male:before { content: "\f183"; } -/* line 1264, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gittip:before { content: "\f184"; } -/* line 1267, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sun-o:before { content: "\f185"; } -/* line 1270, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-moon-o:before { content: "\f186"; } -/* line 1273, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-archive:before { content: "\f187"; } -/* line 1276, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bug:before { content: "\f188"; } -/* line 1279, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-vk:before { content: "\f189"; } -/* line 1282, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-weibo:before { content: "\f18a"; } -/* line 1285, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-renren:before { content: "\f18b"; } -/* line 1288, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pagelines:before { content: "\f18c"; } -/* line 1291, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-exchange:before { content: "\f18d"; } -/* line 1294, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-right:before { content: "\f18e"; } -/* line 1297, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-left:before { content: "\f190"; } -/* line 1300, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-left:before, #hrjob-contract .fa-caret-square-o-left:before { content: "\f191"; } -/* line 1304, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dot-circle-o:before { content: "\f192"; } -/* line 1307, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wheelchair:before { content: "\f193"; } -/* line 1310, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-vimeo-square:before { content: "\f194"; } -/* line 1313, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-turkish-lira:before, #hrjob-contract .fa-try:before { content: "\f195"; } -/* line 1317, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus-square-o:before { content: "\f196"; } -/* line 1320, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-space-shuttle:before { content: "\f197"; } -/* line 1323, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-slack:before { content: "\f198"; } -/* line 1326, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-envelope-square:before { content: "\f199"; } -/* line 1329, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wordpress:before { content: "\f19a"; } -/* line 1332, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-openid:before { content: "\f19b"; } -/* line 1335, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-institution:before, #hrjob-contract .fa-bank:before, #hrjob-contract .fa-university:before { content: "\f19c"; } -/* line 1340, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mortar-board:before, #hrjob-contract .fa-graduation-cap:before { content: "\f19d"; } -/* line 1344, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-yahoo:before { content: "\f19e"; } -/* line 1347, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google:before { content: "\f1a0"; } -/* line 1350, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-reddit:before { content: "\f1a1"; } -/* line 1353, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-reddit-square:before { content: "\f1a2"; } -/* line 1356, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stumbleupon-circle:before { content: "\f1a3"; } -/* line 1359, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stumbleupon:before { content: "\f1a4"; } -/* line 1362, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-delicious:before { content: "\f1a5"; } -/* line 1365, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-digg:before { content: "\f1a6"; } -/* line 1368, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pied-piper:before { content: "\f1a7"; } -/* line 1371, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pied-piper-alt:before { content: "\f1a8"; } -/* line 1374, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-drupal:before { content: "\f1a9"; } -/* line 1377, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-joomla:before { content: "\f1aa"; } -/* line 1380, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-language:before { content: "\f1ab"; } -/* line 1383, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fax:before { content: "\f1ac"; } -/* line 1386, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-building:before { content: "\f1ad"; } -/* line 1389, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-child:before { content: "\f1ae"; } -/* line 1392, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paw:before { content: "\f1b0"; } -/* line 1395, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spoon:before { content: "\f1b1"; } -/* line 1398, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cube:before { content: "\f1b2"; } -/* line 1401, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cubes:before { content: "\f1b3"; } -/* line 1404, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-behance:before { content: "\f1b4"; } -/* line 1407, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-behance-square:before { content: "\f1b5"; } -/* line 1410, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-steam:before { content: "\f1b6"; } -/* line 1413, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-steam-square:before { content: "\f1b7"; } -/* line 1416, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-recycle:before { content: "\f1b8"; } -/* line 1419, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-automobile:before, #hrjob-contract .fa-car:before { content: "\f1b9"; } -/* line 1423, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cab:before, #hrjob-contract .fa-taxi:before { content: "\f1ba"; } -/* line 1427, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tree:before { content: "\f1bb"; } -/* line 1430, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spotify:before { content: "\f1bc"; } -/* line 1433, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-deviantart:before { content: "\f1bd"; } -/* line 1436, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-soundcloud:before { content: "\f1be"; } -/* line 1439, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-database:before { content: "\f1c0"; } -/* line 1442, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-pdf-o:before { content: "\f1c1"; } -/* line 1445, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-word-o:before { content: "\f1c2"; } -/* line 1448, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-excel-o:before { content: "\f1c3"; } -/* line 1451, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-powerpoint-o:before { content: "\f1c4"; } -/* line 1454, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-photo-o:before, #hrjob-contract .fa-file-picture-o:before, #hrjob-contract .fa-file-image-o:before { content: "\f1c5"; } -/* line 1459, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-zip-o:before, #hrjob-contract .fa-file-archive-o:before { content: "\f1c6"; } -/* line 1463, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-sound-o:before, #hrjob-contract .fa-file-audio-o:before { content: "\f1c7"; } -/* line 1467, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-movie-o:before, #hrjob-contract .fa-file-video-o:before { content: "\f1c8"; } -/* line 1471, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-code-o:before { content: "\f1c9"; } -/* line 1474, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-vine:before { content: "\f1ca"; } -/* line 1477, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-codepen:before { content: "\f1cb"; } -/* line 1480, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-jsfiddle:before { content: "\f1cc"; } -/* line 1483, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-life-bouy:before, #hrjob-contract .fa-life-buoy:before, #hrjob-contract .fa-life-saver:before, @@ -3235,264 +2521,202 @@ #hrjob-contract .fa-life-ring:before { content: "\f1cd"; } -/* line 1490, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle-o-notch:before { content: "\f1ce"; } -/* line 1493, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ra:before, #hrjob-contract .fa-rebel:before { content: "\f1d0"; } -/* line 1497, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ge:before, #hrjob-contract .fa-empire:before { content: "\f1d1"; } -/* line 1501, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-git-square:before { content: "\f1d2"; } -/* line 1504, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-git:before { content: "\f1d3"; } -/* line 1507, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hacker-news:before { content: "\f1d4"; } -/* line 1510, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tencent-weibo:before { content: "\f1d5"; } -/* line 1513, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-qq:before { content: "\f1d6"; } -/* line 1516, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wechat:before, #hrjob-contract .fa-weixin:before { content: "\f1d7"; } -/* line 1520, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-send:before, #hrjob-contract .fa-paper-plane:before { content: "\f1d8"; } -/* line 1524, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-send-o:before, #hrjob-contract .fa-paper-plane-o:before { content: "\f1d9"; } -/* line 1528, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-history:before { content: "\f1da"; } -/* line 1531, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle-thin:before { content: "\f1db"; } -/* line 1534, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-header:before { content: "\f1dc"; } -/* line 1537, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paragraph:before { content: "\f1dd"; } -/* line 1540, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sliders:before { content: "\f1de"; } -/* line 1543, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-alt:before { content: "\f1e0"; } -/* line 1546, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-alt-square:before { content: "\f1e1"; } -/* line 1549, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bomb:before { content: "\f1e2"; } -/* line 1552, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-soccer-ball-o:before, #hrjob-contract .fa-futbol-o:before { content: "\f1e3"; } -/* line 1556, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tty:before { content: "\f1e4"; } -/* line 1559, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-binoculars:before { content: "\f1e5"; } -/* line 1562, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plug:before { content: "\f1e6"; } -/* line 1565, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-slideshare:before { content: "\f1e7"; } -/* line 1568, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-twitch:before { content: "\f1e8"; } -/* line 1571, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-yelp:before { content: "\f1e9"; } -/* line 1574, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-newspaper-o:before { content: "\f1ea"; } -/* line 1577, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wifi:before { content: "\f1eb"; } -/* line 1580, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-calculator:before { content: "\f1ec"; } -/* line 1583, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paypal:before { content: "\f1ed"; } -/* line 1586, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google-wallet:before { content: "\f1ee"; } -/* line 1589, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-visa:before { content: "\f1f0"; } -/* line 1592, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-mastercard:before { content: "\f1f1"; } -/* line 1595, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-discover:before { content: "\f1f2"; } -/* line 1598, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-amex:before { content: "\f1f3"; } -/* line 1601, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-paypal:before { content: "\f1f4"; } -/* line 1604, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-stripe:before { content: "\f1f5"; } -/* line 1607, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell-slash:before { content: "\f1f6"; } -/* line 1610, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell-slash-o:before { content: "\f1f7"; } -/* line 1613, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trash:before { content: "\f1f8"; } -/* line 1616, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-copyright:before { content: "\f1f9"; } -/* line 1619, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-at:before { content: "\f1fa"; } -/* line 1622, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eyedropper:before { content: "\f1fb"; } -/* line 1625, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paint-brush:before { content: "\f1fc"; } -/* line 1628, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-birthday-cake:before { content: "\f1fd"; } -/* line 1631, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-area-chart:before { content: "\f1fe"; } -/* line 1634, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pie-chart:before { content: "\f200"; } -/* line 1637, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-line-chart:before { content: "\f201"; } -/* line 1640, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lastfm:before { content: "\f202"; } -/* line 1643, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lastfm-square:before { content: "\f203"; } -/* line 1646, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-off:before { content: "\f204"; } -/* line 1649, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-on:before { content: "\f205"; } -/* line 1652, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bicycle:before { content: "\f206"; } -/* line 1655, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bus:before { content: "\f207"; } -/* line 1658, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ioxhost:before { content: "\f208"; } -/* line 1661, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angellist:before { content: "\f209"; } -/* line 1664, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc:before { content: "\f20a"; } -/* line 1667, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-shekel:before, #hrjob-contract .fa-sheqel:before, #hrjob-contract .fa-ils:before { content: "\f20b"; } -/* line 1672, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-meanpath:before { content: "\f20c"; } -/* line 12, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -/* line 15, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract *:before, #hrjob-contract *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -/* line 26, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .container-fluid, #hrjob-contract .container { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; @@ -3500,7 +2724,6 @@ line-height: 1.42857143; color: #4D4D69; } -/* line 35, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract input, #hrjob-contract button, #hrjob-contract select, @@ -3510,40 +2733,32 @@ font-size: inherit; line-height: inherit; } -/* line 48, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract a { color: #0071BD; text-decoration: none; } -/* line 52, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract a:hover, #hrjob-contract a:focus { color: #005c99; text-decoration: none; } -/* line 58, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract a:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -/* line 69, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract figure { margin: 0; } -/* line 76, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract img { vertical-align: middle; } -/* line 81, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-responsive { display: block; max-width: 100%; height: auto; } -/* line 86, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-rounded { border-radius: 4px; } -/* line 93, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-thumbnail { padding: 4px; line-height: 1.42857143; @@ -3557,18 +2772,15 @@ max-width: 100%; height: auto; } -/* line 106, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-circle { border-radius: 50%; } -/* line 113, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract hr { margin-top: 18px; margin-bottom: 18px; border: 0; border-top: 1px solid #D3DEE2; } -/* line 125, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .sr-only { position: absolute; width: 1px; @@ -3579,7 +2791,6 @@ clip: rect(0, 0, 0, 0); border: 0; } -/* line 141, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .sr-only-focusable:active, #hrjob-contract .sr-only-focusable:focus { position: static; width: auto; @@ -3588,7 +2799,6 @@ overflow: visible; clip: auto; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1, #hrjob-contract h2, #hrjob-contract h3, #hrjob-contract h4, #hrjob-contract h5, #hrjob-contract h6, #hrjob-contract .h1, #hrjob-contract .h2, #hrjob-contract .h3, #hrjob-contract .h4, #hrjob-contract .h5, #hrjob-contract .h6 { font-family: inherit; @@ -3596,7 +2806,6 @@ line-height: 1.1; color: #464354; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1 small, #hrjob-contract h1 .small, #hrjob-contract h2 small, #hrjob-contract h2 .small, #hrjob-contract h3 small, @@ -3615,14 +2824,12 @@ line-height: 1; color: #E8EEF0; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1, #hrjob-contract .h1, #hrjob-contract h2, #hrjob-contract .h2, #hrjob-contract h3, #hrjob-contract .h3 { margin-top: 18px; margin-bottom: 9px; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1 small, #hrjob-contract h1 .small, #hrjob-contract .h1 small, #hrjob-contract .h1 .small, @@ -3634,14 +2841,12 @@ #hrjob-contract .h3 .small { font-size: 65%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h4, #hrjob-contract .h4, #hrjob-contract h5, #hrjob-contract .h5, #hrjob-contract h6, #hrjob-contract .h6 { margin-top: 9px; margin-bottom: 9px; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h4 small, #hrjob-contract h4 .small, #hrjob-contract .h4 small, #hrjob-contract .h4 .small, @@ -3653,35 +2858,27 @@ #hrjob-contract .h6 .small { font-size: 75%; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1, #hrjob-contract .h1 { font-size: 24px; } -/* line 48, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h2, #hrjob-contract .h2 { font-size: 18px; } -/* line 49, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h3, #hrjob-contract .h3 { font-size: 13px; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h4, #hrjob-contract .h4 { font-size: 13px; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h5, #hrjob-contract .h5 { font-size: 13px; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h6, #hrjob-contract .h6 { font-size: 12px; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract p { margin: 0 0 9px; } -/* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .lead { margin-bottom: 18px; font-size: 14px; @@ -3689,217 +2886,171 @@ line-height: 1.4; } @media (min-width: 768px) { - /* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .lead { font-size: 19.5px; } } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract small, #hrjob-contract .small { font-size: 92%; } -/* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract mark, #hrjob-contract .mark { background-color: #fcf8e3; padding: .2em; } -/* line 90, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-left { text-align: left; } -/* line 91, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-right { text-align: right; } -/* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-center { text-align: center; } -/* line 93, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-justify { text-align: justify; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-nowrap { white-space: nowrap; } -/* line 97, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-lowercase { text-transform: lowercase; } -/* line 98, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-uppercase, #hrjob-contract .initialism { text-transform: uppercase; } -/* line 99, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-capitalize { text-transform: capitalize; } -/* line 102, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-muted { color: #9494A5; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-primary { color: #0071BD; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-primary:hover, #hrjob-contract a.text-primary:focus { color: #00538a; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-success { color: #4d994d; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-success:hover, #hrjob-contract a.text-success:focus { color: #3c773c; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-info { color: #31708f; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-info:hover, #hrjob-contract a.text-info:focus { color: #245269; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-warning { color: #bf5900; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-warning:hover, #hrjob-contract a.text-warning:focus { color: #8c4100; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-danger { color: #CF3458; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-danger:hover, #hrjob-contract a.text-danger:focus { color: #a82846; } -/* line 119, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .bg-primary { color: #fff; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-primary { background-color: #0071BD; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-primary:hover, #hrjob-contract a.bg-primary:focus { background-color: #00538a; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-success { background-color: #dff0d8; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-success:hover, #hrjob-contract a.bg-success:focus { background-color: #c1e2b3; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-info { background-color: #d9edf7; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-info:hover, #hrjob-contract a.bg-info:focus { background-color: #afd9ee; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-warning { background-color: #fcf8e3; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-warning:hover, #hrjob-contract a.bg-warning:focus { background-color: #f7ecb5; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-danger { background-color: #f2dede; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-danger:hover, #hrjob-contract a.bg-danger:focus { background-color: #e4b9b9; } -/* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .page-header { padding-bottom: 8px; margin: 36px 0 18px; border-bottom: 1px solid #F3F6F7; } -/* line 149, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract ul, #hrjob-contract ol { margin-top: 0; margin-bottom: 9px; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract ul ul, #hrjob-contract ul ol, #hrjob-contract ol ul, #hrjob-contract ol ol { margin-bottom: 0; } -/* line 167, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .list-unstyled { padding-left: 0; list-style: none; } -/* line 173, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .list-inline { padding-left: 0; list-style: none; margin-left: -5px; } -/* line 177, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .list-inline > li { display: inline-block; padding-left: 5px; padding-right: 5px; } -/* line 185, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dl { margin-top: 0; margin-bottom: 18px; } -/* line 189, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dt, #hrjob-contract dd { line-height: 1.42857143; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dt { font-weight: bold; } -/* line 196, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dd { margin-left: 0; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .dl-horizontal dd:before, #hrjob-contract .dl-horizontal dd:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .dl-horizontal dd:after { clear: both; } @media (min-width: 768px) { - /* line 211, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .dl-horizontal dt { float: left; width: 160px; @@ -3909,35 +3060,29 @@ text-overflow: ellipsis; white-space: nowrap; } - /* line 218, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .dl-horizontal dd { margin-left: 180px; } } -/* line 229, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract abbr[title], #hrjob-contract abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #E8EEF0; } -/* line 235, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .initialism { font-size: 90%; } -/* line 241, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote { padding: 9px 18px; margin: 0 0 18px; font-size: 16.25px; border-left: 5px solid #F3F6F7; } -/* line 250, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote p:last-child, #hrjob-contract blockquote ul:last-child, #hrjob-contract blockquote ol:last-child { margin-bottom: 0; } -/* line 257, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote footer, #hrjob-contract blockquote small, #hrjob-contract blockquote .small { @@ -3946,13 +3091,11 @@ line-height: 1.42857143; color: #E8EEF0; } -/* line 265, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote footer:before, #hrjob-contract blockquote small:before, #hrjob-contract blockquote .small:before { content: '\2014 \00A0'; } -/* line 274, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .blockquote-reverse, #hrjob-contract blockquote.pull-right { padding-right: 15px; @@ -3961,7 +3104,6 @@ border-left: 0; text-align: right; } -/* line 286, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .blockquote-reverse footer:before, #hrjob-contract .blockquote-reverse small:before, #hrjob-contract .blockquote-reverse .small:before, @@ -3970,7 +3112,6 @@ #hrjob-contract blockquote.pull-right .small:before { content: ''; } -/* line 287, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .blockquote-reverse footer:after, #hrjob-contract .blockquote-reverse small:after, #hrjob-contract .blockquote-reverse .small:after, @@ -3979,20 +3120,17 @@ #hrjob-contract blockquote.pull-right .small:after { content: '\00A0 \2014'; } -/* line 294, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract address { margin-bottom: 18px; font-style: normal; line-height: 1.42857143; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract code, #hrjob-contract kbd, #hrjob-contract pre, #hrjob-contract samp { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract code { padding: 2px 4px; font-size: 90%; @@ -4000,7 +3138,6 @@ background-color: #f9f2f4; border-radius: 2px; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract kbd { padding: 2px 4px; font-size: 90%; @@ -4009,14 +3146,12 @@ border-radius: 2px; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract kbd kbd { padding: 0; font-size: 100%; font-weight: bold; box-shadow: none; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract pre { display: block; padding: 8.5px; @@ -4030,7 +3165,6 @@ border: 1px solid #ccc; border-radius: 2px; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract pre code { padding: 0; font-size: inherit; @@ -4039,942 +3173,715 @@ background-color: transparent; border-radius: 0; } -/* line 66, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract .pre-scrollable { max-height: 340px; overflow-y: scroll; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container:before, #hrjob-contract .container:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container:after { clear: both; } @media (min-width: 768px) { - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { width: 750px; } } @media (min-width: 992px) { - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { width: 970px; } } @media (min-width: 1200px) { - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { width: 1170px; } } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container-fluid { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container-fluid:before, #hrjob-contract .container-fluid:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container-fluid:after { clear: both; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .row { margin-left: -15px; margin-right: -15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .row:before, #hrjob-contract .row:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .row:after { clear: both; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-1, #hrjob-contract .col-sm-1, #hrjob-contract .col-md-1, #hrjob-contract .col-lg-1, #hrjob-contract .col-xs-2, #hrjob-contract .col-sm-2, #hrjob-contract .col-md-2, #hrjob-contract .col-lg-2, #hrjob-contract .col-xs-3, #hrjob-contract .col-sm-3, #hrjob-contract .col-md-3, #hrjob-contract .col-lg-3, #hrjob-contract .col-xs-4, #hrjob-contract .col-sm-4, #hrjob-contract .col-md-4, #hrjob-contract .col-lg-4, #hrjob-contract .col-xs-5, #hrjob-contract .col-sm-5, #hrjob-contract .col-md-5, #hrjob-contract .col-lg-5, #hrjob-contract .col-xs-6, #hrjob-contract .col-sm-6, #hrjob-contract .col-md-6, #hrjob-contract .col-lg-6, #hrjob-contract .col-xs-7, #hrjob-contract .col-sm-7, #hrjob-contract .col-md-7, #hrjob-contract .col-lg-7, #hrjob-contract .col-xs-8, #hrjob-contract .col-sm-8, #hrjob-contract .col-md-8, #hrjob-contract .col-lg-8, #hrjob-contract .col-xs-9, #hrjob-contract .col-sm-9, #hrjob-contract .col-md-9, #hrjob-contract .col-lg-9, #hrjob-contract .col-xs-10, #hrjob-contract .col-sm-10, #hrjob-contract .col-md-10, #hrjob-contract .col-lg-10, #hrjob-contract .col-xs-11, #hrjob-contract .col-sm-11, #hrjob-contract .col-md-11, #hrjob-contract .col-lg-11, #hrjob-contract .col-xs-12, #hrjob-contract .col-sm-12, #hrjob-contract .col-md-12, #hrjob-contract .col-lg-12 { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-1, #hrjob-contract .col-xs-2, #hrjob-contract .col-xs-3, #hrjob-contract .col-xs-4, #hrjob-contract .col-xs-5, #hrjob-contract .col-xs-6, #hrjob-contract .col-xs-7, #hrjob-contract .col-xs-8, #hrjob-contract .col-xs-9, #hrjob-contract .col-xs-10, #hrjob-contract .col-xs-11, #hrjob-contract .col-xs-12 { float: left; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-1 { width: 8.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-2 { width: 16.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-3 { width: 25%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-4 { width: 33.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-5 { width: 41.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-6 { width: 50%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-7 { width: 58.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-8 { width: 66.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-9 { width: 75%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-10 { width: 83.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-11 { width: 91.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-12 { width: 100%; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-0 { right: auto; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-1 { right: 8.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-2 { right: 16.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-3 { right: 25%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-4 { right: 33.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-5 { right: 41.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-6 { right: 50%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-7 { right: 58.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-8 { right: 66.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-9 { right: 75%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-10 { right: 83.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-11 { right: 91.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-12 { right: 100%; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-0 { left: auto; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-1 { left: 8.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-2 { left: 16.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-3 { left: 25%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-4 { left: 33.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-5 { left: 41.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-6 { left: 50%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-7 { left: 58.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-8 { left: 66.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-9 { left: 75%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-10 { left: 83.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-11 { left: 91.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-12 { left: 100%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-0 { margin-left: 0%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-1 { margin-left: 8.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-2 { margin-left: 16.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-3 { margin-left: 25%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-4 { margin-left: 33.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-5 { margin-left: 41.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-6 { margin-left: 50%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-7 { margin-left: 58.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-8 { margin-left: 66.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-9 { margin-left: 75%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-10 { margin-left: 83.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-11 { margin-left: 91.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-12 { margin-left: 100%; } @media (min-width: 768px) { - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-1, #hrjob-contract .col-sm-2, #hrjob-contract .col-sm-3, #hrjob-contract .col-sm-4, #hrjob-contract .col-sm-5, #hrjob-contract .col-sm-6, #hrjob-contract .col-sm-7, #hrjob-contract .col-sm-8, #hrjob-contract .col-sm-9, #hrjob-contract .col-sm-10, #hrjob-contract .col-sm-11, #hrjob-contract .col-sm-12 { float: left; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-1 { width: 8.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-2 { width: 16.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-3 { width: 25%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-4 { width: 33.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-5 { width: 41.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-6 { width: 50%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-7 { width: 58.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-8 { width: 66.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-9 { width: 75%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-10 { width: 83.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-11 { width: 91.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-12 { width: 100%; } - /* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-0 { right: auto; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-1 { right: 8.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-2 { right: 16.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-3 { right: 25%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-4 { right: 33.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-5 { right: 41.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-6 { right: 50%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-7 { right: 58.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-8 { right: 66.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-9 { right: 75%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-10 { right: 83.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-11 { right: 91.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-12 { right: 100%; } - /* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-0 { left: auto; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-1 { left: 8.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-2 { left: 16.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-3 { left: 25%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-4 { left: 33.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-5 { left: 41.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-6 { left: 50%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-7 { left: 58.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-8 { left: 66.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-9 { left: 75%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-10 { left: 83.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-11 { left: 91.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-12 { left: 100%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-0 { margin-left: 0%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-1 { margin-left: 8.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-2 { margin-left: 16.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-3 { margin-left: 25%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-4 { margin-left: 33.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-5 { margin-left: 41.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-6 { margin-left: 50%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-7 { margin-left: 58.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-8 { margin-left: 66.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-9 { margin-left: 75%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-10 { margin-left: 83.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-11 { margin-left: 91.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-12 { margin-left: 100%; } } @media (min-width: 992px) { - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-1, #hrjob-contract .col-md-2, #hrjob-contract .col-md-3, #hrjob-contract .col-md-4, #hrjob-contract .col-md-5, #hrjob-contract .col-md-6, #hrjob-contract .col-md-7, #hrjob-contract .col-md-8, #hrjob-contract .col-md-9, #hrjob-contract .col-md-10, #hrjob-contract .col-md-11, #hrjob-contract .col-md-12 { float: left; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-1 { width: 8.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-2 { width: 16.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-3 { width: 25%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-4 { width: 33.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-5 { width: 41.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-6 { width: 50%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-7 { width: 58.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-8 { width: 66.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-9 { width: 75%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-10 { width: 83.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-11 { width: 91.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-12 { width: 100%; } - /* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-0 { right: auto; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-1 { right: 8.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-2 { right: 16.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-3 { right: 25%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-4 { right: 33.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-5 { right: 41.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-6 { right: 50%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-7 { right: 58.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-8 { right: 66.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-9 { right: 75%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-10 { right: 83.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-11 { right: 91.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-12 { right: 100%; } - /* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-0 { left: auto; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-1 { left: 8.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-2 { left: 16.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-3 { left: 25%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-4 { left: 33.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-5 { left: 41.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-6 { left: 50%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-7 { left: 58.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-8 { left: 66.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-9 { left: 75%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-10 { left: 83.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-11 { left: 91.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-12 { left: 100%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-0 { margin-left: 0%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-1 { margin-left: 8.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-2 { margin-left: 16.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-3 { margin-left: 25%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-4 { margin-left: 33.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-5 { margin-left: 41.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-6 { margin-left: 50%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-7 { margin-left: 58.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-8 { margin-left: 66.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-9 { margin-left: 75%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-10 { margin-left: 83.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-11 { margin-left: 91.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-12 { margin-left: 100%; } } @media (min-width: 1200px) { - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-1, #hrjob-contract .col-lg-2, #hrjob-contract .col-lg-3, #hrjob-contract .col-lg-4, #hrjob-contract .col-lg-5, #hrjob-contract .col-lg-6, #hrjob-contract .col-lg-7, #hrjob-contract .col-lg-8, #hrjob-contract .col-lg-9, #hrjob-contract .col-lg-10, #hrjob-contract .col-lg-11, #hrjob-contract .col-lg-12 { float: left; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-1 { width: 8.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-2 { width: 16.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-3 { width: 25%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-4 { width: 33.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-5 { width: 41.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-6 { width: 50%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-7 { width: 58.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-8 { width: 66.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-9 { width: 75%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-10 { width: 83.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-11 { width: 91.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-12 { width: 100%; } - /* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-0 { right: auto; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-1 { right: 8.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-2 { right: 16.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-3 { right: 25%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-4 { right: 33.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-5 { right: 41.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-6 { right: 50%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-7 { right: 58.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-8 { right: 66.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-9 { right: 75%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-10 { right: 83.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-11 { right: 91.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-12 { right: 100%; } - /* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-0 { left: auto; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-1 { left: 8.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-2 { left: 16.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-3 { left: 25%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-4 { left: 33.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-5 { left: 41.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-6 { left: 50%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-7 { left: 58.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-8 { left: 66.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-9 { left: 75%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-10 { left: 83.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-11 { left: 91.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-12 { left: 100%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-0 { margin-left: 0%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-1 { margin-left: 8.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-2 { margin-left: 16.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-3 { margin-left: 25%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-4 { margin-left: 33.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-5 { margin-left: 41.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-6 { margin-left: 50%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-7 { margin-left: 58.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-8 { margin-left: 66.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-9 { margin-left: 75%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-10 { margin-left: 83.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-11 { margin-left: 91.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-12 { margin-left: 100%; } } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract table { background-color: #FFFFFF; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract caption { padding-top: 11px 8px 10px; padding-bottom: 11px 8px 10px; color: #9494A5; text-align: left; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract th { text-align: left; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table { width: 100%; max-width: 100%; margin-bottom: 18px; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > thead > tr > th, #hrjob-contract .table > thead > tr > td, #hrjob-contract .table > tbody > tr > th, @@ -4986,12 +3893,10 @@ vertical-align: top; border-top: 1px solid #E8EEF0; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > thead > tr > th { vertical-align: bottom; border-bottom: 2px solid #E8EEF0; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > caption + thead > tr:first-child > th, #hrjob-contract .table > caption + thead > tr:first-child > td, #hrjob-contract .table > colgroup + thead > tr:first-child > th, @@ -5000,15 +3905,12 @@ #hrjob-contract .table > thead:first-child > tr:first-child > td { border-top: 0; } -/* line 57, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > tbody + tbody { border-top: 2px solid #E8EEF0; } -/* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table .table { background-color: #E8EEF0; } -/* line 75, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-condensed > thead > tr > th, #hrjob-contract .table-condensed > thead > tr > td, #hrjob-contract .table-condensed > tbody > tr > th, @@ -5017,11 +3919,9 @@ #hrjob-contract .table-condensed > tfoot > tr > td { padding: 5px; } -/* line 88, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-bordered { border: 1px solid #E8EEF0; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-bordered > thead > tr > th, #hrjob-contract .table-bordered > thead > tr > td, #hrjob-contract .table-bordered > tbody > tr > th, @@ -5030,33 +3930,27 @@ #hrjob-contract .table-bordered > tfoot > tr > td { border: 1px solid #E8EEF0; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-bordered > thead > tr > th, #hrjob-contract .table-bordered > thead > tr > td { border-bottom-width: 2px; } -/* line 114, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-striped > tbody > tr:nth-of-type(odd) { background-color: #FFFFFF; } -/* line 125, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-hover > tbody > tr:hover { background-color: #f5f5f5; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract table col[class*="col-"] { position: static; float: none; display: table-column; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract table td[class*="col-"], #hrjob-contract table th[class*="col-"] { position: static; float: none; display: table-cell; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.active, #hrjob-contract .table > thead > tr > th.active, #hrjob-contract .table > thead > tr.active > td, #hrjob-contract .table > thead > tr.active > th, #hrjob-contract .table > tbody > tr > td.active, @@ -5069,12 +3963,10 @@ #hrjob-contract .table > tfoot > tr.active > th { background-color: #f5f5f5; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.active:hover, #hrjob-contract .table-hover > tbody > tr > th.active:hover, #hrjob-contract .table-hover > tbody > tr.active:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .active, #hrjob-contract .table-hover > tbody > tr.active:hover > th { background-color: #e8e8e8; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.success, #hrjob-contract .table > thead > tr > th.success, #hrjob-contract .table > thead > tr.success > td, #hrjob-contract .table > thead > tr.success > th, #hrjob-contract .table > tbody > tr > td.success, @@ -5087,12 +3979,10 @@ #hrjob-contract .table > tfoot > tr.success > th { background-color: #dff0d8; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.success:hover, #hrjob-contract .table-hover > tbody > tr > th.success:hover, #hrjob-contract .table-hover > tbody > tr.success:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .success, #hrjob-contract .table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.info, #hrjob-contract .table > thead > tr > th.info, #hrjob-contract .table > thead > tr.info > td, #hrjob-contract .table > thead > tr.info > th, #hrjob-contract .table > tbody > tr > td.info, @@ -5105,12 +3995,10 @@ #hrjob-contract .table > tfoot > tr.info > th { background-color: #d9edf7; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.info:hover, #hrjob-contract .table-hover > tbody > tr > th.info:hover, #hrjob-contract .table-hover > tbody > tr.info:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .info, #hrjob-contract .table-hover > tbody > tr.info:hover > th { background-color: #c4e3f3; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.warning, #hrjob-contract .table > thead > tr > th.warning, #hrjob-contract .table > thead > tr.warning > td, #hrjob-contract .table > thead > tr.warning > th, #hrjob-contract .table > tbody > tr > td.warning, @@ -5123,12 +4011,10 @@ #hrjob-contract .table > tfoot > tr.warning > th { background-color: #fcf8e3; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.warning:hover, #hrjob-contract .table-hover > tbody > tr > th.warning:hover, #hrjob-contract .table-hover > tbody > tr.warning:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .warning, #hrjob-contract .table-hover > tbody > tr.warning:hover > th { background-color: #faf2cc; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.danger, #hrjob-contract .table > thead > tr > th.danger, #hrjob-contract .table > thead > tr.danger > td, #hrjob-contract .table > thead > tr.danger > th, #hrjob-contract .table > tbody > tr > td.danger, @@ -5141,18 +4027,15 @@ #hrjob-contract .table > tfoot > tr.danger > th { background-color: #f2dede; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.danger:hover, #hrjob-contract .table-hover > tbody > tr > th.danger:hover, #hrjob-contract .table-hover > tbody > tr.danger:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .danger, #hrjob-contract .table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; } -/* line 171, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive { overflow-x: auto; min-height: 0.01%; } @media screen and (max-width: 767px) { - /* line 171, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive { width: 100%; margin-bottom: 13.5px; @@ -5160,11 +4043,9 @@ -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #E8EEF0; } - /* line 183, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table { margin-bottom: 0; } - /* line 191, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table > thead > tr > th, #hrjob-contract .table-responsive > .table > thead > tr > td, #hrjob-contract .table-responsive > .table > tbody > tr > th, @@ -5173,11 +4054,9 @@ #hrjob-contract .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } - /* line 200, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered { border: 0; } - /* line 208, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered > thead > tr > th:first-child, #hrjob-contract .table-responsive > .table-bordered > thead > tr > td:first-child, #hrjob-contract .table-responsive > .table-bordered > tbody > tr > th:first-child, @@ -5186,7 +4065,6 @@ #hrjob-contract .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } - /* line 212, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered > thead > tr > th:last-child, #hrjob-contract .table-responsive > .table-bordered > thead > tr > td:last-child, #hrjob-contract .table-responsive > .table-bordered > tbody > tr > th:last-child, @@ -5195,7 +4073,6 @@ #hrjob-contract .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } - /* line 225, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered > tbody > tr:last-child > th, #hrjob-contract .table-responsive > .table-bordered > tbody > tr:last-child > td, #hrjob-contract .table-responsive > .table-bordered > tfoot > tr:last-child > th, @@ -5203,14 +4080,12 @@ border-bottom: 0; } } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract fieldset { padding: 0; margin: 0; border: 0; min-width: 0; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract legend { display: block; width: 100%; @@ -5222,7 +4097,6 @@ border: 0; border-bottom: 1px solid #e5e5e5; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract label, #hrjob-contract .checkbox-label, #hrjob-contract .radio-label { display: inline-block; @@ -5230,41 +4104,34 @@ margin-bottom: 5px; font-weight: bold; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="radio"], #hrjob-contract input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; line-height: normal; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="file"] { display: block; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="range"] { display: block; width: 100%; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract select[multiple], #hrjob-contract select[size] { height: auto; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="file"]:focus, #hrjob-contract input[type="radio"]:focus, #hrjob-contract input[type="checkbox"]:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -/* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract output { display: block; padding-top: 7px; @@ -5272,7 +4139,6 @@ line-height: 1.42857143; color: #4D4D69; } -/* line 114, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control { display: block; width: 100%; @@ -5291,57 +4157,46 @@ -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } -/* line 57, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -/* line 103, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss */ #hrjob-contract .form-control::-moz-placeholder { color: #9494A5; opacity: 1; } -/* line 107, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss */ #hrjob-contract .form-control:-ms-input-placeholder { color: #9494A5; } -/* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss */ #hrjob-contract .form-control::-webkit-input-placeholder { color: #9494A5; } -/* line 136, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control::-ms-expand { border: 0; background-color: transparent; } -/* line 146, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control[disabled], #hrjob-contract .form-control[readonly], fieldset[disabled] #hrjob-contract .form-control { background-color: #F3F6F7; opacity: 1; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control[disabled], fieldset[disabled] #hrjob-contract .form-control { cursor: not-allowed; } -/* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract textarea.form-control { height: auto; } -/* line 174, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="search"] { -webkit-appearance: none; } @media screen and (-webkit-min-device-pixel-ratio: 0) { - /* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="date"].form-control, #hrjob-contract input[type="time"].form-control, #hrjob-contract input[type="datetime-local"].form-control, #hrjob-contract input[type="month"].form-control { line-height: 32px; } - /* line 197, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="date"].input-sm, #hrjob-contract .input-group-sm > input[type="date"].form-control, #hrjob-contract .input-group-sm > input[type="date"].input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > input[type="date"].btn, .input-group-sm #hrjob-contract input[type="date"], @@ -5362,7 +4217,6 @@ #hrjob-contract input[type="month"] { line-height: 30px; } - /* line 202, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="date"].input-lg, #hrjob-contract .input-group-lg > input[type="date"].form-control, #hrjob-contract .input-group-lg > input[type="date"].input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > input[type="date"].btn, .input-group-lg #hrjob-contract input[type="date"], @@ -5384,11 +4238,9 @@ line-height: 45px; } } -/* line 215, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group { margin-bottom: 15px; } -/* line 224, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio, #hrjob-contract .checkbox { position: relative; @@ -5396,7 +4248,6 @@ margin-top: 10px; margin-bottom: 10px; } -/* line 231, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio label, #hrjob-contract .radio .checkbox-label, #hrjob-contract .radio .radio-label, #hrjob-contract .checkbox label, @@ -5408,7 +4259,6 @@ font-weight: normal; cursor: pointer; } -/* line 239, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio input[type="radio"], #hrjob-contract .radio-inline input[type="radio"], #hrjob-contract .checkbox input[type="checkbox"], @@ -5417,12 +4267,10 @@ margin-left: -20px; margin-top: 4px \9; } -/* line 248, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio + .radio, #hrjob-contract .checkbox + .checkbox { margin-top: -5px; } -/* line 254, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio-inline, #hrjob-contract .checkbox-inline { position: relative; @@ -5433,26 +4281,22 @@ font-weight: normal; cursor: pointer; } -/* line 264, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio-inline + .radio-inline, #hrjob-contract .checkbox-inline + .checkbox-inline { margin-top: 0; margin-left: 10px; } -/* line 276, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="radio"][disabled], #hrjob-contract input[type="radio"].disabled, fieldset[disabled] #hrjob-contract input[type="radio"], #hrjob-contract input[type="checkbox"][disabled], #hrjob-contract input[type="checkbox"].disabled, fieldset[disabled] #hrjob-contract input[type="checkbox"] { cursor: not-allowed; } -/* line 285, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio-inline.disabled, fieldset[disabled] #hrjob-contract .radio-inline, #hrjob-contract .checkbox-inline.disabled, fieldset[disabled] #hrjob-contract .checkbox-inline { cursor: not-allowed; } -/* line 295, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio.disabled label, #hrjob-contract .radio.disabled .checkbox-label, #hrjob-contract .radio.disabled .radio-label, fieldset[disabled] #hrjob-contract .radio label, fieldset[disabled] #hrjob-contract .radio .checkbox-label, fieldset[disabled] #hrjob-contract .radio .radio-label, @@ -5465,14 +4309,12 @@ fieldset[disabled] #hrjob-contract .checkbox .radio-label { cursor: not-allowed; } -/* line 307, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control-static { padding-top: 7px; padding-bottom: 7px; margin-bottom: 0; min-height: 31px; } -/* line 315, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control-static.input-lg, #hrjob-contract .input-group-lg > .form-control-static.form-control, #hrjob-contract .input-group-lg > .form-control-static.input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > .form-control-static.btn, #hrjob-contract .form-control-static.input-sm, #hrjob-contract .input-group-sm > .form-control-static.form-control, @@ -5481,7 +4323,6 @@ fieldset[disabled] padding-left: 0; padding-right: 0; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .input-sm, #hrjob-contract .input-group-sm > .form-control, #hrjob-contract .input-group-sm > .input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > .btn { @@ -5491,14 +4332,12 @@ fieldset[disabled] line-height: 1.5; border-radius: 2px; } -/* line 79, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract select.input-sm, #hrjob-contract .input-group-sm > select.form-control, #hrjob-contract .input-group-sm > select.input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > select.btn { height: 30px; line-height: 30px; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract textarea.input-sm, #hrjob-contract .input-group-sm > textarea.form-control, #hrjob-contract .input-group-sm > textarea.input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > textarea.btn, @@ -5508,7 +4347,6 @@ fieldset[disabled] #hrjob-contract .input-group-sm > .input-group-btn > select[multiple].btn { height: auto; } -/* line 333, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm .form-control { height: 30px; padding: 5px 10px; @@ -5516,17 +4354,14 @@ fieldset[disabled] line-height: 1.5; border-radius: 2px; } -/* line 340, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm select.form-control { height: 30px; line-height: 30px; } -/* line 344, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm textarea.form-control, #hrjob-contract .form-group-sm select[multiple].form-control { height: auto; } -/* line 348, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm .form-control-static { height: 30px; min-height: 30px; @@ -5534,7 +4369,6 @@ fieldset[disabled] font-size: 12px; line-height: 1.5; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .input-lg, #hrjob-contract .input-group-lg > .form-control, #hrjob-contract .input-group-lg > .input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > .btn { @@ -5544,14 +4378,12 @@ fieldset[disabled] line-height: 1.3333333; border-radius: 4px; } -/* line 79, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract select.input-lg, #hrjob-contract .input-group-lg > select.form-control, #hrjob-contract .input-group-lg > select.input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > select.btn { height: 45px; line-height: 45px; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract textarea.input-lg, #hrjob-contract .input-group-lg > textarea.form-control, #hrjob-contract .input-group-lg > textarea.input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > textarea.btn, @@ -5561,7 +4393,6 @@ fieldset[disabled] #hrjob-contract .input-group-lg > .input-group-btn > select[multiple].btn { height: auto; } -/* line 359, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg .form-control { height: 45px; padding: 10px 16px; @@ -5569,17 +4400,14 @@ fieldset[disabled] line-height: 1.3333333; border-radius: 4px; } -/* line 366, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg select.form-control { height: 45px; line-height: 45px; } -/* line 370, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg textarea.form-control, #hrjob-contract .form-group-lg select[multiple].form-control { height: auto; } -/* line 374, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg .form-control-static { height: 45px; min-height: 35px; @@ -5587,15 +4415,12 @@ fieldset[disabled] font-size: 17px; line-height: 1.3333333; } -/* line 388, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback { position: relative; } -/* line 393, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback .form-control { padding-right: 40px; } -/* line 398, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control-feedback { position: absolute; top: 0; @@ -5608,7 +4433,6 @@ fieldset[disabled] text-align: center; pointer-events: none; } -/* line 410, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .input-lg + .form-control-feedback, #hrjob-contract .input-group-lg > .form-control + .form-control-feedback, #hrjob-contract .input-group-lg > .input-group-addon + .form-control-feedback, #hrjob-contract .input-group-lg > .input-group-btn > .btn + .form-control-feedback, @@ -5618,7 +4442,6 @@ fieldset[disabled] height: 45px; line-height: 45px; } -/* line 417, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .input-sm + .form-control-feedback, #hrjob-contract .input-group-sm > .form-control + .form-control-feedback, #hrjob-contract .input-group-sm > .input-group-addon + .form-control-feedback, #hrjob-contract .input-group-sm > .input-group-btn > .btn + .form-control-feedback, @@ -5628,7 +4451,6 @@ fieldset[disabled] height: 30px; line-height: 30px; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .help-block, #hrjob-contract .has-success .control-label, #hrjob-contract .has-success .radio, @@ -5641,29 +4463,24 @@ fieldset[disabled] #hrjob-contract .has-success.checkbox-inline .radio-label { color: #4d994d; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .form-control { border-color: #4d994d; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .form-control:focus { border-color: #3c773c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #89c389; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #89c389; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .input-group-addon { color: #4d994d; border-color: #4d994d; background-color: #dff0d8; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .form-control-feedback { color: #4d994d; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .help-block, #hrjob-contract .has-warning .control-label, #hrjob-contract .has-warning .radio, @@ -5676,29 +4493,24 @@ fieldset[disabled] #hrjob-contract .has-warning.checkbox-inline .radio-label { color: #bf5900; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .form-control { border-color: #bf5900; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .form-control:focus { border-color: #8c4100; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ff8b26; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ff8b26; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .input-group-addon { color: #bf5900; border-color: #bf5900; background-color: #fcf8e3; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .form-control-feedback { color: #bf5900; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .help-block, #hrjob-contract .has-error .control-label, #hrjob-contract .has-error .radio, @@ -5711,39 +4523,32 @@ fieldset[disabled] #hrjob-contract .has-error.checkbox-inline .radio-label { color: #CF3458; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .form-control { border-color: #CF3458; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .form-control:focus { border-color: #a82846; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #e3869c; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #e3869c; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .input-group-addon { color: #CF3458; border-color: #CF3458; background-color: #f2dede; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .form-control-feedback { color: #CF3458; } -/* line 439, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback label ~ .form-control-feedback, #hrjob-contract .has-feedback .checkbox-label ~ .form-control-feedback, #hrjob-contract .has-feedback .radio-label ~ .form-control-feedback { top: 23px; } -/* line 442, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback label.sr-only ~ .form-control-feedback, #hrjob-contract .has-feedback .sr-only.checkbox-label ~ .form-control-feedback, #hrjob-contract .has-feedback .sr-only.radio-label ~ .form-control-feedback { top: 0; } -/* line 453, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .help-block { display: block; margin-top: 5px; @@ -5751,43 +4556,35 @@ fieldset[disabled] color: #8b8baa; } @media (min-width: 768px) { - /* line 478, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } - /* line 485, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } - /* line 492, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .form-control-static { display: inline-block; } - /* line 496, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .input-group { display: inline-table; vertical-align: middle; } - /* line 500, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .input-group .input-group-addon, #hrjob-contract .form-inline .input-group .input-group-btn, #hrjob-contract .form-inline .input-group .form-control { width: auto; } - /* line 508, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .input-group > .form-control { width: 100%; } - /* line 512, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .control-label { margin-bottom: 0; vertical-align: middle; } - /* line 519, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .radio, #hrjob-contract .form-inline .checkbox { display: inline-block; @@ -5795,7 +4592,6 @@ fieldset[disabled] margin-bottom: 0; vertical-align: middle; } - /* line 526, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .radio label, #hrjob-contract .form-inline .radio .checkbox-label, #hrjob-contract .form-inline .radio .radio-label, #hrjob-contract .form-inline .checkbox label, @@ -5803,18 +4599,15 @@ fieldset[disabled] #hrjob-contract .form-inline .checkbox .radio-label { padding-left: 0; } - /* line 530, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .radio input[type="radio"], #hrjob-contract .form-inline .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } - /* line 537, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .has-feedback .form-control-feedback { top: 0; } } -/* line 559, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .radio, #hrjob-contract .form-horizontal .checkbox, #hrjob-contract .form-horizontal .radio-inline, @@ -5823,52 +4616,43 @@ fieldset[disabled] margin-bottom: 0; padding-top: 7px; } -/* line 569, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .radio, #hrjob-contract .form-horizontal .checkbox { min-height: 25px; } -/* line 575, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .form-group { margin-left: -15px; margin-right: -15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .form-horizontal .form-group:before, #hrjob-contract .form-horizontal .form-group:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .form-horizontal .form-group:after { clear: both; } @media (min-width: 768px) { - /* line 582, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .control-label { text-align: right; margin-bottom: 0; padding-top: 7px; } } -/* line 593, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback .form-control-feedback { right: 15px; } @media (min-width: 768px) { - /* line 603, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .form-group-lg .control-label { padding-top: 11px; font-size: 17px; } } @media (min-width: 768px) { - /* line 611, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .form-group-sm .control-label { padding-top: 6px; font-size: 12px; } } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn { display: inline-block; margin-bottom: 0; @@ -5889,24 +4673,20 @@ fieldset[disabled] -ms-user-select: none; user-select: none; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn:focus, #hrjob-contract .btn.focus, #hrjob-contract .btn:active:focus, #hrjob-contract .btn:active.focus, #hrjob-contract .btn.active:focus, #hrjob-contract .btn.active.focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn:hover, #hrjob-contract .btn:focus, #hrjob-contract .btn.focus { color: #333; text-decoration: none; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn:active, #hrjob-contract .btn.active { outline: 0; background-image: none; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn.disabled, #hrjob-contract .btn[disabled], fieldset[disabled] #hrjob-contract .btn { cursor: not-allowed; opacity: 0.65; @@ -5914,365 +4694,298 @@ fieldset[disabled] -webkit-box-shadow: none; box-shadow: none; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract a.btn.disabled, fieldset[disabled] #hrjob-contract a.btn { pointer-events: none; } -/* line 68, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-default { color: #333; background-color: #fff; border-color: #ccc; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:focus, #hrjob-contract .btn-default.focus { color: #333; background-color: #e6e6e6; border-color: #8c8c8c; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:hover { color: #333; background-color: #e6e6e6; border-color: #adadad; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:active, #hrjob-contract .btn-default.active, .open > #hrjob-contract .btn-default.dropdown-toggle { color: #333; background-color: #e6e6e6; border-color: #adadad; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:active:hover, #hrjob-contract .btn-default:active:focus, #hrjob-contract .btn-default:active.focus, #hrjob-contract .btn-default.active:hover, #hrjob-contract .btn-default.active:focus, #hrjob-contract .btn-default.active.focus, .open > #hrjob-contract .btn-default.dropdown-toggle:hover, .open > #hrjob-contract .btn-default.dropdown-toggle:focus, .open > #hrjob-contract .btn-default.dropdown-toggle.focus { color: #333; background-color: #d4d4d4; border-color: #8c8c8c; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:active, #hrjob-contract .btn-default.active, .open > #hrjob-contract .btn-default.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default.disabled:hover, #hrjob-contract .btn-default.disabled:focus, #hrjob-contract .btn-default.disabled.focus, #hrjob-contract .btn-default[disabled]:hover, #hrjob-contract .btn-default[disabled]:focus, #hrjob-contract .btn-default[disabled].focus, fieldset[disabled] #hrjob-contract .btn-default:hover, fieldset[disabled] #hrjob-contract .btn-default:focus, fieldset[disabled] #hrjob-contract .btn-default.focus { background-color: #fff; border-color: #ccc; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default .badge { color: #fff; background-color: #333; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-primary { color: #fff; background-color: #0071BD; border-color: #0062a4; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:focus, #hrjob-contract .btn-primary.focus { color: #fff; background-color: #00538a; border-color: #001624; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:hover { color: #fff; background-color: #00538a; border-color: #003d66; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:active, #hrjob-contract .btn-primary.active, .open > #hrjob-contract .btn-primary.dropdown-toggle { color: #fff; background-color: #00538a; border-color: #003d66; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:active:hover, #hrjob-contract .btn-primary:active:focus, #hrjob-contract .btn-primary:active.focus, #hrjob-contract .btn-primary.active:hover, #hrjob-contract .btn-primary.active:focus, #hrjob-contract .btn-primary.active.focus, .open > #hrjob-contract .btn-primary.dropdown-toggle:hover, .open > #hrjob-contract .btn-primary.dropdown-toggle:focus, .open > #hrjob-contract .btn-primary.dropdown-toggle.focus { color: #fff; background-color: #003d66; border-color: #001624; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:active, #hrjob-contract .btn-primary.active, .open > #hrjob-contract .btn-primary.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary.disabled:hover, #hrjob-contract .btn-primary.disabled:focus, #hrjob-contract .btn-primary.disabled.focus, #hrjob-contract .btn-primary[disabled]:hover, #hrjob-contract .btn-primary[disabled]:focus, #hrjob-contract .btn-primary[disabled].focus, fieldset[disabled] #hrjob-contract .btn-primary:hover, fieldset[disabled] #hrjob-contract .btn-primary:focus, fieldset[disabled] #hrjob-contract .btn-primary.focus { background-color: #0071BD; border-color: #0062a4; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary .badge { color: #0071BD; background-color: #fff; } -/* line 75, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-success { color: #fff; background-color: #44CB7E; border-color: #35c071; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:focus, #hrjob-contract .btn-success.focus { color: #fff; background-color: #30ac65; border-color: #1a5c36; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:hover { color: #fff; background-color: #30ac65; border-color: #289055; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:active, #hrjob-contract .btn-success.active, .open > #hrjob-contract .btn-success.dropdown-toggle { color: #fff; background-color: #30ac65; border-color: #289055; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:active:hover, #hrjob-contract .btn-success:active:focus, #hrjob-contract .btn-success:active.focus, #hrjob-contract .btn-success.active:hover, #hrjob-contract .btn-success.active:focus, #hrjob-contract .btn-success.active.focus, .open > #hrjob-contract .btn-success.dropdown-toggle:hover, .open > #hrjob-contract .btn-success.dropdown-toggle:focus, .open > #hrjob-contract .btn-success.dropdown-toggle.focus { color: #fff; background-color: #289055; border-color: #1a5c36; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:active, #hrjob-contract .btn-success.active, .open > #hrjob-contract .btn-success.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success.disabled:hover, #hrjob-contract .btn-success.disabled:focus, #hrjob-contract .btn-success.disabled.focus, #hrjob-contract .btn-success[disabled]:hover, #hrjob-contract .btn-success[disabled]:focus, #hrjob-contract .btn-success[disabled].focus, fieldset[disabled] #hrjob-contract .btn-success:hover, fieldset[disabled] #hrjob-contract .btn-success:focus, fieldset[disabled] #hrjob-contract .btn-success.focus { background-color: #44CB7E; border-color: #35c071; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success .badge { color: #44CB7E; background-color: #fff; } -/* line 79, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:focus, #hrjob-contract .btn-info.focus { color: #fff; background-color: #31b0d5; border-color: #1b6d85; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #269abc; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:active, #hrjob-contract .btn-info.active, .open > #hrjob-contract .btn-info.dropdown-toggle { color: #fff; background-color: #31b0d5; border-color: #269abc; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:active:hover, #hrjob-contract .btn-info:active:focus, #hrjob-contract .btn-info:active.focus, #hrjob-contract .btn-info.active:hover, #hrjob-contract .btn-info.active:focus, #hrjob-contract .btn-info.active.focus, .open > #hrjob-contract .btn-info.dropdown-toggle:hover, .open > #hrjob-contract .btn-info.dropdown-toggle:focus, .open > #hrjob-contract .btn-info.dropdown-toggle.focus { color: #fff; background-color: #269abc; border-color: #1b6d85; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:active, #hrjob-contract .btn-info.active, .open > #hrjob-contract .btn-info.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info.disabled:hover, #hrjob-contract .btn-info.disabled:focus, #hrjob-contract .btn-info.disabled.focus, #hrjob-contract .btn-info[disabled]:hover, #hrjob-contract .btn-info[disabled]:focus, #hrjob-contract .btn-info[disabled].focus, fieldset[disabled] #hrjob-contract .btn-info:hover, fieldset[disabled] #hrjob-contract .btn-info:focus, fieldset[disabled] #hrjob-contract .btn-info.focus { background-color: #5bc0de; border-color: #46b8da; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info .badge { color: #5bc0de; background-color: #fff; } -/* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-warning { color: #fff; background-color: #E6AB5E; border-color: #e39f48; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:focus, #hrjob-contract .btn-warning.focus { color: #fff; background-color: #df9432; border-color: #945e17; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:hover { color: #fff; background-color: #df9432; border-color: #cd8220; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:active, #hrjob-contract .btn-warning.active, .open > #hrjob-contract .btn-warning.dropdown-toggle { color: #fff; background-color: #df9432; border-color: #cd8220; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:active:hover, #hrjob-contract .btn-warning:active:focus, #hrjob-contract .btn-warning:active.focus, #hrjob-contract .btn-warning.active:hover, #hrjob-contract .btn-warning.active:focus, #hrjob-contract .btn-warning.active.focus, .open > #hrjob-contract .btn-warning.dropdown-toggle:hover, .open > #hrjob-contract .btn-warning.dropdown-toggle:focus, .open > #hrjob-contract .btn-warning.dropdown-toggle.focus { color: #fff; background-color: #cd8220; border-color: #945e17; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:active, #hrjob-contract .btn-warning.active, .open > #hrjob-contract .btn-warning.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning.disabled:hover, #hrjob-contract .btn-warning.disabled:focus, #hrjob-contract .btn-warning.disabled.focus, #hrjob-contract .btn-warning[disabled]:hover, #hrjob-contract .btn-warning[disabled]:focus, #hrjob-contract .btn-warning[disabled].focus, fieldset[disabled] #hrjob-contract .btn-warning:hover, fieldset[disabled] #hrjob-contract .btn-warning:focus, fieldset[disabled] #hrjob-contract .btn-warning.focus { background-color: #E6AB5E; border-color: #e39f48; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning .badge { color: #E6AB5E; background-color: #fff; } -/* line 87, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-danger { color: #fff; background-color: #CF3458; border-color: #bd2d4e; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:focus, #hrjob-contract .btn-danger.focus { color: #fff; background-color: #a82846; border-color: #561423; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:hover { color: #fff; background-color: #a82846; border-color: #8b213a; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:active, #hrjob-contract .btn-danger.active, .open > #hrjob-contract .btn-danger.dropdown-toggle { color: #fff; background-color: #a82846; border-color: #8b213a; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:active:hover, #hrjob-contract .btn-danger:active:focus, #hrjob-contract .btn-danger:active.focus, #hrjob-contract .btn-danger.active:hover, #hrjob-contract .btn-danger.active:focus, #hrjob-contract .btn-danger.active.focus, .open > #hrjob-contract .btn-danger.dropdown-toggle:hover, .open > #hrjob-contract .btn-danger.dropdown-toggle:focus, .open > #hrjob-contract .btn-danger.dropdown-toggle.focus { color: #fff; background-color: #8b213a; border-color: #561423; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:active, #hrjob-contract .btn-danger.active, .open > #hrjob-contract .btn-danger.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger.disabled:hover, #hrjob-contract .btn-danger.disabled:focus, #hrjob-contract .btn-danger.disabled.focus, #hrjob-contract .btn-danger[disabled]:hover, #hrjob-contract .btn-danger[disabled]:focus, #hrjob-contract .btn-danger[disabled].focus, fieldset[disabled] #hrjob-contract .btn-danger:hover, fieldset[disabled] #hrjob-contract .btn-danger:focus, fieldset[disabled] #hrjob-contract .btn-danger.focus { background-color: #CF3458; border-color: #bd2d4e; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger .badge { color: #CF3458; background-color: #fff; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link { color: #0071BD; font-weight: normal; border-radius: 0; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link, #hrjob-contract .btn-link:active, #hrjob-contract .btn-link.active, #hrjob-contract .btn-link[disabled], fieldset[disabled] #hrjob-contract .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } -/* line 109, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link, #hrjob-contract .btn-link:hover, #hrjob-contract .btn-link:focus, #hrjob-contract .btn-link:active { border-color: transparent; } -/* line 115, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link:hover, #hrjob-contract .btn-link:focus { color: #005c99; text-decoration: none; background-color: transparent; } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link[disabled]:hover, #hrjob-contract .btn-link[disabled]:focus, fieldset[disabled] #hrjob-contract .btn-link:hover, fieldset[disabled] #hrjob-contract .btn-link:focus { color: #E8EEF0; text-decoration: none; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-lg, #hrjob-contract .btn-group-lg > .btn { padding: 10px 16px; font-size: 17px; line-height: 1.3333333; border-radius: 4px; } -/* line 139, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-sm, #hrjob-contract .btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 2px; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-xs, #hrjob-contract .btn-group-xs > .btn { padding: 3px 8px; font-size: 12px; line-height: 1.5; border-radius: 2px; } -/* line 151, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-block { display: block; width: 100%; } -/* line 157, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-block + .btn-block { margin-top: 5px; } -/* line 165, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract input[type="submit"].btn-block, #hrjob-contract input[type="reset"].btn-block, #hrjob-contract input[type="button"].btn-block { width: 100%; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; -o-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .fade.in { opacity: 1; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .collapse { display: none; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .collapse.in { display: block; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract tr.collapse.in { display: table-row; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract tbody.collapse.in { display: table-row-group; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .collapsing { position: relative; height: 0; @@ -6284,7 +4997,6 @@ fieldset[disabled] -webkit-transition-timing-function: ease; transition-timing-function: ease; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .caret { display: inline-block; width: 0; @@ -6296,16 +5008,13 @@ fieldset[disabled] border-right: 4px solid transparent; border-left: 4px solid transparent; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropup, #hrjob-contract .dropdown { position: relative; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-toggle:focus { outline: 0; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu { position: absolute; top: 100%; @@ -6327,19 +5036,16 @@ fieldset[disabled] box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); background-clip: padding-box; } -/* line 54, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu.pull-right { right: 0; left: auto; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu .divider { height: 1px; margin: 8px 0; overflow: hidden; background-color: #e5e5e5; } -/* line 65, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > li > a { display: block; padding: 3px 20px; @@ -6349,24 +5055,20 @@ fieldset[disabled] color: #4D4D69; white-space: nowrap; } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > li > a:hover, #hrjob-contract .dropdown-menu > li > a:focus { text-decoration: none; color: #42425a; background-color: #f5f5f5; } -/* line 88, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > .active > a, #hrjob-contract .dropdown-menu > .active > a:hover, #hrjob-contract .dropdown-menu > .active > a:focus { color: #fff; text-decoration: none; outline: 0; background-color: #0071BD; } -/* line 103, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > .disabled > a, #hrjob-contract .dropdown-menu > .disabled > a:hover, #hrjob-contract .dropdown-menu > .disabled > a:focus { color: #E8EEF0; } -/* line 110, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > .disabled > a:hover, #hrjob-contract .dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; @@ -6374,25 +5076,20 @@ fieldset[disabled] filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); cursor: not-allowed; } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .open > .dropdown-menu { display: block; } -/* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .open > a { outline: 0; } -/* line 137, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu-right { left: auto; right: 0; } -/* line 147, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu-left { left: 0; right: auto; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-header { display: block; padding: 3px 20px; @@ -6401,7 +5098,6 @@ fieldset[disabled] color: #E8EEF0; white-space: nowrap; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-backdrop { position: fixed; left: 0; @@ -6410,12 +5106,10 @@ fieldset[disabled] top: 0; z-index: 990; } -/* line 173, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .pull-right > .dropdown-menu { right: 0; left: auto; } -/* line 186, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropup .caret, #hrjob-contract .navbar-fixed-bottom .dropdown .caret { border-top: 0; @@ -6423,7 +5117,6 @@ fieldset[disabled] border-bottom: 4px solid \9; content: ""; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropup .dropdown-menu, #hrjob-contract .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; @@ -6431,31 +5124,26 @@ fieldset[disabled] margin-bottom: 2px; } @media (min-width: 768px) { - /* line 207, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .navbar-right .dropdown-menu { right: 0; left: auto; } - /* line 212, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .navbar-right .dropdown-menu-left { left: 0; right: auto; } } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group, #hrjob-contract .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn, #hrjob-contract .btn-group-vertical > .btn { position: relative; float: left; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:hover, #hrjob-contract .btn-group > .btn:focus, #hrjob-contract .btn-group > .btn:active, #hrjob-contract .btn-group > .btn.active, #hrjob-contract .btn-group-vertical > .btn:hover, #hrjob-contract .btn-group-vertical > .btn:focus, @@ -6463,115 +5151,92 @@ fieldset[disabled] #hrjob-contract .btn-group-vertical > .btn.active { z-index: 2; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group .btn + .btn, #hrjob-contract .btn-group .btn + .btn-group, #hrjob-contract .btn-group .btn-group + .btn, #hrjob-contract .btn-group .btn-group + .btn-group { margin-left: -1px; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-toolbar { margin-left: -5px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-toolbar:before, #hrjob-contract .btn-toolbar:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-toolbar:after { clear: both; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-toolbar .btn, #hrjob-contract .btn-toolbar .btn-group, #hrjob-contract .btn-toolbar .input-group { float: left; } -/* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-toolbar > .btn, #hrjob-contract .btn-toolbar > .btn-group, #hrjob-contract .btn-toolbar > .input-group { margin-left: 5px; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } -/* line 56, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:first-child { margin-left: 0; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-bottom-right-radius: 0; border-top-right-radius: 0; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:last-child:not(:first-child), #hrjob-contract .btn-group > .dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } -/* line 69, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group { float: left; } -/* line 72, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, #hrjob-contract .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-top-right-radius: 0; } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } -/* line 86, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group .dropdown-toggle:active, #hrjob-contract .btn-group.open .dropdown-toggle { outline: 0; } -/* line 105, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; } -/* line 109, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-lg + .dropdown-toggle, #hrjob-contract .btn-group-lg.btn-group > .btn + .dropdown-toggle { padding-left: 12px; padding-right: 12px; } -/* line 116, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } -/* line 120, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } -/* line 127, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn .caret { margin-left: 0; } -/* line 131, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-lg .caret, #hrjob-contract .btn-group-lg > .btn .caret { border-width: 5px 5px 0; border-bottom-width: 0; } -/* line 136, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .dropup .btn-lg .caret, #hrjob-contract .dropup .btn-group-lg > .btn .caret { border-width: 0 5px 5px; } -/* line 145, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn, #hrjob-contract .btn-group-vertical > .btn-group, #hrjob-contract .btn-group-vertical > .btn-group > .btn { @@ -6580,20 +5245,16 @@ fieldset[disabled] width: 100%; max-width: 100%; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-group-vertical > .btn-group:before, #hrjob-contract .btn-group-vertical > .btn-group:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-group-vertical > .btn-group:after { clear: both; } -/* line 157, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group > .btn { float: none; } -/* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn + .btn, #hrjob-contract .btn-group-vertical > .btn + .btn-group, #hrjob-contract .btn-group-vertical > .btn-group + .btn, @@ -6601,62 +5262,51 @@ fieldset[disabled] margin-top: -1px; margin-left: 0; } -/* line 172, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } -/* line 175, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn:first-child:not(:last-child) { border-top-right-radius: 2px; border-top-left-radius: 2px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -/* line 179, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn:last-child:not(:first-child) { border-top-right-radius: 0; border-top-left-radius: 0; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; } -/* line 184, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } -/* line 188, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, #hrjob-contract .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 201, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: separate; } -/* line 206, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified > .btn, #hrjob-contract .btn-group-justified > .btn-group { float: none; display: table-cell; width: 1%; } -/* line 212, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified > .btn-group .btn { width: 100%; } -/* line 216, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified > .btn-group .dropdown-menu { left: auto; } -/* line 237, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract [data-toggle="buttons"] > .btn input[type="radio"], #hrjob-contract [data-toggle="buttons"] > .btn input[type="checkbox"], #hrjob-contract [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], @@ -6665,19 +5315,16 @@ fieldset[disabled] clip: rect(0, 0, 0, 0); pointer-events: none; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group { position: relative; display: table; border-collapse: separate; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group[class*="col-"] { float: none; padding-left: 0; padding-right: 0; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control { position: relative; z-index: 2; @@ -6685,30 +5332,25 @@ fieldset[disabled] width: 100%; margin-bottom: 0; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control:focus { z-index: 3; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon, #hrjob-contract .input-group-btn, #hrjob-contract .input-group .form-control { display: table-cell; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon:not(:first-child):not(:last-child), #hrjob-contract .input-group-btn:not(:first-child):not(:last-child), #hrjob-contract .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } -/* line 68, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon, #hrjob-contract .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } -/* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon { padding: 6px 12px; font-size: 13px; @@ -6720,7 +5362,6 @@ fieldset[disabled] border: 1px solid #C2CFD8; border-radius: 2px; } -/* line 89, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon.input-sm, #hrjob-contract .input-group-sm > .input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > .input-group-addon.btn { @@ -6728,7 +5369,6 @@ fieldset[disabled] font-size: 12px; border-radius: 2px; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon.input-lg, #hrjob-contract .input-group-lg > .input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > .input-group-addon.btn { @@ -6736,12 +5376,10 @@ fieldset[disabled] font-size: 17px; border-radius: 4px; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon input[type="radio"], #hrjob-contract .input-group-addon input[type="checkbox"] { margin-top: 0; } -/* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control:first-child, #hrjob-contract .input-group-addon:first-child, #hrjob-contract .input-group-btn:first-child > .btn, @@ -6752,11 +5390,9 @@ fieldset[disabled] border-bottom-right-radius: 0; border-top-right-radius: 0; } -/* line 117, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon:first-child { border-right: 0; } -/* line 120, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control:last-child, #hrjob-contract .input-group-addon:last-child, #hrjob-contract .input-group-btn:last-child > .btn, @@ -6767,118 +5403,95 @@ fieldset[disabled] border-bottom-left-radius: 0; border-top-left-radius: 0; } -/* line 129, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon:last-child { border-left: 0; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn { position: relative; font-size: 0; white-space: nowrap; } -/* line 144, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn > .btn { position: relative; } -/* line 146, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn > .btn + .btn { margin-left: -1px; } -/* line 150, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn > .btn:hover, #hrjob-contract .input-group-btn > .btn:focus, #hrjob-contract .input-group-btn > .btn:active { z-index: 2; } -/* line 159, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn:first-child > .btn, #hrjob-contract .input-group-btn:first-child > .btn-group { margin-right: -1px; } -/* line 165, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn:last-child > .btn, #hrjob-contract .input-group-btn:last-child > .btn-group { z-index: 2; margin-left: -1px; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav { margin-bottom: 0; padding-left: 0; list-style: none; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .nav:before, #hrjob-contract .nav:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .nav:after { clear: both; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li { position: relative; display: block; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li > a { position: relative; display: block; padding: 10px 15px; } -/* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li > a:hover, #hrjob-contract .nav > li > a:focus { text-decoration: none; background-color: #F3F6F7; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li.disabled > a { color: #E8EEF0; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li.disabled > a:hover, #hrjob-contract .nav > li.disabled > a:focus { color: #E8EEF0; text-decoration: none; background-color: transparent; cursor: not-allowed; } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav .open > a, #hrjob-contract .nav .open > a:hover, #hrjob-contract .nav .open > a:focus { background-color: #F3F6F7; border-color: #0071BD; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav .nav-divider { height: 1px; margin: 8px 0; overflow: hidden; background-color: #e5e5e5; } -/* line 66, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li > a > img { max-width: none; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs { border-bottom: 1px solid #D3DEE2; } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li { float: left; margin-bottom: -1px; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li > a { margin-right: 2px; line-height: 1.42857143; border: 1px solid transparent; border-radius: 2px 2px 0 0; } -/* line 89, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li > a:hover { border-color: #F3F6F7 #F3F6F7 #D3DEE2; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li.active > a, #hrjob-contract .nav-tabs > li.active > a:hover, #hrjob-contract .nav-tabs > li.active > a:focus { color: #464354; background-color: #F3F6F7; @@ -6886,71 +5499,56 @@ fieldset[disabled] border-bottom-color: transparent; cursor: default; } -/* line 118, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li { float: left; } -/* line 122, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li > a { border-radius: 2px; } -/* line 125, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li + li { margin-left: 2px; } -/* line 131, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li.active > a, #hrjob-contract .nav-pills > li.active > a:hover, #hrjob-contract .nav-pills > li.active > a:focus { color: #fff; background-color: #0071BD; } -/* line 144, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-stacked > li { float: none; } -/* line 146, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-stacked > li + li { margin-top: 2px; margin-left: 0; } -/* line 160, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified, #hrjob-contract .nav-tabs.nav-justified { width: 100%; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li, #hrjob-contract .nav-tabs.nav-justified > li { float: none; } -/* line 165, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { text-align: center; margin-bottom: 5px; } -/* line 171, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > .dropdown .dropdown-menu { top: auto; left: auto; } @media (min-width: 768px) { - /* line 177, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li, #hrjob-contract .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } - /* line 180, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { margin-bottom: 0; } } -/* line 190, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified, #hrjob-contract .nav-tabs.nav-justified { border-bottom: 0; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { margin-right: 0; border-radius: 2px; } -/* line 199, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > .active > a, #hrjob-contract .nav-tabs.nav-justified > .active > a, #hrjob-contract .nav-tabs-justified > .active > a:hover, #hrjob-contract .nav-tabs.nav-justified > .active > a:hover, @@ -6959,12 +5557,10 @@ fieldset[disabled] border: 1px solid #ddd; } @media (min-width: 768px) { - /* line 206, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { border-bottom: 1px solid #ddd; border-radius: 2px 2px 0 0; } - /* line 210, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > .active > a, #hrjob-contract .nav-tabs.nav-justified > .active > a, #hrjob-contract .nav-tabs-justified > .active > a:hover, #hrjob-contract .nav-tabs.nav-justified > .active > a:hover, @@ -6973,58 +5569,47 @@ fieldset[disabled] border-bottom-color: #E8EEF0; } } -/* line 224, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .tab-content > .tab-pane { display: none; } -/* line 227, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .tab-content > .active { display: block; } -/* line 237, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs .dropdown-menu { margin-top: -1px; border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar { position: relative; min-height: 50px; margin-bottom: 18px; border: 1px solid transparent; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar:before, #hrjob-contract .navbar:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar:after { clear: both; } @media (min-width: 768px) { - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar { border-radius: 2px; } } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-header:before, #hrjob-contract .navbar-header:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-header:after { clear: both; } @media (min-width: 768px) { - /* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-header { float: left; } } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse { overflow-x: visible; padding-right: 15px; @@ -7033,56 +5618,46 @@ fieldset[disabled] box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-collapse:before, #hrjob-contract .navbar-collapse:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-collapse:after { clear: both; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse.in { overflow-y: auto; } @media (min-width: 768px) { - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse { width: auto; border-top: 0; box-shadow: none; } - /* line 68, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse.collapse { display: block !important; height: auto !important; padding-bottom: 0; overflow: visible !important; } - /* line 75, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse.in { overflow-y: visible; } - /* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ .navbar-fixed-top #hrjob-contract .navbar-collapse, .navbar-static-top #hrjob-contract .navbar-collapse, .navbar-fixed-bottom #hrjob-contract .navbar-collapse { padding-left: 0; padding-right: 0; } } -/* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top .navbar-collapse, #hrjob-contract .navbar-fixed-bottom .navbar-collapse { max-height: 340px; } @media (max-device-width: 480px) and (orientation: landscape) { - /* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top .navbar-collapse, #hrjob-contract .navbar-fixed-bottom .navbar-collapse { max-height: 200px; } } -/* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .container > .navbar-header, #hrjob-contract .container > .navbar-collapse, #hrjob-contract .container-fluid > .navbar-header, @@ -7091,7 +5666,6 @@ fieldset[disabled] margin-left: -15px; } @media (min-width: 768px) { - /* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .container > .navbar-header, #hrjob-contract .container > .navbar-collapse, #hrjob-contract .container-fluid > .navbar-header, @@ -7100,18 +5674,15 @@ fieldset[disabled] margin-left: 0; } } -/* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-static-top { z-index: 1000; border-width: 0 0 1px; } @media (min-width: 768px) { - /* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-static-top { border-radius: 0; } } -/* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top, #hrjob-contract .navbar-fixed-bottom { position: fixed; @@ -7120,24 +5691,20 @@ fieldset[disabled] z-index: 1030; } @media (min-width: 768px) { - /* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top, #hrjob-contract .navbar-fixed-bottom { border-radius: 0; } } -/* line 150, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top { top: 0; border-width: 0 0 1px; } -/* line 154, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-brand { float: left; padding: 16px 15px; @@ -7145,21 +5712,17 @@ fieldset[disabled] line-height: 18px; height: 50px; } -/* line 170, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-brand:hover, #hrjob-contract .navbar-brand:focus { text-decoration: none; } -/* line 175, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-brand > img { display: block; } @media (min-width: 768px) { - /* line 180, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ .navbar > .container #hrjob-contract .navbar-brand, .navbar > .container-fluid #hrjob-contract .navbar-brand { margin-left: -15px; } } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle { position: relative; float: right; @@ -7172,39 +5735,32 @@ fieldset[disabled] border: 1px solid transparent; border-radius: 2px; } -/* line 206, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle:focus { outline: 0; } -/* line 211, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } -/* line 217, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle .icon-bar + .icon-bar { margin-top: 4px; } @media (min-width: 768px) { - /* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle { display: none; } } -/* line 232, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav { margin: 8px -15px; } -/* line 235, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; line-height: 18px; } @media (max-width: 767px) { - /* line 243, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu { position: static; float: none; @@ -7214,37 +5770,30 @@ fieldset[disabled] border: 0; box-shadow: none; } - /* line 251, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu > li > a, #hrjob-contract .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } - /* line 255, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu > li > a { line-height: 18px; } - /* line 257, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu > li > a:hover, #hrjob-contract .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } } @media (min-width: 768px) { - /* line 232, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav { float: left; margin: 0; } - /* line 270, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li { float: left; } - /* line 272, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li > a { padding-top: 16px; padding-bottom: 16px; } } -/* line 286, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form { margin-left: -15px; margin-right: -15px; @@ -7257,43 +5806,35 @@ fieldset[disabled] margin-bottom: 9px; } @media (min-width: 768px) { - /* line 478, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } - /* line 485, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle; } - /* line 492, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .form-control-static { display: inline-block; } - /* line 496, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .input-group { display: inline-table; vertical-align: middle; } - /* line 500, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .input-group .input-group-addon, #hrjob-contract .navbar-form .input-group .input-group-btn, #hrjob-contract .navbar-form .input-group .form-control { width: auto; } - /* line 508, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .input-group > .form-control { width: 100%; } - /* line 512, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; } - /* line 519, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .radio, #hrjob-contract .navbar-form .checkbox { display: inline-block; @@ -7301,7 +5842,6 @@ fieldset[disabled] margin-bottom: 0; vertical-align: middle; } - /* line 526, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .radio label, #hrjob-contract .navbar-form .radio .checkbox-label, #hrjob-contract .navbar-form .radio .radio-label, #hrjob-contract .navbar-form .checkbox label, @@ -7309,29 +5849,24 @@ fieldset[disabled] #hrjob-contract .navbar-form .checkbox .radio-label { padding-left: 0; } - /* line 530, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .radio input[type="radio"], #hrjob-contract .navbar-form .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } - /* line 537, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .has-feedback .form-control-feedback { top: 0; } } @media (max-width: 767px) { - /* line 298, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form .form-group { margin-bottom: 5px; } - /* line 302, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form .form-group:last-child { margin-bottom: 0; } } @media (min-width: 768px) { - /* line 286, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form { width: auto; border: 0; @@ -7343,13 +5878,11 @@ fieldset[disabled] box-shadow: none; } } -/* line 327, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li > .dropdown-menu { margin-top: 0; border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 332, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { margin-bottom: 0; border-top-right-radius: 2px; @@ -7357,28 +5890,23 @@ fieldset[disabled] border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -/* line 343, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-btn { margin-top: 9px; margin-bottom: 9px; } -/* line 346, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-btn.btn-sm, #hrjob-contract .btn-group-sm > .navbar-btn.btn { margin-top: 10px; margin-bottom: 10px; } -/* line 349, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-btn.btn-xs, #hrjob-contract .btn-group-xs > .navbar-btn.btn { margin-top: 14px; margin-bottom: 14px; } -/* line 359, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-text { margin-top: 16px; margin-bottom: 16px; } @media (min-width: 768px) { - /* line 359, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-text { float: left; margin-left: 15px; @@ -7386,229 +5914,179 @@ fieldset[disabled] } } @media (min-width: 768px) { - /* line 379, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-left { float: left !important; } - /* line 382, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-right { float: right !important; margin-right: -15px; } - /* line 386, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-right ~ .navbar-right { margin-right: 0; } } -/* line 397, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7; } -/* line 401, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-brand { color: #777; } -/* line 403, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-brand:hover, #hrjob-contract .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } -/* line 410, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-text { color: #777; } -/* line 415, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > li > a { color: #777; } -/* line 418, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > li > a:hover, #hrjob-contract .navbar-default .navbar-nav > li > a:focus { color: #333; background-color: transparent; } -/* line 425, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > .active > a, #hrjob-contract .navbar-default .navbar-nav > .active > a:hover, #hrjob-contract .navbar-default .navbar-nav > .active > a:focus { color: #555; background-color: #e7e7e7; } -/* line 433, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > .disabled > a, #hrjob-contract .navbar-default .navbar-nav > .disabled > a:hover, #hrjob-contract .navbar-default .navbar-nav > .disabled > a:focus { color: #ccc; background-color: transparent; } -/* line 442, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-toggle { border-color: #ddd; } -/* line 444, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-toggle:hover, #hrjob-contract .navbar-default .navbar-toggle:focus { background-color: #ddd; } -/* line 448, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-toggle .icon-bar { background-color: #888; } -/* line 453, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-collapse, #hrjob-contract .navbar-default .navbar-form { border-color: #e7e7e7; } -/* line 462, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > .open > a, #hrjob-contract .navbar-default .navbar-nav > .open > a:hover, #hrjob-contract .navbar-default .navbar-nav > .open > a:focus { background-color: #e7e7e7; color: #555; } @media (max-width: 767px) { - /* line 473, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: #777; } - /* line 475, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: #333; background-color: transparent; } - /* line 482, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .active > a, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555; background-color: #e7e7e7; } - /* line 490, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #ccc; background-color: transparent; } } -/* line 506, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-link { color: #777; } -/* line 508, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-link:hover { color: #333; } -/* line 513, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .btn-link { color: #777; } -/* line 515, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .btn-link:hover, #hrjob-contract .navbar-default .btn-link:focus { color: #333; } -/* line 521, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .btn-link[disabled]:hover, #hrjob-contract .navbar-default .btn-link[disabled]:focus, fieldset[disabled] #hrjob-contract .navbar-default .btn-link:hover, fieldset[disabled] #hrjob-contract .navbar-default .btn-link:focus { color: #ccc; } -/* line 531, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse { background-color: #222; border-color: #090909; } -/* line 535, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-brand { color: white; } -/* line 537, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-brand:hover, #hrjob-contract .navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent; } -/* line 544, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-text { color: white; } -/* line 549, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > li > a { color: white; } -/* line 552, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > li > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > li > a:focus { color: #fff; background-color: transparent; } -/* line 559, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > .active > a, #hrjob-contract .navbar-inverse .navbar-nav > .active > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > .active > a:focus { color: #fff; background-color: #090909; } -/* line 567, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > .disabled > a, #hrjob-contract .navbar-inverse .navbar-nav > .disabled > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > .disabled > a:focus { color: #444; background-color: transparent; } -/* line 577, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-toggle { border-color: #333; } -/* line 579, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-toggle:hover, #hrjob-contract .navbar-inverse .navbar-toggle:focus { background-color: #333; } -/* line 583, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff; } -/* line 588, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-collapse, #hrjob-contract .navbar-inverse .navbar-form { border-color: #101010; } -/* line 596, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > .open > a, #hrjob-contract .navbar-inverse .navbar-nav > .open > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > .open > a:focus { background-color: #090909; color: #fff; } @media (max-width: 767px) { - /* line 607, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: #090909; } - /* line 610, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #090909; } - /* line 613, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: white; } - /* line 615, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #fff; background-color: transparent; } - /* line 622, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #fff; background-color: #090909; } - /* line 630, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #444; background-color: transparent; } } -/* line 641, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-link { color: white; } -/* line 643, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-link:hover { color: #fff; } -/* line 648, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .btn-link { color: white; } -/* line 650, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .btn-link:hover, #hrjob-contract .navbar-inverse .btn-link:focus { color: #fff; } -/* line 656, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .btn-link[disabled]:hover, #hrjob-contract .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] #hrjob-contract .navbar-inverse .btn-link:hover, fieldset[disabled] #hrjob-contract .navbar-inverse .btn-link:focus { color: #444; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb { padding: 8px 15px; margin-bottom: 18px; @@ -7616,32 +6094,26 @@ fieldset[disabled] background-color: #f5f5f5; border-radius: 2px; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb > li { display: inline-block; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb > li + li:before { content: "/ "; padding: 0 5px; color: #ccc; } -/* line 25, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb > .active { color: #E8EEF0; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination { display: inline-block; padding-left: 0; margin: 18px 0; border-radius: 2px; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li { display: inline; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li > a, #hrjob-contract .pagination > li > span { position: relative; @@ -7654,20 +6126,17 @@ fieldset[disabled] border: 1px solid #ddd; margin-left: -1px; } -/* line 25, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li:first-child > a, #hrjob-contract .pagination > li:first-child > span { margin-left: 0; border-bottom-left-radius: 2px; border-top-left-radius: 2px; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li:last-child > a, #hrjob-contract .pagination > li:last-child > span { border-bottom-right-radius: 2px; border-top-right-radius: 2px; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li > a:hover, #hrjob-contract .pagination > li > a:focus, #hrjob-contract .pagination > li > span:hover, #hrjob-contract .pagination > li > span:focus { @@ -7676,7 +6145,6 @@ fieldset[disabled] background-color: #F3F6F7; border-color: #ddd; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > .active > a, #hrjob-contract .pagination > .active > a:hover, #hrjob-contract .pagination > .active > a:focus, #hrjob-contract .pagination > .active > span, #hrjob-contract .pagination > .active > span:hover, @@ -7687,7 +6155,6 @@ fieldset[disabled] border-color: #0071BD; cursor: default; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > .disabled > span, #hrjob-contract .pagination > .disabled > span:hover, #hrjob-contract .pagination > .disabled > span:focus, @@ -7699,65 +6166,54 @@ fieldset[disabled] border-color: #ddd; cursor: not-allowed; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-lg > li > a, #hrjob-contract .pagination-lg > li > span { padding: 10px 16px; font-size: 17px; line-height: 1.3333333; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-lg > li:first-child > a, #hrjob-contract .pagination-lg > li:first-child > span { border-bottom-left-radius: 4px; border-top-left-radius: 4px; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-lg > li:last-child > a, #hrjob-contract .pagination-lg > li:last-child > span { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-sm > li > a, #hrjob-contract .pagination-sm > li > span { padding: 5px 10px; font-size: 12px; line-height: 1.5; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-sm > li:first-child > a, #hrjob-contract .pagination-sm > li:first-child > span { border-bottom-left-radius: 2px; border-top-left-radius: 2px; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-sm > li:last-child > a, #hrjob-contract .pagination-sm > li:last-child > span { border-bottom-right-radius: 2px; border-top-right-radius: 2px; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager { padding-left: 0; margin: 18px 0; list-style: none; text-align: center; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .pager:before, #hrjob-contract .pager:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .pager:after { clear: both; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager li { display: inline; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager li > a, #hrjob-contract .pager li > span { display: inline-block; @@ -7766,23 +6222,19 @@ fieldset[disabled] border: 1px solid #ddd; border-radius: 15px; } -/* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager li > a:hover, #hrjob-contract .pager li > a:focus { text-decoration: none; background-color: #F3F6F7; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager .next > a, #hrjob-contract .pager .next > span { float: right; } -/* line 38, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager .previous > a, #hrjob-contract .pager .previous > span { float: left; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager .disabled > a, #hrjob-contract .pager .disabled > a:hover, #hrjob-contract .pager .disabled > a:focus, @@ -7791,7 +6243,6 @@ fieldset[disabled] background-color: #fff; cursor: not-allowed; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label { display: inline; padding: .2em .6em .3em; @@ -7804,70 +6255,54 @@ fieldset[disabled] vertical-align: baseline; border-radius: .25em; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label:empty { display: none; } -/* line 25, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ .btn #hrjob-contract .label { position: relative; top: -1px; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract a.label:hover, #hrjob-contract a.label:focus { color: #fff; text-decoration: none; cursor: pointer; } -/* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-default { background-color: #E8EEF0; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-default[href]:hover, #hrjob-contract .label-default[href]:focus { background-color: #c9d7dc; } -/* line 48, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-primary { background-color: #0071BD; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-primary[href]:hover, #hrjob-contract .label-primary[href]:focus { background-color: #00538a; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-success { background-color: #44CB7E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-success[href]:hover, #hrjob-contract .label-success[href]:focus { background-color: #30ac65; } -/* line 56, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-info { background-color: #5bc0de; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-info[href]:hover, #hrjob-contract .label-info[href]:focus { background-color: #31b0d5; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-warning { background-color: #E6AB5E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-warning[href]:hover, #hrjob-contract .label-warning[href]:focus { background-color: #df9432; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-danger { background-color: #CF3458; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-danger[href]:hover, #hrjob-contract .label-danger[href]:focus { background-color: #a82846; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ #hrjob-contract .badge { display: inline-block; min-width: 10px; @@ -7882,44 +6317,35 @@ fieldset[disabled] background-color: #E8EEF0; border-radius: 10px; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ #hrjob-contract .badge:empty { display: none; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .btn #hrjob-contract .badge { position: relative; top: -1px; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .btn-xs #hrjob-contract .badge, #hrjob-contract .btn-group-xs > .btn #hrjob-contract .badge, .btn-group-xs > .btn #hrjob-contract .badge { top: 0; padding: 1px 5px; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .list-group-item.active > #hrjob-contract .badge, .nav-pills > .active > a > #hrjob-contract .badge { color: #0071BD; background-color: #fff; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .list-group-item > #hrjob-contract .badge { float: right; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .list-group-item > #hrjob-contract .badge + #hrjob-contract .badge { margin-right: 5px; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .nav-pills > li > a > #hrjob-contract .badge { margin-left: 3px; } -/* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ #hrjob-contract a.badge:hover, #hrjob-contract a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron { padding-top: 30px; padding-bottom: 30px; @@ -7927,49 +6353,40 @@ fieldset[disabled] color: inherit; background-color: #F3F6F7; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron h1, #hrjob-contract .jumbotron .h1 { color: inherit; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron p { margin-bottom: 15px; font-size: 20px; font-weight: 200; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron > hr { border-top-color: #d4dfe3; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ .container #hrjob-contract .jumbotron, .container-fluid #hrjob-contract .jumbotron { border-radius: 4px; padding-left: 15px; padding-right: 15px; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron .container { max-width: 100%; } @media screen and (min-width: 768px) { - /* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron { padding-top: 48px; padding-bottom: 48px; } - /* line 43, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ .container #hrjob-contract .jumbotron, .container-fluid #hrjob-contract .jumbotron { padding-left: 60px; padding-right: 60px; } - /* line 49, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron h1, #hrjob-contract .jumbotron .h1 { font-size: 59px; } } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract .thumbnail { display: block; padding: 4px; @@ -7982,7 +6399,6 @@ fieldset[disabled] -o-transition: border 0.2s ease-in-out; transition: border 0.2s ease-in-out; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract .thumbnail > img, #hrjob-contract .thumbnail a > img { display: block; @@ -7991,48 +6407,39 @@ fieldset[disabled] margin-left: auto; margin-right: auto; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract .thumbnail .caption { padding: 9px; color: #4D4D69; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract a.thumbnail:hover, #hrjob-contract a.thumbnail:focus, #hrjob-contract a.thumbnail.active { border-color: #0071BD; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert { padding: 15px; margin-bottom: 18px; border: 1px solid transparent; border-radius: 2px; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert h4 { margin-top: 0; color: inherit; } -/* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert .alert-link { font-weight: 600; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert > p, #hrjob-contract .alert > ul { margin-bottom: 0; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert > p + p { margin-top: 5px; } -/* line 42, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-dismissable, #hrjob-contract .alert-dismissible { padding-right: 35px; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-dismissable .close, #hrjob-contract .alert-dismissible .close { position: relative; @@ -8040,59 +6447,47 @@ fieldset[disabled] right: -21px; color: inherit; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #4d994d; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-success hr { border-top-color: #c9e2b3; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-success .alert-link { color: #3c773c; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-info hr { border-top-color: #a6e1ec; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-info .alert-link { color: #245269; } -/* line 67, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-warning { background-color: #fcf8e3; border-color: #faebcc; color: #bf5900; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-warning hr { border-top-color: #f7e1b5; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-warning .alert-link { color: #8c4100; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-danger { background-color: #f2dede; border-color: #ebccd1; color: #CF3458; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-danger hr { border-top-color: #e4b9c0; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-danger .alert-link { color: #a82846; } @@ -8112,7 +6507,6 @@ fieldset[disabled] background-position: 0 0; } } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress { overflow: hidden; height: 18px; @@ -8122,7 +6516,6 @@ fieldset[disabled] -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar { float: left; width: 0%; @@ -8138,7 +6531,6 @@ fieldset[disabled] -o-transition: width 0.6s ease; transition: width 0.6s ease; } -/* line 54, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-striped .progress-bar, #hrjob-contract .progress-bar-striped { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); @@ -8146,120 +6538,96 @@ fieldset[disabled] background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 40px 40px; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress.active .progress-bar, #hrjob-contract .progress-bar.active { -webkit-animation: progress-bar-stripes 2s linear infinite; -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } -/* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-success { background-color: #44CB7E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-success { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-info { background-color: #5bc0de; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-info { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-warning { background-color: #E6AB5E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-warning { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 85, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-danger { background-color: #CF3458; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-danger { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 1, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media { margin-top: 15px; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media:first-child { margin-top: 0; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media, #hrjob-contract .media-body { zoom: 1; overflow: hidden; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-body { width: 10000px; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-object { display: block; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-object.img-thumbnail { max-width: none; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-right, #hrjob-contract .media > .pull-right { padding-left: 10px; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-left, #hrjob-contract .media > .pull-left { padding-right: 10px; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-left, #hrjob-contract .media-right, #hrjob-contract .media-body { display: table-cell; vertical-align: top; } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-middle { vertical-align: middle; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-bottom { vertical-align: bottom; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-heading { margin-top: 0; margin-bottom: 5px; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-list { padding-left: 0; list-style: none; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group { margin-bottom: 20px; padding-left: 0; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item { position: relative; display: block; @@ -8268,28 +6636,23 @@ fieldset[disabled] background-color: #fff; border: 1px solid #ddd; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item:first-child { border-top-right-radius: 2px; border-top-left-radius: 2px; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract a.list-group-item, #hrjob-contract button.list-group-item { color: #555; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract a.list-group-item .list-group-item-heading, #hrjob-contract button.list-group-item .list-group-item-heading { color: #333; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract a.list-group-item:hover, #hrjob-contract a.list-group-item:focus, #hrjob-contract button.list-group-item:hover, #hrjob-contract button.list-group-item:focus { @@ -8297,33 +6660,27 @@ fieldset[disabled] color: #555; background-color: #f5f5f5; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract button.list-group-item { width: 100%; text-align: left; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.disabled, #hrjob-contract .list-group-item.disabled:hover, #hrjob-contract .list-group-item.disabled:focus { background-color: #F3F6F7; color: #E8EEF0; cursor: not-allowed; } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.disabled .list-group-item-heading, #hrjob-contract .list-group-item.disabled:hover .list-group-item-heading, #hrjob-contract .list-group-item.disabled:focus .list-group-item-heading { color: inherit; } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.disabled .list-group-item-text, #hrjob-contract .list-group-item.disabled:hover .list-group-item-text, #hrjob-contract .list-group-item.disabled:focus .list-group-item-text { color: #E8EEF0; } -/* line 87, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.active, #hrjob-contract .list-group-item.active:hover, #hrjob-contract .list-group-item.active:focus { z-index: 2; color: #fff; background-color: #0071BD; border-color: #0071BD; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.active .list-group-item-heading, #hrjob-contract .list-group-item.active .list-group-item-heading > small, #hrjob-contract .list-group-item.active .list-group-item-heading > .small, #hrjob-contract .list-group-item.active:hover .list-group-item-heading, @@ -8333,33 +6690,27 @@ fieldset[disabled] #hrjob-contract .list-group-item.active:focus .list-group-item-heading > .small { color: inherit; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.active .list-group-item-text, #hrjob-contract .list-group-item.active:hover .list-group-item-text, #hrjob-contract .list-group-item.active:focus .list-group-item-text { color: #8ad0ff; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-success { color: #4d994d; background-color: #dff0d8; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success, #hrjob-contract button.list-group-item-success { color: #4d994d; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success .list-group-item-heading, #hrjob-contract button.list-group-item-success .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success:hover, #hrjob-contract a.list-group-item-success:focus, #hrjob-contract button.list-group-item-success:hover, #hrjob-contract button.list-group-item-success:focus { color: #4d994d; background-color: #d0e9c6; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success.active, #hrjob-contract a.list-group-item-success.active:hover, #hrjob-contract a.list-group-item-success.active:focus, #hrjob-contract button.list-group-item-success.active, #hrjob-contract button.list-group-item-success.active:hover, @@ -8368,29 +6719,24 @@ fieldset[disabled] background-color: #4d994d; border-color: #4d994d; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-info { color: #31708f; background-color: #d9edf7; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info, #hrjob-contract button.list-group-item-info { color: #31708f; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info .list-group-item-heading, #hrjob-contract button.list-group-item-info .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info:hover, #hrjob-contract a.list-group-item-info:focus, #hrjob-contract button.list-group-item-info:hover, #hrjob-contract button.list-group-item-info:focus { color: #31708f; background-color: #c4e3f3; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info.active, #hrjob-contract a.list-group-item-info.active:hover, #hrjob-contract a.list-group-item-info.active:focus, #hrjob-contract button.list-group-item-info.active, #hrjob-contract button.list-group-item-info.active:hover, @@ -8399,29 +6745,24 @@ fieldset[disabled] background-color: #31708f; border-color: #31708f; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-warning { color: #bf5900; background-color: #fcf8e3; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning, #hrjob-contract button.list-group-item-warning { color: #bf5900; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning .list-group-item-heading, #hrjob-contract button.list-group-item-warning .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning:hover, #hrjob-contract a.list-group-item-warning:focus, #hrjob-contract button.list-group-item-warning:hover, #hrjob-contract button.list-group-item-warning:focus { color: #bf5900; background-color: #faf2cc; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning.active, #hrjob-contract a.list-group-item-warning.active:hover, #hrjob-contract a.list-group-item-warning.active:focus, #hrjob-contract button.list-group-item-warning.active, #hrjob-contract button.list-group-item-warning.active:hover, @@ -8430,29 +6771,24 @@ fieldset[disabled] background-color: #bf5900; border-color: #bf5900; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-danger { color: #CF3458; background-color: #f2dede; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger, #hrjob-contract button.list-group-item-danger { color: #CF3458; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger .list-group-item-heading, #hrjob-contract button.list-group-item-danger .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger:hover, #hrjob-contract a.list-group-item-danger:focus, #hrjob-contract button.list-group-item-danger:hover, #hrjob-contract button.list-group-item-danger:focus { color: #CF3458; background-color: #ebcccc; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger.active, #hrjob-contract a.list-group-item-danger.active:hover, #hrjob-contract a.list-group-item-danger.active:focus, #hrjob-contract button.list-group-item-danger.active, #hrjob-contract button.list-group-item-danger.active:hover, @@ -8461,17 +6797,14 @@ fieldset[disabled] background-color: #CF3458; border-color: #CF3458; } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } -/* line 127, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item-text { margin-bottom: 0; line-height: 1.3; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel { margin-bottom: 18px; background-color: #FFFFFF; @@ -8480,38 +6813,31 @@ fieldset[disabled] -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-body { padding: 20px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .panel-body:before, #hrjob-contract .panel-body:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .panel-body:after { clear: both; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-heading { padding: 15px 19px 14px; border-bottom: 1px solid transparent; border-top-right-radius: 1px; border-top-left-radius: 1px; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-heading > .dropdown .dropdown-toggle { color: inherit; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-title { margin-top: 0; margin-bottom: 0; font-size: 15px; color: inherit; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-title > a, #hrjob-contract .panel-title > small, #hrjob-contract .panel-title > .small, @@ -8519,7 +6845,6 @@ fieldset[disabled] #hrjob-contract .panel-title > .small > a { color: inherit; } -/* line 49, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-footer { padding: 15px 19px 14px; background-color: #FFFFFF; @@ -8527,64 +6852,53 @@ fieldset[disabled] border-bottom-right-radius: 1px; border-bottom-left-radius: 1px; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group, #hrjob-contract .panel > .panel-collapse > .list-group { margin-bottom: 0; } -/* line 67, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group .list-group-item, #hrjob-contract .panel > .panel-collapse > .list-group .list-group-item { border-width: 1px 0; border-radius: 0; } -/* line 74, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group:first-child .list-group-item:first-child, #hrjob-contract .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { border-top: 0; border-top-right-radius: 1px; border-top-left-radius: 1px; } -/* line 82, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group:last-child .list-group-item:last-child, #hrjob-contract .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 1px; border-bottom-left-radius: 1px; } -/* line 89, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-heading + .list-group .list-group-item:first-child { border-top-width: 0; } -/* line 100, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .list-group + .panel-footer { border-top-width: 0; } -/* line 110, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table, #hrjob-contract .panel > .table-responsive > .table, #hrjob-contract .panel > .panel-collapse > .table { margin-bottom: 0; } -/* line 115, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table caption, #hrjob-contract .panel > .table-responsive > .table caption, #hrjob-contract .panel > .panel-collapse > .table caption { padding-left: 20px; padding-right: 20px; } -/* line 121, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child, #hrjob-contract .panel > .table-responsive:first-child > .table:first-child { border-top-right-radius: 1px; border-top-left-radius: 1px; } -/* line 127, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child, #hrjob-contract .panel > .table:first-child > tbody:first-child > tr:first-child, #hrjob-contract .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, @@ -8592,7 +6906,6 @@ fieldset[disabled] border-top-left-radius: 1px; border-top-right-radius: 1px; } -/* line 131, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, #hrjob-contract .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, @@ -8603,7 +6916,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { border-top-left-radius: 1px; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, #hrjob-contract .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, @@ -8614,13 +6926,11 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { border-top-right-radius: 1px; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child, #hrjob-contract .panel > .table-responsive:last-child > .table:last-child { border-bottom-right-radius: 1px; border-bottom-left-radius: 1px; } -/* line 149, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child, #hrjob-contract .panel > .table:last-child > tfoot:last-child > tr:last-child, #hrjob-contract .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, @@ -8628,7 +6938,6 @@ fieldset[disabled] border-bottom-left-radius: 1px; border-bottom-right-radius: 1px; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, #hrjob-contract .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, @@ -8639,7 +6948,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { border-bottom-left-radius: 1px; } -/* line 157, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, #hrjob-contract .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, @@ -8650,24 +6958,20 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { border-bottom-right-radius: 1px; } -/* line 164, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .panel-body + .table, #hrjob-contract .panel > .panel-body + .table-responsive, #hrjob-contract .panel > .table + .panel-body, #hrjob-contract .panel > .table-responsive + .panel-body { border-top: 1px solid #E8EEF0; } -/* line 170, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table > tbody:first-child > tr:first-child th, #hrjob-contract .panel > .table > tbody:first-child > tr:first-child td { border-top: 0; } -/* line 174, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered, #hrjob-contract .panel > .table-responsive > .table-bordered { border: 0; } -/* line 181, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > thead > tr > th:first-child, #hrjob-contract .panel > .table-bordered > thead > tr > td:first-child, #hrjob-contract .panel > .table-bordered > tbody > tr > th:first-child, @@ -8682,7 +6986,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } -/* line 185, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > thead > tr > th:last-child, #hrjob-contract .panel > .table-bordered > thead > tr > td:last-child, #hrjob-contract .panel > .table-bordered > tbody > tr > th:last-child, @@ -8697,7 +7000,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } -/* line 194, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > thead > tr:first-child > td, #hrjob-contract .panel > .table-bordered > thead > tr:first-child > th, #hrjob-contract .panel > .table-bordered > tbody > tr:first-child > td, @@ -8708,7 +7010,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { border-bottom: 0; } -/* line 203, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > tbody > tr:last-child > td, #hrjob-contract .panel > .table-bordered > tbody > tr:last-child > th, #hrjob-contract .panel > .table-bordered > tfoot > tr:last-child > td, @@ -8719,180 +7020,141 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { border-bottom: 0; } -/* line 210, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-responsive { border: 0; margin-bottom: 0; } -/* line 222, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group { margin-bottom: 18px; } -/* line 226, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel { margin-bottom: 0; border-radius: 2px; } -/* line 230, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel + .panel { margin-top: 5px; } -/* line 235, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-heading { border-bottom: 0; } -/* line 238, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-heading + .panel-collapse > .panel-body, #hrjob-contract .panel-group .panel-heading + .panel-collapse > .list-group { border-top: 1px solid #ddd; } -/* line 244, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-footer { border-top: 0; } -/* line 246, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-footer + .panel-collapse .panel-body { border-bottom: 1px solid #ddd; } -/* line 254, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-default { border-color: #D3DEE2; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-heading { color: #4D4D69; background-color: #F3F6F7; border-color: #D3DEE2; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-heading + .panel-collapse > .panel-body { border-top-color: #D3DEE2; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-heading .badge { color: #F3F6F7; background-color: #4D4D69; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #D3DEE2; } -/* line 257, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-primary { border-color: #0071BD; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-heading { color: #fff; background-color: #0071BD; border-color: #0071BD; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-heading + .panel-collapse > .panel-body { border-top-color: #0071BD; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-heading .badge { color: #0071BD; background-color: #fff; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #0071BD; } -/* line 260, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-success { border-color: #d6e9c6; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-heading { color: #4d994d; background-color: #dff0d8; border-color: #d6e9c6; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-heading + .panel-collapse > .panel-body { border-top-color: #d6e9c6; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-heading .badge { color: #dff0d8; background-color: #4d994d; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #d6e9c6; } -/* line 263, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-info { border-color: #bce8f1; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-heading + .panel-collapse > .panel-body { border-top-color: #bce8f1; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-heading .badge { color: #d9edf7; background-color: #31708f; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #bce8f1; } -/* line 266, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-warning { border-color: #faebcc; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-heading { color: #bf5900; background-color: #fcf8e3; border-color: #faebcc; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-heading + .panel-collapse > .panel-body { border-top-color: #faebcc; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-heading .badge { color: #fcf8e3; background-color: #bf5900; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #faebcc; } -/* line 269, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-danger { border-color: #ebccd1; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-heading { color: #CF3458; background-color: #f2dede; border-color: #ebccd1; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-heading + .panel-collapse > .panel-body { border-top-color: #ebccd1; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-heading .badge { color: #f2dede; background-color: #CF3458; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #ebccd1; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive { position: relative; display: block; @@ -8900,7 +7162,6 @@ fieldset[disabled] padding: 0; overflow: hidden; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive .embed-responsive-item, #hrjob-contract .embed-responsive iframe, #hrjob-contract .embed-responsive embed, @@ -8914,15 +7175,12 @@ fieldset[disabled] width: 100%; border: 0; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive-16by9 { padding-bottom: 56.25%; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive-4by3 { padding-bottom: 75%; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well { min-height: 20px; padding: 19px; @@ -8933,22 +7191,18 @@ fieldset[disabled] -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well-lg { padding: 24px; border-radius: 4px; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well-sm { padding: 9px; border-radius: 2px; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_close.scss */ #hrjob-contract .close { float: right; font-size: 19.5px; @@ -8959,7 +7213,6 @@ fieldset[disabled] opacity: 0.2; filter: alpha(opacity=20); } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_close.scss */ #hrjob-contract .close:hover, #hrjob-contract .close:focus { color: #000; text-decoration: none; @@ -8967,7 +7220,6 @@ fieldset[disabled] opacity: 0.5; filter: alpha(opacity=50); } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_close.scss */ #hrjob-contract button.close { padding: 0; cursor: pointer; @@ -8975,11 +7227,9 @@ fieldset[disabled] border: 0; -webkit-appearance: none; } -/* line 15, ../scss/civihr/bootstrap/_modals-custom.scss */ .modal-open { overflow: hidden; } -/* line 21, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal { display: none; overflow: hidden; @@ -8992,7 +7242,6 @@ fieldset[disabled] -webkit-overflow-scrolling: touch; outline: 0; } -/* line 37, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal.fade .modal-dialog { -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); @@ -9003,25 +7252,21 @@ fieldset[disabled] -o-transition: -o-transform 0.3s ease-out; transition: transform 0.3s ease-out; } -/* line 41, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); -o-transform: translate(0, 0); transform: translate(0, 0); } -/* line 43, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-open .modal { overflow-x: hidden; overflow-y: auto; } -/* line 49, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-dialog { position: relative; width: auto; margin: 10px; } -/* line 56, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-content { position: relative; background-color: #fff; @@ -9033,7 +7278,6 @@ fieldset[disabled] background-clip: padding-box; outline: 0; } -/* line 69, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-backdrop { position: fixed; top: 0; @@ -9042,62 +7286,50 @@ fieldset[disabled] left: 0; background-color: #000; } -/* line 77, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-backdrop.fade { opacity: 0; filter: alpha(opacity=0); } -/* line 78, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-backdrop.in { opacity: 0.5; filter: alpha(opacity=50); } -/* line 83, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-header { padding: 15px; border-bottom: 1px solid #e5e5e5; min-height: 16.42857143px; } -/* line 90, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-title { margin: 0; line-height: 1.42857143; } -/* line 97, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-body { position: relative; padding: 15px; } -/* line 103, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer { background: #F3F6F7; padding: 15px; text-align: right; border-top: 1px solid #e5e5e5; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .modal-footer:before, #hrjob-contract .modal-footer:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .modal-footer:after { clear: both; } -/* line 111, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } -/* line 116, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer .btn-group .btn + .btn { margin-left: -1px; } -/* line 120, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer .btn-block + .btn-block { margin-left: 0; } -/* line 126, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-scrollbar-measure { position: absolute; top: -9999px; @@ -9106,28 +7338,23 @@ fieldset[disabled] overflow: scroll; } @media (min-width: 768px) { - /* line 137, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-dialog { width: 600px; margin: 30px auto; } - /* line 141, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-content { -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } - /* line 146, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-sm { width: 300px; } } @media (min-width: 992px) { - /* line 150, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-lg { width: 900px; } } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip { position: absolute; z-index: 1070; @@ -9151,32 +7378,26 @@ fieldset[disabled] opacity: 0; filter: alpha(opacity=0); } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.in { opacity: 0.9; filter: alpha(opacity=90); } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top { margin-top: -3px; padding: 5px 0; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.right { margin-left: 3px; padding: 0 5px; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom { margin-top: 3px; padding: 5px 0; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.left { margin-left: -3px; padding: 0 5px; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip-inner { max-width: 200px; padding: 3px 8px; @@ -9185,7 +7406,6 @@ fieldset[disabled] background-color: #000; border-radius: 2px; } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip-arrow { position: absolute; width: 0; @@ -9193,7 +7413,6 @@ fieldset[disabled] border-color: transparent; border-style: solid; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; @@ -9201,7 +7420,6 @@ fieldset[disabled] border-width: 5px 5px 0; border-top-color: #000; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top-left .tooltip-arrow { bottom: 0; right: 5px; @@ -9209,7 +7427,6 @@ fieldset[disabled] border-width: 5px 5px 0; border-top-color: #000; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top-right .tooltip-arrow { bottom: 0; left: 5px; @@ -9217,7 +7434,6 @@ fieldset[disabled] border-width: 5px 5px 0; border-top-color: #000; } -/* line 66, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.right .tooltip-arrow { top: 50%; left: 0; @@ -9225,7 +7441,6 @@ fieldset[disabled] border-width: 5px 5px 5px 0; border-right-color: #000; } -/* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.left .tooltip-arrow { top: 50%; right: 0; @@ -9233,7 +7448,6 @@ fieldset[disabled] border-width: 5px 0 5px 5px; border-left-color: #000; } -/* line 80, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; @@ -9241,7 +7455,6 @@ fieldset[disabled] border-width: 0 5px 5px; border-bottom-color: #000; } -/* line 87, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom-left .tooltip-arrow { top: 0; right: 5px; @@ -9249,7 +7462,6 @@ fieldset[disabled] border-width: 0 5px 5px; border-bottom-color: #000; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom-right .tooltip-arrow { top: 0; left: 5px; @@ -9257,7 +7469,6 @@ fieldset[disabled] border-width: 0 5px 5px; border-bottom-color: #000; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover { position: absolute; top: 0; @@ -9290,23 +7501,18 @@ fieldset[disabled] -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.top { margin-top: -10px; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.right { margin-left: 10px; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.bottom { margin-top: 10px; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.left { margin-left: -10px; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover-title { margin: 0; padding: 8px 14px; @@ -9315,11 +7521,9 @@ fieldset[disabled] border-bottom: 1px solid #ebebeb; border-radius: 3px 3px 0 0; } -/* line 42, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover-content { padding: 9px 14px; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover > .arrow, #hrjob-contract .popover > .arrow:after { position: absolute; display: block; @@ -9328,16 +7532,13 @@ fieldset[disabled] border-color: transparent; border-style: solid; } -/* line 61, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover > .arrow { border-width: 11px; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover > .arrow:after { border-width: 10px; content: ""; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.top > .arrow { left: 50%; margin-left: -11px; @@ -9346,7 +7547,6 @@ fieldset[disabled] border-top-color: rgba(0, 0, 0, 0.25); bottom: -11px; } -/* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.top > .arrow:after { content: " "; bottom: 1px; @@ -9354,7 +7554,6 @@ fieldset[disabled] border-bottom-width: 0; border-top-color: #fff; } -/* line 85, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.right > .arrow { top: 50%; left: -11px; @@ -9363,7 +7562,6 @@ fieldset[disabled] border-right-color: #999999; border-right-color: rgba(0, 0, 0, 0.25); } -/* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.right > .arrow:after { content: " "; left: 1px; @@ -9371,7 +7569,6 @@ fieldset[disabled] border-left-width: 0; border-right-color: #fff; } -/* line 100, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.bottom > .arrow { left: 50%; margin-left: -11px; @@ -9380,7 +7577,6 @@ fieldset[disabled] border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } -/* line 107, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.bottom > .arrow:after { content: " "; top: 1px; @@ -9388,7 +7584,6 @@ fieldset[disabled] border-top-width: 0; border-bottom-color: #fff; } -/* line 116, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.left > .arrow { top: 50%; right: -11px; @@ -9397,7 +7592,6 @@ fieldset[disabled] border-left-color: #999999; border-left-color: rgba(0, 0, 0, 0.25); } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.left > .arrow:after { content: " "; right: 1px; @@ -9405,17 +7599,14 @@ fieldset[disabled] border-left-color: #fff; bottom: -10px; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel { position: relative; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner { position: relative; overflow: hidden; width: 100%; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item { display: none; position: relative; @@ -9423,7 +7614,6 @@ fieldset[disabled] -o-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item > img, #hrjob-contract .carousel-inner > .item > a > img { display: block; @@ -9432,7 +7622,6 @@ fieldset[disabled] line-height: 1; } @media all and (transform-3d), (-webkit-transform-3d) { - /* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item { -webkit-transition: -webkit-transform 0.6s ease-in-out; -moz-transition: -moz-transform 0.6s ease-in-out; @@ -9445,64 +7634,52 @@ fieldset[disabled] -moz-perspective: 1000px; perspective: 1000px; } - /* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item.next, #hrjob-contract .carousel-inner > .item.active.right { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); left: 0; } - /* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item.prev, #hrjob-contract .carousel-inner > .item.active.left { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); left: 0; } - /* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item.next.left, #hrjob-contract .carousel-inner > .item.prev.right, #hrjob-contract .carousel-inner > .item.active { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); left: 0; } } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active, #hrjob-contract .carousel-inner > .next, #hrjob-contract .carousel-inner > .prev { display: block; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active { left: 0; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .next, #hrjob-contract .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .next { left: 100%; } -/* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .prev { left: -100%; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .next.left, #hrjob-contract .carousel-inner > .prev.right { left: 0; } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active.left { left: -100%; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active.right { left: 100%; } -/* line 93, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control { position: absolute; top: 0; @@ -9517,7 +7694,6 @@ fieldset[disabled] text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); background-color: transparent; } -/* line 109, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control.left { background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); @@ -9525,7 +7701,6 @@ fieldset[disabled] background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } -/* line 112, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control.right { left: auto; right: 0; @@ -9535,7 +7710,6 @@ fieldset[disabled] background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } -/* line 119, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control:hover, #hrjob-contract .carousel-control:focus { outline: 0; color: #fff; @@ -9543,7 +7717,6 @@ fieldset[disabled] opacity: 0.9; filter: alpha(opacity=90); } -/* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev, #hrjob-contract .carousel-control .icon-next, #hrjob-contract .carousel-control .glyphicon-chevron-left, @@ -9554,19 +7727,16 @@ fieldset[disabled] z-index: 5; display: inline-block; } -/* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev, #hrjob-contract .carousel-control .glyphicon-chevron-left { left: 50%; margin-left: -10px; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-next, #hrjob-contract .carousel-control .glyphicon-chevron-right { right: 50%; margin-right: -10px; } -/* line 148, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev, #hrjob-contract .carousel-control .icon-next { width: 20px; @@ -9574,15 +7744,12 @@ fieldset[disabled] line-height: 1; font-family: serif; } -/* line 158, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev:before { content: '\2039'; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-next:before { content: '\203a'; } -/* line 174, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators { position: absolute; bottom: 10px; @@ -9594,7 +7761,6 @@ fieldset[disabled] list-style: none; text-align: center; } -/* line 185, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators li { display: inline-block; width: 10px; @@ -9607,14 +7773,12 @@ fieldset[disabled] background-color: #000 \9; background-color: transparent; } -/* line 207, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators .active { margin: 0; width: 12px; height: 12px; background-color: #fff; } -/* line 218, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-caption { position: absolute; left: 15%; @@ -9627,12 +7791,10 @@ fieldset[disabled] text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } -/* line 229, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-caption .btn { text-shadow: none; } @media screen and (min-width: 768px) { - /* line 240, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .glyphicon-chevron-left, #hrjob-contract .carousel-control .glyphicon-chevron-right, #hrjob-contract .carousel-control .icon-prev, @@ -9642,63 +7804,50 @@ fieldset[disabled] margin-top: -10px; font-size: 30px; } - /* line 249, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .glyphicon-chevron-left, #hrjob-contract .carousel-control .icon-prev { margin-left: -10px; } - /* line 253, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .glyphicon-chevron-right, #hrjob-contract .carousel-control .icon-next { margin-right: -10px; } - /* line 260, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-caption { left: 20%; right: 20%; padding-bottom: 30px; } - /* line 267, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators { bottom: 20px; } } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .clearfix:before, #hrjob-contract .clearfix:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .clearfix:after { clear: both; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .center-block { display: block; margin-left: auto; margin-right: auto; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .pull-right { float: right !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .pull-left { float: left !important; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .hide { display: none !important; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .show { display: block !important; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .invisible { visibility: hidden; } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .text-hide { font: 0/0 a; color: transparent; @@ -9706,34 +7855,27 @@ fieldset[disabled] background-color: transparent; border: 0; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .hidden { display: none !important; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .affix { position: fixed; } @-ms-viewport { width: device-width; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-xs { display: none !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-sm { display: none !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-md { display: none !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-lg { display: none !important; } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-block, #hrjob-contract .visible-xs-inline, #hrjob-contract .visible-xs-inline-block, @@ -9749,232 +7891,188 @@ fieldset[disabled] display: none !important; } @media (max-width: 767px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-xs { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-xs { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-xs { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-xs, #hrjob-contract td.visible-xs { display: table-cell !important; } } @media (max-width: 767px) { - /* line 54, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-block { display: block !important; } } @media (max-width: 767px) { - /* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-inline { display: inline !important; } } @media (max-width: 767px) { - /* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-inline-block { display: inline-block !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-sm { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-sm { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-sm { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-sm, #hrjob-contract td.visible-sm { display: table-cell !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-sm-block { display: block !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-sm-inline { display: inline !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-sm-inline-block { display: inline-block !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-md { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-md { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-md { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-md, #hrjob-contract td.visible-md { display: table-cell !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-md-block { display: block !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 97, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-md-inline { display: inline !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 102, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-md-inline-block { display: inline-block !important; } } @media (min-width: 1200px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-lg { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-lg { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-lg { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-lg, #hrjob-contract td.visible-lg { display: table-cell !important; } } @media (min-width: 1200px) { - /* line 111, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-lg-block { display: block !important; } } @media (min-width: 1200px) { - /* line 116, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-lg-inline { display: inline !important; } } @media (min-width: 1200px) { - /* line 121, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-lg-inline-block { display: inline-block !important; } } @media (max-width: 767px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-xs { display: none !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-sm { display: none !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-md { display: none !important; } } @media (min-width: 1200px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-lg { display: none !important; } } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-print { display: none !important; } @media print { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-print { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-print { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-print { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-print, #hrjob-contract td.visible-print { display: table-cell !important; } } -/* line 155, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-block { display: none !important; } @media print { - /* line 155, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-block { display: block !important; } } -/* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline { display: none !important; } @media print { - /* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline { display: inline !important; } } -/* line 169, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline-block { display: none !important; } @media print { - /* line 169, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline-block { display: inline-block !important; } } @media print { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-print { display: none !important; } @@ -10021,7 +8119,6 @@ fieldset[disabled] font-weight: 700; font-style: italic; } -/* line 1, ../scss/civihr/modules/_angular.scss */ #hrjob-contract [ng\:cloak], #hrjob-contract [ng-cloak], #hrjob-contract [data-ng-cloak], @@ -10030,24 +8127,19 @@ fieldset[disabled] #hrjob-contract .x-ng-cloak { display: none !important; } -/* line 1, ../scss/civihr/modules/_utils.scss */ #hrjob-contract .text-normal { font-weight: normal; } -/* line 5, ../scss/civihr/modules/_utils.scss */ #hrjob-contract .cursor-pointer { cursor: pointer; } -/* line 9, ../scss/civihr/modules/_utils.scss */ #hrjob-contract .shadow-global { -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); } -/* line 10, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-highlight { font-weight: 600; } -/* line 14, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-offscreen { clip: rect(0 0 0 0) !important; width: 1px !important; @@ -10061,44 +8153,34 @@ fieldset[disabled] left: 0px !important; top: 0px !important; } -/* line 31, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ng-dirty.ng-invalid > a.select2-choice { border-color: #D44950; } -/* line 35, ../scss/civihr/modules/_select.scss */ #hrjob-contract .select2-result-single { padding-left: 0; } -/* line 39, ../scss/civihr/modules/_select.scss */ #hrjob-contract .select2-locked > .select2-search-choice-close { display: none; } -/* line 43, ../scss/civihr/modules/_select.scss */ #hrjob-contract .select-locked > .ui-select-match-close { display: none; } -/* line 47, ../scss/civihr/modules/_select.scss */ #hrjob-contract body > .select2-container.open { z-index: 9999; /* The z-index Select2 applies to the select2-drop */ } -/* line 54, ../scss/civihr/modules/_select.scss */ #hrjob-contract .selectize-input.selectize-focus { border-color: #007FBB !important; } -/* line 59, ../scss/civihr/modules/_select.scss */ #hrjob-contract .selectize-control > .selectize-input > input { width: 100%; } -/* line 64, ../scss/civihr/modules/_select.scss */ #hrjob-contract .selectize-control > .selectize-dropdown { width: 100%; } -/* line 69, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ng-dirty.ng-invalid > div.selectize-input { border-color: #D44950; } -/* line 77, ../scss/civihr/modules/_select.scss */ #hrjob-contract .btn-default-focus { color: #333; background-color: #EBEBEB; @@ -10108,11 +8190,9 @@ fieldset[disabled] outline-offset: -2px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -/* line 87, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-toggle { position: relative; } -/* line 91, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-toggle > .caret { position: absolute; height: 10px; @@ -10120,30 +8200,25 @@ fieldset[disabled] right: 10px; margin-top: -2px; } -/* line 100, ../scss/civihr/modules/_select.scss */ #hrjob-contract .input-group > .ui-select-bootstrap.dropdown { /* Instead of relative */ position: static; } -/* line 105, ../scss/civihr/modules/_select.scss */ #hrjob-contract .input-group > .ui-select-bootstrap > input.ui-select-search.form-control { border-radius: 2px; /* FIXME hardcoded value :-/ */ border-top-right-radius: 0; border-bottom-right-radius: 0; } -/* line 111, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap > .ui-select-match > .btn { /* Instead of center because of .btn */ text-align: left !important; } -/* line 116, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap > .ui-select-match > .caret { position: absolute; top: 45%; right: 15px; } -/* line 123, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap > .ui-select-choices { width: 100%; height: auto; @@ -10151,17 +8226,14 @@ fieldset[disabled] overflow-x: hidden; margin-top: -1px; } -/* line 131, ../scss/civihr/modules/_select.scss */ #hrjob-contract body > .ui-select-bootstrap.open { z-index: 1000; /* Standard Bootstrap dropdown z-index */ } -/* line 135, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap { height: auto; padding: 3px 3px 0 3px; } -/* line 140, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap input.ui-select-search { background-color: transparent !important; /* To prevent double background when disabled */ @@ -10170,21 +8242,17 @@ fieldset[disabled] height: 1.666666em; margin-bottom: 3px; } -/* line 148, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap .ui-select-match .close { font-size: 1.6em; line-height: 0.75; } -/* line 153, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap .ui-select-match-item { outline: 0; margin: 0 3px 3px 0; } -/* line 158, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple .ui-select-match-item { position: relative; } -/* line 162, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple .ui-select-match-item.dropping-before:before { content: ""; position: absolute; @@ -10194,7 +8262,6 @@ fieldset[disabled] margin-right: 2px; border-left: 1px solid #428bca; } -/* line 172, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple .ui-select-match-item.dropping-after:after { content: ""; position: absolute; @@ -10204,7 +8271,6 @@ fieldset[disabled] margin-left: 2px; border-right: 1px solid #428bca; } -/* line 182, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row > a { display: block; padding: 3px 20px; @@ -10214,36 +8280,30 @@ fieldset[disabled] color: #333; white-space: nowrap; } -/* line 192, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row > a:hover, #hrjob-contract .ui-select-bootstrap .ui-select-choices-row > a:focus { text-decoration: none; color: #262626; background-color: #f5f5f5; } -/* line 198, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row.active > a { color: #fff; text-decoration: none; outline: 0; background-color: #428bca; } -/* line 205, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row.disabled > a, #hrjob-contract .ui-select-bootstrap .ui-select-choices-row.active.disabled > a { color: #777; cursor: not-allowed; background-color: #fff; } -/* line 213, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-match.ng-hide-add, #hrjob-contract .ui-select-search.ng-hide-add { display: none !important; } -/* line 219, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap.ng-dirty.ng-invalid > button.btn.ui-select-match { border-color: #D44950; } -/* line 10, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-hidden-input { width: 1px; height: 1px; @@ -10256,7 +8316,6 @@ fieldset[disabled] opacity: 0; overflow: hidden; } -/* line 24, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-root.focussed > .ta-scroll-window.form-control { border-color: #66afe9; outline: 0; @@ -10264,7 +8323,6 @@ fieldset[disabled] -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -/* line 32, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-editor.ta-html, #hrjob-contract .ta-scroll-window.form-control { min-height: 300px; height: auto; @@ -10272,28 +8330,23 @@ fieldset[disabled] font-family: inherit; font-size: 100%; } -/* line 40, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-scroll-window.form-control { position: relative; padding: 0; } -/* line 45, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-scroll-window > .ta-bind { height: auto; min-height: 300px; padding: 6px 12px; } -/* line 51, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-editor:focus { user-select: text; } -/* line 56, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay { z-index: 100; position: absolute; display: none; } -/* line 62, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-info { position: absolute; bottom: 16px; @@ -10303,7 +8356,6 @@ fieldset[disabled] padding: 0 4px; opacity: 0.7; } -/* line 72, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-background { position: absolute; bottom: 5px; @@ -10313,34 +8365,29 @@ fieldset[disabled] border: 1px solid black; background-color: rgba(0, 0, 0, 0.2); } -/* line 82, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner { width: 10px; height: 10px; position: absolute; } -/* line 88, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-tl { top: 0; left: 0; border-left: 1px solid black; border-top: 1px solid black; } -/* line 95, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-tr { top: 0; right: 0; border-right: 1px solid black; border-top: 1px solid black; } -/* line 102, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-bl { bottom: 0; left: 0; border-left: 1px solid black; border-bottom: 1px solid black; } -/* line 109, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-br { bottom: 0; right: 0; @@ -10348,7 +8395,6 @@ fieldset[disabled] cursor: se-resize; background-color: white; } -/* line 118, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover { position: absolute; top: 0; @@ -10371,15 +8417,12 @@ fieldset[disabled] -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } -/* line 140, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.top { margin-top: -10px; } -/* line 143, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.bottom { margin-top: 10px; } -/* line 146, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover-title { padding: 8px 14px; margin: 0; @@ -10388,11 +8431,9 @@ fieldset[disabled] border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; } -/* line 154, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover-content { padding: 9px 14px; } -/* line 157, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover > .arrow, #hrjob-contract .popover > .arrow:after { position: absolute; @@ -10402,16 +8443,13 @@ fieldset[disabled] border-color: transparent; border-style: solid; } -/* line 166, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover > .arrow { border-width: 11px; } -/* line 169, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover > .arrow:after { content: ""; border-width: 10px; } -/* line 173, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.top > .arrow { bottom: -11px; left: 50%; @@ -10420,7 +8458,6 @@ fieldset[disabled] border-top-color: rgba(0, 0, 0, 0.25); border-bottom-width: 0; } -/* line 181, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.top > .arrow:after { bottom: 1px; margin-left: -10px; @@ -10428,7 +8465,6 @@ fieldset[disabled] border-top-color: #fff; border-bottom-width: 0; } -/* line 188, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.bottom > .arrow { top: -11px; left: 50%; @@ -10437,7 +8473,6 @@ fieldset[disabled] border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); } -/* line 196, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.bottom > .arrow:after { top: 1px; margin-left: -10px; @@ -10469,7 +8504,6 @@ fieldset[disabled] opacity: 1; } } -/* line 8, ../scss/civihr/modules/_animate.scss */ #hrjob-contract .fade-in { -webkit-animation: fadeIn 0.5s; -o-animation: fadeIn 0.5s; @@ -10515,49 +8549,39 @@ fieldset[disabled] opacity: 1; } } -/* line 21, ../scss/civihr/modules/_animate.scss */ #hrjob-contract .fade-in-up { -webkit-animation: fadeInUp 0.5s; -o-animation: fadeInUp 0.5s; animation: fadeInUp 0.5s; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-success-light { color: #44CB7E; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-success-light:hover, #hrjob-contract a.text-success-light:focus { color: #30ac65; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-info-light { color: #5bc0de; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-info-light:hover, #hrjob-contract a.text-info-light:focus { color: #31b0d5; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-warning-light { color: #E6AB5E; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-warning-light:hover, #hrjob-contract a.text-warning-light:focus { color: #df9432; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-danger-light { color: #CF3458; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-danger-light:hover, #hrjob-contract a.text-danger-light:focus { color: #a82846; } -/* line 6, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar { -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); @@ -10569,113 +8593,88 @@ fieldset[disabled] padding: 11px 20px 10px; max-width: 100%; } -/* line 18, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-primary { background-color: #0071BD; color: #fff; } -/* line 22, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-primary a { color: #fff; } -/* line 25, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-primary a:hover, #hrjob-contract .header-bar.header-bar-primary a:active { color: #e6e6e6; } -/* line 32, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-success { background-color: #44CB7E; color: #fff; } -/* line 37, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-info { background-color: #5bc0de; color: #fff; } -/* line 42, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-warning { background-color: #CF3458; color: #fff; } -/* line 47, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger { background-color: #CF3458; color: #fff; } -/* line 51, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger a { color: #fff; } -/* line 54, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger a:hover, #hrjob-contract .header-bar.header-bar-danger a:active { color: #e6e6e6; } -/* line 61, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger-light { background-color: #e6807f; color: #fff; } -/* line 66, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-dark { background-color: #5d6779; color: #fff; } -/* line 72, ../scss/civihr/partials/_typography.scss */ #hrjob-contract a[disabled]:not(.btn) { color: #4D4D69; } -/* line 75, ../scss/civihr/partials/_typography.scss */ #hrjob-contract a[disabled]:not(.btn):hover { cursor: default; } -/* line 80, ../scss/civihr/partials/_typography.scss */ #hrjob-contract a:active, #hrjob-contract a:focus { outline: 0; } -/* line 2, ../scss/civihr/partials/_global.scss */ #hrjob-contract hr { margin-bottom: 20px; margin-top: 20px; } -/* line 1, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge { font-size: 11px; padding: 3px 7px 4px; } -/* line 5, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-primary { background-color: #0071BD !important; } -/* line 9, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-secondary { background-color: #f4f7f8 !important; } -/* line 13, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-success { background-color: #44CB7E !important; } -/* line 17, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-info { background-color: #5bc0de !important; } -/* line 21, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-warning { background-color: #E6AB5E !important; } -/* line 25, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-dark { background-color: #5d6779 !important; } -/* line 29, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-danger { background-color: #CF3458 !important; } -/* line 33, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-danger-light { background-color: #e6807f !important; } -/* line 1, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -10683,73 +8682,59 @@ fieldset[disabled] font-weight: normal; text-transform: uppercase; } -/* line 8, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-primary:hover { background-color: #005c99; border-color: #005c99; } -/* line 14, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-success { color: #464354; } -/* line 17, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-success:hover { background-color: #33b86c; border-color: #33b86c; color: #000000; } -/* line 26, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-info:hover { background-color: #3db5d8; border-color: #3db5d8; } -/* line 32, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning { color: #464354; } -/* line 35, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning:hover { background-color: #e19b3f; border-color: #e19b3f; color: #000000; } -/* line 44, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-danger:hover { background-color: #b52b4b; border-color: #b52b4b; } -/* line 50, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.disabled, #hrjob-contract .btn[disabled], fieldset[disabled] #hrjob-contract .btn { cursor: not-allowed; opacity: 1; filter: alpha(opacity=100); } -/* line 58, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-link { font-weight: 600; } -/* line 62, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray { color: #4D4D69; background-color: #fff; border-color: #4D4D69; } -/* line 67, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray:hover, #hrjob-contract .btn-gray:focus, #hrjob-contract .btn-gray.btn-focus { background-color: #3e3e54; color: #fff; } -/* line 74, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray.active { background-color: #3e3e54; color: #fff; } -/* line 78, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray.active:hover, #hrjob-contract .btn-gray.active:focus, #hrjob-contract .btn-gray.active.btn-focus { background-color: #3e3e54; color: #fff; } -/* line 87, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse { background: none; border: 0 none; @@ -10760,23 +8745,19 @@ fieldset[disabled] text-transform: none; vertical-align: baseline; } -/* line 97, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse:hover { color: #373e4b; } -/* line 101, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse:active { -webkit-box-shadow: none; box-shadow: none; } -/* line 105, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse .fa { margin-right: 3px; font-size: 9px; position: relative; top: -1px; } -/* line 113, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .hrjc-context-menu-toggle { color: #464354; padding: 0px 10px; @@ -10784,112 +8765,20 @@ fieldset[disabled] display: inline-block; font-size: 14px; } -/* line 120, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .hrjc-context-menu-toggle:hover { color: #0071BD; } -/* line 126, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-group.open .hrjc-context-menu-toggle.dropdown-toggle { -webkit-box-shadow: none; box-shadow: none; } -/* line 1, ../scss/civihr/partials/_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; } -/* line 4, ../scss/civihr/partials/_dropdowns.scss */ #hrjob-contract .dropdown-menu > li > a { padding: 8px 14px; line-height: 18px; } -/* line 9, ../scss/civihr/partials/_dropdowns.scss */ #hrjob-contract .dropdown-menu [class^="fa-"], #hrjob-contract .dropdown-menu [class^="glyphicon-"], #hrjob-contract .dropdown-menu [class*=" fa-"], @@ -10897,72 +8786,62 @@ 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"] { +#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 */ #hrjob-contract .form-control-file { padding: 6px 12px; } -/* line 14, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-static { padding-bottom: 8px; padding-top: 6px; } -/* line 19, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-static .subfield { display: block; } -/* line 25, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label { text-align: left; } -/* line 28, ../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 */ +#hrjob-contract .form-horizontal .has-feedback { + /* stylelint-disable selector-max-compound-selectors */ + /* stylelint-enable selector-max-compound-selectors */ +} #hrjob-contract .form-horizontal .has-feedback select + .form-control-feedback { right: 28px; } -/* line 39, ../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 */ #hrjob-contract .form-horizontal .has-feedback .form-inline { float: left; position: relative; } -/* line 47, ../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 */ #hrjob-contract .form-horizontal .well .form-group { margin-bottom: 0; } -/* line 57, ../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 64, ../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; +#hrjob-contract .form-group.required .control-label:first-child::after { + color: #f00; + content: '*'; } -/* line 75, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .control-label, #hrjob-contract .checkbox-inline, #hrjob-contract .radio-inline, @@ -10971,127 +8850,91 @@ 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; +#hrjob-contract .checkbox-label, +#hrjob-contract .radio-label { + /* stylelint-disable-line scss/at-extend-no-missing-placeholder */ } -/* line 107, ../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 */ #hrjob-contract .ui-select-placeholder, #hrjob-contract .ui-select-match-text { font-weight: normal; text-transform: none; } -/* line 119, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-match-text { color: #4D4D69; } -/* line 123, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled] { background-color: #F3F6F7; opacity: 1; } -/* line 127, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled]:hover, #hrjob-contract .ui-select-toggle[disabled]:focus, #hrjob-contract .ui-select-toggle[disabled]:active { background-color: #F3F6F7; } -/* line 1, ../scss/civihr/partials/_iframe.scss */ #hrjob-contract .hrjc-iframe { opacity: 0; } -/* line 4, ../scss/civihr/partials/_iframe.scss */ #hrjob-contract .hrjc-iframe.hrjc-iframe-ready { -webkit-transition: opacity 0.5s; -o-transition: opacity 0.5s; transition: opacity 0.5s; opacity: 1; } -/* line 1, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-header { background-color: #F3F6F7; } -/* line 4, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-header .close { color: #464354; font-size: 18px; margin-top: 3px; opacity: 1; } -/* line 10, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-header .close:hover { color: #000000; } -/* line 16, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-body { background-color: #FFFFFF; } -/* line 21, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-progress .modal-body { overflow: hidden; padding-top: 25px; } -/* line 26, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-progress .progress { margin-bottom: 2px; } -/* line 30, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-progress .progress-bar { min-width: 2.5em; } -/* line 35, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-title { font-size: 18px; } -/* line 42, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-content .form-horizontal .row, #hrjob-contract .modal-content .form-horizontal .form-group { margin-left: -15px; margin-right: -15px; } -/* line 50, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-content .form-horizontal .modal-body { padding-bottom: 0; } -/* line 55, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-content [class^="col-"], #hrjob-contract .modal-content [class*=" col-"] { padding-left: 15px; padding-right: 15px; } @media (min-width: 768px) { - /* line 65, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-dialog { margin: 60px auto; } } -/* line 1, ../scss/civihr/partials/_page-contact.scss */ #hrjob-contract .hrjc-page-contact { padding: 20px; } -/* line 1, ../scss/civihr/partials/_pagination.scss */ #hrjob-contract .pagination { margin-top: 23px; } -/* line 1, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel { display: block; position: static; @@ -11101,115 +8944,92 @@ fieldset[disabled] -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); } -/* line 10, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading { color: #464354; font-weight: 600; } -/* line 14, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading .btn-group.btn-group-sm { margin-top: -2px; margin-bottom: -3px; } -/* line 17, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading .btn-group.btn-group-sm > .btn { padding: 5px 13px; text-transform: none; } -/* line 23, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading .btn-collapse { margin: 4px 0 2px; } -/* line 30, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter { margin-bottom: 0; } -/* line 34, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter__filter { font-weight: normal; } -/* line 37, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter__filter:first-child { border-radius: 2px 0 0 2px; } -/* line 41, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter__filter:last-child { border-radius: 0 2px 2px 0; } -/* line 48, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-title { font-size: 18px; line-height: 1.42857143; } -/* line 53, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-light { border: 0 none; -webkit-box-shadow: 0 0 0 0; box-shadow: 0 0 0 0; } -/* line 57, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-light > .panel-heading { border-bottom: 0 none; padding: 12px 20px 13px; } -/* line 62, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-light > .panel-footer { border-top: 1px solid #E8EEF0; padding: 16px 20px; } -/* line 69, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-secondary > .panel-body, #hrjob-contract .panel-secondary .list-group, #hrjob-contract .panel-secondary .list-group-item { background-color: #f4f7f8; } -/* line 4, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row:not(.active) > a small { color: #586277; } -/* line 10, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap input { font-weight: normal; } -/* line 14, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-toggle { padding-right: 30px; } -/* line 18, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple { min-height: 32px; padding: 2px 2px 0 2px; } -/* line 22, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple input.ui-select-search { height: 1.9em; text-indent: 10px; } -/* line 27, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple .ui-select-match .close { line-height: 0.8; } -/* line 31, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple .ui-select-match-item { border-color: #0071BD; margin: 0 2px 2px 1px; padding: 2px 8px; text-transform: none; } -/* line 7, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > tbody > tr > td .hrjc-context-menu-toggle, #hrjob-contract .table > tfoot > tr > td .hrjc-context-menu-toggle { margin: -2px 0; position: relative; top: 1px; } -/* line 13, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > tbody > tr > td.checkbox, #hrjob-contract .table > tfoot > tr > td.checkbox { padding: 11px 8px 10px; text-align: left; } -/* line 24, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > thead > tr > th, #hrjob-contract .table > thead > tr > th.checkbox { border: 0 none; @@ -11221,7 +9041,6 @@ fieldset[disabled] text-align: left; text-transform: none; } -/* line 37, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > thead > tr > th label, #hrjob-contract .table > thead > tr > th .checkbox-label, #hrjob-contract .table > thead > tr > th .radio-label, #hrjob-contract .table > thead > tr > th.checkbox label, @@ -11229,16 +9048,13 @@ fieldset[disabled] #hrjob-contract .table > thead > tr > th.checkbox .radio-label { font-weight: 600; } -/* line 42, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > thead > tr > td { border-top: 0 none; } -/* line 1, ../scss/civihr/partials/_tooltip.scss */ #hrjob-contract .tooltip-inner { text-align: left; width: 350px; } -/* line 1, ../scss/civihr/partials/_wells.scss */ #hrjob-contract .well { -webkit-box-shadow: none; box-shadow: none; @@ -11267,51 +9083,41 @@ fieldset[disabled] opacity: 1; } } -/* line 6, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-btn-add-contract { opacity: 0; } -/* line 10, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-btn-add-contract.ng-active { -webkit-transition: all linear 0.2s; transition: all linear 0.2s; opacity: 1; } -/* line 17, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-list-contract-item > * { opacity: 0; } -/* line 21, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-list-contract-item.ng-active > * { -webkit-transition: all linear 0.2s; transition: all linear 0.2s; opacity: 1; } -/* line 27, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-list-contract-item .hrjc-loader { opacity: 1; } -/* line 1, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .ng-animate.item:not(.left):not(.right) { -webkit-transition: 0s ease-in-out left; transition: 0s ease-in-out left; } -/* line 5, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-datepicker .uib-title { width: 100%; } -/* line 8, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-day button, #hrjob-contract .uib-month button, #hrjob-contract .uib-year button { min-width: 100%; } -/* line 13, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-left, #hrjob-contract .uib-right { width: 100%; } -/* line 17, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-position-measure { display: block !important; visibility: hidden !important; @@ -11319,7 +9125,6 @@ fieldset[disabled] top: -9999px !important; left: -9999px !important; } -/* line 24, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-position-scrollbar-measure { position: absolute !important; top: -9999px !important; @@ -11327,21 +9132,17 @@ fieldset[disabled] height: 50px !important; overflow: scroll !important; } -/* line 31, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-position-body-scrollbar-measure { overflow: scroll !important; } -/* line 34, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-datepicker-popup.dropdown-menu { display: block; float: none; margin: 0; } -/* line 39, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-button-bar { padding: 10px 9px 2px; } -/* line 42, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract [uib-tooltip-popup].tooltip.top-left > .tooltip-arrow, #hrjob-contract [uib-tooltip-popup].tooltip.top-right > .tooltip-arrow, #hrjob-contract [uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow, @@ -11396,97 +9197,78 @@ fieldset[disabled] right: auto; margin: 0; } -/* line 96, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract [uib-popover-popup].popover, #hrjob-contract [uib-popover-html-popup].popover, #hrjob-contract [uib-popover-template-popup].popover { display: block !important; } -/* line 101, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-time input { width: 50px; } -/* line 104, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract [uib-typeahead-popup].dropdown-menu { display: block; } -/* line 107, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-tab a:hover { color: #0071BD; } -/* line 3, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-group-action .dropdown-menu .checkbox { font-size: 12px; margin-bottom: 5px; margin-top: 5px; padding: 0px 10px; } -/* line 9, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-group-action .dropdown-menu .checkbox input[type="checkbox"] { margin-top: 1px; } -/* line 13, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-group-action .dropdown-menu .checkbox label, #hrjob-contract .btn-group-action .dropdown-menu .checkbox .checkbox-label, #hrjob-contract .btn-group-action .dropdown-menu .checkbox .radio-label { min-height: 17px; } -/* line 22, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-success { color: #464354; } -/* line 25, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-success:hover { color: #000000; } -/* line 30, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning { color: #464354; } -/* line 33, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning:hover { color: #000000; } -/* line 38, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled, #hrjob-contract .btn[disabled], fieldset[disabled] #hrjob-contract .btn { cursor: not-allowed; opacity: 1; filter: alpha(opacity=100); } -/* line 44, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-primary, #hrjob-contract .btn[disabled].btn-primary, fieldset[disabled] #hrjob-contract .btn.btn-primary { background-color: #57bbff; border-color: #57bbff; } -/* line 48, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-success, #hrjob-contract .btn[disabled].btn-success, fieldset[disabled] #hrjob-contract .btn.btn-success { background-color: #bcecd1; border-color: #bcecd1; color: #908ca4; } -/* line 53, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-warning, #hrjob-contract .btn[disabled].btn-warning, fieldset[disabled] #hrjob-contract .btn.btn-warning { background-color: #fbf0e2; border-color: #fbf0e2; color: #908ca4; } -/* line 58, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-danger, #hrjob-contract .btn[disabled].btn-danger, fieldset[disabled] #hrjob-contract .btn.btn-danger { background-color: #ecb0be; border-color: #ecb0be; } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-danger-outline { background-color: transparent; border-color: #CF3458; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-danger-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-danger-outline:focus:not(.disabled):not([disabled]) { background-color: #b52b4b; border-color: #b52b4b; color: #FFFFFF; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-danger-outline.disabled, #hrjob-contract .btn-danger-outline[disabled], fieldset[disabled] #hrjob-contract .btn-danger-outline { border-color: #ecb0be; color: #908ca4; @@ -11494,19 +9276,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-primary-outline { background-color: transparent; border-color: #0071BD; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-primary-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-primary-outline:focus:not(.disabled):not([disabled]) { background-color: #005c99; border-color: #005c99; color: #FFFFFF; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-primary-outline.disabled, #hrjob-contract .btn-primary-outline[disabled], fieldset[disabled] #hrjob-contract .btn-primary-outline { border-color: #57bbff; color: #908ca4; @@ -11514,19 +9293,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-secondary-outline { background-color: transparent; border-color: #4D4D69; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-secondary-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-secondary-outline:focus:not(.disabled):not([disabled]) { background-color: #3e3e54; border-color: #3e3e54; color: #FFFFFF; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-secondary-outline.disabled, #hrjob-contract .btn-secondary-outline[disabled], fieldset[disabled] #hrjob-contract .btn-secondary-outline { border-color: #9a9ab5; color: #908ca4; @@ -11534,19 +9310,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-success-outline { background-color: transparent; border-color: #44CB7E; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-success-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-success-outline:focus:not(.disabled):not([disabled]) { background-color: #33b86c; border-color: #33b86c; color: #000000; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-success-outline.disabled, #hrjob-contract .btn-success-outline[disabled], fieldset[disabled] #hrjob-contract .btn-success-outline { border-color: #bcecd1; color: #908ca4; @@ -11554,19 +9327,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-warning-outline { background-color: transparent; border-color: #E6AB5E; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-warning-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-warning-outline:focus:not(.disabled):not([disabled]) { background-color: #e19b3f; border-color: #e19b3f; color: #000000; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-warning-outline.disabled, #hrjob-contract .btn-warning-outline[disabled], fieldset[disabled] #hrjob-contract .btn-warning-outline { border-color: #fbf0e2; color: #908ca4; @@ -11574,12 +9344,10 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 1, ../scss/hrjc/partials/_collapse.scss */ #hrjob-contract .hrjc-contract-details { padding-bottom: 10px; padding-top: 10px; } -/* line 8, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select { background: #ffffff; border-radius: 2px; @@ -11589,7 +9357,6 @@ fieldset[disabled] position: relative; vertical-align: top; } -/* line 17, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select > select { background: transparent; padding: 6px 44px 6px 12px; @@ -11600,11 +9367,9 @@ fieldset[disabled] -webkit-appearance: none; -webkit-border-radius: 0px; } -/* line 28, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select > select::-ms-expand { display: none; } -/* line 33, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select:after { content: '\f0d7'; border-left: 1px solid #C2CFD8; @@ -11620,93 +9385,74 @@ fieldset[disabled] line-height: 33px; -webkit-font-smoothing: antialiased; } -/* line 51, ../scss/hrjc/partials/_forms.scss */ .ie9 #hrjob-contract .chr_custom-select > select { padding-right: 10px; } -/* line 55, ../scss/hrjc/partials/_forms.scss */ .ie9 #hrjob-contract .chr_custom-select:after { display: none; } -/* line 61, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select--full { display: block; width: auto; } -/* line 66, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select--transparent { background: transparent; } -/* line 69, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select--transparent option { background: #ffffff; } -/* line 78, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .has-feedback .chr_custom-select > select { padding-right: 44px; } -/* line 81, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .has-feedback .chr_custom-select > select + .form-control-feedback { right: 27px !important; } -/* line 88, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .input-group-addon { border-left: 0 !important; cursor: pointer; width: 0; } -/* line 93, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .input-group-addon a { color: #333333; } -/* line 103, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label.control-label-checkbox { padding-top: 0; } -/* line 114, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-group.required.has-has-feedback .control-label, #hrjob-contract .form-group.required.has-error .control-label, #hrjob-contract .form-group.required.has-success .control-label { color: #464354; } -/* line 119, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-group.required .control-label:after { color: #CF3458; margin-left: 5px; } -/* line 126, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-inline .form-control { vertical-align: top; } -/* line 131, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-control { -webkit-box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); } -/* line 134, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-control:focus { -webkit-box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); border-color: #0071BD; } -/* line 139, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-control .input-group-addon, #hrjob-contract .form-control .input-group-btn, #hrjob-contract .form-control .input-group .form-control { display: table-cell; border-radius: #C2CFD8; } -/* line 149, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .ui-select-match .btn-default, #hrjob-contract .ui-select-container + .input-group-btn .btn-default { border-color: #C2CFD8; border-radius: #C2CFD8 0 0 #C2CFD8; } -/* line 153, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .ui-select-match .btn-default:hover, #hrjob-contract .ui-select-match .btn-default:focus, #hrjob-contract .ui-select-container + .input-group-btn .btn-default:hover, #hrjob-contract .ui-select-container + .input-group-btn .btn-default:focus { background-color: #FFFFFF; } -/* line 157, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .ui-select-match .btn-default:hover i, #hrjob-contract .ui-select-match .btn-default:hover .fa, #hrjob-contract .ui-select-match .btn-default:focus i, #hrjob-contract .ui-select-match .btn-default:focus .fa, @@ -11716,36 +9462,29 @@ fieldset[disabled] #hrjob-contract .ui-select-container + .input-group-btn .btn-default:focus .fa { color: #333; } -/* line 2, ../scss/hrjc/partials/_history.scss */ #hrjob-contract .hrjc-history .btn-group-action { margin-top: -31px; } -/* line 6, ../scss/hrjc/partials/_history.scss */ #hrjob-contract .hrjc-history .table { margin-bottom: 0; } -/* line 1, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract { list-style: none; margin: 0; padding: 0; } -/* line 12, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract-item { min-height: 108px; } -/* line 15, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract-item .tab-content { margin-bottom: 20px; } -/* line 19, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract-item .btn-collapse { color: #4D4D69; font-size: 12px; font-weight: normal; text-transform: none; } -/* line 1, ../scss/hrjc/partials/_loader.scss */ #hrjob-contract .hrjc-loader { left: 50%; margin-top: 1%; @@ -11753,52 +9492,42 @@ fieldset[disabled] top: 50%; z-index: 1000; } -/* line 3, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .modal-header .btn-group-action { float: right; margin-right: 20px; margin-top: -2px; } -/* line 10, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .table { font-size: 13px; } -/* line 13, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .table .table { background-color: transparent; font-size: 12px; } -/* line 17, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .table .table th { font-size: 12px; } -/* line 23, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .pagination { margin-top: 10px; margin-bottom: 10px; } -/* line 31, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-contract .modal-body { background-color: #fff; } @media (min-width: 992px) { - /* line 37, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .modal-dialog { width: 1140px; } } -/* line 1, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .nav-tabs { border-bottom: 0 none; } -/* line 4, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .nav-tabs > li > a { border-top-right-radius: 2px; border-top-left-radius: 2px; font-size: 13px; font-weight: 600; } -/* line 12, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tab-content > .tab-pane { background-color: #F3F6F7; -moz-border-radius: 2px; @@ -11808,337 +9537,393 @@ fieldset[disabled] border-style: solid; border-width: 1px; } -/* line 16, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tab-content > .tab-pane:first-child { -moz-border-radius: 0 2px 2px 2px; -webkit-border-radius: 0; border-radius: 0 2px 2px 2px; } -/* line 29, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs { border-top: 1px solid #D3DEE2; } -/* line 32, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > li { margin-top: -1px; margin-bottom: 0; } -/* line 36, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > li > a { -moz-border-radius: 0 0 2px 2px; -webkit-border-radius: 0; border-radius: 0 0 2px 2px; } -/* line 39, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > li > a:hover, #hrjob-contract .tabs-below > .nav-tabs > li > a:focus { border-top-color: #D3DEE2; border-bottom-color: transparent; } -/* line 46, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > .active a, #hrjob-contract .tabs-below > .nav-tabs > .active a:hover, #hrjob-contract .tabs-below > .nav-tabs > .active a:focus { border-color: transparent #D3DEE2 #D3DEE2 #D3DEE2; } -/* line 54, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs, #hrjob-contract .tabs-right > .nav-tabs { width: 18%; } -/* line 57, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li, #hrjob-contract .tabs-right > .nav-tabs > li { float: none; } -/* line 60, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li > a, #hrjob-contract .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; padding: 15px; } -/* line 69, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .tab-content, #hrjob-contract .tabs-right > .tab-content { width: 82%; } -/* line 75, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs { float: left; margin-left: 0; border-right: 1px solid #D3DEE2; margin-right: -1px; } -/* line 81, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li > a { margin-right: -1px; -moz-border-radius: 2px 0 0 2px; -webkit-border-radius: 2px; border-radius: 2px 0 0 2px; } -/* line 85, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li > a:hover, #hrjob-contract .tabs-left > .nav-tabs > li > a:focus { border-color: #F3F6F7 #D3DEE2 #F3F6F7 #F3F6F7; } -/* line 91, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > .active a, #hrjob-contract .tabs-left > .nav-tabs > .active a:hover, #hrjob-contract .tabs-left > .nav-tabs > .active a:focus { border-color: #D3DEE2 transparent #D3DEE2 #D3DEE2; *border-right-color: #fff; } -/* line 98, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .tab-content { float: left; } -/* line 104, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs { float: right; margin-right: 0px; border-left: 1px solid #D3DEE2; margin-left: -1px; } -/* line 110, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs > li > a { margin-left: -1px; -moz-border-radius: 0 2px 2px 0; -webkit-border-radius: 0; border-radius: 0 2px 2px 0; } -/* line 114, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs > li > a:hover, #hrjob-contract .tabs-right > .nav-tabs > li > a:focus { border-color: #F3F6F7 #F3F6F7 #F3F6F7 #D3DEE2; } -/* line 120, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs > .active a, #hrjob-contract .tabs-right > .nav-tabs > .active a:hover, #hrjob-contract .tabs-right > .nav-tabs > .active a:focus { border-color: #D3DEE2 #D3DEE2 #D3DEE2 transparent; *border-left-color: #fff; } -/* line 127, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .tab-content { float: right; } -/* line 1, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action { padding-bottom: 2px; padding-top: 10px; } -/* line 7, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .badge { margin-top: 6px; } -/* line 11, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn { margin-left: 7px; padding-bottom: 8px; padding-top: 8px; } -/* line 19, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn .glyphicon { margin-right: 3px; } -/* line 23, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn.btn-sm, #hrjob-contract .hrjc-panel-action .btn-group-sm > .btn { padding: 4px; margin-right: -10px; margin-left: 0; } -/* line 29, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn:first-child { margin-left: 0; } -/* line 34, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .form-control-static { text-transform: none; font-weight: normal; } -/* line 39, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .form-group { margin-bottom: 0; } -/* line 43, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .row, #hrjob-contract .hrjc-panel-action .form-horizontal .form-group { margin-left: -5px; margin-right: -5px; } -/* line 53, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-action .control-label { font-size: 16px; } -/* line 57, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-action .form-control-static { font-size: 14px; padding-bottom: 6px; padding-top: 10px; } -/* line 67, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-info .control-label, #hrjob-contract .hrjc-panel-action > .hrjc-row-info .form-control-static { color: #4D4D69; } -/* line 72, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-info .badge { font-size: 12px; padding: 3px 8px; } -/* line 78, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action [class^="col-"], #hrjob-contract .hrjc-panel-action [class*=" col-"] { padding-left: 5px; padding-right: 5px; } -/* line 86, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action hr { margin-bottom: 2px; margin-top: 10px; } -/* line 93, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action + .panel-body { padding-bottom: 10px; padding-top: 10px; } -/* line 1, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary-container { min-height: 387px; } -/* line 5, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary { padding: 20px 20px 10px 20px; } -/* line 9, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary .form-control-static .subfield:not(:first-child) { margin-top: 8px; } -/* line 14, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary .form-group { margin-bottom: 10px; } -/* line 18, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary strong { color: #464354; } -/* line 1, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay { table-layout: fixed; } -/* line 4, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .col-action { width: 48px; } -/* line 16, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .col-index { width: 35px; } -/* line 28, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .action { vertical-align: middle; } -/* line 32, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .index { font-weight: bold; vertical-align: middle; } -/* line 38, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload { table-layout: fixed; } -/* line 41, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .btn-xs, #hrjob-contract .hrjc-table-upload .btn-group-xs > .btn { font-size: 11px; } -/* line 45, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload td { overflow: hidden; text-overflow: ellipsis; } -/* line 50, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .col-index { width: 32px; } -/* line 54, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .col-size { width: 80px; } -/* line 58, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .col-action { width: 95px; } -/* line 62, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .progress { margin-bottom: 0; } -/* line 69, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-sort > thead > tr, #hrjob-contract .hrjc-table-sort > tbody > tr:nth-child(even) { background-color: #F3F6F7; } -/* line 74, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-sort th > a { color: #464354; padding-right: 15px; position: relative; } -/* line 79, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-sort th > a .fa { position: absolute; right: 0; top: 50%; margin-top: -6px; } -/* line 89, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .table-responsive::-webkit-scrollbar-track { background-color: #E8EEF0; } -/* line 93, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .table-responsive::-webkit-scrollbar { height: 10px; background-color: #4D4D69; } -/* line 98, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .table-responsive::-webkit-scrollbar-thumb { border-radius: 10px; background-color: #4D4D69; } -/* line 106, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-revision-list .btn-group-action { min-width: 80px; vertical-align: baseline; } -/* line 110, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-revision-list .btn-group-action .glyphicon-search { font-size: 11px; } -/* line 1, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard { /** Wizard - Tab - General **/ } -/* line 7, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .tabs-left > .tab-content { float: left; margin-bottom: 20px; } -/* line 11, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .tabs-left > .tab-content > .tab-pane { min-height: 365px; padding: 15px; } -/* line 18, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .tooltip-inner { max-width: 350px; width: 350px; } -/* line 23, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard h4:not(.modal-title) { font-size: 16px; margin-top: 0; } -/* line 27, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard h4:not(.modal-title) + hr { margin-top: 16px; } -/* line 33, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .input-inline-xs { max-width: 42px; } -/* line 37, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .input-inline-sm { max-width: 100px; } -/* line 41, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .input-inline-lg { max-width: 420px; } + +#hrjob-contract [uib-datepicker-popup] { + border-color: #C2CFD8; +} +#hrjob-contract [uib-datepicker-popup] .form-control { + border-color: #C2CFD8; +} +#hrjob-contract [uib-datepicker-popup-wrap] + .input-group-btn > button { + border-color: #C2CFD8; + color: #C2CFD8; +} +#hrjob-contract .uib-left, +#hrjob-contract .uib-right, +#hrjob-contract .uib-title { + border: 0; + color: #464354; +} +#hrjob-contract .uib-left:hover, +#hrjob-contract .uib-right:hover, +#hrjob-contract .uib-title:hover { + background: transparent; +} +#hrjob-contract .uib-left i, +#hrjob-contract .uib-right i { + font-weight: 300; +} +#hrjob-contract .uib-title strong { + font-size: 12px; + font-weight: 700; +} +#hrjob-contract .uib-daypicker { + outline: 0; +} +#hrjob-contract .uib-daypicker th { + background: #FFFFFF; + color: #586277; + padding: 7px; + vertical-align: middle; +} +#hrjob-contract .uib-daypicker tbody { + background: transparent; + border-top: 0; + box-shadow: 0; +} +#hrjob-contract .uib-day, +#hrjob-contract .uib-month, +#hrjob-contract .uib-year { + padding: 7px; +} +#hrjob-contract .uib-day .text-muted, +#hrjob-contract .uib-month .text-muted, +#hrjob-contract .uib-year .text-muted { + color: #dcdddd; +} +#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; +} +#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; +} +#hrjob-contract .uib-day .btn-default span, +#hrjob-contract .uib-month .btn-default span, +#hrjob-contract .uib-year .btn-default span { + padding: 0 !important; +} +#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; +} +#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; +} +#hrjob-contract .uib-datepicker-popup { + border: 0; + padding: 10px !important; +} + +.mobile [type='date'][uib-datepicker-popup] { + line-height: normal; + /* stylelint-disable selector-max-compound-selectors */ + /* stylelint-enable */ +} +.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; +} +.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; +} +.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/info.xml b/hrjobcontract/info.xml index 01f9cd65b9f..0e6309e869a 100644 --- a/hrjobcontract/info.xml +++ b/hrjobcontract/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrjobcontract/js/dist/job-contract.min.js b/hrjobcontract/js/dist/job-contract.min.js index df6dd1ccad4..5a0e0c456a8 100644 --- a/hrjobcontract/js/dist/job-contract.min.js +++ b/hrjobcontract/js/dist/job-contract.min.js @@ -27,7 +27,8 @@ THE SOFTWARE. // Copyright CiviCRM LLC 2013. See http://civicrm.org/licensing -define("job-contract/modules/job-contract.config",["common/angular"],function(e){"use strict";function t(e,t,n,o,r,i,a){t.debugEnabled(a.debug),o.resolveForAll({format:["DateFormat",function(e){return e.getDateFormat()}]}).when("/",{controller:"ContractListController",templateUrl:a.pathApp+"views/contractList.html",resolve:{contractList:["contractService",function(e){return e.get()}]}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,e.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",i.theme="bootstrap",r.showWeeks=!1}e.module("job-contract.config",["job-contract.constants"]).config(t),t.$inject=["$httpProvider","$logProvider","$resourceProvider","$routeProvider","uibDatepickerConfig","uiSelectConfig","settings"]}),define("job-contract/modules/job-contract.constants",["common/angular"],function(e){"use strict";e.module("job-contract.constants",[]).constant("settings",{classNamePrefix:"hrjc-",contactId:CRM.jobContractTabApp.contactId,debug:+CRM.debug,pathApp:CRM.jobContractTabApp.path,pathFile:CRM.url("civicrm/hrjobcontract/file/"),pathReport:CRM.url("civicrm/report/hrjobcontract/summary"),pathRest:CRM.url("civicrm/ajax/rest"),pathTpl:CRM.jobContractTabApp.path+"views/",CRM:{options:CRM.FieldOptions||{},defaultCurrency:CRM.jobContractTabApp.defaultCurrency,apiTsFmt:"YYYY-MM-DD HH:mm:ss",fields:CRM.jobContractTabApp.fields,maxFileSize:CRM.jobContractTabApp.maxFileSize}})}),define("job-contract/controllers/contract.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,o,r,i,a,c,s,l,u,d,f,v,m,p,_,h,b,y,g,j,C,$){function w(t){var n,o;return r.all([v.getOne({jobcontract_revision_id:t.details_revision_id}),m.getOne({jobcontract_revision_id:t.hour_revision_id}),h.getOne({jobcontract_revision_id:t.health_revision_id}),p.getOne({jobcontract_revision_id:t.pay_revision_id}),b.getOne({jobcontract_revision_id:t.pension_revision_id}),_.getOne({jobcontract_revision_id:t.leave_revision_id})]).then(function(t){return o={details:t[0],hour:t[1],health:t[2],pay:t[3],pension:t[4],leave:t[5]},n={contract:c.contract},e.extend(n,e.cloneDeep(c.model)),e.extend(n.details,o.details),e.extend(n.hour,o.hour),e.extend(n.health,o.health),e.extend(n.pay,o.pay),e.extend(n.pension,o.pension),D(n.leave,o.leave),n})}function S(){c.$on("updateContractView",function(){c.$broadcast("hrjc-loader-show"),f.fullDetails(c.revisionCurrent.jobcontract_id).then(function(e){A(e),c.$broadcast("hrjc-loader-hide")}).then(E)})}function D(t,n,o){o=o||"",e.each(t,function(t){e.extend(t,n?e.find(n,{leave_type:t.leave_type})||o:o)})}function R(n,o){var a,s,d,v,m,p,_,h,b=["details","hour","pay"],g={controller:"ModalContractController",appendTo:i.find("div").eq(0),templateUrl:u.pathApp+"views/modalForm.html?v=4448",windowClass:"modal-contract",size:"lg",resolve:{action:function(){return n||"view"},content:function(){return{}},entity:function(){return o?I.fetchRevisionDetails(o):{contract:c.contract,details:c.details,hour:c.hour,pay:c.pay,leave:c.leave,health:c.health,pension:c.pension}},files:function(){return o?r.all({details:y.get(o.details_revision_id,"civicrm_hrjobcontract_details"),pension:y.get(o.pension_revision_id,"civicrm_hrjobcontract_pension")}):T},utils:function(){return c.utils}}};switch(c.$broadcast("hrjc-loader-show"),n){case"edit":g.resolve.content=function(){return{allowSave:!0,isDisabled:!1,copy:{close:"Cancel",save:"Save without making a new revision",title:"Edit contract"}}};break;case"change":g.resolve.content=function(){return{allowSave:!0,isDisabled:!1,copy:{close:"Cancel",save:"Save and make a new revision",title:"Change contract terms"}}}}a=l.open(g),a.result.then(function(n){n&&(f.updateHeaderInfo(),A(n),L(n.details.period_end_date),n.revisionCreated?(s=t(new Date(n.revisionCreated.effective_date)),d=t(new Date(c.revisionCurrent.effective_date)),v=t(),m={revisionEntityIdObj:n.revisionCreated,details:n.details,hour:n.hour,pay:n.pay},p=d.diff(v,"day")<=0||d.diff(s,"day")<=0,n.files&&(p?E().then(function(e){m.files=e}):r.all({details:y.get(n.revisionCreated.details_revision_id,"civicrm_hrjobcontract_details")}).then(function(e){m.files=e})),c.revisionList.unshift(n.revisionCreated),c.revisionDataList.unshift(m)):(c.contract.is_primary!==n.contract.is_primary&&c.$parent.$parent.toggleIsPrimary(c.contract.id),e.each(c.revisionDataList,function(t){for(_=0,h={};b[_];)t.revisionEntityIdObj[b[_]+"_revision_id"]===c.revisionCurrent[b[_]+"_revision_id"]&&(h[b[_]]=n[b[_]],"details"===b[_]&&n.files&&E().then(function(n){h.files=n,e.extend(t,h)}),e.extend(t,h)),_++})),CRM.refreshParent("#hrjobroles"),n.haveEntitlementFieldsChanged?$.updateEntitlements(c.contract.contact_id):C.success("Success","Contract successfully updated"))})}function P(e){var t,o=[],a="leave"!==e?"getOne":"get",s=0,f=c.revisionList.length;if(c.$broadcast("hrjc-loader-show"),!e)return null;for(s;s

    Change Contract Terms:
    When an employeees job or role changes, i.e. promotion, secondment or move,you can use this wizard to update the details of the contract and record a newrevision of the contract. A contract history is kept so you can always see theprevious version of the contract.

    Correct an error on the contract record:
    If you notice an issue or error with the job terms you can correct these withoutcreating a new job history record. These changes are not stored as a new revisionof the contract.

    ')},c.utils={contractListLen:u.length},c.delete=j,c.modalContract=C,c.toggleIsPrimary=$,function(){for(w in R)S[w]=R[w].getFields();o.all(S).then(function(e){c.fields=e,n.debug("FIELDS:"),n.debug(e);for(w in R)D[w]=R[w].model(e[w]);return o.all(D)}).then(function(o){c.model=o,n.debug("MODEL:"),n.debug(o),u=t("orderBy")(u,"-is_primary"),e.forEach(u,function(e){+e.is_current?c.contractCurrent.push(e):c.contractPast.push(e)}),c.$watchCollection("contractCurrent",function(){c.utils.contractListLen=c.contractCurrent.length+c.contractPast.length}),c.$watchCollection("contractPast",function(){c.utils.contractListLen=c.contractCurrent.length+c.contractPast.length}),i.$broadcast("hrjc-loader-hide"),c.contractListLoaded=!0}),o.all(P).then(function(t){e.extend(c.utils,t)})}()}return n.__name="ContractListController",n.$inject=["$filter","$log","$q","$rootElement","$rootScope","$sce","$scope","$window","$uibModal","contractList","contractService","contractDetailsService","contractHourService","contractPayService","contractLeaveService","contractHealthService","contractPensionService","utilsService","settings","pubSub"],n}),define("job-contract/controllers/revision-list.controller",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,o,r,i,a,c,s,l,u,d,f,v,m,p){function _(){var e=(a.currentPage-1)*a.itemsPerPage,t=e+a.itemsPerPage;a.revisionDataListPage=$.slice(e,t)}function h(e,t){if(1===a.revisionList.length)return void t.stopPropagation();if(e&&"number"==typeof+e){c.open({appendTo:r.find("div").eq(0),templateUrl:s.pathApp+"views/modalDialog.html",size:"sm",controller:"ModalDialogController",resolve:{content:function(){return{msg:"Are you sure you want to delete this job contract revision?"}}}}).result.then(function(t){t&&(a.$broadcast("hrjc-loader-show"),l.deleteRevision(e).then(function(t){var n=0,o=a.revisionList.length;if(!t.is_error){for(n;nt&&g(),a.sortBy(),a.createPage()})}function y(e){var t=e.effective_date,n=e.change_reason;c.open({appendTo:r.find("div").eq(0),templateUrl:s.pathApp+"views/modalChangeReason.html?v="+(new Date).getTime(),controller:"ModalChangeReasonController",resolve:{content:function(){return{copy:{title:"Edit revision data"}}},date:function(){return t},reasonId:function(){return n}}}).result.then(function(o){o.date===t&&o.reasonId===n||l.saveRevision({id:e.id,change_reason:o.reasonId,effective_date:o.date}).then(function(){e.effective_date=o.date,e.change_reason=o.reasonId,a.sortBy(),a.createPage(),a.revisionCurrent.id!==g()&&a.$emit("updateContractView")})})}function g(){var n,o=0;if(a.revisionList.length){var r=t("orderBy")(a.revisionList,["effective_date","id"]);if(e.forEach(r,function(e){new Date(e.effective_date).setHours(0,0,0,0)<=(new Date).setHours(0,0,0,0)&&(n=e)}),!n)do{n=r[o],o++}while(r[o]&&r[o-1].effective_date===r[o].effective_date);return e.extend(a.revisionCurrent,n),n.id}return null}function j(e,n){void 0!==e&&(a.sortCol===e?a.sortReverse=!a.sortReverse:a.sortCol=e),void 0!==n&&(a.sortReverse=n),$=t("orderBy")(a.revisionDataList,a.sortCol,a.sortReverse)}n.debug("Controller: RevisionListController");var C=a.contract.id,$=a.revisionDataList;a.changeReasons=i.options.contract.change_reason,a.currentPage=1,a.itemsPerPage=5,a.maxSize=5,a.sortCol="revisionEntityIdObj.effective_date",a.sortReverse=!0,a.urlCSV=function(){var t=s.pathReport+(s.pathReport.indexOf("?")>-1?"&":"?"),n=a.fields;return e.forEach(n,function(n,o){t+="fields["+o+"_revision_id]=1&",e.forEach(n,function(e){t+="fields["+o+"_"+e.name+"]=1&"})}),t+="fields[sort_name]=1&fields[first_name]=1&fields[last_name]=1&fields[external_identifier]=1&fields[email]=1&fields[street_address]=1&fields[city]=1&fields[name]=1&fields[contract_contact_id]=1&fields[contract_contract_id]=1&fields[jobcontract_revision_id]=1&fields[change_reason]=1&fields[created_date]=1&fields[effective_date]=1&fields[modified_date]=1&order_bys[1][column]=id&order_bys[1][order]=ASC&order_bys[2][column]=civicrm_hrjobcontract_revision_revision_id&order_bys[2][order]=ASC&order_bys[3][column]=-&order_bys[3][order]=ASC&order_bys[4][column]=-&order_bys[4][order]=ASC&order_bys[5][column]=-&order_bys[5][order]=ASC&contract_id_op=eq&permission=access+CiviReport&row_count=&_qf_Summary_submit_csv=Preview+CSV&groups=&contract_id_value="+C+"&group_bys[civicrm_hrjobcontract_revision_revision_id]=1"}(),a.display={effectiveDate:!0,position:!0,payScale:!0,totalSalary:!0,hours:!0,placeOfWork:!0,recordedBy:!0,changeReason:!0},a.createPage=_,a.deleteRevision=h,a.modalRevisionEdit=y,a.sortBy=j,function(){b(),a.revisionDataList||(a.$broadcast("hrjc-loader-show"),p.fetchRevisions(C).then(function(e){a.revisionList=e.revisionList,a.revisionDataList=e.revisionDataList,a.$broadcast("hrjc-loader-hide")}))}()}return n.__name="RevisionListController",n.$inject=["$filter","$log","$q","$rootElement","$rootScope","$scope","$uibModal","settings","contractService","contractDetailsService","contractHourService","contractPayService","contractFilesService","contractRevisionService","contractRevisionListService"],n}),define("job-contract/controllers/form/form-general.controller",["common/moment"],function(e){"use strict";function t(t,n,o){function r(e,t){e.preventDefault(),e.stopPropagation(),n[t]=!0}function i(t,n){if(!t||!n)return null;var o,r,i,a;return i=e(n),i.add(1,"days"),a=i.diff(t,"years"),i.add(-a,"years"),r=i.diff(t,"months"),i.add(-r,"months"),o=i.diff(t,"days"),a=a>0?a>1?a+" years ":a+" year ":"",r=r>0?r>1?r+" months ":r+" month ":"",o=o>0?o>1?o+" days":o+" day":"",a+r+o||"0 days"}function a(t,n){return n=n||"min",e(t)["max"===n?"subtract":"add"](1,"day").toDate()}function c(){n.$watch("entity.details.period_start_date",function(){n.datepickerOptions.end.minDate=a(s.period_start_date,"min"),n.duration=i(s.period_start_date,s.period_end_date)}),n.$watch("entity.details.period_end_date",function(){s.period_end_date?n.datepickerOptions.start.maxDate=a(s.period_end_date,"max"):(n.datepickerOptions.start.maxDate=null,s.end_reason=null),n.duration=i(s.period_start_date,s.period_end_date)}),n.$watch("entity.details.position",function(e,t){e!==t&&s.title===t&&(n.contractForm.detailsTitle.$setViewValue(e),n.contractForm.detailsTitle.$render())}),n.$watch("entity.details.notice_amount",function(e,t){+e&&!s.notice_unit&&(n.contractForm.detailsNoticeUnit.$setValidity("required",!1),n.contractForm.detailsNoticeUnit.$dirty=!0),e!==t&&s.notice_amount_employee===t&&(s.notice_amount_employee=e)}),n.$watch("entity.details.notice_amount_employee",function(e){+e&&!s.notice_unit_employee&&(n.contractForm.detailsNoticeUnitEmployee.$setValidity("required",!1),n.contractForm.detailsNoticeUnitEmployee.$dirty=!0)}),n.$watch("entity.details.notice_unit",function(e,t){e!==t&&s.notice_unit_employee===t&&(s.notice_unit_employee=e)})}t.debug("Controller: FormGeneralController");var s=n.entity.details;n.format=o.DATE_FORMAT,n.datepickerOptions=function(){return{start:{maxDate:s.period_end_date?a(s.period_end_date,"max"):null},end:{minDate:s.period_start_date?a(s.period_start_date,"min"):null}}}(),n.dpOpen=r,function(){c()}()}return t.__name="FormGeneralController",t.$inject=["$log","$scope","HR_settings"],t}),define("job-contract/controllers/form/form-health.controller",[],function(){"use strict";function e(e,t,n){function o(e,o){e&&n.search(e,{contact_type:"Organization",contact_sub_type:o}).then(function(e){t.contacts[o]=e})}e.debug("Controller: FormHealthController"),t.contacts={Health_Insurance_Provider:[],Life_Insurance_Provider:[]},t.refreshContacts=o,function(){t.entity.health.provider&&n.getOne(t.entity.health.provider).then(function(e){t.contacts.Health_Insurance_Provider.push(e)}),t.entity.health.provider_life_insurance&&n.getOne(t.entity.health.provider_life_insurance).then(function(e){t.contacts.Life_Insurance_Provider.push(e)})}()}return e.__name="FormHealthController",e.$inject=["$log","$scope","contactService"],e}),define("job-contract/vendor/fraction",[],function(){var e=function(t,n){if(void 0!==t&&n)"number"==typeof t&&"number"==typeof n?(this.numerator=t,this.denominator=n):"string"==typeof t&&"string"==typeof n&&(this.numerator=parseInt(t),this.denominator=parseInt(n));else if(void 0===n)if(num=t,"number"==typeof num)this.numerator=num,this.denominator=1;else if("string"==typeof num){var o,r,i=num.split(" ");if(i[0]&&(o=i[0]),i[1]&&(r=i[1]),o%1==0&&r&&r.match("/"))return new e(o).add(new e(r));if(!o||r)return;if("string"==typeof o&&o.match("/")){var a=o.split("/");this.numerator=a[0],this.denominator=a[1]}else{if("string"==typeof o&&o.match("."))return new e(parseFloat(o));this.numerator=parseInt(o),this.denominator=1}}this.normalize()};return e.prototype.clone=function(){return new e(this.numerator,this.denominator)},e.prototype.toString=function(){if("NaN"===this.denominator)return"NaN";var e=this.numerator/this.denominator>0?Math.floor(this.numerator/this.denominator):Math.ceil(this.numerator/this.denominator),t=this.numerator%this.denominator,n=this.denominator,o=[];return 0!=e&&o.push(e),0!=t&&o.push((0===e?t:Math.abs(t))+"/"+n),o.length>0?o.join(" "):0},e.prototype.rescale=function(e){return this.numerator*=e,this.denominator*=e,this},e.prototype.add=function(t){var n=this.clone();return t=t instanceof e?t.clone():new e(t),td=n.denominator,n.rescale(t.denominator),t.rescale(td),n.numerator+=t.numerator,n.normalize()},e.prototype.subtract=function(t){var n=this.clone();return t=t instanceof e?t.clone():new e(t),td=n.denominator,n.rescale(t.denominator),t.rescale(td),n.numerator-=t.numerator,n.normalize()},e.prototype.multiply=function(t){var n=this.clone();if(t instanceof e)n.numerator*=t.numerator,n.denominator*=t.denominator;else{if("number"!=typeof t)return n.multiply(new e(t));n.numerator*=t}return n.normalize()},e.prototype.divide=function(t){var n=this.clone();if(t instanceof e)n.numerator*=t.denominator,n.denominator*=t.numerator;else{if("number"!=typeof t)return n.divide(new e(t));n.denominator*=t}return n.normalize()},e.prototype.equals=function(t){t instanceof e||(t=new e(t));var n=this.clone().normalize(),t=t.clone().normalize();return n.numerator===t.numerator&&n.denominator===t.denominator},e.prototype.normalize=function(){var t=function(e){return"number"==typeof e&&(e>0&&e%1>0&&e%1<1||e<0&&e%-1<0&&e%-1>-1)},n=function(e,t){if(t){var n=Math.pow(10,t);return Math.round(e*n)/n}return Math.round(e)};return function(){if(t(this.denominator)){var o=n(this.denominator,9),r=Math.pow(10,o.toString().split(".")[1].length);this.denominator=Math.round(this.denominator*r),this.numerator*=r}if(t(this.numerator)){var o=n(this.numerator,9),r=Math.pow(10,o.toString().split(".")[1].length);this.numerator=Math.round(this.numerator*r),this.denominator*=r}var i=e.gcf(this.numerator,this.denominator);return this.numerator/=i,this.denominator/=i,(this.numerator<0&&this.denominator<0||this.numerator>0&&this.denominator<0)&&(this.numerator*=-1,this.denominator*=-1),this}}(),e.gcf=function(t,n){var o=[],r=e.primeFactors(t),i=e.primeFactors(n);return r.forEach(function(e){var t=i.indexOf(e);t>=0&&(o.push(e),i.splice(t,1))}),0===o.length?1:function(){var e,t=o[0];for(e=1;eTHE FILE IS TOO LARGE AND CANNOT BE UPLOADED. PLEASE REDUCE THE SIZE OF THE FILE AND TRY AGAIN.

    "),fte:c.trustAsHtml("
    FTE stands forFull Time Equivalent. This is a useful measure foran organisation that has peopleworking part-time.For a full-time person, FTE is always equal to1.0, whereas for a part-time person, the FTE will representthe fraction of standard hours that the person works on aregular basis.
    E.g. if the standard working day at an organisationcomprises of 8 hours, then a person who regularly works for8 hours each day would be considered to be full- time andwould have an FTE value of 1.0. A person who regularly worksfor only 4 hours each day would be considered to be apart-time person and would have an FTE value of 0.5. If theorganisation had 10 people, each with an FTE of 1.0 theactual headcount of full-time people would be 10 and theFTE headcount (equal to actual headcount multiplied by theFTE value) would also be 10. However, if the organisationhad another 10 people who each worked part-time with an FTEvalue of 0.5 the actual headcount of part-time people wouldbe 10 while the FTE headcount would only be 5. Thus for anorganisation that had a total of 10 full-time people, and 10part-time people (each with an FTE of 0.5) the actualheadcount for the organisation would be 20 while the FTEheadcount would be 15.
    ")},s.uploader={details:{contract_file:y.uploader("civicrm_hrjobcontract_details")},pension:{evidence_file:y.uploader("civicrm_hrjobcontract_pension",1)}},s.cancel=S,s.filesValidate=D,s.save=M,function(){e.copy(g,s.entity),s.entity.contract={is_primary:0},e.forEach(s.uploader,function(t){e.forEach(t,function(e){e.onAfterAddingAll=function(){s.filesValidate()}})}),A(),a.$broadcast("hrjc-loader-show"),P().then(function(){a.$broadcast("hrjc-loader-hide")})}()}return o.__name="ModalContractNewController",o.$inject=["$log","$q","$rootElement","$rootScope","$sce","$scope","$uibModalInstance","$uibModal","Contract","contractService","contractDetailsService","contractHourService","contractPayService","contractLeaveService","contractHealthService","contractPensionService","contractFilesService","model","utilsService","utils","settings","pubSub"],o}),define("job-contract/controllers/modal/modal-contract.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function o(o,r,i,a,c,s,l,u,d,f,v,m,p,_,h,b,y,g,j,C,$,w,S,D,R){function P(){if("view"===y||e.equals(g,o.entity)&&e.equals(C,o.files)&&!o.uploader.details.contract_file.queue.length&&!o.uploader.pension.evidence_file.queue.length)return o.$broadcast("hrjc-loader-hide"),void i.dismiss("cancel");S.debug&&e.forEach(g,function(t,n){e.equals(t,o.entity[n])||(D.debug("======================"),D.debug("Changed entity: "+n),D.debug("Before:"),D.debug(t),D.debug("After:"),D.debug(o.entity[n]))}),r.open({appendTo:c.find("div").eq(0),templateUrl:S.pathApp+"views/modalDialog.html?v="+(new Date).getTime(),size:"sm",controller:"ModalDialogController",resolve:{content:function(){return{copyCancel:"No",title:"Alert",msg:"Are you sure you want to cancel? Changes will be lost!"}}}}).result.then(function(e){e&&(o.$broadcast("hrjc-loader-hide"),i.dismiss("cancel"))})}function M(){return r.open({appendTo:c.find("div").eq(0),templateUrl:S.pathApp+"views/modalChangeReason.html?v="+(new Date).getTime(),controller:"ModalChangeReasonController",resolve:{content:function(){return{copy:{title:Y.title}}},date:null,reasonId:null}}).result}function A(){var t=x("period_end_date"),n=x("period_start_date"),r=!e.equals(o.entity.leave,g.leave);return n||t||r}function L(){return r.open({appendTo:c.find("div").eq(0),templateUrl:S.pathApp+"views/modalConfirmEdit.html?v="+(new Date).getTime(),controller:"ModalDialogController",resolve:{content:function(){return{msg:"Save without making a new revision?"}}}}).result}function E(e,t){return o.$broadcast("hrjc-loader-show"),d.validateEffectiveDate({contact_id:S.contactId,effective_date:t}).then(function(n){if(n.success)return N(e,t);CRM.alert(n.message,"Error","error"),o.$broadcast("hrjc-loader-hide")},function(e){})}function T(){o.$broadcast("hrjc-loader-show"),o.entity.details.period_end_date=o.entity.details.period_end_date||"";var t,n,s,l,d,y=e.copy(o.entity),g=o.filesTrash,j=o.uploader,C={contract:u.save(y.contract),details:f.save(y.details),hour:v.save(y.hour),pay:m.save(y.pay),leave:p.save(y.leave),health:_.save(y.health),pension:h.save(y.pension)},$=[],w=[];for(t in g)for(s=0,l=g[t].length,s;so.fileMaxSize&&e.remove()})})}),j.details.contract_file.queue.length&&$.push(b.upload(j.details.contract_file,y.details.jobcontract_revision_id)),j.pension.evidence_file.queue.length&&$.push(b.upload(j.pension.evidence_file,y.pension.jobcontract_revision_id)),t.details.period_start_date=y.details.period_start_date,t.details.period_end_date=y.details.period_end_date,t.pay.annual_benefits=y.pay.annual_benefits,t.pay.annual_deductions=y.pay.annual_deductions,$.length?(d=r.open({appendTo:c.find("div").eq(0),templateUrl:S.pathApp+"views/modalProgress.html?v="+(new Date).getTime(),size:"sm",controller:"ModalProgressController",resolve:{uploader:function(){return j},promiseFilesUpload:function(){return $}}}),t.files=d.result,a.all(t)):(t.haveEntitlementFieldsChanged=A(),t)}).then(function(e){o.$broadcast("hrjc-loader-hide"),i.close(e),R.publish("Contract::updated")},function(e){o.$broadcast("hrjc-loader-hide"),CRM.alert(e,"Error","error")})}function F(e){var t=l("formatDate")(e,Date);return"Unspecified"!==t?t:e}function I(){return a.all([{name:"hrjobcontract_health_health_plan_type",key:"plan_type"},{name:"hrjobcontract_health_life_insurance_plan_type",key:"plan_type_life_insurance"}].map(function(e){_.getOptions(e.name,!0).then(function(n){s.options.health[e.key]=t.transform(n,function(e,t){e[t.key]=t.value},{})})}))}function U(e,t){var n=o.files[t];o.filesTrash[t].push(n[e]),n.splice(e,1)}function q(){var e=t.every(o.uploader,function(e){return t.every(e,function(e){return!e.queue||t.every(e.queue,function(e){return e.file.sizeo.fileMaxSize&&e.remove()}),F.queue.length&&P.push(b.upload(F,l))}),P.length?(s=r.open({appendTo:c.find("div").eq(0),templateUrl:S.pathApp+"views/modalProgress.html",size:"sm",controller:"ModalProgressController",resolve:{uploader:function(){return C},promiseFilesUpload:function(){return P}}}),e.files=s.result,a.all(e)):(e.haveEntitlementFieldsChanged=A(),e)}).then(function(e){o.$broadcast("hrjc-loader-hide"),i.close(e),R.publish("Contract::updated")})):(o.$broadcast("hrjc-loader-hide"),i.close())}D.debug("Controller: ModalContractController");var Y=j.copy||{};Y.close=Y.close||"Close",Y.save=Y.save||"Save changes",Y.title=Y.title||"Contract",o.action=y||"view",o.allowSave=void 0!==j.allowSave&&j.allowSave,o.copy=Y,o.entity={},o.fileMaxSize=S.CRM.maxFileSize||0,o.files={},o.filesTrash={},o.isDisabled=void 0===j.isDisabled||j.isDisabled,o.isPrimaryDisabled=+g.contract.is_primary,o.showIsPrimary=w.contractListLen>1&&"change"!==y,o.uploader={details:{contract_file:b.uploader("civicrm_hrjobcontract_details")},pension:{evidence_file:b.uploader("civicrm_hrjobcontract_pension",1)}},o.utils=w,o.cancel=P,o.fileMoveToTrash=U,o.filesValidate=q,o.save=z,function(){O(),H(),i.opened.then(function(){s.$broadcast("hrjc-loader-hide")}),s.$broadcast("hrjc-loader-show"),I().then(function(){s.$broadcast("hrjc-loader-hide")})}()}return o.__name="ModalContractController",o.$inject=["$scope","$uibModal","$uibModalInstance","$q","$rootElement","$rootScope","$filter","contractService","contractRevisionService","contractDetailsService","contractHourService","contractPayService","contractLeaveService","contractHealthService","contractPensionService","contractFilesService","action","entity","content","files","utilsService","utils","settings","$log","pubSub"],o}),define("job-contract/controllers/modal/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,o,r){function i(){o.dismiss("Cancel")}function a(e){o.close(e||!0)}e.debug("Controller: ModalDialogController"),t.copyCancel=r.copyCancel||"Cancel",t.copyConfirm=r.copyConfirm||"Yes",t.msg=r.msg||"",t.title=r.title||"CiviHR Job Contract",t.cancel=i,t.confirm=a}return e.__name="ModalDialogController",e.$inject=["$log","$scope","$timeout","$uibModalInstance","content"],e}),define("job-contract/controllers/modal/modal-progress.controller",[],function(){"use strict";function e(e,t,n,o,r,i,a){function c(){r.dismiss("File upload canceled")}e.debug("Controller: ModalProgressController");var s,l;n.uploader=i,n.cancel=c,function(){for(s in i)for(l in i[s])i[s][l].queue.length&&(i[s][l].item=i[s][l].queue[0].file.name),i[s][l].onProgressItem=function(e){this.item=e.file.name};t.all(a).then(function(e){o(function(){r.close(e)},500)})}()}return e.__name="ModalProgressController",e.$inject=["$log","$q","$scope","$timeout","$uibModalInstance","uploader","promiseFilesUpload"],e}),define("job-contract/controllers/modal/modal-revision.controller",["common/angular"],function(e){"use strict";function t(t,n,o,r,i,a,c,s,l,u,d,f,v,m,p){function _(){a.dismiss("cancel")}function h(){var e=(i.currentPage-1)*i.itemsPerPage,t=e+i.itemsPerPage;i.revisionDataListPage=i.revisionDataList.slice(e,t)}function b(){var e,t=0,n=i.fields.length;for(t;t-1?"&":"?"),r=i.entity;return e.forEach(i.fields,function(e){t="editor_name"!==e.name?e.name:"editor_uid",n=e.extends?"":r+"_",e.selected&&(o+="fields["+n+t+"]=1&")}),o+="fields[sort_name]=1&fields[first_name]=1&fields[last_name]=1&fields[external_identifier]=1&fields[email]=1&fields[street_address]=1&fields[city]=1&fields[name]=1&fields[contract_contact_id]=1&fields[contract_contract_id]=1&fields[jobcontract_revision_id]=1&fields[change_reason]=1&fields[created_date]=1&fields[effective_date]=1&fields[modified_date]=1&order_bys[1][column]=id&order_bys[1][order]=ASC&order_bys[2][column]=civicrm_hrjobcontract_revision_revision_id&order_bys[2][order]=ASC&order_bys[3][column]=-&order_bys[3][order]=ASC&order_bys[4][column]=-&order_bys[4][order]=ASC&order_bys[5][column]=-&order_bys[5][order]=ASC&contract_id_op=eq&permission=access+CiviReport&row_count=&_qf_Summary_submit_csv=Preview+CSV&groups=&contract_id_value="+l[0].jobcontract_id+"&group_bys[civicrm_hrjobcontract_revision_revision_id]=1"}n.debug("Controller: ModalRevisionController"),i.$broadcast("hrjc-loader-show"),i.currentPage=1,i.entity=u,i.fields=e.copy(d),i.itemsPerPage=5,i.revisionDataList=[],i.revisionList=[],i.sortCol="effective_date",i.subFields={},i.maxSize=5,i.modalContract=v,i.sortReverse=!0,i.urlCSV=w(),i.cancel=_,i.createPage=h,i.sortBy=C,i.toggleFieldsSelected=$,function(){b(),y(),g(),j(),i.sortBy(),a.opened.then(function(){r.$broadcast("hrjc-loader-hide")})}()}return t.__name="ModalRevisionController",t.$inject=["$filter","$log","$q","$rootScope","$scope","$uibModalInstance","settings","revisionDataList","revisionList","entity","fields","model","modalContract","utils","contactService"],t}),define("job-contract/modules/job-contract.controllers",["common/angular","job-contract/controllers/contract.controller","job-contract/controllers/contract-list.controller","job-contract/controllers/revision-list.controller","job-contract/controllers/form/form-general.controller","job-contract/controllers/form/form-health.controller","job-contract/controllers/form/form-hour.controller","job-contract/controllers/form/form-leave.controller","job-contract/controllers/form/form-pay.controller","job-contract/controllers/form/form-pension.controller","job-contract/controllers/modal/modal-change-reason.controller","job-contract/controllers/modal/modal-contract-new.controller","job-contract/controllers/modal/modal-contract.controller","job-contract/controllers/modal/modal-dialog.controller","job-contract/controllers/modal/modal-progress.controller","job-contract/controllers/modal/modal-revision.controller"],function(e,t,n,o,r,i,a,c,s,l,u,d,f,v,m,p){"use strict";return e.module("job-contract.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(o.__name,o).controller(r.__name,r).controller(i.__name,i).controller(a.__name,a).controller(c.__name,c).controller(s.__name,s).controller(l.__name,l).controller(u.__name,u).controller(d.__name,d).controller(f.__name,f).controller(v.__name,v).controller(m.__name,m).controller(p.__name,p)}),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,o,r){return n.debug("AbsenceTypeAPI"),o.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(o,i,a){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),a=e.assign({},a,{absence_type_id:o,date:t(i).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",a).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,o,r,i,a){return t.debug("AbsenceType"),o.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return a.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return i.calculateToilExpiryDate(e,t,n)},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(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/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,o){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=o.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,o,r,i){return e.debug("AbsencePeriod"),n.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(i.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return o.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),function(e,t){function n(){var e={nodiff:"",year:"year",years:"years",month:"month",months:"months",day:"day",days:"days",hour:"hour",hours:"hours",minute:"minute",minutes:"minutes",second:"second",seconds:"seconds",delimiter:" "};moment.fn.preciseDiff=function(e){return moment.preciseDiff(this,e)},moment.preciseDiff=function(t,n){function o(t,n){return t+" "+e[n+(1===t?"":"s")]}var r=moment(t),i=moment(n);if(r.isSame(i))return e.nodiff;if(r.isAfter(i)){var a=r;r=i,i=a}var c=i.year()-r.year(),s=i.month()-r.month(),l=i.date()-r.date();if(l<0){var u=moment(i.year()+"-"+(i.month()+1),"YYYY-MM").subtract("months",1).daysInMonth();l=u
    Length Of Employment
    "),e(".lengthEmployment").html(a),o&&l<0&&e(".lengthEmployment").css({color:"#FF0000"})}var r=CRM.grID,i=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(2) .crm-custom-data").html(),a=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(3) .crm-custom-data").html();i&&o(i,a,r),e(document).on("click","#_qf_CustomData_upload",function(){e(document).ajaxSuccess(function(t,n,i){i.extraData&&"CRM_Contact_Form_Inline_CustomData"==i.extraData.class_name&&i.extraData.groupID==r&&setTimeout(function(){var t=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(2) .crm-custom-data").html(),n=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(3) .crm-custom-data").html();t&&o(t,n,r)},300)})})}(CRM.$,CRM._),define("job-contract/modules/job-contract.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/routers/compu-ng-route","common/modules/directives","common/services/dom-event-trigger","common/services/pub-sub","common/services/angular-date/date-format","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/absence-period.model","job-contract/vendor/fraction","job-contract/vendor/job-summary"],function(e){"use strict";e.module("job-contract.core",["ngAnimate","compuNgRoute","ngResource","angularFileUpload","ui.bootstrap","ui.select","common.angularDate","common.services","common.directives","common.filters","leave-absences.models"])}),define("job-contract/directives/contact.directive",[],function(){"use strict";function e(e,t,n,o){return t.debug("Directive: hrjcContact"),{restrict:"A",scope:{renderAsLink:"=?hrjcContactLink",contactId:"=?hrjcContact"},template:"{{contact.label}}",link:function(t,n){t.contactId&&t.$watch("contactId",function(r){o.getOne(t.contactId).then(function(o){t.contact=o,t.renderAsLink&&(n.html('{{contact.label}}'),e(n.contents())(t))})})}}}return e.__name="hrjcContact",e.$inject=["$compile","$log","settings","contactService"],e}),define("job-contract/directives/loader.directive",[],function(){"use strict";function e(e,t){return e.debug("Directive: hrjcLoader"),{link:function(e,t,n){function o(){var e=window.getComputedStyle(t[0]).position;return"relative"===e||"absolute"===e||"fixed"===e}function r(){o()||(t.css("position","relative"),s=!0),t.append(a),c=!0}function i(){c&&a.parentNode.removeChild(a),c=!1,s&&t.css("position","")}var a=document.createElement("div"),c=!1,s=!1;a.className="hrjc-loader spinner",n.hrjcLoaderShow&&r(),e.$on("hrjc-loader-show",function(){r()}),e.$on("hrjc-loader-hide",function(){i()})}}}return e.__name="hrjcLoader",e.$inject=["$log","$rootScope"],e}),define("job-contract/directives/number.directive",[],function(){"use strict";function e(e){return e.debug("Directive: hrjcNumber"),{require:"ngModel",link:function(e,t,n,o){var r=2,i=n.hrjcNumberFloat||!1,a=n.hrjcToHours||!1,c=n.hrjcNotNegative||!1;n.hrjcNumber&&"number"==typeof+n.hrjcNumber&&(r=n.hrjcNumber),t.bind("blur",function(){var e=parseFloat(o.$viewValue)||0;c&&e<0&&(e=0),a&&(e=.25*Math.ceil(e/.25)),o.$setViewValue(i?Math.round(100*e)/100:e.toFixed(r)),o.$render()})}}}return e.__name="hrjcNumber",e.$inject=["$log"],e}),define("job-contract/directives/validate.directive",["common/angular"],function(e){"use strict";function t(t){return t.debug("Directive: hrjcValidate"),{restrict:"A",require:"^form",scope:{isWarning:"=?hrjcValidateWarning"},link:function(t,n,o,r){function i(e,t){n.toggleClass("has-success",!e&&!t),f.toggleClass("glyphicon-ok",!e&&!t)}function a(e,t){n.toggleClass("has-warning",!e&&t),f.toggleClass("glyphicon-warning-sign",!e&&t)}function c(e){n.toggleClass("has-error",e),f.toggleClass("glyphicon-remove",e)}var s=n[0].querySelector("[name]"),l=e.element(s),u=l.attr("name"),d=document.createElement("span"),f=e.element(d);u&&(n.addClass("has-feedback"),f.addClass("glyphicon form-control-feedback"),l.after(f),t.$watch(function(){return r[u]&&r[u].$invalid},function(e){r[u].$dirty&&(i(e,t.isWarning),c(e))}),void 0!==t.isWarning&&t.$watch("isWarning",function(e){var t=r[u].$invalid;r[u].$dirty&&(i(t,e),a(t,e))}),l.bind("blur",function(){c(r[u].$invalid)}))}}}return t.__name="hrjcValidate",t.$inject=["$log"],t}),define("job-contract/modules/job-contract.directives",["common/angular","job-contract/directives/contact.directive","job-contract/directives/loader.directive","job-contract/directives/number.directive","job-contract/directives/validate.directive"],function(e,t,n,o,r){"use strict";return e.module("job-contract.directives",[]).directive(t.__name,t).directive(n.__name,n).directive(o.__name,o).directive(r.__name,r)}),define("job-contract/filters/capitalize.filter",[],function(){"use strict";function e(e){return e.debug("Filter: capitalize"),function(e){return e?e.replace(/([^\W_]+[^\s-]*) */g,function(e){ -return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}):""}}return e.__name="capitalize",e.$inject=["$log"],e}),define("job-contract/filters/format-amount.filter",[],function(){"use strict";function e(e){return e.debug("Filter: formatAmount"),function(e){return e&&-1===e.indexOf(".")?e+".00":e}}return e.__name="formatAmount",e.$inject=["$log"],e}),define("job-contract/filters/format-period.filter",[],function(){"use strict";function e(e,t){return t.debug("Filter: formatPeriod"),function(t){return t?e("date")(t,"yyyy/MM/dd"):"Unspecified"}}return e.__name="formatPeriod",e.$inject=["$filter","$log"],e}),define("job-contract/filters/get-obj-by-id.filter",[],function(){"use strict";function e(e){return e.debug("Filter: getObjById"),function(e,t,n){if(!e)return null;for(var o=0,r=e.length;o

    Change Contract Terms:
    When an employeees job or role changes, i.e. promotion, secondment or move,you can use this wizard to update the details of the contract and record a newrevision of the contract. A contract history is kept so you can always see theprevious version of the contract.

    Correct an error on the contract record:
    If you notice an issue or error with the job terms you can correct these withoutcreating a new job history record. These changes are not stored as a new revisionof the contract.

    ')},c.utils={contractListLen:u.length},c.delete=j,c.modalContract=C,c.toggleIsPrimary=$,function(){for(S in R)w[S]=R[S].getFields();o.all(w).then(function(e){c.fields=e,n.debug("FIELDS:"),n.debug(e);for(S in R)D[S]=R[S].model(e[S]);return o.all(D)}).then(function(o){c.model=o,n.debug("MODEL:"),n.debug(o),u=t("orderBy")(u,"-is_primary"),e.forEach(u,function(e){+e.is_current?c.contractCurrent.push(e):c.contractPast.push(e)}),c.$watchCollection("contractCurrent",function(){c.utils.contractListLen=c.contractCurrent.length+c.contractPast.length}),c.$watchCollection("contractPast",function(){c.utils.contractListLen=c.contractCurrent.length+c.contractPast.length}),i.$broadcast("hrjc-loader-hide"),c.contractListLoaded=!0}),o.all(P).then(function(t){e.extend(c.utils,t)})}()}return n.__name="ContractListController",n.$inject=["$filter","$log","$q","$rootElement","$rootScope","$sce","$scope","$window","$uibModal","contractList","contractService","contractDetailsService","contractHourService","contractPayService","contractLeaveService","contractHealthService","contractPensionService","utilsService","settings","pubSub"],n}),define("job-contract/controllers/revision-list.controller",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,o,r,i,a,c,s,l,u,d,f,p,m,v){function _(){var e=(a.currentPage-1)*a.itemsPerPage,t=e+a.itemsPerPage;a.revisionDataListPage=$.slice(e,t)}function h(e,t){if(1===a.revisionList.length)return void t.stopPropagation();if(e&&"number"==typeof+e){c.open({appendTo:r.find("div").eq(0),templateUrl:s.pathApp+"views/modalDialog.html",size:"sm",controller:"ModalDialogController",resolve:{content:function(){return{msg:"Are you sure you want to delete this job contract revision?"}}}}).result.then(function(t){t&&(a.$broadcast("hrjc-loader-show"),l.deleteRevision(e).then(function(t){var n=0,o=a.revisionList.length;if(!t.is_error){for(n;nt&&g(),a.sortBy(),a.createPage()})}function y(e){var t=e.effective_date,n=e.change_reason;c.open({appendTo:r.find("div").eq(0),templateUrl:s.pathApp+"views/modalChangeReason.html?v="+(new Date).getTime(),controller:"ModalChangeReasonController",resolve:{content:function(){return{copy:{title:"Edit revision data"}}},date:function(){return t},reasonId:function(){return n}}}).result.then(function(o){o.date===t&&o.reasonId===n||l.saveRevision({id:e.id,change_reason:o.reasonId,effective_date:o.date}).then(function(){e.effective_date=o.date,e.change_reason=o.reasonId,a.sortBy(),a.createPage(),a.revisionCurrent.id!==g()&&a.$emit("updateContractView")})})}function g(){var n,o=0;if(a.revisionList.length){var r=t("orderBy")(a.revisionList,["effective_date","id"]);if(e.forEach(r,function(e){new Date(e.effective_date).setHours(0,0,0,0)<=(new Date).setHours(0,0,0,0)&&(n=e)}),!n)do{n=r[o],o++}while(r[o]&&r[o-1].effective_date===r[o].effective_date);return e.extend(a.revisionCurrent,n),n.id}return null}function j(e,n){void 0!==e&&(a.sortCol===e?a.sortReverse=!a.sortReverse:a.sortCol=e),void 0!==n&&(a.sortReverse=n),$=t("orderBy")(a.revisionDataList,a.sortCol,a.sortReverse)}n.debug("Controller: RevisionListController");var C=a.contract.id,$=a.revisionDataList;a.changeReasons=i.options.contract.change_reason,a.currentPage=1,a.itemsPerPage=5,a.maxSize=5,a.sortCol="revisionEntityIdObj.effective_date",a.sortReverse=!0,a.urlCSV=function(){var t=s.pathReport+(s.pathReport.indexOf("?")>-1?"&":"?"),n=a.fields;return e.forEach(n,function(n,o){t+="fields["+o+"_revision_id]=1&",e.forEach(n,function(e){t+="fields["+o+"_"+e.name+"]=1&"})}),t+="fields[sort_name]=1&fields[first_name]=1&fields[last_name]=1&fields[external_identifier]=1&fields[email]=1&fields[street_address]=1&fields[city]=1&fields[name]=1&fields[contract_contact_id]=1&fields[contract_contract_id]=1&fields[jobcontract_revision_id]=1&fields[change_reason]=1&fields[created_date]=1&fields[effective_date]=1&fields[modified_date]=1&order_bys[1][column]=id&order_bys[1][order]=ASC&order_bys[2][column]=civicrm_hrjobcontract_revision_revision_id&order_bys[2][order]=ASC&order_bys[3][column]=-&order_bys[3][order]=ASC&order_bys[4][column]=-&order_bys[4][order]=ASC&order_bys[5][column]=-&order_bys[5][order]=ASC&contract_id_op=eq&permission=access+CiviReport&row_count=&_qf_Summary_submit_csv=Preview+CSV&groups=&contract_id_value="+C+"&group_bys[civicrm_hrjobcontract_revision_revision_id]=1"}(),a.display={effectiveDate:!0,position:!0,payScale:!0,totalSalary:!0,hours:!0,placeOfWork:!0,recordedBy:!0,changeReason:!0},a.createPage=_,a.deleteRevision=h,a.modalRevisionEdit=y,a.sortBy=j,function(){b(),a.revisionDataList||(a.$broadcast("hrjc-loader-show"),v.fetchRevisions(C).then(function(e){a.revisionList=e.revisionList,a.revisionDataList=e.revisionDataList,a.$broadcast("hrjc-loader-hide")}))}()}return n.__name="RevisionListController",n.$inject=["$filter","$log","$q","$rootElement","$rootScope","$scope","$uibModal","settings","contractService","contractDetailsService","contractHourService","contractPayService","contractFilesService","contractRevisionService","contractRevisionListService"],n}),define("job-contract/controllers/form/form-general.controller",["common/moment"],function(e){"use strict";function t(t,n,o){function r(e,t){e.preventDefault(),e.stopPropagation(),n[t]=!0}function i(t,n){if(!t||!n)return null;var o,r,i,a;return i=e(n),i.add(1,"days"),a=i.diff(t,"years"),i.add(-a,"years"),r=i.diff(t,"months"),i.add(-r,"months"),o=i.diff(t,"days"),a=a>0?a>1?a+" years ":a+" year ":"",r=r>0?r>1?r+" months ":r+" month ":"",o=o>0?o>1?o+" days":o+" day":"",a+r+o||"0 days"}function a(t,n){return n=n||"min",e(t)["max"===n?"subtract":"add"](1,"day").toDate()}function c(){n.$watch("entity.details.period_start_date",function(){n.datepickerOptions.end.minDate=a(s.period_start_date,"min"),n.duration=i(s.period_start_date,s.period_end_date)}),n.$watch("entity.details.period_end_date",function(){s.period_end_date?n.datepickerOptions.start.maxDate=a(s.period_end_date,"max"):(n.datepickerOptions.start.maxDate=null,s.end_reason=null),n.duration=i(s.period_start_date,s.period_end_date)}),n.$watch("entity.details.position",function(e,t){e!==t&&s.title===t&&(n.contractForm.detailsTitle.$setViewValue(e),n.contractForm.detailsTitle.$render())}),n.$watch("entity.details.notice_amount",function(e,t){+e&&!s.notice_unit&&(n.contractForm.detailsNoticeUnit.$setValidity("required",!1),n.contractForm.detailsNoticeUnit.$dirty=!0),e!==t&&s.notice_amount_employee===t&&(s.notice_amount_employee=e)}),n.$watch("entity.details.notice_amount_employee",function(e){+e&&!s.notice_unit_employee&&(n.contractForm.detailsNoticeUnitEmployee.$setValidity("required",!1),n.contractForm.detailsNoticeUnitEmployee.$dirty=!0)}),n.$watch("entity.details.notice_unit",function(e,t){e!==t&&s.notice_unit_employee===t&&(s.notice_unit_employee=e)})}t.debug("Controller: FormGeneralController");var s=n.entity.details;n.format=o.DATE_FORMAT,n.datepickerOptions=function(){return{start:{maxDate:s.period_end_date?a(s.period_end_date,"max"):null},end:{minDate:s.period_start_date?a(s.period_start_date,"min"):null}}}(),n.dpOpen=r,function(){c()}()}return t.__name="FormGeneralController",t.$inject=["$log","$scope","HR_settings"],t}),define("job-contract/controllers/form/form-health.controller",[],function(){"use strict";function e(e,t,n){function o(e,o){e&&n.search(e,{contact_type:"Organization",contact_sub_type:o}).then(function(e){t.contacts[o]=e})}e.debug("Controller: FormHealthController"),t.contacts={Health_Insurance_Provider:[],Life_Insurance_Provider:[]},t.refreshContacts=o,function(){t.entity.health.provider&&n.getOne(t.entity.health.provider).then(function(e){t.contacts.Health_Insurance_Provider.push(e)}),t.entity.health.provider_life_insurance&&n.getOne(t.entity.health.provider_life_insurance).then(function(e){t.contacts.Life_Insurance_Provider.push(e)})}()}return e.__name="FormHealthController",e.$inject=["$log","$scope","contactService"],e}),define("job-contract/vendor/fraction",[],function(){var e=function(t,n){if(void 0!==t&&n)"number"==typeof t&&"number"==typeof n?(this.numerator=t,this.denominator=n):"string"==typeof t&&"string"==typeof n&&(this.numerator=parseInt(t),this.denominator=parseInt(n));else if(void 0===n)if(num=t,"number"==typeof num)this.numerator=num,this.denominator=1;else if("string"==typeof num){var o,r,i=num.split(" ");if(i[0]&&(o=i[0]),i[1]&&(r=i[1]),o%1==0&&r&&r.match("/"))return new e(o).add(new e(r));if(!o||r)return;if("string"==typeof o&&o.match("/")){var a=o.split("/");this.numerator=a[0],this.denominator=a[1]}else{if("string"==typeof o&&o.match("."))return new e(parseFloat(o));this.numerator=parseInt(o),this.denominator=1}}this.normalize()};return e.prototype.clone=function(){return new e(this.numerator,this.denominator)},e.prototype.toString=function(){if("NaN"===this.denominator)return"NaN";var e=this.numerator/this.denominator>0?Math.floor(this.numerator/this.denominator):Math.ceil(this.numerator/this.denominator),t=this.numerator%this.denominator,n=this.denominator,o=[];return 0!=e&&o.push(e),0!=t&&o.push((0===e?t:Math.abs(t))+"/"+n),o.length>0?o.join(" "):0},e.prototype.rescale=function(e){return this.numerator*=e,this.denominator*=e,this},e.prototype.add=function(t){var n=this.clone();return t=t instanceof e?t.clone():new e(t),td=n.denominator,n.rescale(t.denominator),t.rescale(td),n.numerator+=t.numerator,n.normalize()},e.prototype.subtract=function(t){var n=this.clone();return t=t instanceof e?t.clone():new e(t),td=n.denominator,n.rescale(t.denominator),t.rescale(td),n.numerator-=t.numerator,n.normalize()},e.prototype.multiply=function(t){var n=this.clone();if(t instanceof e)n.numerator*=t.numerator,n.denominator*=t.denominator;else{if("number"!=typeof t)return n.multiply(new e(t));n.numerator*=t}return n.normalize()},e.prototype.divide=function(t){var n=this.clone();if(t instanceof e)n.numerator*=t.denominator,n.denominator*=t.numerator;else{if("number"!=typeof t)return n.divide(new e(t));n.denominator*=t}return n.normalize()},e.prototype.equals=function(t){t instanceof e||(t=new e(t));var n=this.clone().normalize(),t=t.clone().normalize();return n.numerator===t.numerator&&n.denominator===t.denominator},e.prototype.normalize=function(){var t=function(e){return"number"==typeof e&&(e>0&&e%1>0&&e%1<1||e<0&&e%-1<0&&e%-1>-1)},n=function(e,t){if(t){var n=Math.pow(10,t);return Math.round(e*n)/n}return Math.round(e)};return function(){if(t(this.denominator)){var o=n(this.denominator,9),r=Math.pow(10,o.toString().split(".")[1].length);this.denominator=Math.round(this.denominator*r),this.numerator*=r}if(t(this.numerator)){var o=n(this.numerator,9),r=Math.pow(10,o.toString().split(".")[1].length);this.numerator=Math.round(this.numerator*r),this.denominator*=r}var i=e.gcf(this.numerator,this.denominator);return this.numerator/=i,this.denominator/=i,(this.numerator<0&&this.denominator<0||this.numerator>0&&this.denominator<0)&&(this.numerator*=-1,this.denominator*=-1),this}}(),e.gcf=function(t,n){var o=[],r=e.primeFactors(t),i=e.primeFactors(n);return r.forEach(function(e){var t=i.indexOf(e);t>=0&&(o.push(e),i.splice(t,1))}),0===o.length?1:function(){var e,t=o[0];for(e=1;eTHE FILE IS TOO LARGE AND CANNOT BE UPLOADED. PLEASE REDUCE THE SIZE OF THE FILE AND TRY AGAIN.

    "),fte:c.trustAsHtml("
    FTE stands forFull Time Equivalent. This is a useful measure foran organisation that has peopleworking part-time.For a full-time person, FTE is always equal to1.0, whereas for a part-time person, the FTE will representthe fraction of standard hours that the person works on aregular basis.
    E.g. if the standard working day at an organisationcomprises of 8 hours, then a person who regularly works for8 hours each day would be considered to be full- time andwould have an FTE value of 1.0. A person who regularly worksfor only 4 hours each day would be considered to be apart-time person and would have an FTE value of 0.5. If theorganisation had 10 people, each with an FTE of 1.0 theactual headcount of full-time people would be 10 and theFTE headcount (equal to actual headcount multiplied by theFTE value) would also be 10. However, if the organisationhad another 10 people who each worked part-time with an FTEvalue of 0.5 the actual headcount of part-time people wouldbe 10 while the FTE headcount would only be 5. Thus for anorganisation that had a total of 10 full-time people, and 10part-time people (each with an FTE of 0.5) the actualheadcount for the organisation would be 20 while the FTEheadcount would be 15.
    ")},s.uploader={details:{contract_file:g.uploader("civicrm_hrjobcontract_details")},pension:{evidence_file:g.uploader("civicrm_hrjobcontract_pension",1)}},s.cancel=R,s.filesValidate=P,s.openOptionsEditor=F,s.openHoursLocationOptionsEditor=T,s.openPayScaleGradeOptionsEditor=U,s.openAnnualBenefitOptionsEditor=I,s.openAnnualDeductionOptionsEditor=q,s.save=E,function(){e.copy(j,s.entity),s.entity.contract={is_primary:0},e.forEach(s.uploader,function(t){e.forEach(t,function(e){e.onAfterAddingAll=function(){s.filesValidate()}})}),L(),a.$broadcast("hrjc-loader-show"),M().then(function(){a.$broadcast("hrjc-loader-hide")})}()}return o.__name="ModalContractNewController",o.$inject=["$log","$q","$rootElement","$rootScope","$sce","$scope","$uibModalInstance","$uibModal","crmAngService","Contract","contractService","contractDetailsService","contractHourService","contractPayService","contractLeaveService","contractHealthService","contractPensionService","contractFilesService","model","OptionGroup","utilsService","utils","settings","pubSub"],o}),define("job-contract/controllers/modal/modal-contract.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function o(o,r,i,a,c,s,l,u,d,f,p,m,v,_,h,b,y,g,j,C,$,S,w,D,R,P,A){function M(){if("view"===g||e.equals(j,o.entity)&&e.equals($,o.files)&&!o.uploader.details.contract_file.queue.length&&!o.uploader.pension.evidence_file.queue.length)return o.$broadcast("hrjc-loader-hide"),void i.dismiss("cancel");R.debug&&e.forEach(j,function(t,n){e.equals(t,o.entity[n])||(P.debug("======================"),P.debug("Changed entity: "+n),P.debug("Before:"),P.debug(t),P.debug("After:"),P.debug(o.entity[n]))}),r.open({appendTo:c.find("div").eq(0),templateUrl:R.pathApp+"views/modalDialog.html?v="+(new Date).getTime(),size:"sm",controller:"ModalDialogController",resolve:{content:function(){return{copyCancel:"No",title:"Alert",msg:"Are you sure you want to cancel? Changes will be lost!"}}}}).result.then(function(e){e&&(o.$broadcast("hrjc-loader-hide"),i.dismiss("cancel"))})}function E(){return r.open({appendTo:c.find("div").eq(0),templateUrl:R.pathApp+"views/modalChangeReason.html?v="+(new Date).getTime(),controller:"ModalChangeReasonController",resolve:{content:function(){return{copy:{title:K.title}}},date:null,reasonId:null}}).result}function L(){var t=k("period_end_date"),n=k("period_start_date"),r=!e.equals(o.entity.leave,j.leave);return n||t||r}function F(){return r.open({appendTo:c.find("div").eq(0),templateUrl:R.pathApp+"views/modalConfirmEdit.html?v="+(new Date).getTime(),controller:"ModalDialogController",resolve:{content:function(){return{msg:"Save without making a new revision?"}}}}).result}function T(e,t){return o.$broadcast("hrjc-loader-show"),f.validateEffectiveDate({contact_id:R.contactId,effective_date:t}).then(function(n){if(n.success)return Y(e,t);CRM.alert(n.message,"Error","error"),o.$broadcast("hrjc-loader-hide")},function(e){})}function U(){o.$broadcast("hrjc-loader-show"),o.entity.details.period_end_date=o.entity.details.period_end_date||"";var t,n,s,l,u,f=e.copy(o.entity),g=o.filesTrash,j=o.uploader,C={contract:d.save(f.contract),details:p.save(f.details),hour:m.save(f.hour),pay:v.save(f.pay),leave:_.save(f.leave),health:h.save(f.health),pension:b.save(f.pension)},$=[],S=[];for(t in g)for(s=0,l=g[t].length,s;so.fileMaxSize&&e.remove()})})}),j.details.contract_file.queue.length&&$.push(y.upload(j.details.contract_file,f.details.jobcontract_revision_id)),j.pension.evidence_file.queue.length&&$.push(y.upload(j.pension.evidence_file,f.pension.jobcontract_revision_id)),t.details.period_start_date=f.details.period_start_date,t.details.period_end_date=f.details.period_end_date,t.pay.annual_benefits=f.pay.annual_benefits,t.pay.annual_deductions=f.pay.annual_deductions,$.length?(u=r.open({appendTo:c.find("div").eq(0),templateUrl:R.pathApp+"views/modalProgress.html?v="+(new Date).getTime(),size:"sm",controller:"ModalProgressController",resolve:{uploader:function(){return j},promiseFilesUpload:function(){return $}}}),t.files=u.result,a.all(t)):(t.haveEntitlementFieldsChanged=L(),t)}).then(function(e){o.$broadcast("hrjc-loader-hide"),i.close(e),A.publish("Contract::updated")},function(e){o.$broadcast("hrjc-loader-hide"),CRM.alert(e,"Error","error")})}function I(e){var t=l("formatDate")(e,Date);return"Unspecified"!==t?t:e}function q(){return a.all([{name:"hrjobcontract_health_health_plan_type",key:"plan_type"},{name:"hrjobcontract_health_life_insurance_plan_type",key:"plan_type_life_insurance"}].map(function(e){h.getOptions(e.name,!0).then(function(n){s.options.health[e.key]=t.transform(n,function(e,t){e[t.key]=t.value},{})})}))}function H(e,t){var n=o.files[t];o.filesTrash[t].push(n[e]),n.splice(e,1)}function x(){var e=t.every(o.uploader,function(e){return t.every(e,function(e){return!e.queue||t.every(e.queue,function(e){return e.file.sizeo.fileMaxSize&&e.remove()}),T.queue.length&&D.push(y.upload(T,l))}),D.length?(s=r.open({appendTo:c.find("div").eq(0),templateUrl:R.pathApp+"views/modalProgress.html",size:"sm",controller:"ModalProgressController",resolve:{uploader:function(){return C},promiseFilesUpload:function(){return D}}}),e.files=s.result,a.all(e)):(e.haveEntitlementFieldsChanged=L(),e)}).then(function(e){o.$broadcast("hrjc-loader-hide"),i.close(e),A.publish("Contract::updated")})):(o.$broadcast("hrjc-loader-hide"),i.close())}function J(e,n){var o={hrjobcontract_details_contract_type:"contract_type",hrjobcontract_details_location:"location",hrjobcontract_details_end_reason:"end_reason",hrjobcontract_health_health_plan_type:"provider_life_insurance"};u.loadForm(e).on("crmUnload",function(){"hrjobcontract_health_health_plan_type"===n?h.getOptions(n,!0).then(function(e){var n={};t.each(e,function(e){n[e.key]=e.value}),s.options.health.plan_type=n,s.options.health.plan_type_life_insurance=n}):p.getOptions(n,!0).then(function(e){s.options.details[o[n]]=e.obj})})}function V(){u.loadForm("/civicrm/hours_location?reset=1").on("crmUnload",function(){w.getHoursLocation().then(function(e){o.utils.hoursLocation=e})})}function G(){u.loadForm("/civicrm/pay_scale?reset=1").on("crmUnload",function(){w.getPayScaleGrade().then(function(e){o.utils.payScaleGrade=e})})}function W(){u.loadForm("/civicrm/admin/options/hrjc_benefit_name?reset=1").on("crmUnload",function(){Z("hrjc_benefit_name","benefit_name")})}function X(){u.loadForm("/civicrm/admin/options/hrjc_deduction_name?reset=1").on("crmUnload",function(){Z("hrjc_deduction_name","deduction_name")})}function Z(e,n){return S.valuesOf(e,!1).then(function(e){s.options.pay[n]=t.mapValues(t.indexBy(e,"value"),"label")})}P.debug("Controller: ModalContractController");var K=C.copy||{};K.close=K.close||"Close",K.save=K.save||"Save changes",K.title=K.title||"Contract",o.action=g||"view",o.allowSave=void 0!==C.allowSave&&C.allowSave,o.copy=K,o.entity={},o.fileMaxSize=R.CRM.maxFileSize||0,o.files={},o.filesTrash={},o.isDisabled=void 0===C.isDisabled||C.isDisabled,o.isPrimaryDisabled=+j.contract.is_primary,o.showIsPrimary=D.contractListLen>1&&"change"!==g,o.uploader={details:{contract_file:y.uploader("civicrm_hrjobcontract_details")},pension:{evidence_file:y.uploader("civicrm_hrjobcontract_pension",1)}},o.utils=D,o.cancel=M,o.fileMoveToTrash=H,o.filesValidate=x,o.save=N,o.openOptionsEditor=J,o.openHoursLocationOptionsEditor=V,o.openPayScaleGradeOptionsEditor=G,o.openAnnualBenefitOptionsEditor=W,o.openAnnualDeductionOptionsEditor=X,function(){z(),O(),i.opened.then(function(){s.$broadcast("hrjc-loader-hide")}),s.$broadcast("hrjc-loader-show"),q().then(function(){s.$broadcast("hrjc-loader-hide")})}()}return o.__name="ModalContractController",o.$inject=["$scope","$uibModal","$uibModalInstance","$q","$rootElement","$rootScope","$filter","crmAngService","contractService","contractRevisionService","contractDetailsService","contractHourService","contractPayService","contractLeaveService","contractHealthService","contractPensionService","contractFilesService","action","entity","content","files","OptionGroup","utilsService","utils","settings","$log","pubSub"],o}),define("job-contract/controllers/modal/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,o,r){function i(){o.dismiss("Cancel")}function a(e){o.close(e||!0)}e.debug("Controller: ModalDialogController"),t.copyCancel=r.copyCancel||"Cancel",t.copyConfirm=r.copyConfirm||"Yes",t.msg=r.msg||"",t.title=r.title||"CiviHR Job Contract",t.cancel=i,t.confirm=a}return e.__name="ModalDialogController",e.$inject=["$log","$scope","$timeout","$uibModalInstance","content"],e}),define("job-contract/controllers/modal/modal-progress.controller",[],function(){"use strict";function e(e,t,n,o,r,i,a){function c(){r.dismiss("File upload canceled")}e.debug("Controller: ModalProgressController");var s,l;n.uploader=i,n.cancel=c,function(){for(s in i)for(l in i[s])i[s][l].queue.length&&(i[s][l].item=i[s][l].queue[0].file.name),i[s][l].onProgressItem=function(e){this.item=e.file.name};t.all(a).then(function(e){o(function(){r.close(e)},500)})}()}return e.__name="ModalProgressController",e.$inject=["$log","$q","$scope","$timeout","$uibModalInstance","uploader","promiseFilesUpload"],e}),define("job-contract/controllers/modal/modal-revision.controller",["common/angular"],function(e){"use strict";function t(t,n,o,r,i,a,c,s,l,u,d,f,p,m,v){function _(){a.dismiss("cancel")}function h(){var e=(i.currentPage-1)*i.itemsPerPage,t=e+i.itemsPerPage;i.revisionDataListPage=i.revisionDataList.slice(e,t)}function b(){var e,t=0,n=i.fields.length;for(t;t-1?"&":"?"),r=i.entity;return e.forEach(i.fields,function(e){t="editor_name"!==e.name?e.name:"editor_uid",n=e.extends?"":r+"_",e.selected&&(o+="fields["+n+t+"]=1&")}),o+="fields[sort_name]=1&fields[first_name]=1&fields[last_name]=1&fields[external_identifier]=1&fields[email]=1&fields[street_address]=1&fields[city]=1&fields[name]=1&fields[contract_contact_id]=1&fields[contract_contract_id]=1&fields[jobcontract_revision_id]=1&fields[change_reason]=1&fields[created_date]=1&fields[effective_date]=1&fields[modified_date]=1&order_bys[1][column]=id&order_bys[1][order]=ASC&order_bys[2][column]=civicrm_hrjobcontract_revision_revision_id&order_bys[2][order]=ASC&order_bys[3][column]=-&order_bys[3][order]=ASC&order_bys[4][column]=-&order_bys[4][order]=ASC&order_bys[5][column]=-&order_bys[5][order]=ASC&contract_id_op=eq&permission=access+CiviReport&row_count=&_qf_Summary_submit_csv=Preview+CSV&groups=&contract_id_value="+l[0].jobcontract_id+"&group_bys[civicrm_hrjobcontract_revision_revision_id]=1"}n.debug("Controller: ModalRevisionController"),i.$broadcast("hrjc-loader-show"),i.currentPage=1,i.entity=u,i.fields=e.copy(d),i.itemsPerPage=5,i.revisionDataList=[],i.revisionList=[],i.sortCol="effective_date",i.subFields={},i.maxSize=5,i.modalContract=p,i.sortReverse=!0,i.urlCSV=S(),i.cancel=_,i.createPage=h,i.sortBy=C,i.toggleFieldsSelected=$,function(){b(),y(),g(),j(),i.sortBy(),a.opened.then(function(){r.$broadcast("hrjc-loader-hide")})}()}return t.__name="ModalRevisionController",t.$inject=["$filter","$log","$q","$rootScope","$scope","$uibModalInstance","settings","revisionDataList","revisionList","entity","fields","model","modalContract","utils","contactService"],t}),define("job-contract/modules/job-contract.controllers",["common/angular","job-contract/controllers/contract.controller","job-contract/controllers/contract-list.controller","job-contract/controllers/revision-list.controller","job-contract/controllers/form/form-general.controller","job-contract/controllers/form/form-health.controller","job-contract/controllers/form/form-hour.controller","job-contract/controllers/form/form-leave.controller","job-contract/controllers/form/form-pay.controller","job-contract/controllers/form/form-pension.controller","job-contract/controllers/modal/modal-change-reason.controller","job-contract/controllers/modal/modal-contract-new.controller","job-contract/controllers/modal/modal-contract.controller","job-contract/controllers/modal/modal-dialog.controller","job-contract/controllers/modal/modal-progress.controller","job-contract/controllers/modal/modal-revision.controller"],function(e,t,n,o,r,i,a,c,s,l,u,d,f,p,m,v){"use strict";return e.module("job-contract.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(o.__name,o).controller(r.__name,r).controller(i.__name,i).controller(a.__name,a).controller(c.__name,c).controller(s.__name,s).controller(l.__name,l).controller(u.__name,u).controller(d.__name,d).controller(f.__name,f).controller(p.__name,p).controller(m.__name,m).controller(v.__name,v)}),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,o,r){return n.debug("AbsenceTypeAPI"),o.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(o,i,a){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),a=e.assign({},a,{absence_type_id:o,date:t(i).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",a).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,o,r,i,a){return t.debug("AbsenceType"),o.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return a.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return i.calculateToilExpiryDate(e,t,n)},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(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/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,o){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=o.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,o,r,i){return e.debug("AbsencePeriod"),n.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(i.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return o.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),function(e,t){function n(){var e={nodiff:"",year:"year",years:"years",month:"month",months:"months",day:"day",days:"days",hour:"hour",hours:"hours",minute:"minute",minutes:"minutes",second:"second",seconds:"seconds",delimiter:" "};moment.fn.preciseDiff=function(e){return moment.preciseDiff(this,e)},moment.preciseDiff=function(t,n){function o(t,n){return t+" "+e[n+(1===t?"":"s")]}var r=moment(t),i=moment(n);if(r.isSame(i))return e.nodiff;if(r.isAfter(i)){var a=r;r=i,i=a}var c=i.year()-r.year(),s=i.month()-r.month(),l=i.date()-r.date();if(l<0){var u=moment(i.year()+"-"+(i.month()+1),"YYYY-MM").subtract("months",1).daysInMonth();l=u
    Length Of Employment
    "),e(".lengthEmployment").html(a),o&&l<0&&e(".lengthEmployment").css({color:"#FF0000"})}var r=CRM.grID,i=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(2) .crm-custom-data").html(),a=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(3) .crm-custom-data").html();i&&o(i,a,r),e(document).on("click","#_qf_CustomData_upload",function(){e(document).ajaxSuccess(function(t,n,i){i.extraData&&"CRM_Contact_Form_Inline_CustomData"==i.extraData.class_name&&i.extraData.groupID==r&&setTimeout(function(){var t=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(2) .crm-custom-data").html(),n=e("#custom-set-content-"+r+" .crm-inline-block-content div:nth-child(3) .crm-custom-data").html();t&&o(t,n,r)},300)})})}(CRM.$,CRM._),define("job-contract/modules/job-contract.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/routers/compu-ng-route","common/modules/directives","common/services/dom-event-trigger","common/services/pub-sub","common/services/angular-date/date-format","common/services/crm-ang.service","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/absence-period.model","job-contract/vendor/fraction","job-contract/vendor/job-summary"],function(e){"use strict";e.module("job-contract.core",["ngAnimate","compuNgRoute","ngResource","angularFileUpload","ui.bootstrap","ui.select","common.angularDate","common.services","common.directives","common.filters","leave-absences.models"])}),define("job-contract/directives/contact.directive",[],function(){"use strict";function e(e,t,n,o){return t.debug("Directive: hrjcContact"),{restrict:"A",scope:{renderAsLink:"=?hrjcContactLink",contactId:"=?hrjcContact"}, +template:"{{contact.label}}",link:function(t,n){t.contactId&&t.$watch("contactId",function(r){o.getOne(t.contactId).then(function(o){t.contact=o,t.renderAsLink&&(n.html('{{contact.label}}'),e(n.contents())(t))})})}}}return e.__name="hrjcContact",e.$inject=["$compile","$log","settings","contactService"],e}),define("job-contract/directives/loader.directive",[],function(){"use strict";function e(e,t){return e.debug("Directive: hrjcLoader"),{link:function(e,t,n){function o(){var e=window.getComputedStyle(t[0]).position;return"relative"===e||"absolute"===e||"fixed"===e}function r(){o()||(t.css("position","relative"),s=!0),t.append(a),c=!0}function i(){c&&a.parentNode.removeChild(a),c=!1,s&&t.css("position","")}var a=document.createElement("div"),c=!1,s=!1;a.className="hrjc-loader spinner",n.hrjcLoaderShow&&r(),e.$on("hrjc-loader-show",function(){r()}),e.$on("hrjc-loader-hide",function(){i()})}}}return e.__name="hrjcLoader",e.$inject=["$log","$rootScope"],e}),define("job-contract/directives/number.directive",[],function(){"use strict";function e(e){return e.debug("Directive: hrjcNumber"),{require:"ngModel",link:function(e,t,n,o){var r=2,i=n.hrjcNumberFloat||!1,a=n.hrjcToHours||!1,c=n.hrjcNotNegative||!1;n.hrjcNumber&&"number"==typeof+n.hrjcNumber&&(r=n.hrjcNumber),t.bind("blur",function(){var e=parseFloat(o.$viewValue)||0;c&&e<0&&(e=0),a&&(e=.25*Math.ceil(e/.25)),o.$setViewValue(i?Math.round(100*e)/100:e.toFixed(r)),o.$render()})}}}return e.__name="hrjcNumber",e.$inject=["$log"],e}),define("job-contract/directives/validate.directive",["common/angular"],function(e){"use strict";function t(t){return t.debug("Directive: hrjcValidate"),{restrict:"A",require:"^form",scope:{isWarning:"=?hrjcValidateWarning"},link:function(t,n,o,r){function i(e,t){n.toggleClass("has-success",!e&&!t),f.toggleClass("glyphicon-ok",!e&&!t)}function a(e,t){n.toggleClass("has-warning",!e&&t),f.toggleClass("glyphicon-warning-sign",!e&&t)}function c(e){n.toggleClass("has-error",e),f.toggleClass("glyphicon-remove",e)}var s=n[0].querySelector("[name]"),l=e.element(s),u=l.attr("name"),d=document.createElement("span"),f=e.element(d);u&&(n.addClass("has-feedback"),f.addClass("glyphicon form-control-feedback"),l.after(f),t.$watch(function(){return r[u]&&r[u].$invalid},function(e){r[u].$dirty&&(i(e,t.isWarning),c(e))}),void 0!==t.isWarning&&t.$watch("isWarning",function(e){var t=r[u].$invalid;r[u].$dirty&&(i(t,e),a(t,e))}),l.bind("blur",function(){c(r[u].$invalid)}))}}}return t.__name="hrjcValidate",t.$inject=["$log"],t}),define("job-contract/modules/job-contract.directives",["common/angular","job-contract/directives/contact.directive","job-contract/directives/loader.directive","job-contract/directives/number.directive","job-contract/directives/validate.directive"],function(e,t,n,o,r){"use strict";return e.module("job-contract.directives",[]).directive(t.__name,t).directive(n.__name,n).directive(o.__name,o).directive(r.__name,r)}),define("job-contract/filters/capitalize.filter",[],function(){"use strict";function e(e){return e.debug("Filter: capitalize"),function(e){return e?e.replace(/([^\W_]+[^\s-]*) */g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}):""}}return e.__name="capitalize",e.$inject=["$log"],e}),define("job-contract/filters/format-amount.filter",[],function(){"use strict";function e(e){return e.debug("Filter: formatAmount"),function(e){return e&&-1===e.indexOf(".")?e+".00":e}}return e.__name="formatAmount",e.$inject=["$log"],e}),define("job-contract/filters/format-period.filter",[],function(){"use strict";function e(e,t){return t.debug("Filter: formatPeriod"),function(t){return t?e("date")(t,"yyyy/MM/dd"):"Unspecified"}}return e.__name="formatPeriod",e.$inject=["$filter","$log"],e}),define("job-contract/filters/get-obj-by-id.filter",[],function(){"use strict";function e(e){return e.debug("Filter: getObjById"),function(e,t,n){if(!e)return null;for(var o=0,r=e.length;o .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..920619b7347 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; } @@ -48,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; } } @@ -62,13 +67,13 @@ input[type="checkbox"], } .text-required { - color:red; + color: #f00; } .form-group.required { - .control-label:after { - content:"*"; - color:red; + .control-label:first-child::after { + color: #f00; + content: '*'; } } @@ -83,25 +88,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/civihr/partials/_shoreditch-imports.scss b/hrjobcontract/scss/civihr/partials/_shoreditch-imports.scss new file mode 100644 index 00000000000..6cb8835c36e --- /dev/null +++ b/hrjobcontract/scss/civihr/partials/_shoreditch-imports.scss @@ -0,0 +1,8 @@ +@import '../../../org.civicrm.shoreditch/scss/bootstrap/overrides/variables'; +@import '../../../org.civicrm.shoreditch/scss/bootstrap/mixins/prefix'; + +##{$module} { + @import '../../../org.civicrm.shoreditch/scss/angular/overrides/uib-datepicker'; +} + +@import '../../../org.civicrm.shoreditch/scss/angular/overrides/outside-namespace/uib-datepicker-mobile'; diff --git a/hrjobcontract/scss/hrjc.scss b/hrjobcontract/scss/hrjc.scss index 8f69234ccb5..a765cfcdd33 100644 --- a/hrjobcontract/scss/hrjc.scss +++ b/hrjobcontract/scss/hrjc.scss @@ -1,125 +1,125 @@ -@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'; + +@import 'bootstrap-compass'; +@import 'civihr/bootstrap-variables'; +@import 'bootstrap/variables'; ##{$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-compass"; - @import "civihr/bootstrap-variables"; - - @import "bootstrap/variables"; - @import "bootstrap/mixins"; + @import 'bootstrap-sprockets'; + @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 'civihr/partials/shoreditch-imports'; diff --git a/hrjobcontract/templates/CRM/Hrjobcontract/Page/HoursLocation.tpl b/hrjobcontract/templates/CRM/Hrjobcontract/Page/HoursLocation.tpl index 978b6c476a0..861ff770828 100644 --- a/hrjobcontract/templates/CRM/Hrjobcontract/Page/HoursLocation.tpl +++ b/hrjobcontract/templates/CRM/Hrjobcontract/Page/HoursLocation.tpl @@ -45,7 +45,7 @@ {foreach from=$rows item=row} - {$row.location} + {$row.location} {$row.standard_hours} {$row.periodicity} {if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if} @@ -62,9 +62,6 @@ {/if}
    - {else}
    diff --git a/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl b/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl index 9e4465165da..f6458ca93af 100755 --- a/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl +++ b/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl @@ -46,7 +46,7 @@ {foreach from=$rows item=row} - {$row.pay_scale} + {$row.pay_scale} {$row.currency} {$row.amount} {$row.pay_frequency} diff --git a/hrjobcontract/views/modalChangeReason.html b/hrjobcontract/views/modalChangeReason.html index f9d685d1991..c1f53828ced 100644 --- a/hrjobcontract/views/modalChangeReason.html +++ b/hrjobcontract/views/modalChangeReason.html @@ -15,6 +15,11 @@
    +
    + + + +
    diff --git a/hrjobcontract/views/modalForm.html b/hrjobcontract/views/modalForm.html index 427740866da..4c8085cb001 100755 --- a/hrjobcontract/views/modalForm.html +++ b/hrjobcontract/views/modalForm.html @@ -40,6 +40,11 @@

    General

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

    General

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

    General

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

    Hours

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

    Pay

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

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

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

    Health Insurance

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

    Life Insurance

    +
    + + + +
    diff --git a/hrmed/info.xml b/hrmed/info.xml index a7dc8653263..37fabcb8da6 100644 --- a/hrmed/info.xml +++ b/hrmed/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrprofile/info.xml b/hrprofile/info.xml index 08d18387b97..172a691622f 100644 --- a/hrprofile/info.xml +++ b/hrprofile/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrqual/info.xml b/hrqual/info.xml index 119509efb49..c0f9a2db675 100644 --- a/hrqual/info.xml +++ b/hrqual/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrrecruitment/info.xml b/hrrecruitment/info.xml index b7b17903a2b..7088bec0231 100644 --- a/hrrecruitment/info.xml +++ b/hrrecruitment/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrreport/info.xml b/hrreport/info.xml index 02260d4c59a..894003b8475 100644 --- a/hrreport/info.xml +++ b/hrreport/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrstaffdir/info.xml b/hrstaffdir/info.xml index ba116c7a9c6..aaf5b29e776 100644 --- a/hrstaffdir/info.xml +++ b/hrstaffdir/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrui/hrui.php b/hrui/hrui.php index 9af1155a462..892eae53b15 100644 --- a/hrui/hrui.php +++ b/hrui/hrui.php @@ -82,7 +82,15 @@ function hrui_civicrm_buildForm($formName, &$form) { } if ($formName === 'CRM_Admin_Form_Options' && $form->elementExists('value')) { - $form->removeElement('value'); + $optionGroupName = $form->getVar('_gName'); + $optionGroupsToCheck = [ + 'hrleaveandabsences_toil_amounts', + 'hrleaveandabsences_leave_days_amounts' + ]; + + if (!in_array($optionGroupName, $optionGroupsToCheck)) { + $form->removeElement('value'); + } } if ($form instanceof CRM_Admin_Form_Setting_Localization) { diff --git a/hrui/info.xml b/hrui/info.xml index 0478f9603ea..4150f063766 100644 --- a/hrui/info.xml +++ b/hrui/info.xml @@ -8,8 +8,8 @@ CiviCRM LLC info@civicrm.org - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/hrui/templates/CRM/Contact/Page/View/Summary.tpl b/hrui/templates/CRM/Contact/Page/View/Summary.tpl index d4c338a9b5b..ce11a92063f 100644 --- a/hrui/templates/CRM/Contact/Page/View/Summary.tpl +++ b/hrui/templates/CRM/Contact/Page/View/Summary.tpl @@ -47,7 +47,7 @@ {* CRM-12735 - Conditionally include the Actions and Edit buttons if contact is NOT in trash.*} {if !$isDeleted} - {if $canAccessCiviCRM} + {if call_user_func(array('CRM_Core_Permission','check'), 'access CiviCRM')}
  • {if !empty($alternativeActionsTemplate)} {include file="$alternativeActionsTemplate"} diff --git a/hrui/templates/CRM/common/footer.tpl b/hrui/templates/CRM/common/footer.tpl index 7095af499e3..217e9f3ae22 100644 --- a/hrui/templates/CRM/common/footer.tpl +++ b/hrui/templates/CRM/common/footer.tpl @@ -23,8 +23,7 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} - -{if $canAccessCiviCRM } +{if call_user_func(array('CRM_Core_Permission','check'), 'access CiviCRM')} {include file="CRM/common/accesskeys.tpl"} {if !empty($contactId)} {include file="CRM/common/contactFooter.tpl"} @@ -34,7 +33,7 @@ {* PCHR-1323 - Display CiviHR version info. *} {ts}Powered by CiviHR {/ts} {civihrVersion}. - {if $isRoot && !empty ($footer_status_severity)} + {if !empty($footer_status_severity)} {$footer_status_message}.   diff --git a/org.civicrm.bootstrapcivihr/css/civihr.css b/org.civicrm.bootstrapcivihr/css/civihr.css index 8cd8418aaf2..ac51b87a452 100644 --- a/org.civicrm.bootstrapcivihr/css/civihr.css +++ b/org.civicrm.bootstrapcivihr/css/civihr.css @@ -1 +1 @@ -#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4d4d69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase}#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff}#bootstrap-theme .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub}.crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .chr_appraisal-cycle-summary__details>.chr_appraisal-cycle-summary__meta{margin-right:15px}#bootstrap-theme .chr_appraisal-cycle-summary__actions{display:inline-block}#bootstrap-theme .chr_appraisal-cycle-summary__actions__toggle{color:inherit}#bootstrap-theme .chr_appraisal-cycle-summary__meta{font-size:16px;font-weight:600;line-height:1.1}#bootstrap-theme .chr_leave-list:before, #bootstrap-theme .chr_leave-list:after{content:" ";display:table}#bootstrap-theme .chr_leave-list:after{clear:both}#bootstrap-theme .chr_leave-list>.chr_leave-list__type{margin-bottom:10px}#bootstrap-theme .chr_leave-list__type>.chr_leave-list__type__color{margin-right:5px}#bootstrap-theme .chr_leave-list__type__color{background:#e8eef0;display:inline-block;height:15px;vertical-align:sub;width:15px}#bootstrap-theme .chr_leave-list__type__count{float:right}#bootstrap-theme .chr_scroll-shadows__wrapper{overflow:hidden;position:relative}#bootstrap-theme .chr_scroll-shadows__shadows{overflow-x:auto}#bootstrap-theme .chr_scroll-shadows__shadows::before, #bootstrap-theme .chr_scroll-shadows__shadows::after{box-shadow:0 0 10px 1px rgba(48,40,40,0.5);content:'';display:block;height:calc(100% - 10px);opacity:0;position:absolute;top:5px;transition:opacity 0.2s ease-out;width:1px;z-index:1}#bootstrap-theme .chr_scroll-shadows__shadows::before{left:-1px}#bootstrap-theme .chr_scroll-shadows__shadows::after{right:-1px}#bootstrap-theme .chr_scroll-shadows__shadows--show-left::before, #bootstrap-theme .chr_scroll-shadows__shadows--show-right::after{opacity:1}#bootstrap-theme .chr_scroll-shadows__content{display:inline-block;min-width:100%}#bootstrap-theme .chr_sickness-days{display:inline-block;width:165px}#bootstrap-theme .chr_sickness-days--danger .chr_sickness-days__count{background:#cf3458}#bootstrap-theme .chr_sickness-days__count{background:#44cb7e;color:white;font-size:6.5384615385em;text-align:center}#bootstrap-theme .chr_sickness-days__label{background:#e8eef0;font-size:1.3846153846em;padding:5px 0;text-align:center;text-transform:uppercase}#bootstrap-theme .chr_steps{margin:0}#bootstrap-theme .chr_steps:before, #bootstrap-theme .chr_steps:after{content:" ";display:table}#bootstrap-theme .chr_steps:after{clear:both}#bootstrap-theme .chr_steps__step{display:table;float:left}#bootstrap-theme .chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:16px}#bootstrap-theme .chr_steps__step:not(:last-child){margin-right:6px}#bootstrap-theme .chr_steps__step:not(:last-child) .chr_steps__step__arrow:before{border-left-color:#fff;margin-left:6px;z-index:1}#bootstrap-theme .chr_steps__step__arrow{background:#4d4d69;border-color:#4d4d69;color:#fff;display:table-cell;height:24px;line-height:24px;padding:0 10px 0 10px;position:relative}#bootstrap-theme .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps__step__arrow:before{content:"";border-color:transparent;border-style:solid;border-width:12px 0 12px 6px;display:block;height:0;left:100%;margin-top:-12px;position:absolute;top:50%;width:0}#bootstrap-theme .chr_steps__step__arrow:after{border-left-color:inherit;z-index:2}#bootstrap-theme .chr_steps__step__legend{display:table-row}#bootstrap-theme .chr_steps__step__legend>.chr_steps__step__legend__content{margin-top:10px}#bootstrap-theme .chr_steps__step__legend__content{background:white;border:1px solid #4d4d69;font-size:12px;padding:10px 4px;width:100%}#bootstrap-theme .chr_steps--compact>.chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:11px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow{font-size:12px;font-weight:600;height:28px;line-height:28px;padding:0 5px 0 10px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:before{border-width:14px 0 14px 6px;margin-top:-14px}#bootstrap-theme .chr_steps--flex{display:flex}#bootstrap-theme .chr_steps--flex .chr_steps__step{display:block;flex-grow:1;float:none}#bootstrap-theme .chr_steps--flex .chr_steps__step__arrow{display:inline-block;text-align:center;width:100%}#bootstrap-theme .chr_steps--flex .chr_steps__step__legend{display:block}#bootstrap-theme .chr_steps__step--danger>.chr_steps__step__arrow{background:#cf3458;border-color:#cf3458}#bootstrap-theme .chr_steps__step--danger .chr_steps__step__legend__content{border-color:#cf3458}#bootstrap-theme .chr_steps__step--primary>.chr_steps__step__arrow{background:#0071bd;border-color:#0071bd}#bootstrap-theme .chr_steps__step--primary .chr_steps__step__legend__content{border-color:#0071bd}#bootstrap-theme .chr_timeline{margin:0}#bootstrap-theme .chr_timeline:before, #bootstrap-theme .chr_timeline:after{content:" ";display:table}#bootstrap-theme .chr_timeline:after{clear:both}#bootstrap-theme .chr_timeline>.chr_timeline__entry{padding:2.6923076923em 0 0 3.0769230769em;position:relative}#bootstrap-theme .chr_timeline>.chr_timeline__entry:last-child{padding-bottom:2.6923076923em}#bootstrap-theme .chr_timeline__entry:after{content:"";border:3px solid #f3f6f7;bottom:0;left:7px;position:absolute;top:0}#bootstrap-theme .chr_timeline__entry:before{content:"";background:#f3f6f7;border:2px solid #e8eef0;border-radius:50%;display:inline-block;height:20px;left:0;position:absolute;vertical-align:bottom;width:20px;z-index:2}#bootstrap-theme .chr_timeline__entry--future:before{border-color:#0071bd}#bootstrap-theme .chr_timeline__entry--past:before{border-color:#cf3458}#bootstrap-theme .chr_timeline__entry__name{color:#464354;font-weight:600;display:block;margin-bottom:.3846153846em}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071bd !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071bd !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4d4d69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4d4d69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4d4d69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4d4d69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#cf3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #cf3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#f3f6f7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#e8eef0 !important}#bootstrap-theme .civihr-ui-select__content{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__content-multiple{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__custom-options{background:#585878 !important;padding:5px 10px !important;margin:5px 0 !important;border:solid 1px #4d4d69 !important;color:#555}#bootstrap-theme .civihr-ui-select__refine-search{padding-top:10px !important}#bootstrap-theme .civihr-ui-select__button-group{border-top:solid 1px #4d4d69 !important;padding-top:10px !important;margin-top:10px !important}#bootstrap-theme .civihr-ui-select__button{display:inline-block;cursor:pointer}#bootstrap-theme .civihr-ui-select__button:not(:last-child){padding-right:5px !important}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071bd !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071bd !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4d4d69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4d4d69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4d4d69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4d4d69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#cf3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #cf3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .button-list{display:flex;justify-content:space-between}#bootstrap-theme .button-list__button{cursor:pointer}#bootstrap-theme .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#f3f6f7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#e8eef0 !important}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme .loading-indicator{text-align:center}#bootstrap-theme .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000}#bootstrap-theme #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto}#bootstrap-theme #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal}#bootstrap-theme .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bootstrap-theme .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em}#bootstrap-theme .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--default-color:after{color:#82BD58}#bootstrap-theme .chr_logo--default-color:before{color:#1B6F90}#bootstrap-theme .chr_logo--default-color.chr_logo--full>i:after{color:#026085}#bootstrap-theme .chr_logo--default-size{font-size:20px}#bootstrap-theme .chr_logo--full:after{left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative}#bootstrap-theme .chr_scroll-lock{height:100% !important;overflow:hidden !important;width:100% !important}#bootstrap-theme .chr_profile-card{display:inline-block}#bootstrap-theme .chr_profile-card__name{display:table-cell;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture>img{background:#e8eef0;border-radius:50%;width:100%;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px}#bootstrap-theme .chr_profile-card__picture--small>img{height:34px;width:34px}#bootstrap-theme .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative}#bootstrap-theme .chr_user-menu:hover{background:#f3f6f7}#bootstrap-theme .chr_user-menu:hover>.chr_user-menu__dropdown{display:block}#bootstrap-theme .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){#bootstrap-theme .chr_user-menu__data>.chr_user-menu__arrow{display:none}}#bootstrap-theme .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99}#bootstrap-theme .chr_user-menu__dropdown ul{list-style-type:none;margin:0}#bootstrap-theme .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap}#bootstrap-theme .chr_user-menu__dropdown li>a, #bootstrap-theme .chr_user-menu__dropdown li>span{padding:0 30px 0 20px}#bootstrap-theme .chr_user-menu__dropdown a{color:#464354;display:block}#bootstrap-theme .chr_user-menu__dropdown a:hover{background:#f3f6f7;color:#464354;text-decoration:none}#bootstrap-theme .chr_user-menu__dropdown a>i{margin-right:10px}#bootstrap-theme .chr_user-menu__dropdown__username{color:#464354}#bootstrap-theme .chr_user-menu__dropdown__username:after{border-top:1px solid #d3dee2;content:'';display:block;height:0;margin:0 30px 0 20px}.page-civicrm-activity .crm-search-tasks, .page-civicrm-case .crm-search-tasks{margin:20px 0;padding:18px 15px;background-color:#fff;box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border-radius:0}.page-civicrm-activity .crm-search-tasks .form-layout-compressed, .page-civicrm-case .crm-search-tasks .form-layout-compressed{margin:0}.page-civicrm-activity .crm-search-tasks .select2-container, .page-civicrm-case .crm-search-tasks .select2-container{width:180px !important}.page-civicrm-activity #searchForm{box-sizing:border-box}.page-civicrm-activity #searchForm tr:not(#activityCustom) td{padding:10px 20px}.page-civicrm-activity #searchForm tr:nth-child(n+8):nth-child(-n+9){display:none}.page-civicrm-activity #searchForm tr td{border:0 !important;padding:0}.page-civicrm-activity #searchForm tr td.font-size12pt{font-size:13px}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh{float:right !important;margin:0}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh>.crm-form-submit{margin-right:0 !important}.page-civicrm-activity #searchForm tr td .select2-choices, .page-civicrm-activity #searchForm tr td .select2-choice, .page-civicrm-activity #searchForm tr td #activity_subject{min-width:329px}.page-civicrm-activity #searchForm .crm-i{display:none}.page-civicrm-activity .ui-dialog .crm-submit-buttons{display:none}.page-civicrm-activity .ui-dialog table tr{border-bottom:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1{border-bottom:none;padding:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 td.label{display:table-cell}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 .crm-accordion-wrapper{margin-left:5px;margin-right:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-block{box-shadow:none}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup{padding:0;margin-bottom:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup #Activity_Custom_Fields__{padding:0 20px}.page-civicrm-case .font-size12pt{font-size:13px}.page-civicrm-case .font-size12pt label{width:212px;display:inline-block}.page-civicrm-case .crm-case-search-form-block tr td.crm-submit-buttons{padding:12.5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td{padding:5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td:first-child{width:220px;box-sizing:border-box}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td .crm-button_qf_Search_refresh{float:right !important}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td #_qf_Search_refresh-top{margin-right:0 !important}.page-civicrm-case .crm-case-search-form-block tr .crm-i{display:none}.page-civicrm-case .crm-case-search-form-block #Application{margin-left:-5px;margin-right:-5px}.page-civicrm-case .crm-case-search-form-block #Application .crm-accordion-body td{padding-left:0 !important}.page-civicrm-case .caseSelector>tbody>tr .dataTable tr>td:first-child, .page-civicrm-case .caseSelector>tbody>tr .dataTable tr>th:first-child{text-align:center}.page-civicrm-case .caseSelector>tbody>tr th a{color:#464354}.page-civicrm-case .caseSelector>tbody>tr .nestedActivitySelector td:nth-child(8){text-align:left !important}.page-civicrm-case .caseSelector>tbody>tr .paginate_button{line-height:normal}.page-civicrm-case .caseSelector>tbody>tr .ui-buttonset .ui-button{padding:5px 10px}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']{margin:8px 20px !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']:first-child{margin-right:0 !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect tr:first-child td:nth-child(2){vertical-align:bottom;padding-bottom:4px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview{margin-left:20px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview .crm-i{display:none}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block{padding-top:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>fieldset{margin:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed{margin-top:0}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.select2-container, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-text, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-date-wrapper .crm-form-text:nth-child(2){min-width:200px}@media (max-width: 1200px) and (min-width: 768px){.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-form-multiselect{min-width:160px;width:160px}}.page-civicrm-vacancy #addMorePermission{background:#0071bd;border-color:#0071bd;border-radius:3px;color:#fff;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;padding:8px 12px;text-shadow:none;text-transform:uppercase}.page-civicrm-vacancy #addMorePermission:hover{background:#58b7d1}.page-civicrm-vacancy #addMorePermission>.add-icon{background-image:none;text-indent:0;margin-right:3px}.page-civicrm-vacancy #addMorePermission>.add-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff;position:relative;top:-1px}.page-civicrm-vacancy table.vacancy-popup{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies .description{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies td>a{color:#0071bd}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Search .crm-search-form-block{margin-bottom:20px}.page-civicrm-vacancy #searchForm{padding:20px}.page-civicrm-vacancy #searchForm td{padding:0}.page-civicrm-vacancy #searchForm tr:nth-child(2) td{padding:20px 0}.page-civicrm-vacancy #searchForm #_qf_Search_refresh{margin-bottom:0 !important}.page-civicrm-vacancy #searchForm .listing-box{border-color:#4d4d69}.page-civicrm-vacancy #searchForm .listing-box>div{background-color:transparent}.page-civicrm-vacancy #searchForm .listing-box>div label{color:#4d4d69;font-weight:normal !important;padding:5px}.page-civicrm-vacancy #searchForm .font-size12pt{font-size:12px}.page-civicrm-vacancy #searchForm .crm-form-text{width:312px}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content .crm-block{box-shadow:none}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr{border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr td{padding-left:0;border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2){vertical-align:top}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2) input[type='button']:first-child{margin-left:0 !important;width:71px;display:block}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .ui-dialog-buttonpane{margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-vacancy-summary>div:not(.collapsed) .crm-accordion-header::before{content:""}.page-civicrm-vacancy .hr-pipeline-tab .crm-accordion-header h2{color:#464354 !important;display:inline-block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy{width:49%;margin-bottom:20px;border:1px solid #e8eef0;border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div{padding:0;font-weight:normal}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table{width:100%;background-color:#fff;border:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2) td{line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td{color:#586277;padding:0 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td:not(:first-child){padding:10px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3{background-color:#4d4d69;padding:8px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a{color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon{background-image:none;text-indent:0;top:-3px;margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:hover:after{opacity:.8}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage{border-left:0 !important;width:auto;display:none}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage:first-child{display:block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage a{font-weight:600;color:#0071bd;right:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:first-child td{padding:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2){font-weight:600}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity{border:1px solid transparent;overflow:hidden;border-radius:2px}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .hr-recent-activity-title{background-color:#4d4d69;padding:8px 15px;line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight{width:calc(100% + 1px)}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight tr .hr-recent-activity-block{font-size:13px;color:#586277}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile{padding:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile legend{padding-top:20px}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc} #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000} #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto} #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal} .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em} .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0} .chr_logo--default-color:after{color:#82BD58} .chr_logo--default-color:before{color:#1B6F90} .chr_logo--default-color.chr_logo--full>i:after{color:#026085} .chr_logo--default-size{font-size:20px} .chr_logo--full:after{left:0;position:absolute;top:0} .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative} .chr_scroll-lock{height:100% !important;overflow:hidden !important;width:100% !important} .chr_profile-card{display:inline-block} .chr_profile-card__name{display:table-cell;vertical-align:middle} .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle} .chr_profile-card__picture>img{background:#e8eef0;border-radius:50%;width:100%;vertical-align:middle} .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px} .chr_profile-card__picture--small>img{height:34px;width:34px} .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative} .chr_user-menu:hover{background:#f3f6f7} .chr_user-menu:hover>.chr_user-menu__dropdown{display:block} .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){ .chr_user-menu__data>.chr_user-menu__arrow{display:none}} .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99} .chr_user-menu__dropdown ul{list-style-type:none;margin:0} .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap} .chr_user-menu__dropdown li>a, .chr_user-menu__dropdown li>span{padding:0 30px 0 20px} .chr_user-menu__dropdown a{color:#464354;display:block} .chr_user-menu__dropdown a:hover{background:#f3f6f7;color:#464354;text-decoration:none} .chr_user-menu__dropdown a>i{margin-right:10px} .chr_user-menu__dropdown__username{color:#464354} .chr_user-menu__dropdown__username:after{border-top:1px solid #d3dee2;content:'';display:block;height:0;margin:0 30px 0 20px} #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4d4d69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase} #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff} .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub} .crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} +#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4d4d69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase}#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff}#bootstrap-theme .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub}.crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .chr_appraisal-cycle-summary__details>.chr_appraisal-cycle-summary__meta{margin-right:15px}#bootstrap-theme .chr_appraisal-cycle-summary__actions{display:inline-block}#bootstrap-theme .chr_appraisal-cycle-summary__actions__toggle{color:inherit}#bootstrap-theme .chr_appraisal-cycle-summary__meta{font-size:16px;font-weight:600;line-height:1.1}#bootstrap-theme .help-text-link{display:inline-block;padding-left:5px}#bootstrap-theme .chr_leave-list:before, #bootstrap-theme .chr_leave-list:after{content:" ";display:table}#bootstrap-theme .chr_leave-list:after{clear:both}#bootstrap-theme .chr_leave-list>.chr_leave-list__type{margin-bottom:10px}#bootstrap-theme .chr_leave-list__type>.chr_leave-list__type__color{margin-right:5px}#bootstrap-theme .chr_leave-list__type__color{background:#e8eef0;display:inline-block;height:15px;vertical-align:sub;width:15px}#bootstrap-theme .chr_leave-list__type__count{float:right}#bootstrap-theme .chr_scroll-shadows__wrapper{overflow:hidden;position:relative}#bootstrap-theme .chr_scroll-shadows__shadows{overflow-x:auto}#bootstrap-theme .chr_scroll-shadows__shadows::before, #bootstrap-theme .chr_scroll-shadows__shadows::after{box-shadow:0 0 10px 1px rgba(48,40,40,0.5);content:'';display:block;height:calc(100% - 10px);opacity:0;position:absolute;top:5px;transition:opacity 0.2s ease-out;width:1px;z-index:1}#bootstrap-theme .chr_scroll-shadows__shadows::before{left:-1px}#bootstrap-theme .chr_scroll-shadows__shadows::after{right:-1px}#bootstrap-theme .chr_scroll-shadows__shadows--show-left::before, #bootstrap-theme .chr_scroll-shadows__shadows--show-right::after{opacity:1}#bootstrap-theme .chr_scroll-shadows__content{display:inline-block;min-width:100%}#bootstrap-theme .chr_sickness-days{display:inline-block;width:165px}#bootstrap-theme .chr_sickness-days--danger .chr_sickness-days__count{background:#cf3458}#bootstrap-theme .chr_sickness-days__count{background:#44cb7e;color:white;font-size:6.5384615385em;text-align:center}#bootstrap-theme .chr_sickness-days__label{background:#e8eef0;font-size:1.3846153846em;padding:5px 0;text-align:center;text-transform:uppercase}#bootstrap-theme .chr_steps{margin:0}#bootstrap-theme .chr_steps:before, #bootstrap-theme .chr_steps:after{content:" ";display:table}#bootstrap-theme .chr_steps:after{clear:both}#bootstrap-theme .chr_steps__step{display:table;float:left}#bootstrap-theme .chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:16px}#bootstrap-theme .chr_steps__step:not(:last-child){margin-right:6px}#bootstrap-theme .chr_steps__step:not(:last-child) .chr_steps__step__arrow:before{border-left-color:#fff;margin-left:6px;z-index:1}#bootstrap-theme .chr_steps__step__arrow{background:#4d4d69;border-color:#4d4d69;color:#fff;display:table-cell;height:24px;line-height:24px;padding:0 10px 0 10px;position:relative}#bootstrap-theme .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps__step__arrow:before{content:"";border-color:transparent;border-style:solid;border-width:12px 0 12px 6px;display:block;height:0;left:100%;margin-top:-12px;position:absolute;top:50%;width:0}#bootstrap-theme .chr_steps__step__arrow:after{border-left-color:inherit;z-index:2}#bootstrap-theme .chr_steps__step__legend{display:table-row}#bootstrap-theme .chr_steps__step__legend>.chr_steps__step__legend__content{margin-top:10px}#bootstrap-theme .chr_steps__step__legend__content{background:white;border:1px solid #4d4d69;font-size:12px;padding:10px 4px;width:100%}#bootstrap-theme .chr_steps--compact>.chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:11px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow{font-size:12px;font-weight:600;height:28px;line-height:28px;padding:0 5px 0 10px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:before{border-width:14px 0 14px 6px;margin-top:-14px}#bootstrap-theme .chr_steps--flex{display:flex}#bootstrap-theme .chr_steps--flex .chr_steps__step{display:block;flex-grow:1;float:none}#bootstrap-theme .chr_steps--flex .chr_steps__step__arrow{display:inline-block;text-align:center;width:100%}#bootstrap-theme .chr_steps--flex .chr_steps__step__legend{display:block}#bootstrap-theme .chr_steps__step--danger>.chr_steps__step__arrow{background:#cf3458;border-color:#cf3458}#bootstrap-theme .chr_steps__step--danger .chr_steps__step__legend__content{border-color:#cf3458}#bootstrap-theme .chr_steps__step--primary>.chr_steps__step__arrow{background:#0071bd;border-color:#0071bd}#bootstrap-theme .chr_steps__step--primary .chr_steps__step__legend__content{border-color:#0071bd}#bootstrap-theme .chr_timeline{margin:0}#bootstrap-theme .chr_timeline:before, #bootstrap-theme .chr_timeline:after{content:" ";display:table}#bootstrap-theme .chr_timeline:after{clear:both}#bootstrap-theme .chr_timeline>.chr_timeline__entry{padding:2.6923076923em 0 0 3.0769230769em;position:relative}#bootstrap-theme .chr_timeline>.chr_timeline__entry:last-child{padding-bottom:2.6923076923em}#bootstrap-theme .chr_timeline__entry:after{content:"";border:3px solid #f3f6f7;bottom:0;left:7px;position:absolute;top:0}#bootstrap-theme .chr_timeline__entry:before{content:"";background:#f3f6f7;border:2px solid #e8eef0;border-radius:50%;display:inline-block;height:20px;left:0;position:absolute;vertical-align:bottom;width:20px;z-index:2}#bootstrap-theme .chr_timeline__entry--future:before{border-color:#0071bd}#bootstrap-theme .chr_timeline__entry--past:before{border-color:#cf3458}#bootstrap-theme .chr_timeline__entry__name{color:#464354;font-weight:600;display:block;margin-bottom:.3846153846em}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071bd !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071bd !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4d4d69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4d4d69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4d4d69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4d4d69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#cf3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #cf3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#f3f6f7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#e8eef0 !important}#bootstrap-theme .civihr-ui-select__content{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__content-multiple{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__custom-options{background:#585878 !important;padding:5px 10px !important;margin:5px 0 !important;border:solid 1px #4d4d69 !important;color:#555}#bootstrap-theme .civihr-ui-select__refine-search{padding-top:10px !important}#bootstrap-theme .civihr-ui-select__button-group{border-top:solid 1px #4d4d69 !important;padding-top:10px !important;margin-top:10px !important}#bootstrap-theme .civihr-ui-select__button{display:inline-block;cursor:pointer}#bootstrap-theme .civihr-ui-select__button:not(:last-child){padding-right:5px !important}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071bd !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071bd !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4d4d69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4d4d69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4d4d69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4d4d69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#cf3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #cf3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .button-list{display:flex;justify-content:space-between}#bootstrap-theme .button-list__button{cursor:pointer}#bootstrap-theme .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#f3f6f7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#e8eef0 !important}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme .loading-indicator{text-align:center}#bootstrap-theme .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000}#bootstrap-theme #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto}#bootstrap-theme #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal}#bootstrap-theme .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bootstrap-theme .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em}#bootstrap-theme .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--default-color:after{color:#82BD58}#bootstrap-theme .chr_logo--default-color:before{color:#1B6F90}#bootstrap-theme .chr_logo--default-color.chr_logo--full>i:after{color:#026085}#bootstrap-theme .chr_logo--default-size{font-size:20px}#bootstrap-theme .chr_logo--full:after{left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative}#bootstrap-theme .chr_scroll-lock{height:100% !important;overflow:hidden !important;width:100% !important}#bootstrap-theme .chr_profile-card{display:inline-block}#bootstrap-theme .chr_profile-card__name{display:table-cell;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture>img{background:#e8eef0;border-radius:50%;width:100%;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px}#bootstrap-theme .chr_profile-card__picture--small>img{height:34px;width:34px}#bootstrap-theme .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative}#bootstrap-theme .chr_user-menu:hover{background:#f3f6f7}#bootstrap-theme .chr_user-menu:hover>.chr_user-menu__dropdown{display:block}#bootstrap-theme .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){#bootstrap-theme .chr_user-menu__data>.chr_user-menu__arrow{display:none}}#bootstrap-theme .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99}#bootstrap-theme .chr_user-menu__dropdown ul{list-style-type:none;margin:0}#bootstrap-theme .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap}#bootstrap-theme .chr_user-menu__dropdown li>a, #bootstrap-theme .chr_user-menu__dropdown li>span{padding:0 30px 0 20px}#bootstrap-theme .chr_user-menu__dropdown a{color:#464354;display:block}#bootstrap-theme .chr_user-menu__dropdown a:hover{background:#f3f6f7;color:#464354;text-decoration:none}#bootstrap-theme .chr_user-menu__dropdown a>i{margin-right:10px}#bootstrap-theme .chr_user-menu__dropdown__username{color:#464354}#bootstrap-theme .chr_user-menu__dropdown__username:after{border-top:1px solid #d3dee2;content:'';display:block;height:0;margin:0 30px 0 20px}.page-civicrm-activity .crm-search-tasks, .page-civicrm-case .crm-search-tasks{margin:20px 0;padding:18px 15px;background-color:#fff;box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border-radius:0}.page-civicrm-activity .crm-search-tasks .form-layout-compressed, .page-civicrm-case .crm-search-tasks .form-layout-compressed{margin:0}.page-civicrm-activity .crm-search-tasks .select2-container, .page-civicrm-case .crm-search-tasks .select2-container{width:180px !important}.page-civicrm-activity #searchForm{box-sizing:border-box}.page-civicrm-activity #searchForm tr:not(#activityCustom) td{padding:10px 20px}.page-civicrm-activity #searchForm tr:nth-child(n+8):nth-child(-n+9){display:none}.page-civicrm-activity #searchForm tr td{border:0 !important;padding:0}.page-civicrm-activity #searchForm tr td.font-size12pt{font-size:13px}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh{float:right !important;margin:0}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh>.crm-form-submit{margin-right:0 !important}.page-civicrm-activity #searchForm tr td .select2-choices, .page-civicrm-activity #searchForm tr td .select2-choice, .page-civicrm-activity #searchForm tr td #activity_subject{min-width:329px}.page-civicrm-activity #searchForm .crm-i{display:none}.page-civicrm-activity .ui-dialog .crm-submit-buttons{display:none}.page-civicrm-activity .ui-dialog table tr{border-bottom:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1{border-bottom:none;padding:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 td.label{display:table-cell}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 .crm-accordion-wrapper{margin-left:5px;margin-right:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-block{box-shadow:none}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup{padding:0;margin-bottom:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup #Activity_Custom_Fields__{padding:0 20px}.page-civicrm-case .font-size12pt{font-size:13px}.page-civicrm-case .font-size12pt label{width:212px;display:inline-block}.page-civicrm-case .crm-case-search-form-block tr td.crm-submit-buttons{padding:12.5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td{padding:5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td:first-child{width:220px;box-sizing:border-box}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td .crm-button_qf_Search_refresh{float:right !important}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td #_qf_Search_refresh-top{margin-right:0 !important}.page-civicrm-case .crm-case-search-form-block tr .crm-i{display:none}.page-civicrm-case .crm-case-search-form-block #Application{margin-left:-5px;margin-right:-5px}.page-civicrm-case .crm-case-search-form-block #Application .crm-accordion-body td{padding-left:0 !important}.page-civicrm-case .caseSelector>tbody>tr .dataTable tr>td:first-child, .page-civicrm-case .caseSelector>tbody>tr .dataTable tr>th:first-child{text-align:center}.page-civicrm-case .caseSelector>tbody>tr th a{color:#464354}.page-civicrm-case .caseSelector>tbody>tr .nestedActivitySelector td:nth-child(8){text-align:left !important}.page-civicrm-case .caseSelector>tbody>tr .paginate_button{line-height:normal}.page-civicrm-case .caseSelector>tbody>tr .ui-buttonset .ui-button{padding:5px 10px}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']{margin:8px 20px !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']:first-child{margin-right:0 !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect tr:first-child td:nth-child(2){vertical-align:bottom;padding-bottom:4px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview{margin-left:20px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview .crm-i{display:none}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block{padding-top:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>fieldset{margin:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed{margin-top:0}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.select2-container, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-text, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-date-wrapper .crm-form-text:nth-child(2){min-width:200px}@media (max-width: 1200px) and (min-width: 768px){.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-form-multiselect{min-width:160px;width:160px}}.page-civicrm-vacancy #addMorePermission{background:#0071bd;border-color:#0071bd;border-radius:3px;color:#fff;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;padding:8px 12px;text-shadow:none;text-transform:uppercase}.page-civicrm-vacancy #addMorePermission:hover{background:#58b7d1}.page-civicrm-vacancy #addMorePermission>.add-icon{background-image:none;text-indent:0;margin-right:3px}.page-civicrm-vacancy #addMorePermission>.add-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff;position:relative;top:-1px}.page-civicrm-vacancy table.vacancy-popup{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies .description{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies td>a{color:#0071bd}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Search .crm-search-form-block{margin-bottom:20px}.page-civicrm-vacancy #searchForm{padding:20px}.page-civicrm-vacancy #searchForm td{padding:0}.page-civicrm-vacancy #searchForm tr:nth-child(2) td{padding:20px 0}.page-civicrm-vacancy #searchForm #_qf_Search_refresh{margin-bottom:0 !important}.page-civicrm-vacancy #searchForm .listing-box{border-color:#4d4d69}.page-civicrm-vacancy #searchForm .listing-box>div{background-color:transparent}.page-civicrm-vacancy #searchForm .listing-box>div label{color:#4d4d69;font-weight:normal !important;padding:5px}.page-civicrm-vacancy #searchForm .font-size12pt{font-size:12px}.page-civicrm-vacancy #searchForm .crm-form-text{width:312px}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content .crm-block{box-shadow:none}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr{border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr td{padding-left:0;border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2){vertical-align:top}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2) input[type='button']:first-child{margin-left:0 !important;width:71px;display:block}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .ui-dialog-buttonpane{margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-vacancy-summary>div:not(.collapsed) .crm-accordion-header::before{content:""}.page-civicrm-vacancy .hr-pipeline-tab .crm-accordion-header h2{color:#464354 !important;display:inline-block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy{width:49%;margin-bottom:20px;border:1px solid #e8eef0;border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div{padding:0;font-weight:normal}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table{width:100%;background-color:#fff;border:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2) td{line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td{color:#586277;padding:0 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td:not(:first-child){padding:10px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3{background-color:#4d4d69;padding:8px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a{color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon{background-image:none;text-indent:0;top:-3px;margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:hover:after{opacity:.8}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage{border-left:0 !important;width:auto;display:none}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage:first-child{display:block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage a{font-weight:600;color:#0071bd;right:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:first-child td{padding:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2){font-weight:600}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity{border:1px solid transparent;overflow:hidden;border-radius:2px}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .hr-recent-activity-title{background-color:#4d4d69;padding:8px 15px;line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight{width:calc(100% + 1px)}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight tr .hr-recent-activity-block{font-size:13px;color:#586277}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile{padding:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile legend{padding-top:20px}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc} #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000} #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto} #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal} .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em} .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0} .chr_logo--default-color:after{color:#82BD58} .chr_logo--default-color:before{color:#1B6F90} .chr_logo--default-color.chr_logo--full>i:after{color:#026085} .chr_logo--default-size{font-size:20px} .chr_logo--full:after{left:0;position:absolute;top:0} .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative} .chr_scroll-lock{height:100% !important;overflow:hidden !important;width:100% !important} .chr_profile-card{display:inline-block} .chr_profile-card__name{display:table-cell;vertical-align:middle} .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle} .chr_profile-card__picture>img{background:#e8eef0;border-radius:50%;width:100%;vertical-align:middle} .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px} .chr_profile-card__picture--small>img{height:34px;width:34px} .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative} .chr_user-menu:hover{background:#f3f6f7} .chr_user-menu:hover>.chr_user-menu__dropdown{display:block} .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){ .chr_user-menu__data>.chr_user-menu__arrow{display:none}} .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99} .chr_user-menu__dropdown ul{list-style-type:none;margin:0} .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap} .chr_user-menu__dropdown li>a, .chr_user-menu__dropdown li>span{padding:0 30px 0 20px} .chr_user-menu__dropdown a{color:#464354;display:block} .chr_user-menu__dropdown a:hover{background:#f3f6f7;color:#464354;text-decoration:none} .chr_user-menu__dropdown a>i{margin-right:10px} .chr_user-menu__dropdown__username{color:#464354} .chr_user-menu__dropdown__username:after{border-top:1px solid #d3dee2;content:'';display:block;height:0;margin:0 30px 0 20px} #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4d4d69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase} #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff} .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub} .crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} diff --git a/org.civicrm.bootstrapcivihr/info.xml b/org.civicrm.bootstrapcivihr/info.xml index c03788f3ef6..3dbf310d265 100644 --- a/org.civicrm.bootstrapcivihr/info.xml +++ b/org.civicrm.bootstrapcivihr/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/org.civicrm.bootstrapcivihr/scss/components/_help-text.scss b/org.civicrm.bootstrapcivihr/scss/components/_help-text.scss new file mode 100644 index 00000000000..89e264d0e61 --- /dev/null +++ b/org.civicrm.bootstrapcivihr/scss/components/_help-text.scss @@ -0,0 +1,4 @@ +.help-text-link { + display: inline-block; + padding-left: 5px; +} diff --git a/org.civicrm.hremergency/info.xml b/org.civicrm.hremergency/info.xml index 1be00554042..dbeed6536f3 100644 --- a/org.civicrm.hremergency/info.xml +++ b/org.civicrm.hremergency/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index cf9318e99db..90f2ee87849 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -114,8 +114,8 @@ return e=os.day(e),e.setMonth(0,1),e},function(e,t){e.setFullYear(e.getFullYear( e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1-(l.y?e.y/l.y:1))*r[1]}),s}var t=na.layout.hierarchy().sort(null).value(null),n=Ei,r=[1,1],i=!1;return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(i=null==(r=t),e):i?null:r},e.nodeSize=function(t){return arguments.length?(i=null!=(r=t),e):i?r:null},Qr(e,t)},na.layout.treemap=function(){function e(e,t){for(var n,r,i=-1,o=e.length;++it?0:t),n.area=isNaN(r)||0>=r?0:r}function t(n){var o=n.children;if(o&&o.length){var a,s,l,u=f(n),c=[],d=o.slice(),h=1/0,m="slice"===p?u.dx:"dice"===p?u.dy:"slice-dice"===p?1&n.depth?u.dy:u.dx:Math.min(u.dx,u.dy);for(e(d,u.dx*u.dy/n.value),c.area=0;(l=d.length)>0;)c.push(a=d[l-1]),c.area+=a.area,"squarify"!==p||(s=r(c,m))<=h?(d.pop(),h=s):(c.area-=c.pop().area,i(c,m,u,!1),m=Math.min(u.dx,u.dy),c.length=c.area=0,h=1/0);c.length&&(i(c,m,u,!0),c.length=c.area=0),o.forEach(t)}}function n(t){var r=t.children;if(r&&r.length){var o,a=f(t),s=r.slice(),l=[];for(e(s,a.dx*a.dy/t.value),l.area=0;o=s.pop();)l.push(o),l.area+=o.area,null!=o.z&&(i(l,o.z?a.dx:a.dy,a,!s.length),l.length=l.area=0);r.forEach(n)}}function r(e,t){for(var n,r=e.area,i=0,o=1/0,a=-1,s=e.length;++an&&(o=n),n>i&&(i=n));return r*=r,t*=t,r?Math.max(t*i*h/r,r/(t*o*h)):1/0}function i(e,t,n,r){var i,o=-1,a=e.length,s=n.x,u=n.y,c=t?l(e.area/t):0;if(t==n.dx){for((r||c>n.dy)&&(c=n.dy);++on.dx)&&(c=n.dx);++on&&(t=1),1>n&&(e=0),function(){var n,r,i;do{n=2*Math.random()-1,r=2*Math.random()-1,i=n*n+r*r}while(!i||i>1);return e+t*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var e=na.random.normal.apply(na,arguments);return function(){return Math.exp(e())}},bates:function(e){var t=na.random.irwinHall(e);return function(){return t()/e}},irwinHall:function(e){return function(){for(var t=0,n=0;e>n;n++)t+=Math.random();return t}}},na.scale={};var ml={floor:y,ceil:y};na.scale.linear=function(){return Vi([0,1],[0,1],yr,!1)};var gl={s:1,g:1,p:1,r:1,e:1};na.scale.log=function(){return Ji(na.scale.linear().domain([0,1]),10,!0,[1,10])};var vl=na.format(".0e"),yl={floor:function(e){return-Math.ceil(-e)},ceil:function(e){return-Math.floor(-e)}};na.scale.pow=function(){return Qi(na.scale.linear(),1,[0,1])},na.scale.sqrt=function(){return na.scale.pow().exponent(.5)},na.scale.ordinal=function(){return eo([],{t:"range",a:[[]]})},na.scale.category10=function(){return na.scale.ordinal().range(bl)},na.scale.category20=function(){return na.scale.ordinal().range($l)},na.scale.category20b=function(){return na.scale.ordinal().range(wl)},na.scale.category20c=function(){return na.scale.ordinal().range(xl)};var bl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(be),$l=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(be),wl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(be),xl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(be);na.scale.quantile=function(){return to([],[])},na.scale.quantize=function(){return no(0,1,[0,1])},na.scale.threshold=function(){return ro([.5],[0,1])},na.scale.identity=function(){return io([0,1])},na.svg={},na.svg.arc=function(){function e(){var e=Math.max(0,+n.apply(this,arguments)),u=Math.max(0,+r.apply(this,arguments)),c=a.apply(this,arguments)-Na,f=s.apply(this,arguments)-Na,d=Math.abs(f-c),p=c>f?0:1;if(e>u&&(h=u,u=e,e=h),d>=Oa)return t(u,p)+(e?t(e,1-p):"")+"Z";var h,m,g,v,y,b,$,w,x,C,k,E,S=0,_=0,M=[];if((v=(+l.apply(this,arguments)||0)/2)&&(g=o===Cl?Math.sqrt(e*e+u*u):+o.apply(this,arguments),p||(_*=-1),u&&(_=te(g/u*Math.sin(v))),e&&(S=te(g/e*Math.sin(v)))),u){y=u*Math.cos(c+_),b=u*Math.sin(c+_),$=u*Math.cos(f-_),w=u*Math.sin(f-_);var T=Math.abs(f-c-2*_)<=Da?0:1;if(_&&fo(y,b,$,w)===p^T){var D=(c+f)/2;y=u*Math.cos(D),b=u*Math.sin(D),$=w=null}}else y=b=0;if(e){x=e*Math.cos(f-S),C=e*Math.sin(f-S),k=e*Math.cos(c+S),E=e*Math.sin(c+S);var A=Math.abs(c-f+2*S)<=Da?0:1;if(S&&fo(x,C,k,E)===1-p^A){var O=(c+f)/2;x=e*Math.cos(O),C=e*Math.sin(O),k=E=null}}else x=C=0;if((h=Math.min(Math.abs(u-e)/2,+i.apply(this,arguments)))>.001){m=u>e^p?0:1;var N=null==k?[x,C]:null==$?[y,b]:Nn([y,b],[k,E],[$,w],[x,C]),R=y-N[0],I=b-N[1],P=$-N[0],F=w-N[1],j=1/Math.sin(Math.acos((R*P+I*F)/(Math.sqrt(R*R+I*I)*Math.sqrt(P*P+F*F)))/2),L=Math.sqrt(N[0]*N[0]+N[1]*N[1]);if(null!=$){var U=Math.min(h,(u-L)/(j+1)),H=po(null==k?[x,C]:[k,E],[y,b],u,U,p),q=po([$,w],[x,C],u,U,p);h===U?M.push("M",H[0],"A",U,",",U," 0 0,",m," ",H[1],"A",u,",",u," 0 ",1-p^fo(H[1][0],H[1][1],q[1][0],q[1][1]),",",p," ",q[1],"A",U,",",U," 0 0,",m," ",q[0]):M.push("M",H[0],"A",U,",",U," 0 1,",m," ",q[0])}else M.push("M",y,",",b);if(null!=k){var V=Math.min(h,(e-L)/(j-1)),z=po([y,b],[k,E],e,-V,p),B=po([x,C],null==$?[y,b]:[$,w],e,-V,p);h===V?M.push("L",B[0],"A",V,",",V," 0 0,",m," ",B[1],"A",e,",",e," 0 ",p^fo(B[1][0],B[1][1],z[1][0],z[1][1]),",",1-p," ",z[1],"A",V,",",V," 0 0,",m," ",z[0]):M.push("L",B[0],"A",V,",",V," 0 0,",m," ",z[0])}else M.push("L",x,",",C)}else M.push("M",y,",",b),null!=$&&M.push("A",u,",",u," 0 ",T,",",p," ",$,",",w),M.push("L",x,",",C),null!=k&&M.push("A",e,",",e," 0 ",A,",",1-p," ",k,",",E);return M.push("Z"),M.join("")}function t(e,t){return"M0,"+e+"A"+e+","+e+" 0 1,"+t+" 0,"+-e+"A"+e+","+e+" 0 1,"+t+" 0,"+e}var n=ao,r=so,i=oo,o=Cl,a=lo,s=uo,l=co;return e.innerRadius=function(t){return arguments.length?(n=Se(t),e):n},e.outerRadius=function(t){return arguments.length?(r=Se(t),e):r},e.cornerRadius=function(t){return arguments.length?(i=Se(t),e):i},e.padRadius=function(t){return arguments.length?(o=t==Cl?Cl:Se(t),e):o},e.startAngle=function(t){return arguments.length?(a=Se(t),e):a},e.endAngle=function(t){return arguments.length?(s=Se(t),e):s},e.padAngle=function(t){return arguments.length?(l=Se(t),e):l},e.centroid=function(){var e=(+n.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+a.apply(this,arguments)+ +s.apply(this,arguments))/2-Na;return[Math.cos(t)*e,Math.sin(t)*e]},e};var Cl="auto";na.svg.line=function(){return ho(y)};var kl=na.map({linear:mo,"linear-closed":go,step:vo,"step-before":yo,"step-after":bo,basis:Eo,"basis-open":So,"basis-closed":_o,bundle:Mo,cardinal:xo,"cardinal-open":$o,"cardinal-closed":wo,monotone:Ro});kl.forEach(function(e,t){t.key=e,t.closed=/-closed$/.test(e)});var El=[0,2/3,1/3,0],Sl=[0,1/3,2/3,0],_l=[0,1/6,2/3,1/6];na.svg.line.radial=function(){var e=ho(Io);return e.radius=e.x,delete e.x,e.angle=e.y,delete e.y,e},yo.reverse=bo,bo.reverse=yo,na.svg.area=function(){return Po(y)},na.svg.area.radial=function(){var e=Po(Io);return e.radius=e.x,delete e.x,e.innerRadius=e.x0,delete e.x0,e.outerRadius=e.x1,delete e.x1,e.angle=e.y,delete e.y,e.startAngle=e.y0,delete e.y0,e.endAngle=e.y1,delete e.y1,e},na.svg.chord=function(){function e(e,s){var l=t(this,o,e,s),u=t(this,a,e,s);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(n(l,u)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,u.r,u.p0)+r(u.r,u.p1,u.a1-u.a0)+i(u.r,u.p1,l.r,l.p0))+"Z"}function t(e,t,n,r){var i=t.call(e,n,r),o=s.call(e,i,r),a=l.call(e,i,r)-Na,c=u.call(e,i,r)-Na;return{r:o,a0:a,a1:c,p0:[o*Math.cos(a),o*Math.sin(a)],p1:[o*Math.cos(c),o*Math.sin(c)]}}function n(e,t){return e.a0==t.a0&&e.a1==t.a1}function r(e,t,n){return"A"+e+","+e+" 0 "+ +(n>Da)+",1 "+t}function i(e,t,n,r){return"Q 0,0 "+r}var o=yn,a=bn,s=Fo,l=lo,u=uo;return e.radius=function(t){return arguments.length?(s=Se(t),e):s},e.source=function(t){return arguments.length?(o=Se(t),e):o},e.target=function(t){return arguments.length?(a=Se(t),e):a},e.startAngle=function(t){return arguments.length?(l=Se(t),e):l},e.endAngle=function(t){return arguments.length?(u=Se(t),e):u},e},na.svg.diagonal=function(){function e(e,i){var o=t.call(this,e,i),a=n.call(this,e,i),s=(o.y+a.y)/2,l=[o,{x:o.x,y:s},{x:a.x,y:s},a];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=yn,n=bn,r=jo;return e.source=function(n){return arguments.length?(t=Se(n),e):t},e.target=function(t){return arguments.length?(n=Se(t),e):n},e.projection=function(t){return arguments.length?(r=t,e):r},e},na.svg.diagonal.radial=function(){var e=na.svg.diagonal(),t=jo,n=e.projection;return e.projection=function(e){return arguments.length?n(Lo(t=e)):t},e},na.svg.symbol=function(){function e(e,r){return(Ml.get(t.call(this,e,r))||qo)(n.call(this,e,r))}var t=Ho,n=Uo;return e.type=function(n){return arguments.length?(t=Se(n),e):t},e.size=function(t){return arguments.length?(n=Se(t),e):n},e};var Ml=na.map({circle:qo,cross:function(e){var t=Math.sqrt(e/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(e){var t=Math.sqrt(e/(2*Dl)),n=t*Dl;return"M0,"+-t+"L"+n+",0 0,"+t+" "+-n+",0Z"},square:function(e){var t=Math.sqrt(e)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(e){var t=Math.sqrt(e/Tl),n=t*Tl/2;return"M0,"+n+"L"+t+","+-n+" "+-t+","+-n+"Z"},"triangle-up":function(e){var t=Math.sqrt(e/Tl),n=t*Tl/2;return"M0,"+-n+"L"+t+","+n+" "+-t+","+n+"Z"}});na.svg.symbolTypes=Ml.keys();var Tl=Math.sqrt(3),Dl=Math.tan(30*Ra);wa.transition=function(e){for(var t,n,r=Al||++Il,i=Wo(e),o=[],a=Ol||{time:Date.now(),ease:Er,delay:0,duration:250},s=-1,l=this.length;++so;o++){i.push(t=[]);for(var n=this[o],s=0,l=n.length;l>s;s++)(r=n[s])&&e.call(r,r.__data__,s,o)&&t.push(r)}return zo(i,this.namespace,this.id)},Rl.tween=function(e,t){var n=this.id,r=this.namespace;return arguments.length<2?this.node()[r][n].tween.get(e):V(this,null==t?function(t){t[r][n].tween.remove(e)}:function(i){i[r][n].tween.set(e,t)})},Rl.attr=function(e,t){function n(){this.removeAttribute(s)}function r(){this.removeAttributeNS(s.space,s.local)}function i(e){return null==e?n:(e+="",function(){var t,n=this.getAttribute(s);return n!==e&&(t=a(n,e),function(e){this.setAttribute(s,t(e))})})}function o(e){return null==e?r:(e+="",function(){var t,n=this.getAttributeNS(s.space,s.local);return n!==e&&(t=a(n,e),function(e){this.setAttributeNS(s.space,s.local,t(e))})})}if(arguments.length<2){for(t in e)this.attr(t,e[t]);return this}var a="transform"==e?Hr:yr,s=na.ns.qualify(e);return Bo(this,"attr."+e,t,s.local?o:i)},Rl.attrTween=function(e,t){function n(e,n){var r=t.call(this,e,n,this.getAttribute(i));return r&&function(e){this.setAttribute(i,r(e))}}function r(e,n){var r=t.call(this,e,n,this.getAttributeNS(i.space,i.local));return r&&function(e){this.setAttributeNS(i.space,i.local,r(e))}}var i=na.ns.qualify(e);return this.tween("attr."+e,i.local?r:n)},Rl.style=function(e,n,r){function i(){this.style.removeProperty(e)}function o(n){return null==n?i:(n+="",function(){var i,o=t(this).getComputedStyle(this,null).getPropertyValue(e);return o!==n&&(i=yr(o,n),function(t){this.style.setProperty(e,i(t),r)})})}var a=arguments.length;if(3>a){if("string"!=typeof e){2>a&&(n="");for(r in e)this.style(r,e[r],n);return this}r=""}return Bo(this,"style."+e,n,o)},Rl.styleTween=function(e,n,r){function i(i,o){var a=n.call(this,i,o,t(this).getComputedStyle(this,null).getPropertyValue(e));return a&&function(t){this.style.setProperty(e,a(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+e,i)},Rl.text=function(e){return Bo(this,"text",e,Yo)},Rl.remove=function(){var e=this.namespace;return this.each("end.transition",function(){var t;this[e].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Rl.ease=function(e){var t=this.id,n=this.namespace;return arguments.length<1?this.node()[n][t].ease:("function"!=typeof e&&(e=na.ease.apply(na,arguments)),V(this,function(r){r[n][t].ease=e}))},Rl.delay=function(e){var t=this.id,n=this.namespace;return arguments.length<1?this.node()[n][t].delay:V(this,"function"==typeof e?function(r,i,o){r[n][t].delay=+e.call(r,r.__data__,i,o)}:(e=+e,function(r){r[n][t].delay=e}))},Rl.duration=function(e){var t=this.id,n=this.namespace;return arguments.length<1?this.node()[n][t].duration:V(this,"function"==typeof e?function(r,i,o){r[n][t].duration=Math.max(1,e.call(r,r.__data__,i,o))}:(e=Math.max(1,e),function(r){r[n][t].duration=e}))},Rl.each=function(e,t){var n=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,o=Al;try{Al=n,V(this,function(t,i,o){Ol=t[r][n],e.call(t,t.__data__,i,o)})}finally{Ol=i,Al=o}}else V(this,function(i){var o=i[r][n];(o.event||(o.event=na.dispatch("start","end","interrupt"))).on(e,t)});return this},Rl.transition=function(){for(var e,t,n,r,i=this.id,o=++Il,a=this.namespace,s=[],l=0,u=this.length;u>l;l++){s.push(e=[]);for(var t=this[l],c=0,f=t.length;f>c;c++)(n=t[c])&&(r=n[a][i],Go(n,c,a,o,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),e.push(n)}return zo(s,a,o)},na.svg.axis=function(){function e(e){e.each(function(){var e,u=na.select(this),c=this.__chart__||n,f=this.__chart__=n.copy(),d=null==l?f.ticks?f.ticks.apply(f,s):f.domain():l,p=null==t?f.tickFormat?f.tickFormat.apply(f,s):y:t,h=u.selectAll(".tick").data(d,f),m=h.enter().insert("g",".domain").attr("class","tick").style("opacity",Ma),g=na.transition(h.exit()).style("opacity",Ma).remove(),v=na.transition(h.order()).style("opacity",1),b=Math.max(i,0)+a,$=ji(f),w=u.selectAll(".domain").data([0]),x=(w.enter().append("path").attr("class","domain"),na.transition(w));m.append("line"),m.append("text");var C,k,E,S,_=m.select("line"),M=v.select("line"),T=h.select("text").text(p),D=m.select("text"),A=v.select("text"),O="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(e=Ko,C="x",E="y",k="x2",S="y2",T.attr("dy",0>O?"0em":".71em").style("text-anchor","middle"),x.attr("d","M"+$[0]+","+O*o+"V0H"+$[1]+"V"+O*o)):(e=Zo,C="y",E="x",k="y2",S="x2",T.attr("dy",".32em").style("text-anchor",0>O?"end":"start"),x.attr("d","M"+O*o+","+$[0]+"H0V"+$[1]+"H"+O*o)),_.attr(S,O*i),D.attr(E,O*b),M.attr(k,0).attr(S,O*i),A.attr(C,0).attr(E,O*b),f.rangeBand){var N=f,R=N.rangeBand()/2;c=f=function(e){return N(e)+R}}else c.rangeBand?c=f:g.call(e,f,c);m.call(e,c,f),v.call(e,f,f)})}var t,n=na.scale.linear(),r=Pl,i=6,o=6,a=3,s=[10],l=null;return e.scale=function(t){return arguments.length?(n=t,e):n},e.orient=function(t){return arguments.length?(r=t in Fl?t+"":Pl,e):r},e.ticks=function(){return arguments.length?(s=arguments,e):s},e.tickValues=function(t){return arguments.length?(l=t,e):l},e.tickFormat=function(n){return arguments.length?(t=n,e):t},e.tickSize=function(t){var n=arguments.length;return n?(i=+t,o=+arguments[n-1],e):i},e.innerTickSize=function(t){return arguments.length?(i=+t,e):i},e.outerTickSize=function(t){return arguments.length?(o=+t,e):o},e.tickPadding=function(t){return arguments.length?(a=+t,e):a},e.tickSubdivide=function(){return arguments.length&&e},e};var Pl="bottom",Fl={top:1,right:1,bottom:1,left:1};na.svg.brush=function(){function e(t){t.each(function(){var t=na.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",o).on("touchstart.brush",o),a=t.selectAll(".background").data([0]);a.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var s=t.selectAll(".resize").data(m,y);s.exit().remove(),s.enter().append("g").attr("class",function(e){return"resize "+e}).style("cursor",function(e){return jl[e]}).append("rect").attr("x",function(e){return/[ew]$/.test(e)?-3:null}).attr("y",function(e){return/^[ns]/.test(e)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),s.style("display",e.empty()?"none":null);var l,f=na.transition(t),d=na.transition(a);u&&(l=ji(u),d.attr("x",l[0]).attr("width",l[1]-l[0]),r(f)),c&&(l=ji(c),d.attr("y",l[0]).attr("height",l[1]-l[0]),i(f)),n(f)})}function n(e){e.selectAll(".resize").attr("transform",function(e){return"translate("+f[+/e$/.test(e)]+","+d[+/^s/.test(e)]+")"})}function r(e){e.select(".extent").attr("x",f[0]),e.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1]-f[0])}function i(e){e.select(".extent").attr("y",d[0]),e.selectAll(".extent,.e>rect,.w>rect").attr("height",d[1]-d[0])}function o(){function o(){32==na.event.keyCode&&(T||(b=null,A[0]-=f[1],A[1]-=d[1],T=2),k())}function m(){32==na.event.keyCode&&2==T&&(A[0]+=f[1],A[1]+=d[1],T=0,k())}function g(){var e=na.mouse(w),t=!1;$&&(e[0]+=$[0],e[1]+=$[1]),T||(na.event.altKey?(b||(b=[(f[0]+f[1])/2,(d[0]+d[1])/2]),A[0]=f[+(e[0]c?(i=r,r=c):i=c),m[0]!=r||m[1]!=i?(n?s=null:a=null,m[0]=r,m[1]=i,!0):void 0}function y(){g(),E.style("pointer-events","all").selectAll(".resize").style("display",e.empty()?"none":null),na.select("body").style("cursor",null),O.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),D(),C({type:"brushend"})}var b,$,w=this,x=na.select(na.event.target),C=l.of(w,arguments),E=na.select(w),S=x.datum(),_=!/^(n|s)$/.test(S)&&u,M=!/^(e|w)$/.test(S)&&c,T=x.classed("extent"),D=K(w),A=na.mouse(w),O=na.select(t(w)).on("keydown.brush",o).on("keyup.brush",m);if(na.event.changedTouches?O.on("touchmove.brush",g).on("touchend.brush",y):O.on("mousemove.brush",g).on("mouseup.brush",y),E.interrupt().selectAll("*").interrupt(),T)A[0]=f[0]-A[0],A[1]=d[0]-A[1];else if(S){var N=+/w$/.test(S),R=+/^n/.test(S);$=[f[1-N]-A[0],d[1-R]-A[1]],A[0]=f[N],A[1]=d[R]}else na.event.altKey&&(b=A.slice());E.style("pointer-events","none").selectAll(".resize").style("display",null),na.select("body").style("cursor",x.style("cursor")),C({type:"brushstart"}),g()}var a,s,l=S(e,"brushstart","brush","brushend"),u=null,c=null,f=[0,0],d=[0,0],p=!0,h=!0,m=Ll[0];return e.event=function(e){e.each(function(){var e=l.of(this,arguments),t={x:f,y:d,i:a,j:s},n=this.__chart__||t;this.__chart__=t,Al?na.select(this).transition().each("start.brush",function(){a=n.i,s=n.j,f=n.x,d=n.y,e({type:"brushstart"})}).tween("brush:brush",function(){var n=br(f,t.x),r=br(d,t.y);return a=s=null,function(i){f=t.x=n(i),d=t.y=r(i),e({type:"brush",mode:"resize"})}}).each("end.brush",function(){a=t.i,s=t.j,e({type:"brush",mode:"resize"}),e({type:"brushend"})}):(e({type:"brushstart"}),e({type:"brush",mode:"resize"}),e({type:"brushend"}))})},e.x=function(t){return arguments.length?(u=t,m=Ll[!u<<1|!c],e):u},e.y=function(t){return arguments.length?(c=t,m=Ll[!u<<1|!c],e):c},e.clamp=function(t){return arguments.length?(u&&c?(p=!!t[0],h=!!t[1]):u?p=!!t:c&&(h=!!t),e):u&&c?[p,h]:u?p:c?h:null},e.extent=function(t){var n,r,i,o,l;return arguments.length?(u&&(n=t[0],r=t[1],c&&(n=n[0],r=r[0]),a=[n,r],u.invert&&(n=u(n),r=u(r)),n>r&&(l=n,n=r,r=l),(n!=f[0]||r!=f[1])&&(f=[n,r])),c&&(i=t[0],o=t[1],u&&(i=i[1],o=o[1]),s=[i,o],c.invert&&(i=c(i),o=c(o)),i>o&&(l=i,i=o,o=l),(i!=d[0]||o!=d[1])&&(d=[i,o])),e):(u&&(a?(n=a[0],r=a[1]):(n=f[0],r=f[1],u.invert&&(n=u.invert(n),r=u.invert(r)),n>r&&(l=n,n=r,r=l))),c&&(s?(i=s[0],o=s[1]):(i=d[0],o=d[1],c.invert&&(i=c.invert(i),o=c.invert(o)),i>o&&(l=i,i=o,o=l))),u&&c?[[n,i],[r,o]]:u?[n,r]:c&&[i,o])},e.clear=function(){return e.empty()||(f=[0,0],d=[0,0],a=s=null),e},e.empty=function(){return!!u&&f[0]==f[1]||!!c&&d[0]==d[1]},na.rebind(e,l,"on")};var jl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Ll=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Ul=os.format=fs.timeFormat,Hl=Ul.utc,ql=Hl("%Y-%m-%dT%H:%M:%S.%LZ");Ul.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:ql,Jo.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},Jo.toString=ql.toString,os.second=Le(function(e){return new as(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(e.getTime()+1e3*Math.floor(t))},function(e){return e.getSeconds()}),os.seconds=os.second.range,os.seconds.utc=os.second.utc.range,os.minute=Le(function(e){return new as(6e4*Math.floor(e/6e4))},function(e,t){e.setTime(e.getTime()+6e4*Math.floor(t))},function(e){return e.getMinutes()}),os.minutes=os.minute.range,os.minutes.utc=os.minute.utc.range,os.hour=Le(function(e){var t=e.getTimezoneOffset()/60;return new as(36e5*(Math.floor(e/36e5-t)+t))},function(e,t){e.setTime(e.getTime()+36e5*Math.floor(t))},function(e){return e.getHours()}),os.hours=os.hour.range,os.hours.utc=os.hour.utc.range,os.month=Le(function(e){return e=os.day(e),e.setDate(1),e},function(e,t){e.setMonth(e.getMonth()+t)},function(e){return e.getMonth()}),os.months=os.month.range,os.months.utc=os.month.utc.range;var Vl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],zl=[[os.second,1],[os.second,5],[os.second,15],[os.second,30],[os.minute,1],[os.minute,5],[os.minute,15],[os.minute,30],[os.hour,1],[os.hour,3],[os.hour,6],[os.hour,12],[os.day,1],[os.day,2],[os.week,1],[os.month,1],[os.month,3],[os.year,1]],Bl=Ul.multi([[".%L",function(e){return e.getMilliseconds()}],[":%S",function(e){return e.getSeconds()}],["%I:%M",function(e){return e.getMinutes()}],["%I %p",function(e){return e.getHours()}],["%a %d",function(e){return e.getDay()&&1!=e.getDate()}],["%b %d",function(e){return 1!=e.getDate()}],["%B",function(e){return e.getMonth()}],["%Y",Mt]]),Yl={range:function(e,t,n){return na.range(Math.ceil(e/n)*n,+t,n).map(Xo)},floor:y,ceil:y};zl.year=os.year,os.scale=function(){return Qo(na.scale.linear(),zl,Bl)};var Wl=zl.map(function(e){return[e[0].utc,e[1]]}),Gl=Hl.multi([[".%L",function(e){return e.getUTCMilliseconds()}],[":%S",function(e){return e.getUTCSeconds()}],["%I:%M",function(e){return e.getUTCMinutes()}],["%I %p",function(e){return e.getUTCHours()}],["%a %d",function(e){return e.getUTCDay()&&1!=e.getUTCDate()}],["%b %d",function(e){return 1!=e.getUTCDate()}],["%B",function(e){return e.getUTCMonth()}],["%Y",Mt]]);Wl.year=os.year.utc,os.scale.utc=function(){return Qo(na.scale.linear(),Wl,Gl)},na.text=_e(function(e){return e.responseText}),na.json=function(e,t){return Me(e,"application/json",ea,t)},na.html=function(e,t){return Me(e,"text/html",ta,t)},na.xml=_e(function(e){return e.responseXML}),"function"==typeof define&&define.amd?define("common/d3",na):"object"==typeof module&&module.exports&&(module.exports=na),this.d3=na}(),function(){function e(e,t){if(e!==t){var n=null===e,r=e===$,i=e===e,o=null===t,a=t===$,s=t===t;if(e>t&&!o||!i||n&&!a&&s||r&&s)return 1;if(e=e&&9<=e&&13>=e||32==e||160==e||5760==e||6158==e||8192<=e&&(8202>=e||8232==e||8233==e||8239==e||8287==e||12288==e||65279==e)}function m(e,t){for(var n=-1,r=e.length,i=-1,o=[];++n=I&&gi&&ci?new Ue(t):null,u=t.length;l&&(a=He,s=!1,t=l);e:for(;++oa(t,l,0)&&i.push(l);return i}function st(e,t){var n=!0;return Ri(e,function(e,r,i){return n=!!t(e,r,i)}),n}function lt(e,t,n,r){var i=r,o=i;return Ri(e,function(e,a,s){a=+t(e,a,s),(n(a,i)||a===r&&a===o)&&(i=a,o=e)}),o}function ut(e,t){var n=[];return Ri(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function ct(e,t,n,r){var i;return n(e,function(e,n,o){return t(e,n,o)?(i=r?n:e,!1):void 0}),i}function ft(e,t,n,r){r||(r=[]);for(var i=-1,o=e.length;++it&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), -this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n\n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){ -define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function 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)}); +this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend touchcancel":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend touchcancel",function(){m("source",!0,50),!l.open&&h()}),t.find("body").on("touchend touchcancel",function(e){e.target!==g[0]&&(m("source",!1,0),m("tooltip",!1,0))}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,0),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,100)}),u.on("click",function(){m("source",!1,0),m("tooltip",!1,0)}))}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),a||(e.on("mouseenter",function(){m("tooltip",!0,0)}),e.on("mouseleave",function(){m("tooltip",!1,100)})),e.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})})}function m(e,t,r){n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},r)}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'
    \n \n \n\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("components/notification-badge.html",'\n {{badge.count}}\n\n\n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}), +t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/org.civicrm.reqangular/info.xml b/org.civicrm.reqangular/info.xml index 4cce28c13f0..305758db9f7 100755 --- a/org.civicrm.reqangular/info.xml +++ b/org.civicrm.reqangular/info.xml @@ -10,8 +10,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/org.civicrm.reqangular/src/common/bundles/components.js b/org.civicrm.reqangular/src/common/bundles/components.js index ca7ef140a6f..4615d6c037f 100644 --- a/org.civicrm.reqangular/src/common/bundles/components.js +++ b/org.civicrm.reqangular/src/common/bundles/components.js @@ -1,7 +1,8 @@ /* eslint-env amd */ define([ - 'common/components/heatmap.component' + 'common/components/heatmap.component', + 'common/components/notification-badge.component' ], function () { }); diff --git a/org.civicrm.reqangular/src/common/components/notification-badge.component.js b/org.civicrm.reqangular/src/common/components/notification-badge.component.js new file mode 100644 index 00000000000..3d47d69b240 --- /dev/null +++ b/org.civicrm.reqangular/src/common/components/notification-badge.component.js @@ -0,0 +1,60 @@ +/* eslint-env amd */ + +define([ + 'common/lodash', + 'common/modules/components', + 'common/services/api' +], function (_, components) { + components.component('notificationBadge', { + bindings: { + filters: '<', + refreshCountEventName: '<' + }, + template: ['$templateCache', function ($templateCache) { + return $templateCache.get('components/notification-badge.html'); + }], + controllerAs: 'badge', + controller: NotificationBadgeController + }); + + NotificationBadgeController.$inject = ['$log', '$q', 'api', 'pubSub']; + + function NotificationBadgeController ($log, $q, api, pubSub) { + $log.debug('Component: notification-badge'); + + var vm = this; + vm.count = 0; + + (function init () { + initListeners(); + fetchCount(); + })(); + + /** + * Fetch count of records which matches the filter + * + * @return {Promise} + */ + function fetchCount () { + var promises = _.map(vm.filters, function (filter) { + return api.getAll(filter.apiName, filter.params, null, null, null, 'get', false); + }); + + return $q.all(promises) + .then(function (results) { + vm.count = _.reduce(results, function (memo, num) { + return memo + num.total; + }, 0); + }); + } + + /** + * Initializes the event listeners + */ + function initListeners () { + pubSub.subscribe(vm.refreshCountEventName, fetchCount); + // Event listener for non-angular context + document.addEventListener(vm.refreshCountEventName, fetchCount); + } + } +}); diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js new file mode 100644 index 00000000000..5a802222f0a --- /dev/null +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -0,0 +1,149 @@ +/* eslint-env amd */ + +define([ + 'common/angular', + 'common/angularBootstrap' +], function (angular) { + 'use strict'; + + var $document, $timeout; + + return ['$delegate', '$document', '$timeout', function ($delegate, _$document_, _$timeout_) { + $document = _$document_; + $timeout = _$timeout_; + + return function () { + var tooltip = $delegate.apply(this, arguments); + var compilator = tooltip.compile; + var isTouchDevice = 'ontouchstart' in $document[0].documentElement; + var clickType = isTouchDevice ? 'touchend touchcancel' : 'click'; + + tooltip.compile = function (tElement, tAttr) { + return function link (scope, $element, attributes, tooltipCtrl) { + var $overlay; + var isTooltipClickable = $element.attr('uib-tooltip-clickable'); + + isTooltipClickable && setInitialAttributesForClickableTooltip(); + compilator(tElement, tAttr)(scope, $element, attributes, tooltipCtrl); + isTooltipClickable && makeTooltipClickable(); + + /** + * Injects an overlay element to the original element that triggers the tooltip + */ + function injectOverlayToTriggerElement () { + $overlay = angular.element('
    '); + + $element.css({ 'position': 'relative' }); + $overlay.css({ + position: 'absolute', + height: '100%', + width: '100%', + 'z-index': 1, + top: 0, + left: 0 + }); + $element.append($overlay); + } + + /** + * Makes the tooltip clickable + * by making it hoverable on non-touch devices + * and dismissable on touch devices + */ + function makeTooltipClickable () { + isTouchDevice && injectOverlayToTriggerElement(); + setEventHandlersToTriggerElements(); + } + + /** + * Defines the handlers that will be used + * to display the tooltip depending on the device + */ + function setEventHandlersToTriggerElements () { + if (isTouchDevice) { + $overlay.on('touchend touchcancel', function () { + toggleTooltip('source', true, 50); + !scope.open && setEventHandlersToTooltip(); + }); + $document.find('body').on('touchend touchcancel', function (event) { + if (event.target === $overlay[0]) { + return; + } + + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); + }); + $overlay.on('click', function (event) { + event.stopPropagation(); + }); + } else { + $element.on('mouseenter', function () { + toggleTooltip('source', true, 0); + !scope.open && setEventHandlersToTooltip(); + }); + $element.on('mouseleave', function () { + toggleTooltip('source', false, 100); + }); + $element.on('click', function () { + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); + }); + } + } + + /** + * Sets event handlers to the tooltip itself + */ + function setEventHandlersToTooltip () { + var $tooltip; + + $timeout(function () { + $tooltip = $document.find('.tooltip-clickable-template:visible:last'); + + if (!isTouchDevice) { + $tooltip.on('mouseenter', function () { + toggleTooltip('tooltip', true, 0); + }); + $tooltip.on('mouseleave', function () { + toggleTooltip('tooltip', false, 100); + }); + } + + $tooltip.on(clickType, function () { + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); + }); + }); + } + + /** + * Sets initial attributes for clickable tooltip + */ + function setInitialAttributesForClickableTooltip () { + attributes.tooltipTrigger = 'customShow'; + attributes.tooltipAnimation = false; + } + + /** + * Shows/hides tooltip + * + * @param {String} elementType source|tooltip + * @param {Boolean} elementIsHovered is element currently hovered or not + * @param {Number} delay the event handler should be deferred by + */ + function toggleTooltip (elementType, elementIsHovered, delay) { + $timeout(function () { + scope[elementType + '_hovered'] = elementIsHovered; + scope.open = scope.source_hovered || scope.tooltip_hovered; + + $element.trigger('custom' + (scope.open ? 'Show' : 'Hide')); + isTouchDevice && $overlay[scope.open ? 'hide' : 'show'](); + }, delay); + } + }; + }; + + return tooltip; + }; + }]; +}); diff --git a/org.civicrm.reqangular/src/common/models/model.js b/org.civicrm.reqangular/src/common/models/model.js index ed7cdff7532..b345de4a0dd 100644 --- a/org.civicrm.reqangular/src/common/models/model.js +++ b/org.civicrm.reqangular/src/common/models/model.js @@ -1,114 +1,122 @@ +/* eslint-env amd */ + define([ - 'common/lodash', - 'common/moment', - 'common/modules/models' + 'common/lodash', + 'common/moment', + 'common/modules/models' ], function (_, moment, models) { - 'use strict'; + 'use strict'; - models.factory('Model', function () { + models.factory('Model', function () { + return { + compactFilters: compactFilters, + extend: extend, + processFilters: processFilters + }; - /** - * 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'); - } + /** + * Returns the date in the 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; - } + /** + * Removes falsy values from the filters (except 0 or false) + * + * @param {Object} filters + * @return {Object|null} + */ + function compactFilters (filters) { + if (!filters) { + return null; + } - /** - * 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) }; - } - } + return _.pick(filters, function (value) { + return value === 0 || value === false || !!value; + }); + } - /** - * 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 }; - } - } + /** + * Extends the basic Model with the given ChildModel + * + * @param {Object} ChildModel + * @return {Object} + */ + function extend (ChildModel) { + return _.assign(Object.create(this), ChildModel); + } - return { + /** + * Checks if the given date is in the standard YYYY-MM-DD[ HH:mm[:ss]] format + * + * @param {String} date + * @return {Boolean} + */ + function isStandardDateFormat (date) { + var standardFormats = ['YYYY-MM-DD', 'YYYY-MM-DD HH:mm', 'YYYY-MM-DD HH:mm:ss']; - /** - * Extends the basic Model with the given ChildModel - * - * @param {object} ChildModel - * @return {object} - */ - extend: function (ChildModel) { - return _.assign(Object.create(this), ChildModel); - }, + return _.some(standardFormats, function (standardFormat) { + return moment(date, standardFormat).format(standardFormat) === date; + }); + } - /** - * Removes falsey values from the filters (except 0 or false) - * - * @param {object} filters - * @return {object|null} - */ - compactFilters: function (filters) { - if (!filters) { - return null; - } + /** + * 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) }; + } + } - return _.pick(filters, function (value) { - return value === 0 || value === false || !!value; - }); - }, + /** + * 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; + } - /** - * 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; - } - }, {}); - } - }; - }); + /** + * 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 }; + } + } + }); }); diff --git a/org.civicrm.reqangular/src/common/modules/directives.js b/org.civicrm.reqangular/src/common/modules/directives.js index fa6663660c4..4c0024e925a 100644 --- a/org.civicrm.reqangular/src/common/modules/directives.js +++ b/org.civicrm.reqangular/src/common/modules/directives.js @@ -1,4 +1,6 @@ /* eslint-env amd */ +/* globals jQuery */ + define([ 'common/angular', 'common/decorators/ui-select-focus.decorator', @@ -7,6 +9,7 @@ define([ 'common/decorators/xeditable-disable-calendar-icon.decorator', 'common/decorators/ui-bootstrap/uib-tabset', 'common/decorators/ui-bootstrap/uib-modal.decorator', + 'common/decorators/uib-tooltip.decorator', 'common/angularBootstrap', 'common/angularXeditable', 'common/ui-select', @@ -14,17 +17,19 @@ define([ 'common/modules/controllers', 'common/modules/services', 'common/modules/apis' -], function (angular, uiSelectFocusDecorator, uibCalendarIconDecorator, uibCalendarMobileVersion, xeditableDisableCalendarIcon, uibTabset, uibModalDecorator) { +], function (angular, uiSelectFocusDecorator, uibCalendarIconDecorator, uibCalendarMobileVersion, xeditableDisableCalendarIcon, uibTabset, uibModalDecorator, uibTooltipDecorator) { 'use strict'; return angular.module('common.directives', ['common.templates', 'common.controllers', 'ui.select', 'ui.bootstrap', 'xeditable']) - .config(['$provide', function ($provide) { + .config(['$provide', '$uibTooltipProvider', function ($provide, $uibTooltipProvider) { + $uibTooltipProvider.setTriggers({ 'customShow': 'customHide' }); $provide.decorator('uibDatepickerPopupDirective', uibCalendarMobileVersion); $provide.decorator('uibDatepickerPopupDirective', uibCalendarIconDecorator); $provide.decorator('uibTabsetDirective', uibTabset); $provide.decorator('$uibModal', uibModalDecorator); $provide.decorator('editableBsdateDirective', xeditableDisableCalendarIcon); $provide.decorator('uiSelectDirective', uiSelectFocusDecorator); + $provide.decorator('$uibTooltip', uibTooltipDecorator); }]) .run(['$templateCache', function ($templateCache) { // Update uib-tabset HTML with header class @@ -32,6 +37,6 @@ define([ var tpl = jQuery($templateCache.get(tplPath)); tpl.find('ul').addClass('{{tabset.customHeaderClass}}'); $templateCache.put(tplPath, tpl.wrap('
    ').parent().html()); - //end of uib-tabset override + // end of uib-tabset override }]); }); diff --git a/org.civicrm.reqangular/src/common/modules/templates.js b/org.civicrm.reqangular/src/common/modules/templates.js index ee70f7cbc76..ac821aa93b0 100644 --- a/org.civicrm.reqangular/src/common/modules/templates.js +++ b/org.civicrm.reqangular/src/common/modules/templates.js @@ -1,5 +1,5 @@ define(['common/angular'], function(angular) { 'use strict'; return angular.module('common.templates', []).run(['$templateCache', function($templateCache) {$templateCache.put('dialog.html','\n\n\n'); -$templateCache.put('help-text.html','\n'); +$templateCache.put('help-text.html','\n \n \n\n'); $templateCache.put('loading.html','
    \n
    \n
    \n
    \n'); $templateCache.put('time-amount-picker.html','
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'); $templateCache.put('timepicker-select.html','\n\n'); @@ -11,5 +11,6 @@ $templateCache.put('civihr-ui-select/select-contacts.tpl.html','
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'); $templateCache.put('civihr-ui-select/select.tpl.html','
    \n
    \n \n
    \n'); $templateCache.put('components/heatmap.html','
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'); +$templateCache.put('components/notification-badge.html','\n {{badge.count}}\n\n\n'); $templateCache.put('contact-actions/contact-actions.html','
    \n \n \n
    \n'); $templateCache.put('contact-actions/modals/form.html','
    \n \n \n \n
    \n');}]);}); \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-notification-badge.html b/org.civicrm.reqangular/src/common/templates/components/notification-badge.html similarity index 100% rename from uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-notification-badge.html rename to org.civicrm.reqangular/src/common/templates/components/notification-badge.html diff --git a/org.civicrm.reqangular/src/common/templates/help-text.html b/org.civicrm.reqangular/src/common/templates/help-text.html index 530bbb747b0..c014d7c1fbf 100644 --- a/org.civicrm.reqangular/src/common/templates/help-text.html +++ b/org.civicrm.reqangular/src/common/templates/help-text.html @@ -1,4 +1,4 @@ - + diff --git a/org.civicrm.reqangular/test/components/notification-badge.component.spec.js b/org.civicrm.reqangular/test/components/notification-badge.component.spec.js new file mode 100644 index 00000000000..c08f0c893c1 --- /dev/null +++ b/org.civicrm.reqangular/test/components/notification-badge.component.spec.js @@ -0,0 +1,98 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/angularMocks', + 'common/components/notification-badge.component', + 'common/services/pub-sub' +], function () { + 'use strict'; + + describe('notificationBadge', function () { + var $componentController, $log, $rootScope, $q, controller, api, pubSub; + var apiReturnValue = { list: [1, 2, 3], total: 3 }; + var eventName = 'some-event'; + var filters = [{ + apiName: 'Tasks', + params: { key: 'value' } + }, { + apiName: 'Documents', + params: { key: 'value' } + }]; + + beforeEach(module('common.components', 'common.services', 'common.apis')); + + beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_, _$q_, _pubSub_, _api_) { + $componentController = _$componentController_; + $log = _$log_; + $q = _$q_; + $rootScope = _$rootScope_; + pubSub = _pubSub_; + api = _api_; + + spyOn($log, 'debug'); + spyOn(api, 'getAll').and.returnValue($q.resolve(apiReturnValue)); + + compileComponent(); + })); + + it('is initialized', function () { + expect($log.debug).toHaveBeenCalled(); + }); + + describe('on init', function () { + it('sets the event name same as the passed attribute', function () { + expect(controller.refreshCountEventName).toBe(eventName); + }); + + it('calls api to get the count', function () { + expect(api.getAll).toHaveBeenCalledWith(filters[0].apiName, filters[0].params, null, null, null, 'get', false); + expect(api.getAll).toHaveBeenCalledWith(filters[1].apiName, filters[1].params, null, null, null, 'get', false); + }); + + describe('after api returns with value', function () { + it('sets count to number of records returned', function () { + expect(controller.count).toBe(6); + }); + }); + }); + + describe('when event is fired', function () { + beforeEach(function () { + apiReturnValue = { list: [1, 2, 3, 4], total: 4 }; + + pubSub.publish(eventName); + api.getAll.and.returnValue($q.resolve(apiReturnValue)); + }); + + it('calls api to get the count', function () { + expect(api.getAll).toHaveBeenCalledWith(filters[0].apiName, filters[0].params, null, null, null, 'get', false); + expect(api.getAll).toHaveBeenCalledWith(filters[1].apiName, filters[1].params, null, null, null, 'get', false); + }); + + describe('after api returns with value', function () { + it('sets count to number of records returned', function () { + expect(controller.count).toBe(8); + }); + }); + }); + + describe('for events outside angular context', function () { + beforeEach(function () { + spyOn(document, 'addEventListener'); + compileComponent(); + }); + + it('listens to events fired outside of angular context', function () { + expect(document.addEventListener).toHaveBeenCalledWith(eventName, jasmine.any(Function)); + }); + }); + + function compileComponent () { + controller = $componentController('notificationBadge', null, { + refreshCountEventName: eventName, + filters: filters + }); + $rootScope.$digest(); + } + }); +}); diff --git a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js new file mode 100644 index 00000000000..d947d585882 --- /dev/null +++ b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js @@ -0,0 +1,280 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/angularMocks', + 'common/angular', + 'common/decorators/uib-tooltip.decorator', + 'common/lodash', + 'common/angularBootstrap' +], function (angularMocks, angular, $uibTooltipDecorator, _) { + 'use strict'; + + describe('$uiTooltip.clickable', function () { + var $compile, $content, $document, $rootScope, $triggerElement, $timeout, $tooltipElement, $provide; + + beforeEach(function () { + module('ui.bootstrap'); + module(function (_$provide_, _$uibTooltipProvider_) { + $provide = _$provide_; + + _$uibTooltipProvider_.setTriggers({ 'customShow': 'customHide' }); + }); + inject(function () { + $provide.decorator('$uibTooltip', $uibTooltipDecorator); + }); + }); + beforeEach(inject(function (_$compile_, _$document_, _$rootScope_, _$timeout_) { + $compile = _$compile_; + $document = _$document_; + $rootScope = _$rootScope_; + $timeout = _$timeout_; + })); + + describe('when a document with a tooltip with the "uib-tooltip-clickable" attribute is opened', function () { + beforeEach(function () { + cleanDocument(); + + $content = angular.element( + '
    ' + + generateTriggerElementHTML('tooltip1') + + generateTriggerElementHTML('tooltip2') + + '
    '); + $triggerElement = $content.find('[uib-tooltip-template]').eq(0); + }); + + it('does not yet show the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + + describe('non-touch device', function () { + beforeEach(function () { + $compile($content)($rootScope.$new()); + $document.find('body').append($content); + }); + + describe('when the trigger element is hovered', function () { + beforeEach(function () { + $triggerElement.trigger('mouseenter'); + flushTimeout(); + + $tooltipElement = $document.find('.tooltip-clickable-template'); + }); + + it('shows the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(true); + }); + + describe('when the trigger tooltip is unhovered', function () { + beforeEach(function () { + $triggerElement.trigger('mouseleave'); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + }); + + describe('when the opened tooltip is hovered', function () { + beforeEach(function () { + $triggerElement.trigger('mouseleave'); + flushTimeout(); + $tooltipElement.trigger('mouseenter'); + flushTimeout(); + }); + + it('keeps the tooltip shown', function () { + expect(getTooltipVisibility('tooltip1')).toBe(true); + }); + + describe('when the opened tooltip is unhovered', function () { + beforeEach(function () { + $tooltipElement.trigger('mouseleave'); + flushTimeout(2); + }); + + it('keeps the tooltip shown', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + }); + }); + }); + }); + + describe('touch device', function () { + var $overlay; + + beforeEach(function () { + simulateTouchDevice(); + + $compile($content)($rootScope.$new()); + $document.find('body').append($content); + + $overlay = $triggerElement.find('.tooltip-overlay'); + $rootScope.$digest(); + }); + + it('creates an properly styled overlay over the trigger element', function () { + expect($overlay.length).toBe(1); + expect($overlay[0].style.position).toBe('absolute'); + expect($overlay[0].style.height).toBe('100%'); + expect($overlay[0].style.height).toBe('100%'); + expect($overlay[0].style.width).toBe('100%'); + expect($overlay[0].style.top).toBe('0px'); + expect($overlay[0].style.left).toBe('0px'); + expect($overlay[0].style['z-index']).toBe('1'); + }); + + describe('when the overlay is "hovered"', function () { + beforeEach(function () { + $overlay.trigger('mouseenter'); + flushTimeout(); + }); + + it('ignores "hover" event and does not show the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + }); + + describe('when the overlay is tapped', function () { + beforeEach(function () { + $overlay.trigger('touchend'); + flushTimeout(); + + $tooltipElement = $document.find('.tooltip-clickable-template'); + }); + + it('shows the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(true); + }); + + it('hides the overlay', function () { + expect(getOverlayVisibility($triggerElement)).toBe(false); + }); + + describe('when another trigger element is tapped', function () { + var $triggerElement2, $overlay2; + + beforeEach(function () { + $triggerElement2 = $content.find('[uib-tooltip-template]').eq(1); + $overlay2 = $triggerElement2.find('.tooltip-overlay'); + + $overlay2.trigger('touchend'); + flushTimeout(2); + }); + + it('opens the target tooltip and closes other tooltips', function () { + expect(getTooltipVisibility('tooltip2')).toBe(true); + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + }); + + describe('when the trigger element is tapped', function () { + beforeEach(function () { + $triggerElement.trigger('touchend'); + $rootScope.$digest(); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + + it('shows the overlay', function () { + expect(getOverlayVisibility($triggerElement)).toBe(true); + }); + }); + + describe('when the tooltip is tapped', function () { + beforeEach(function () { + $tooltipElement.trigger('touchend'); + $rootScope.$digest(); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + + it('shows the overlay', function () { + expect(getOverlayVisibility($triggerElement)).toBe(true); + }); + }); + + describe('when the trigger tooltip is unhovered', function () { + beforeEach(function () { + $document.find('body').trigger('touchend'); + $rootScope.$digest(); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); + }); + }); + }); + }); + + /** + * Cleans the document from tooltips trigger elements + */ + function cleanDocument () { + $document.find('[uib-tooltip-clickable]').remove(); + } + + /** + * Flushes timeouts one or more times. + * Multiple timeout flushes are needed because the tooltip library + * has a timeout when hiding a tooltip. + */ + function flushTimeout (times) { + times = times || 1; + + _.times(times, function () { + $timeout.flush(); + }); + } + + /** + * Generates HTML for a trigger element with a given ID that is also used as the content + * + * @param {String} id + * @return {String} + */ + function generateTriggerElementHTML (id) { + return '
    ' + + '' + + '
    '; + } + + /** + * Checks if the overlay of the given target element is currently visible + * + * @param {jQuery} $triggerElement + * @return {Boolean} + */ + function getOverlayVisibility ($triggerElement) { + return !!$triggerElement.find('.tooltip-overlay:visible').length; + } + + /** + * Checks if the tooltip is currently visible + * + * @return {Boolean} + */ + function getTooltipVisibility (content) { + return !!$document.find('.tooltip-clickable-template:visible:contains(' + content + ')').length; + } + + /** + * Simulates a touch device by simply telling the browser + * that the `ontouchstart` event handler exists + */ + function simulateTouchDevice () { + $document[0].documentElement.ontouchstart = true; + } + }); +}); diff --git a/org.civicrm.reqangular/test/directives/help-text.directive.spec.js b/org.civicrm.reqangular/test/directives/help-text.directive.spec.js index ce08a96dc56..32efa271711 100644 --- a/org.civicrm.reqangular/test/directives/help-text.directive.spec.js +++ b/org.civicrm.reqangular/test/directives/help-text.directive.spec.js @@ -27,7 +27,7 @@ define([ helpText = element.find('.help-text').html(); helpTitle = element.attr('title'); - element.find('button').click(); + element.find('a').click(); }); it('displays the help text when the button is clicked', function () { @@ -45,7 +45,7 @@ define([ helpText = element.find('.help-text').html(); - element.find('button').click(); + element.find('a').click(); }); it('displays the help text when the button is clicked', function () { diff --git a/org.civicrm.reqangular/test/models/model.spec.js b/org.civicrm.reqangular/test/models/model.spec.js index 880e61c0636..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_) { @@ -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' } + }); }); }); }); diff --git a/uk.co.compucorp.civicrm.hrcomments/info.xml b/uk.co.compucorp.civicrm.hrcomments/info.xml index 021e55fc0f6..66b926922c7 100644 --- a/uk.co.compucorp.civicrm.hrcomments/info.xml +++ b/uk.co.compucorp.civicrm.hrcomments/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.2 diff --git a/uk.co.compucorp.civicrm.hrcontactactionsmenu/info.xml b/uk.co.compucorp.civicrm.hrcontactactionsmenu/info.xml index e14a6151ad2..53a772f3657 100644 --- a/uk.co.compucorp.civicrm.hrcontactactionsmenu/info.xml +++ b/uk.co.compucorp.civicrm.hrcontactactionsmenu/info.xml @@ -9,8 +9,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 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/CRM/HRCore/CMSData/SiteInformation/DrupalSiteInformation.php b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/DrupalSiteInformation.php index 2b6cee19485..2256759d321 100644 --- a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/DrupalSiteInformation.php +++ b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/DrupalSiteInformation.php @@ -14,4 +14,15 @@ public function getSiteName() { return variable_get('site_name'); } + /** + * @inheritdoc + */ + public function getActiveUserCount() { + return (int) db_select('users') + ->condition('status', 1, '=') + ->countQuery() + ->execute() + ->fetchField(); + } + } diff --git a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/SiteInformationInterface.php b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/SiteInformationInterface.php index 2b81f3524ef..91086d669a3 100644 --- a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/SiteInformationInterface.php +++ b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/CMSData/SiteInformation/SiteInformationInterface.php @@ -12,4 +12,11 @@ interface CRM_HRCore_CMSData_SiteInformation_SiteInformationInterface { */ public function getSiteName(); + /** + * Gets the number of active users for the site + * + * @return int + */ + public function getActiveUserCount(); + } diff --git a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Hook/ValidateForm/AdminFormOptionsValidation.php b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Hook/ValidateForm/AdminFormOptionsValidation.php new file mode 100644 index 00000000000..8b1eb019a37 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Hook/ValidateForm/AdminFormOptionsValidation.php @@ -0,0 +1,72 @@ +shouldHandle($formName, $form)) { + return; + } + + $this->validateFormValues($fields, $errors); + } + + /** + * Checks if the hook should be handled. + * + * @param string $formName + * @param object $form + * + * @return bool + */ + private function shouldHandle($formName, $form) { + if ($formName === CRM_Admin_Form_Options::class && $form->elementExists('value')) { + $optionGroupName = $form->getVar( '_gName' ); + $optionGroupsToCheck = ['hrleaveandabsences_toil_amounts', 'hrleaveandabsences_leave_days_amounts']; + + if (in_array($optionGroupName, $optionGroupsToCheck)) { + return TRUE; + } + } + + return FALSE; + } + + /** + * Validates the value field and ensures that the user is only + * allowed to enter a decimal or number and if it is a decimal, it + * must be correct to 2 decimal places. + * + * @param array $fields + * @param $errors + */ + private function validateFormValues($fields, &$errors) { + $value = CRM_Utils_Array::value('value', $fields); + + if (!filter_var($value, FILTER_VALIDATE_FLOAT)) { + $errors['value'] = ts( 'Value must be a whole number or decimal' ); + } + + if (strpos($value, '.') !== FALSE) { + $numbersAfterDecimal = substr($value, strpos($value, '.') + 1); + if (strlen($numbersAfterDecimal) != 2) { + $errors['value'] = ts( 'Please enter the value as a number correct to 2 decimal places' ); + } + } + } +} diff --git a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Service/Stats/StatsGatherer.php b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Service/Stats/StatsGatherer.php index 58d5362d826..4846481fd23 100644 --- a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Service/Stats/StatsGatherer.php +++ b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Service/Stats/StatsGatherer.php @@ -79,10 +79,14 @@ public function gather() { private function getEntityCounts() { $entityCounts = []; $entityCounts['contact'] = $this->getEntityCount('Contact'); - $entityCounts['cmsUser'] = $this->getEntityCount('UFMatch'); + $entityCounts['cmsUser'] = $this->siteInformation->getActiveUserCount(); $entityCounts += $this->getTaskAndAssignmentEntityCounts(); $entityCounts += $this->getLeaveAndAbsenceEntityCounts(); $entityCounts += $this->getRecruitmentEntityCounts(); + $entityCounts += $this->getJobRoleEntityCounts(); + $entityCounts += $this->getCustomDataCounts(); + $entityCounts += $this->getCaseEntityCounts(); + $entityCounts += $this->getHrResourceCounts(); return $entityCounts; } @@ -98,7 +102,7 @@ private function getEntityCounts() { * @return int */ private function getEntityCount($entity, $params = []) { - $params += ['is_deleted' => FALSE]; + $params += ['is_deleted' => FALSE, 'is_active' => TRUE]; return (int) civicrm_api3($entity, 'getcount', $params); } @@ -117,7 +121,8 @@ private function getContactSubtypes() { if (!empty($contactType['parent_id'])) { $params = ['contact_sub_type' => $name]; - } else { + } + else { $params = ['contact_type' => $name]; } @@ -143,7 +148,6 @@ private function getReportConfigurations() { $query = db_select('reports_configuration', 'rc')->fields('rc'); $result = $query->execute(); - while ($row = $result->fetchAssoc()) { $config = new ReportConfiguration(); $config @@ -263,4 +267,102 @@ private function isDrupal() { return $userSystem instanceof CRM_Utils_System_Drupal; } + /** + * Fetches entity counts for the job role entities + * + * @return array + */ + private function getJobRoleEntityCounts() { + $jobRoleExtKey = 'com.civicrm.hrjobroles'; + $counts = []; + + if (!ExtensionHelper::isExtensionEnabled($jobRoleExtKey)) { + return $counts; + } + + $counts['jobRole'] = $this->getEntityCount('HrJobRoles'); + $params = ['option_group_id' => 'cost_centres']; + $counts['costCenter'] = $this->getEntityCount('OptionValue', $params); + $counts['funder'] = $this->getFunderCount(); + + return $counts; + } + + /** + * Gets a count of all contacts in the system that have been marked as a + * funder + * + * @return int + */ + private function getFunderCount() { + $result = civicrm_api3('HrJobRoles', 'get', ['return' => ['funder']]); + $result = array_column($result['values'], 'funder'); + // some funder data may not include the delimiter so make sure to add it + $funderIds = implode('|', $result); + $funderIds = explode('|', $funderIds); + $funderIds = array_unique(array_filter($funderIds)); + + return count($funderIds); + } + + /** + * Gets the count of custom groups and fields + * + * @return array + */ + private function getCustomDataCounts() { + $counts = []; + $counts['customGroup'] = $this->getEntityCount('CustomGroup'); + $counts['customField'] = $this->getEntityCount('CustomField'); + + return $counts; + } + + /** + * Gets counts for the case entities + * + * @return array + */ + private function getCaseEntityCounts() { + $counts = []; + $counts['caseType'] = $this->getEntityCount('CaseType'); + + return $counts; + } + + /** + * Gets a count of all HR Resource related entities + * + * @return array + */ + private function getHrResourceCounts() { + $counts['hrResourceType'] = 0; + $counts['hrResource'] = 0; + + if (!$this->isDrupal()) { + return $counts; + } + + $hrResourceTypeIds = db_select('node', 'n') + ->fields('n', ['nid']) + ->condition('n.type', 'hr_documents') + ->condition('n.status', NODE_PUBLISHED) + ->execute() + ->fetchCol(); + + $resourceTypeCount = count($hrResourceTypeIds); + $counts['hrResourceType'] = $resourceTypeCount; + + if ($resourceTypeCount > 0) { + $hrResourceCount = (int) db_select('file_usage') + ->condition('id', $hrResourceTypeIds, 'IN') + ->countQuery() + ->execute() + ->fetchField(); + $counts['hrResource'] = $hrResourceCount; + } + + return $counts; + } + } diff --git a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Test/BaseHeadlessTest.php b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Test/BaseHeadlessTest.php index 475db2f1bd0..0118107e6d0 100644 --- a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Test/BaseHeadlessTest.php +++ b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Test/BaseHeadlessTest.php @@ -12,7 +12,8 @@ public function setUpHeadless() { 'org.civicrm.hrrecruitment', 'uk.co.compucorp.civicrm.hrleaveandabsences', 'org.civicrm.hrjobcontract', // L&A depends on HRJobContract - 'uk.co.compucorp.civicrm.hrcontactactionsmenu' + 'uk.co.compucorp.civicrm.hrcontactactionsmenu', + 'com.civicrm.hrjobroles', ]; return \Civi\Test::headless() diff --git a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Upgrader/Base.php b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Upgrader/Base.php index f51f5c65504..00788cdd774 100644 --- a/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Upgrader/Base.php +++ b/uk.co.compucorp.civicrm.hrcore/CRM/HRCore/Upgrader/Base.php @@ -1,6 +1,7 @@ run($xml_file); return TRUE; 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..e310450e2cd 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", "html_report": "backstop_data/html_report", "ci_report": "backstop_data/ci_report" }, - "casperFlags": [], - "engine": "phantomjs", - "report": ["CI", "browser"], - "debug": false + "report": ["browser"], + "engine": "puppet", + "engineFlags": [], + "engineOptions": { + "waitTimeout": 20000 + }, + "asyncCaptureLimit": 1, + "asyncCompareLimit": 50, + "debug": false, + "debugWindow": false } 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(); -}; 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/engine_scripts/clickAndHoverHelper.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js new file mode 100644 index 00000000000..942bf059d91 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js @@ -0,0 +1,19 @@ +module.exports = async (puppet, scenario) => { + var hoverSelector = scenario.hoverSelector; + var clickSelector = scenario.clickSelector; + var postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int] + + if (hoverSelector) { + await puppet.waitFor(hoverSelector); + await puppet.hover(hoverSelector); + } + + if (clickSelector) { + await puppet.waitFor(clickSelector); + await puppet.click(clickSelector); + } + + if (postInteractionWait) { + await puppet.waitFor(postInteractionWait); + } +}; 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..d82bb552487 --- /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'; + +const pageObj = require('../../page-objects/contact-summary'); + +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 new file mode 100644 index 00000000000..7168b0d387c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..6b6d23229d5 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..9d9bd0dd527 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js @@ -0,0 +1,9 @@ +'use strict'; + +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-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..d25815324ac --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js @@ -0,0 +1,11 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/absence'); + +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 new file mode 100644 index 00000000000..8472106ee6f --- /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'; + +const pageObj = require('../../../page-objects/tabs/absence'); + +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 new file mode 100644 index 00000000000..5fcf069f8d7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js @@ -0,0 +1,9 @@ +'use strict'; + +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-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..d0b60688dfd --- /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'; + +const pageObj = require('../../../page-objects/tabs/absence'); + +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 new file mode 100644 index 00000000000..dc15cb8da62 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js @@ -0,0 +1,9 @@ +'use strict'; + +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/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js new file mode 100644 index 00000000000..93f9f011fb8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/documents'); + +module.exports = async engine => { + await pageObj.init(engine); +}; 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 new file mode 100644 index 00000000000..a9d4c109f22 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..cb2a805b4cb --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..bbbdcc94a90 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..d0c46e0398d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js @@ -0,0 +1,9 @@ +'use strict'; + +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-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..0f746fa5281 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + await pageObj.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 new file mode 100644 index 00000000000..676d863ce20 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..621c088277c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..51cb30990b2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..cf87c2b6923 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..1cf4af558d9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..c7e2dee408e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..0d6731b73ee --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-contract'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.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 new file mode 100644 index 00000000000..c09640caa09 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js @@ -0,0 +1,9 @@ +'use strict'; + +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/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..8f0cad18396 --- /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'; + +const pageObj = require('../../../page-objects/tabs/job-roles'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.switchToTab('Basic Details'); + await page.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..cfc00b79e7d --- /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'; + +const pageObj = require('../../../page-objects/tabs/job-roles'); + +module.exports = async engine => { + await pageObj.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 new file mode 100644 index 00000000000..4489ebadeba --- /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'; + +const pageObj = require('../../../page-objects/tabs/job-roles'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.switchToTab('Cost Centres'); + await page.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..04665bb4623 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..e579eb4756e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js @@ -0,0 +1,9 @@ +'use strict'; + +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-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..888b83f9ab2 --- /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'; + +const pageObj = require('../../../page-objects/tabs/job-roles'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.switchToTab('Funding'); + await page.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..e72d493112a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js @@ -0,0 +1,9 @@ +'use strict'; + +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/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..0ebc00e2be2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js @@ -0,0 +1,11 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/job-roles'); + +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.switchToTab('Basic Details'); + await page.edit(); + await page.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..9422920de56 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js @@ -0,0 +1,9 @@ +'use strict'; + +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/contact-summary/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show.js new file mode 100644 index 00000000000..1e3efaeb973 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../page-objects/contact-summary'); + +module.exports = async engine => { + await pageObj.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 new file mode 100644 index 00000000000..9f695fe1471 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tabs/tasks'); + +module.exports = async engine => { + await pageObj.init(engine); +}; 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..46c38316647 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..c0350ac3933 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js @@ -0,0 +1,9 @@ +'use strict'; + +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/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..017a2bb4d96 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js @@ -0,0 +1,11 @@ +'use strict'; + +const pageObj = require('../../../page-objects/documents'); + +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 new file mode 100644 index 00000000000..956afb786d8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js @@ -0,0 +1,12 @@ +'use strict'; + +const pageObj = require('../../../page-objects/documents'); + +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 new file mode 100644 index 00000000000..8ed035396a6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/documents'); + +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 new file mode 100644 index 00000000000..3efcfdd4cc6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js @@ -0,0 +1,12 @@ +'use strict'; + +const pageObj = require('../../../page-objects/documents'); + +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/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/show.js new file mode 100644 index 00000000000..2fd6588d7d2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/show.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../page-objects/documents'); + +module.exports = async engine => { + await pageObj.init(engine); +}; 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..b76482a23b9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..8c488344bd4 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..4e5e58e87dd --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..2e45045eb08 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..b407d1d5791 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js @@ -0,0 +1,9 @@ +'use strict'; + +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-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..3bc8ae09528 --- /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'; + +const pageObj = require('../../../page-objects/leave-absence-dashboard'); + +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 new file mode 100644 index 00000000000..51ba03a6f90 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js @@ -0,0 +1,9 @@ +'use strict'; + +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/loadCookies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js new file mode 100644 index 00000000000..54faa5f29f7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js @@ -0,0 +1,29 @@ +var fs = require('fs'); + +module.exports = async (puppet, 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 + cookies = cookies.map(cookie => { + cookie.url = 'http://' + cookie.domain; + delete cookie.domain; + return cookie; + }); + + // 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 new file mode 100644 index 00000000000..93c6f3daa3d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js @@ -0,0 +1,6 @@ +module.exports = async (puppet, scenario, vp) => { + console.log('--------------------------------------------'); + console.log('Running Scenario "' + scenario.label + '" ' + scenario.count); + + 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 new file mode 100644 index 00000000000..d77d091b35f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js @@ -0,0 +1,6 @@ +const page = require('../page-objects/page'); + +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/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..552dc90e28a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..9190e3b97e3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..737605fe363 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..5a658d259f7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..52291c4cc4e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..3a2dc579ad4 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..095501bff53 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..fb34f9ea031 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..029c211d371 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js @@ -0,0 +1,9 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +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 new file mode 100644 index 00000000000..5110c5a167d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +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 new file mode 100644 index 00000000000..3d46e9d393a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js @@ -0,0 +1,9 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +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 new file mode 100644 index 00000000000..c13e0da7f02 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); + +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 new file mode 100644 index 00000000000..94c2ed39988 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js @@ -0,0 +1,11 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..d8e4da9d103 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js @@ -0,0 +1,9 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..bf4fd5fbfa4 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js @@ -0,0 +1,10 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..4676c10290b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js @@ -0,0 +1,10 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..699ff482571 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js @@ -0,0 +1,8 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..3920944cdc1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// 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-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js new file mode 100644 index 00000000000..c70b3df7b03 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js @@ -0,0 +1,12 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..31e3e4dfbf6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// 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-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js new file mode 100644 index 00000000000..56e636302b0 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js @@ -0,0 +1,12 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..9fb152424a2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// 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-current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js new file mode 100644 index 00000000000..182e9500f78 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); + +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 new file mode 100644 index 00000000000..38e67f4d458 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js @@ -0,0 +1,9 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); + +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 new file mode 100644 index 00000000000..1df0e594db9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js @@ -0,0 +1,17 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have a current absence period +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 new file mode 100644 index 00000000000..8133d0736ba --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js @@ -0,0 +1,15 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have a current absence period +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 new file mode 100644 index 00000000000..054069ebe23 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js @@ -0,0 +1,13 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..e503b0aaf4d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js @@ -0,0 +1,11 @@ +'use strict'; + +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 = 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 new file mode 100644 index 00000000000..597feb4eb3e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); + +// 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/reports-show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/reports-show.js new file mode 100644 index 00000000000..ca15ca3484c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/reports-show.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../page-objects/ssp-reports'); + +module.exports = async engine => { + await pageObj.init(engine); +}; 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..3c9112f21ad --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..350da80b615 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js @@ -0,0 +1,9 @@ +'use strict'; + +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/tasks-show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show.js new file mode 100644 index 00000000000..2761dad8bf1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../page-objects/ssp-tasks'); + +module.exports = async engine => { + await pageObj.init(engine); +}; 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..b5ce799ef65 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..91b6bd5518f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js @@ -0,0 +1,9 @@ +'use strict'; + +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-document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js new file mode 100644 index 00000000000..6f271c5bee0 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js @@ -0,0 +1,11 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..299c0256fa1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js @@ -0,0 +1,11 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..742c19b157c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js @@ -0,0 +1,9 @@ +'use strict'; + +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/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..9e0f6fb5f0f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..71c10890abb --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..34e055e938a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..a596777afd0 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..8bb6f9257e2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..f0e8d0b76a8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..285493d9498 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..0025e4be775 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..3f2cab22095 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js @@ -0,0 +1,9 @@ +'use strict'; + +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 new file mode 100644 index 00000000000..9b043ab44e8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js @@ -0,0 +1,9 @@ +'use strict'; + +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/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js new file mode 100644 index 00000000000..3c55f9abb5d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..2dc45f832cd --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js @@ -0,0 +1,11 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..bec8543fddd --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js @@ -0,0 +1,10 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..0dd6119265f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js @@ -0,0 +1,13 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..a96260b7830 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js @@ -0,0 +1,9 @@ +'use strict'; + +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/tasks/task/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js new file mode 100644 index 00000000000..1a80dbf4b67 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js @@ -0,0 +1,7 @@ +'use strict'; + +const pageObj = require('../../../page-objects/tasks'); + +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 new file mode 100644 index 00000000000..fb4aced4e34 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js @@ -0,0 +1,9 @@ +'use strict'; + +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/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index 893e2613120..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 @@ -1,62 +1,54 @@ -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 casper = this.casper; - - return new Promise(function (resolve) { - casper.then(function () { - this.showActions(); - }.bind(this)); - - casper.then(function () { - casper.click('[data-contact-access-rights]'); - casper.waitWhileVisible('.spinner'); - - resolve(this.waitForModal('contact-access-rights')); - }.bind(this)); - }.bind(this)); - }, - - /** - * Opens one of the contact summary tabs - * - * @param {string} tabId - * @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); - }); - }); +const page = require('./page'); + +module.exports = page.extend({ + /** + * Opens the "contact access rights" modal + * + * @return {Object} the modal page object + */ + async openManageRightsModal () { + await this.showActions(); + await this.puppet.click('[data-contact-access-rights]'); + await this.puppet.waitFor('.spinner', { hidden: true }); + + return this.waitForModal('contact-access-rights'); + }, + + /** + * Opens one of the contact summary tabs + * + * @param {String} tabId + * @return {Object} the tab page object + */ + async openTab (tabId) { + const tabObj = require('./tabs/' + tabId); + + await this.puppet.click('[title="' + tabObj.tabTitle + '"]'); + + return tabObj.init(this.puppet, false); + }, + + /** + * Shows the dropdown of the "Actions" button in the contact summary page + */ + async showActions () { + await this.puppet.click('#crm-contact-actions-link'); + await this.puppet.waitFor('#crm-contact-actions-list'); + }, + + /** + * 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); }); - }, - - /** - * 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'); - }); - } - }); -})(); + }); + } +}); 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..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 @@ -1,97 +1,67 @@ -var Promise = require('es6-promise').Promise; -var page = require('./page'); - -module.exports = (function () { - var documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; - - return page.extend({ - - /** - * Opens the modal to add a documents - * - * @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)); - }.bind(this)); - }, - - /** - * Shows the advanced filters - * - * @return {object} - */ - advancedFilters: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - casper.wait(500); - }); - - return this; - }, - - /** - * Shows the dropdown of the actions available on any given document - * - * @return {object} - */ - documentActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(documentSelector + ' .ct-context-menu-toggle'); - }); - - return this; - }, - - /** - * Opens a document - * - * @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)); - - casper.then(function () { - casper.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); - resolve(this.waitForModal('document')); - }.bind(this)); - }.bind(this)); - }, - - /** - * Shows the "select dates" filter - */ - selectDates: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.ct-select-dates'); - casper.wait(500); - }); - }, - - /** - * Waits until the specified select is visible on the page - */ - waitForReady: function () { - var casper = this.casper; - - casper.waitUntilVisible('.ct-filter-date'); - } - }); -})(); +const page = require('./page'); + +const documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; + +module.exports = page.extend({ + /** + * Adds a document by opening the modal + * + * @return {Object} the document modal page object + */ + async addDocument () { + await this.puppet.click('a[ng-click*="itemAdd"]'); + + return this.waitForModal('document'); + }, + + /** + * Shows the advanced filters + * + * @return {Object} + */ + 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} + */ + async documentActions () { + await this.puppet.click(documentSelector + ' .ct-context-menu-toggle'); + }, + + /** + * Opens a document + * + * @return {Object} the document modal page object + */ + async openDocument () { + await this.documentActions(); + await this.puppet.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); + + return this.waitForModal('document'); + }, + + /** + * Shows the "select dates" filter + */ + async selectDates () { + await this.puppet.click('.ct-select-dates'); + await this.puppet.waitFor(500); + }, + + /** + * 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); + } +}); 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..df7689a6888 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,28 +1,19 @@ -var Promise = require('es6-promise').Promise; -var page = require('./page'); +const 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 + */ + async openTab (tabId) { + const tab = await require('./tabs/' + tabId).init(this.puppet, false); - /** - * Opens one of the leave absence dashboard tabs - * - * @param {string} tabId - * @return {object} resolves with the tab page object - */ - openTab: function (tabId) { - var casper = this.casper; - var tab = require('./tabs/' + tabId).init(casper, false); + await this.puppet.click('[ui-sref="' + tab.tabUiSref + '"]'); + await this.puppet.waitFor(tab.readySelector, { visible: true }); + await this.puppet.waitFor(500); - 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); - }); - }); - }); - } - }); -})(); + 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 0351af9d2eb..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 @@ -1,77 +1,59 @@ -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 - * clicking on next. - * - * @return Page instance. - */ - showStep2: function () { - var filePath = 'backstop_data/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); - - 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.submitAndWaitForStep(3); - - 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.submitAndWaitForStep(4); - - 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); - }); - }, - - /** - * Waits until the import form is visible. - */ - waitForReady: function () { - this.waitUntilVisible('.crm-leave-and-balance-import'); - } - }); -})(); +const path = require('path'); +const page = require('./page'); + +module.exports = page.extend({ + /** + * Displays L&A Import Form Step 2 by uploading a sample import file and + * clicking on next. + * + * @return Page instance. + */ + async showStep2 () { + const filePath = path.join(__dirname, '..', 'uploads/leave-and-absences-import-data.csv'); + const fileInput = await this.puppet.$('input[name="uploadFile"]'); + + await fileInput.uploadFile(filePath); + await this.puppet.click('[name="skipColumnHeader"]'); + await this.submitAndWaitForStep(2); + }, + + /** + * Displays L&A Import Form Step 3 by displaying step 2 and then clicking + * on next. + * + * @return Page instance. + */ + async showStep3 () { + await this.showStep2(); + await this.submitAndWaitForStep(3); + }, + + /** + * Displays L&A Import Form Step 4 by displaying step 3 and then clicking + * on next. + * + * @return page instance. + */ + async showStep4 () { + await this.showStep3(); + await this.submitAndWaitForStep(4); + }, + + /** + * 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 submitAndWaitForStep (step) { + await this.puppet.click('.crm-leave-and-balance-import .validate'); + await this.puppet.waitFor(`.crm_wizard__title .nav-pills li.active:nth-child(${step})`); + }, + + /** + * Waits until the import form is visible. + */ + 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 7c537ad14c8..e13327b8b10 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,74 +1,42 @@ -var modal = require('./modal'); - -module.exports = (function () { - return modal.extend({ - - /** - * Clicks the "add document" button - * - * @return {object} - */ - addDocument: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); - }.bind(this)); - - return this; - }, - - /** - * Clicks the "add task" button - * - * @return {object} - */ - addTask: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); - }.bind(this)); - - return this; - }, - - /** - * Opens a date picker - * - * @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)); - - return this; - }, - - /** - * Selects an assignment type, so that the rest of the modal is shown - * - * @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); - - casper.wait(500); - }.bind(this)); - - return this; - } - }); -})(); +/* global jQuery */ + +const modal = require('./modal'); + +module.exports = modal.extend({ + + /** + * Clicks the "add document" button + */ + async addDocument () { + await this.puppet.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); + }, + + /** + * Clicks the "add task" button + */ + async addTask () { + await this.puppet.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); + }, + + /** + * Opens a date picker + */ + 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 + */ + async selectType () { + await this.puppet.evaluate(function (modalRoot) { + const select = document.querySelector(modalRoot + ' select[name="assignment"]'); + + select.selectedIndex = 2; + + jQuery(select).change(); + }, 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 c274febe3d3..a31d14a2b69 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,22 +1,13 @@ -var modal = require('./modal'); - -module.exports = (function () { - return modal.extend({ - - /** - * Opens a ui-select dropdown - * - * @return {object} - */ - openDropdown: function (name) { - casper.then(function () { - var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; - - casper.click(common.replace('%{name}', name)); - casper.wait(100); - }); - - return this; - } - }); -})(); +const modal = require('./modal'); + +module.exports = modal.extend({ + /** + * Opens a ui-select dropdown + */ + async openDropdown (name) { + const common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; + + 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 370e8de8664..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,86 +1,44 @@ -var modal = require('./modal'); - -module.exports = (function () { - return modal.extend({ - - /** - * Opens the "due date" datepicker - * - * @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)); - - return this; - }, - - /** - * Shows the given field - * - * @param {string} fieldName - * @return {object} - */ - showField: function (fieldName) { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); - }.bind(this)); - - return this; - }, - - /** - * Selects an assignee for the document - * - * @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)); - - return this; - }, - - /** - * Selects the type of document - * - * @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)); - - return this; - }, - - /** - * Opens the given tab - * - * @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)); - - return this; - } - }); -})(); +const modal = require('./modal'); + +module.exports = modal.extend({ + /** + * Opens the "due date" datepicker + */ + 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 + */ + async showField (fieldName) { + await this.puppet.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); + }, + + /** + * Selects an assignee for the document + */ + 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 + */ + 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 + */ + 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 ab47df24428..7b97b6d4588 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,19 +1,20 @@ -var modal = require('./modal'); +/* global XPathResult */ -module.exports = (function () { - return modal.extend({ +const modal = require('./modal'); - /** - * Selects the tab with the given title - * - * @param {string} tabTitle - */ - selectTab: function (tabTitle) { - var casper = this.casper; +module.exports = modal.extend({ + /** + * Selects the tab with the given title + * + * @param {String} tabTitle + */ + async selectTab (tabTitle) { + await this.puppet.evaluate(function (tabTitle) { + // = clickLabel + const xPath = './/a[text()="' + tabTitle + '"]'; + const 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/modals/modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js index ed84367f9a7..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,7 +1,5 @@ -var page = require('../page'); +const 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 27717801f8c..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,21 +1,12 @@ -var modal = require('./modal'); - -module.exports = (function () { - return modal.extend({ - - /** - * Selects tabs like comments or attachments - * @param {String} tabName like comments or attachments - * @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'); - }); - - return this; - } - }); -})(); +const modal = require('./modal'); + +module.exports = modal.extend({ + /** + * Selects tabs like comments or attachments + * + * @param {String} tabName like comments or attachments + */ + 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 91abd9f0025..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,70 +1,36 @@ -var modal = require('./modal'); - -module.exports = (function () { - return modal.extend({ - - /** - * Opens a date picker - * - * @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)); - - return this; - }, - - /** - * Shows a given field - * - * @param {string} fieldName - * @return {object} - */ - showField: function (fieldName) { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); - }.bind(this)); - - return this; - }, - - /** - * Selects the task's assignee - * - * @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)); - - return this; - }, - - /** - * Select the task type - * - * @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)); - - return this; - } - }); -})(); +const modal = require('./modal'); + +module.exports = modal.extend({ + /** + * Opens a date picker + */ + 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 + */ + async showField (fieldName) { + await this.puppet.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); + }, + + /** + * Selects the task's assignee + */ + 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 + */ + 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 37ba0581ed4..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 @@ -1,99 +1,61 @@ -var page = require('./page'); -var data = require('./../data/onboarding-wizard-data'); - -module.exports = (function () { - return page.extend({ - /** - * Navigate to Address Page - * - * @return {*} - */ - reachAddressPage: function () { - var casper = this.casper; - - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Address"]'); - }, - - /** - * Navigate to Contact Info Page - * - * @return {*} - */ - reachContactInfoPage: function () { - var casper = this.casper; - - return this.reachAddressPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Contact Info"]'); - }); - }, - - /** - * Navigate to Payroll Page - * - * @return {*} - */ - reachPayrollPage: function () { - var casper = this.casper; - - return this.reachContactInfoPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Payroll"]'); - }); - }, - - /** - * Navigate to Emergency Contact Page - * - * @return {*} - */ - reachEmergencyContactPage: function () { - var casper = this.casper; - - return this.reachPayrollPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Emergency Contact"]'); - }); - }, - - /** - * Navigate to Dependent Page - * - * @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'); - }); - }); - }, - - /** - * Navigate to Profile Picture Page - * - * @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"]'); - }); - }); - } - }); -})(); +const page = require('./page'); + +module.exports = page.extend({ + /** + * Navigate to Address Page + */ + async reachAddressPage () { + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Address"]'); + }, + + /** + * Navigate to Contact Info Page + */ + async reachContactInfoPage () { + await this.reachAddressPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Contact Info"]'); + }, + + /** + * Navigate to Payroll Page + */ + async reachPayrollPage () { + await this.reachContactInfoPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Payroll"]'); + }, + + /** + * Navigate to Emergency Contact Page + */ + async reachEmergencyContactPage () { + await this.reachPayrollPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Emergency Contact"]'); + }, + + /** + * Navigate to Dependent Page + */ + 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"]'); + }, + + /** + * Navigate to Profile Picture Page + */ + async reachProfilePicturePage () { + await this.reachDependentPage(); + await this.puppet.waitFor('.webform-component-fieldset', { visible: true }); + 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"]'); + } +}); 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..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 @@ -1,70 +1,32 @@ -var _ = require('lodash'); -var Promise = require('es6-promise').Promise; -var customCasperJS = require('../utils/custom-casperjs'); - -/** - * Closes any modal currently open - * - * @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); - } - }); - - return this; -} - -/** - * Closes any notification currently open - * - * @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); - } - }); - - return this; -} +const _ = require('lodash'); 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} casper - * @param {boolean} clearDialogs if true it will close modals and notifications - * @return {object} + * @param {Object} puppet + * @param {Boolean} clearDialogs if true it will close modals and notifications + * @return {Object} */ - init: function (casper, clearDialogs) { + async init (puppet, clearDialogs) { clearDialogs = typeof clearDialogs !== 'undefined' ? !!clearDialogs : true; - this.casper = customCasperJS(casper); - this.casper.options.waitTimeout = 60000; + this.puppet = puppet; + !!this.waitForReady && await this.waitForReady(); + + const href = await this.puppet.evaluate(() => document.location.href); + const isAdmin = href.indexOf('civicrm/') > 1; + + await this.puppet.evaluate(function (isAdmin) { + const selector = isAdmin ? '#content > #console' : '#messages .alert'; + const errorsWrapper = document.querySelector(selector); - !!this.waitForReady && this.casper.then(function () { - this.waitForReady(); - }.bind(this)); + errorsWrapper && (errorsWrapper.style.display = 'none'); + }, isAdmin); if (clearDialogs) { - closeAnyModal.call(this); - closeNotifications.call(this); + await closeAnyModal.call(this); + await closeNotifications.call(this); } return this; @@ -73,11 +35,11 @@ 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) { + extend (page) { return _.assign(Object.create(this), page); }, @@ -85,36 +47,45 @@ 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: function (modalModule, waitSelector) { - var casper = this.casper; - - 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(); - } - }); - }); - }); - }, + async waitForModal (modalModule, waitSelector) { + await this.puppet.waitFor(waitSelector || '.modal', { visible: true }); + await this.puppet.waitFor(300); - /** - * 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)); + if (modalModule) { + return require('./modals/' + modalModule).init(this.puppet, false); + } } }; + +/** + * Closes any modal currently open + */ +async function closeAnyModal () { + const openModalSelector = '.modal.in'; + + const result = await this.puppet.$(openModalSelector); + + if (result) { + await this.puppet.click(openModalSelector + ' .close[ng-click="cancel()"]'); + await this.puppet.waitFor(300); + } +} + +/** + * Closes any notification currently open + */ +async function closeNotifications () { + const notificationSelector = 'a.ui-notify-cross.ui-notify-close'; + + const result = await this.puppet.$(notificationSelector); + + if (result) { + await this.puppet.click(notificationSelector); + await this.puppet.waitFor(500); + } +} 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 new file mode 100644 index 00000000000..a5757cb0c5b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js @@ -0,0 +1,11 @@ +const modal = require('./page'); + +module.exports = modal.extend({ + /** + * Opens See Resources section + */ + 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 4b7b43ab88a..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 @@ -1,12 +1,17 @@ -var page = require('./page'); +const page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Wait for the page to be ready - */ - waitForReady: function () { - this.waitUntilVisible('.chr_leave-balance-tab'); - } - }); -})(); +module.exports = page.extend({ + /** + * Wait for the page to be ready + */ + async waitForReady () { + await this.puppet.waitFor('.chr_leave-balance-tab', { visible: true }); + 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/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..1845b649f08 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,43 +1,25 @@ -var page = require('./page'); +const 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.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 + */ + async waitForReady () { + await this.puppet.waitFor('leave-calendar-month .chr_leave-calendar__day', { visible: true }); + }, - /** - * Toggle the calendar legend - * - * @return {Promise} - */ - toggleLegend: function () { - var casper = this.casper; + /** + * Toggle the calendar legend + */ + async toggleLegend () { + await this.puppet.click('.chr_leave-calendar__legend__title'); + }, - casper.then(function () { - casper.click('.chr_leave-calendar__legend__title'); - }); - - return this; - }, - - /** - * Toggle contacts with leaves - * - * @return {Promise} - */ - toggleContactsWithLeaves: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_leave-calendar__toggle-contacts-with-leaves'); - }); - - return this; - } - }); -})(); + /** + * Toggle contacts with leaves + */ + 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 8d0d4613081..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 @@ -1,127 +1,86 @@ /* global Event */ -var Promise = require('es6-promise').Promise; -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.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 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'); - }); - - 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'); - }); - - 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)'); - }); - - 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); - - return casper.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'); - }); - }); - }, - /** - * Apply leave on behalf of staff - * - * @param {String} leaveType leave, sickness or toil - * @return {Promise} - */ - applyLeaveForStaff: function (leaveType) { - var casper = this.casper; - - return new Promise(function (resolve) { - casper.then(function () { - casper.click('leave-request-record-actions .dropdown-toggle'); - }); - - casper.then(function () { - casper.click('.leave-request-record-actions__new-' + leaveType); - }); - - 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)); - } - }); -})(); +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 + */ + 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) + */ + async changeFilterByAssignee (type) { + const filters = ['me', 'unassigned', 'all']; + + await this.puppet.click( + '.chr_manage_leave_requests__assignee_filter button:nth-of-type(' + + (filters.indexOf(type) + 1) + + ')'); + 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 + */ + async openActionsForRow (row) { + await this.puppet.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); + }, + + /** + * Expands filters on screen + * + */ + 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; + }, + + /** + * Opens leave type filter + * + * @param {Number} leaveType index like 1 for Holiday/Vacation, 2 for TOIL, 3 for Sickness + */ + 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; + element.dispatchEvent(new Event('change')); + }, 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 + */ + async editRequest (row) { + await this.puppet.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + await this.puppet.waitFor('leave-request-popup-details-tab', { visible: true }); + await this.puppet.waitFor('leave-request-popup-details-tab .spinner', { hidden: true }); + }, + + /** + * Apply leave on behalf of staff + * + * @param {String} leaveType leave, sickness or toil + */ + async applyLeaveForStaff (leaveType) { + await this.puppet.click('leave-request-record-actions .dropdown-toggle'); + await this.puppet.click(`.leave-request-record-actions__new-${leaveType}`); + + 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 c451c5c7d63..502a6906b55 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,78 +1,28 @@ -/* globals jQuery */ - -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.casper.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); - - 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.casper.click('.chr_leave-calendar__day-selector input'); - this.casper.evaluate(function (monthName) { - jQuery('.ui-select-choices-row:contains(' + monthName + ')').click(); - }, monthName); - this.waitUntilVisible('leave-calendar-month leave-calendar-day'); - - 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 () { - this.casper.then(function () { - this.mouse.move('.chr_leave-calendar__item a'); - }); - this.waitUntilVisible('.tooltip'); - - 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.casper.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'); - - return this; - }, - - /** - * Wait for the page to be ready by looking at - * the visibility of a leave calendar item element - */ - waitForReady: function () { - this.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); - } - }); -})(); +const page = require('./page'); + +module.exports = page.extend({ + /** + * Clears the currently selected month from the calendar "Selected Months" + * field. + */ + async clearCurrentlySelectedMonth () { + await this.puppet.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); + }, + + /** + * Hovers on top of a leave day visible on the calendar until a tooltip + * pops up. + */ + async showTooltip () { + await this.puppet.hover('.chr_leave-calendar__day a'); + await this.puppet.waitFor('.tooltip', { visible: true }); + }, + + /** + * Wait for the page to be ready by looking at + * the visibility of a leave calendar item element + */ + async waitForReady () { + await this.puppet.waitFor('leave-calendar-month .chr_leave-calendar__day', { 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 d524e021320..b38e3c48a7d 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,197 +1,128 @@ /* globals Event */ -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 casper = this.casper; - var optionIndex = ['multiple', 'single'].indexOf(mode) + 1; - - casper.then(function () { - casper.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); +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 + */ + async changeRequestDaysMode (mode) { + const optionIndex = ['multiple', 'single'].indexOf(mode) + 1; + + 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 {Object} the request modal + */ + 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 + */ + async expandDeductionField (type) { + const fieldSelector = '[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"] a'; + + 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 + */ + async newRequest (requestType) { + await this.puppet.click('leave-request-record-actions .dropdown-toggle'); + await this.puppet.click(`.leave-request-record-actions__new-${requestType}`); + + 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 + */ + 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 + */ + async openSection (section) { + await this.puppet.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); + 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); }); - - 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)'); - casper.waitWhileVisible('leave-request-popup-details-tab .spinner'); - resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); - }.bind(this)); - }.bind(this)); - }, - - /** - * Expands deduction field to show selectors - * - * @param {String} type from|to - * @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); - }); - }); - - 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 casper = this.casper; - - casper.then(function () { - casper.click('leave-request-record-actions .dropdown-toggle'); - }); - - casper.then(function () { - casper.click('.leave-request-record-actions__new-' + requestType); - }); - - casper.then(function () { - casper.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) { - 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)'); - }); - }); - - return this; - }, - - /** - * Opens the given section of my report pageName - * - * @param {String} section - * @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'); - }); - - return this; - }, - - /** - * Selects the request Absence Type by the given label - * - * @param {String} absenceTypeLabel ex. "Holiday in Hours" - * @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); - }); - - 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 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"]'); - }); - }); - - return this; - }, - - /** - * Wait for the page to be ready - * - * @return {Object} this object - */ - waitForReady: function () { - this.waitUntilVisible('td[ng-click="report.toggleSection(\'pending\')"]'); - }, - - /** - * Waits for the request balance to be calculated - * - * @return {Promise} - */ - waitUntilRequestBalanceIsCalculated: function () { - var casper = this.casper; - - casper.then(function () { - casper.waitUntilVisible('[ng-show="detailsTab.uiOptions.showBalance"]'); - }); - - return this; - } - }); -})(); + }); + }, + + /** + * Selects the request Absence Type by the given label + * + * @param {String} absenceTypeLabel ex. "Holiday in Hours" + */ + 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); + }, + + /** + * 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 + */ + async selectRequestDate (type, weekPosition, weekDayPosition) { + const daySelector = '.uib-daypicker tr:nth-child(' + weekPosition + ') td:nth-child( ' + weekDayPosition + ') button'; + + 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 + */ + async waitForReady () { + await this.puppet.waitFor('.spinner', { visible: false }); + await this.puppet.waitFor('td[ng-click="report.toggleSection(\'pending\')"]', { visible: true }); + }, + + /** + * Waits for the request balance to be calculated + */ + 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 new file mode 100644 index 00000000000..50e7aaac5e7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js @@ -0,0 +1,12 @@ +const modal = require('./page'); + +module.exports = modal.extend({ + /** + * Opens Edit My Details Popup + * + */ + 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-reports.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js new file mode 100644 index 00000000000..c9a262889ac --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js @@ -0,0 +1,25 @@ +const 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. + */ + async waitForReady () { + await this.puppet.evaluate(function () { + const 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/page-objects/ssp-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js new file mode 100644 index 00000000000..1a022363c86 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js @@ -0,0 +1,28 @@ +const modal = require('./page'); + +module.exports = modal.extend({ + /** + * Opens Completed tasks modal + */ + 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 + */ + async openCreateNewTaskModal () { + await this.puppet.click('.create-new-task'); + await this.puppet.waitFor('#civihr-employee-portal-civi-tasks-form', { visible: true }); + }, + + /** + * The page always gives false positives for some reason in Chrome, so we need + * to wait a couple of seconds for it to "stabilize" before taking the screenshot + */ + async waitForReady () { + await this.puppet.waitFor(4000); + } +}); 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 new file mode 100644 index 00000000000..eb7724341c5 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js @@ -0,0 +1,11 @@ +const modal = require('./page'); + +module.exports = modal.extend({ + /** + * Opens More Details section + */ + async showMoreDetails () { + 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/hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js deleted file mode 100644 index 2872efa75f6..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js +++ /dev/null @@ -1,22 +0,0 @@ -var modal = require('./../page'); - -module.exports = (function () { - return modal.extend({ - - /** - * Opens See Resources section - * - * @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)); - - 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 deleted file mode 100644 index bc46f0eb76f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js +++ /dev/null @@ -1,22 +0,0 @@ -var modal = require('./../page'); - -module.exports = (function () { - return modal.extend({ - - /** - * Opens Edit My Details Popup - * - * @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)); - - 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 deleted file mode 100644 index 07a6ac752f9..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js +++ /dev/null @@ -1,31 +0,0 @@ -var modal = require('./../page'); - -module.exports = (function () { - return modal.extend({ - - /** - * 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'); - }); - }, - - /** - * 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'); - }); - } - }); -})(); 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 deleted file mode 100644 index 68cd1254d0b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js +++ /dev/null @@ -1,22 +0,0 @@ -var modal = require('./../page'); - -module.exports = (function () { - return modal.extend({ - - /** - * Opens More Details section - * - * @return {object} - */ - showMoreDetails: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.fieldset-title'); - casper.wait(2000); - }.bind(this)); - - 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 1950b26444c..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,21 +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) { - var casper = this.casper; - var tab = require('./absence/' + tabId).init(casper, false); + async openSubTab (tabId) { + const tab = require('./absence/' + tabId); - 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); - }); - }); - }); + 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 6261ba64230..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,8 +1,7 @@ -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', - 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..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,24 +1,20 @@ -var tab = require('../tab'); +const tab = require('../tab'); 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'); + 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.casper.waitWhileVisible('contract-entitlements .spinner'); - this.casper.waitWhileVisible('annual-entitlements .spinner'); - - return true; + 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 6d6bb8b2859..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', @@ -7,32 +7,29 @@ module.exports = tab.extend({ /** * Open the report section with the given name * - * @param {string} sectionName - * @return {object} + * @param {String} sectionName */ - openSection: function (sectionName) { - var casper = this.casper; + async openSection (sectionName) { + await this.puppet.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 + await this.puppet.waitFor(function () { + const nestedTables = document.querySelectorAll('.table-nested'); - return this; + return Array.prototype.some.call(nestedTables, function (table) { + return table.offsetWidth > 0 && table.offsetHeight > 0; + }); + }); }, /** * Show the actions of the first leave request available * - * @return {object} */ - showActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.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 723794ede71..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,12 +7,8 @@ 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'); - }); + 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 8c219acffdf..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,24 +1,16 @@ -var tab = require('./tab'); +const tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - tabTitle: 'Documents', - /** - * Overrides the original tab's `ready` 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 - * 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'); - - return true; - } - }); -})(); +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 + */ + 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 b43922c17a9..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 @@ -1,90 +1,59 @@ -var Promise = require('es6-promise').Promise; -var tab = require('./tab'); - -module.exports = (function () { - return tab.extend({ - tabTitle: 'Job Contract', - - /** - * Clicks on the delete button - * - * @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)); - }, - - /** - * 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 casper = this.casper; - var param; - - 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)); - }.bind(this)); - }, - - /** - * Opens the modal for creating a new contract - * - * @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)); - }.bind(this)); - }, - - /** - * Overrides the original tab's `ready` 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 - * 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'); - - return casper.wait(200); - }, - - /** - * Shows the full history of a contract - * - * @return {object} - */ - showFullHistory: function () { - var casper = this.casper; - - casper.then(function () { - casper.clickLabel('Full History'); - casper.waitForSelector('.hrjc-context-menu-toggle'); - }); - } - }); -})(); +const tab = require('./tab'); + +module.exports = tab.extend({ + tabTitle: 'Job Contract', + + /** + * Clicks on the delete button + */ + 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 {Object} the job contract modal object + */ + async openContractModal (mode) { + const param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); + + await this.puppet.click('[ng-click="modalContract(\'' + param + '\')"]'); + + return this.waitForModal('job-contract'); + }, + + /** + * Opens the modal for creating a new contract + * + * @return {Object} the job contract modal object + */ + async openNewContractModal () { + await this.puppet.click('.hrjc-btn-add-contract > .btn-primary'); + + return this.waitForModal('job-contract'); + }, + + /** + * 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 + */ + 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); + }, + + /** + * Shows the full history of a contract + */ + 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 b82705835e0..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,82 +1,50 @@ -var tab = require('./tab'); - -module.exports = (function () { - return tab.extend({ - readySelector: '.job-role__tabs', - tabTitle: 'Job Roles', - - /** - * 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)); - }, - - /** - * Clicks on the edit button of a job role - * - * @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); - }); - - return this; - }, - - /** - * Opens the ui-select with the given name - * - * @param {string} name - * @return {object} - */ - openDropdown: function (name) { - var casper = this.casper; - - casper.then(function () { - var common = 'jobroles.edit_data[job_roles_data.id]'; - - casper.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); - casper.wait(100); - }); - - return this; - }, - - /** - * 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()"]'); - }); - }, - - /** - * Changes active tab - * - * @param {string} tabName - * @return {object} - */ - switchToTab: function (tabName) { - var casper = this.casper; - - casper.then(function () { - casper.clickLabel(tabName); - }); - - return this; - } - }); -})(); +const tab = require('./tab'); + +module.exports = tab.extend({ + readySelector: '.job-role__tabs', + tabTitle: 'Job Roles', + + /** + * Clicks on the delete button + */ + async attemptDelete () { + await this.puppet.click('.job-role [ng-click*="removeRole"]'); + await this.waitForModal(); + }, + + /** + * Clicks on the edit button of a job role + */ + 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 + */ + async openDropdown (name) { + const common = 'jobroles.editData[job_roles_data.id]'; + + await this.puppet.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); + await this.puppet.waitFor(100); + }, + + /** + * Show the form for adding a new job role + */ + async showAddNew () { + await this.puppet.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); + }, + + /** + * Changes active tab + * + * @param {String} tabName + */ + 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 934f2019c98..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,9 +1,7 @@ -var tab = require('./tab'); +const 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__body .table-responsive', + 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..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,9 +1,7 @@ -var tab = require('./tab'); +const 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 2bdfbe47434..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,20 +1,14 @@ -var tab = require('./tab'); +const 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 () { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_manage_leave_requests__filter'); - casper.waitUntilVisible('.chr_manage_leave_requests__sub-header'); - }); - } - }); -})(); + /** + * Shows filters + */ + 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 4609ed73dce..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,14 +1,10 @@ -var page = require('../page'); +const page = require('../page'); -module.exports = (function () { - return page.extend({ - - /** - * Defines that the tab is ready when the a specific selector is visible - * @return {boolean} - */ - ready: function () { - return this.casper.visible(this.readySelector); - } - }); -})(); +module.exports = page.extend({ + /** + * Defines that the tab is ready when the a specific selector is visible + */ + 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 927d165ca71..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,8 +1,6 @@ -var tab = require('./tab'); +const 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 1d18e9f4327..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,154 +1,95 @@ -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 () { - var casper = this.casper; - - return new Promise(function (resolve) { - casper.then(function () { - casper.click('a[ng-click*="modalAssignment"]'); - resolve(this.waitForModal('assignment')); - }.bind(this)); - }.bind(this)); - }, - - /** - * Shows the task modal - * - * @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)); - }.bind(this)); - }, - - /** - * Opens the advanced filters - * - * @return {object} - */ - advancedFilters: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - casper.wait(500); - }); - - return this; - }, - - /** - * Shows the given edit-in-place field - * - * @param {string} fieldName - * @return {object} - */ - inPlaceEdit: function (fieldName) { - var casper = this.casper; - - casper.then(function () { - casper.click(editableSelectors[fieldName]); - casper.wait(200); - }); - - return this; - }, - - /** - * Opens the first task of the list - * - * @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'); - - resolve(this.waitForModal('task')); - }.bind(this)); - }.bind(this)); - }, - - /** - * Shows the "select dates" filter - */ - selectDates: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.ct-select-dates'); - casper.wait(500); - }); - }, - - /** - * Expands the "show more" area of the first task of the list - * - * @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); - }); - }); - - return this; - }, - - /** - * Shows the dropdown of the actions available on any given task - * - * @return {object} - */ - taskActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(taskSelector + ' .ct-context-menu-toggle'); - }); - - return this; - }, - - /** - * 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); - }); - } - }); -})(); +const page = require('./page'); + +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"]', + target: '[editable-ui-select="task.target_contact_id[0]"]' +}; + +module.exports = page.extend({ + /** + * Shows the assignment modal + * + * @return {Object} the assignment modal page object + */ + async addAssignment () { + await this.puppet.click('a[ng-click*="modalAssignment"]'); + + return this.waitForModal('assignment'); + }, + + /** + * Shows the task modal + * + * @return {Object} the task modal page object + */ + async addTask () { + await this.puppet.click('a[ng-click*="itemAdd"]'); + + return this.waitForModal('task'); + }, + + /** + * Opens the advanced filters + */ + 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 + */ + async inPlaceEdit (fieldName) { + await this.puppet.click(editableSelectors[fieldName]); + await this.puppet.waitFor(200); + }, + + /** + * Opens the first task of the list + * + * @return {Object} the task modal page object + */ + async openTask () { + await this.puppet.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); + await this.puppet.waitFor('.spinner', { hidden: true }); + + return this.waitForModal('task'); + }, + + /** + * Shows the "select dates" filter + */ + 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 + */ + 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 + */ + async taskActions () { + await this.puppet.click(taskSelector + ' .ct-context-menu-toggle'); + }, + + /** + * Waits until the specified select is visible on the page + */ + 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 b4e9f2bac42..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,27 +1,17 @@ -var page = require('./page'); +const page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Displays the work pattern calendar form. - * - * @return The Page instance. - */ - showCalendarForm: function () { - var casper = this.casper; +module.exports = page.extend({ + /** + * Displays the work pattern calendar form. + */ + async showCalendarForm () { + await this.puppet.click('a[href="#work-pattern-calendar"]'); + }, - casper.then(function () { - casper.click('a[href="#work-pattern-calendar"]'); - }); - - return this; - }, - - /** - * Waits until the work pattern form is visible. - */ - waitForReady: function () { - this.waitUntilVisible('.work-pattern-form'); - } - }); -})(); + /** + * Waits until the work pattern form is visible. + */ + async waitForReady () { + await this.puppet.waitFor('.work-pattern-form', { visible: true }); + } +}); 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..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,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:civihr_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: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 3509c8ca1b4..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,15 +2,13 @@ "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:civihr_staff}}", + "onReadyScript": "contact-summary/show.js" }, { "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:civihr_staff}}", + "onReadyScript": "contact-summary/show-actions.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-periods.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-periods.json new file mode 100644 index 00000000000..7e027a0666e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-periods.json @@ -0,0 +1,12 @@ +{ + "scenarios": [ + { + "label": "L&A / Absence Periods / List", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/periods?action=browse" + }, + { + "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/la-absence-types.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-types.json new file mode 100644 index 00000000000..0baa5a958fe --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-types.json @@ -0,0 +1,12 @@ +{ + "scenarios": [ + { + "label": "L&A / Absence Types / List", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/types?action=browse" + }, + { + "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/la-general-settings.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-general-settings.json new file mode 100644 index 00000000000..730bd4e9029 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-general-settings.json @@ -0,0 +1,8 @@ +{ + "scenarios": [ + { + "label": "L&A / General Settings", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/general_settings" + } + ] +} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-import.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-import.json new file mode 100644 index 00000000000..e10273f5730 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-import.json @@ -0,0 +1,23 @@ +{ + "scenarios": [ + { + "label": "L&A / Import / Step 1", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import" + }, + { + "label": "L&A / Import / Step 2", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", + "onReadyScript": "leave-absence-dashboard/import/step-2.js" + }, + { + "label": "L&A / Import / Step 3", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", + "onReadyScript": "leave-absence-dashboard/import/step-3.js" + }, + { + "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/la-public-holidays.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-public-holidays.json new file mode 100644 index 00000000000..e12ab692344 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-public-holidays.json @@ -0,0 +1,12 @@ +{ + "scenarios": [ + { + "label": "L&A / Public Holidays / List", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/public_holidays?action=browse" + }, + { + "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/la-work-patterns.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-work-patterns.json new file mode 100644 index 00000000000..af6206340de --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-work-patterns.json @@ -0,0 +1,17 @@ +{ + "scenarios": [ + { + "label": "L&A / Work Patterns / List", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=browse" + }, + { + "label": "L&A / Work Patterns / Form / Description", + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=add" + }, + { + "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-admin-absence-periods.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json deleted file mode 100644 index 48685b2c173..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scenarios": [ - { - "label": "Absence Periods list", - "url": "civicrm/admin/leaveandabsences/periods?action=browse", - "credential": "admin" - }, - { - "label": "Absence Periods form", - "url": "civicrm/admin/leaveandabsences/periods?action=add", - "credential": "admin" - } - ] -} 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 deleted file mode 100644 index 050b26edcf4..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scenarios": [ - { - "label": "Absence Types list", - "url": "civicrm/admin/leaveandabsences/types?action=browse", - "credential": "admin" - }, - { - "label": "Absence Types form", - "url": "civicrm/admin/leaveandabsences/types?action=add", - "credential": "admin" - } - ] -} 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 deleted file mode 100644 index 004071785ae..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "scenarios": [ - { - "label": "General Settings", - "url": "civicrm/admin/leaveandabsences/general_settings", - "credential": "admin" - } - ] -} 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 deleted file mode 100644 index ef6037e96cf..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave & Absences Import - Step 1", - "url": "civicrm/admin/leaveandabsences/import", - "credential": "admin" - }, - { - "label": "Leave & Absences Import - Step 2", - "url": "civicrm/admin/leaveandabsences/import", - "onReadyScript": "leave-absence-dashboard/import/step-2", - "credential": "admin" - }, - { - "label": "Leave & Absences Import - Step 3", - "url": "civicrm/admin/leaveandabsences/import", - "onReadyScript": "leave-absence-dashboard/import/step-3", - "credential": "admin" - }, - { - "label": "Leave & Absences Import - Step 4", - "url": "civicrm/admin/leaveandabsences/import", - "onReadyScript": "leave-absence-dashboard/import/step-4", - "credential": "admin" - } - ] -} 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 deleted file mode 100644 index 4378c96acd5..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scenarios": [ - { - "label": "Public Holidays list", - "url": "civicrm/admin/leaveandabsences/public_holidays?action=browse", - "credential": "admin" - }, - { - "label": "Public Holidays form", - "url": "civicrm/admin/leaveandabsences/public_holidays?action=add", - "credential": "admin" - } - ] -} 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 deleted file mode 100644 index 860de584422..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "scenarios": [ - { - "label": "Work Patterns list", - "url": "civicrm/admin/leaveandabsences/work_patterns?action=browse", - "credential": "admin" - }, - { - "label": "Work Pattern description form", - "url": "civicrm/admin/leaveandabsences/work_patterns?action=add", - "credential": "admin" - }, - { - "label": "Work Pattern calendar form", - "url": "civicrm/admin/leaveandabsences/work_patterns?action=add", - "onReadyScript": "work-patterns/show-calendar-form", - "credential": "admin" - } - ] -} 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 cd5c1f2c464..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave Absence Dashboard Leave Calendar", - "url": "civicrm/leaveandabsences/dashboard#/calendar", - "onReadyScript": "leave-absence-dashboard/leave-calendar/leave-calendar", - "credential": "admin" - } - ] -} 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 d6d3efcf479..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave Absence Dashboard Leave Requests", - "url": "civicrm/leaveandabsences/dashboard#/requests", - "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests", - "credential": "admin" - }, - { - "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" - } - ] -} 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 2b50cf2e336..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "scenarios": [ - { - "label": "SSP: Leave Balances", - "url": "manager-leave#/manager-leave/leave-balances", - "onReadyScript": "ssp-leave-absences/manager/leave-balances", - "credential": "manager" - }, - { - "label": "Admin Portal: Leave Balances", - "url": "civicrm/leaveandabsences/dashboard#/leave-balances", - "onReadyScript": "leave-absence-dashboard/leave-balances/leave-balances", - "credential": "admin" - } - ] -} 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 deleted file mode 100644 index 70d6de53d26..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "scenarios": [ - { - "label": "Features", - "url": "features-in-civihr" - }, - { - "label": "Customize Onboarding Wizard", - "url": "customize-onboarding-wizard" - }, - { - "label": "Password Page", - "url": "user/1/edit" - }, - { - "label": "Personal Details Page", - "url": "onboarding-form" - }, - { - "label": "Address Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/address" - }, - { - "label": "Contact Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/contact" - }, - { - "label": "Payroll Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/payroll" - }, - { - "label": "Emergency Contact Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/emergency_contact" - }, - { - "label": "Dependents Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/dependents" - }, - { - "label": "Profile Picture Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/profile_picture" - } - ] -} 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..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,8 +1,8 @@ { "scenarios": [ { - "label": "SSP - Dashboard", - "url": "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 2683617361f..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,13 +1,13 @@ { "scenarios": [ { - "label": "SSP - HR Resources", - "url": "hr-resources" + "label": "SSP / HR Resources", + "url": "{{siteUrl}}/hr-resources" }, { - "label": "SSP - HR Resources - See Resources", - "url": "hr-resources", - "onReadyScript": "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 3f560a7f30d..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,13 +1,13 @@ { "scenarios": [ { - "label": "SSP - HR Vacancies", - "url": "hr-vacancies" + "label": "SSP / HR Vacancies", + "url": "{{siteUrl}}/hr-vacancies" }, { - "label": "SSP - HR Vacancies - More Details", - "url": "hr-vacancies", - "onReadyScript": "ssp/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 abc0ddd8f82..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": "manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_current-month-visible", - "credential": "manager" - }, - { - "label": "Legend expanded: Manager Leave Calendar", - "url": "manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_legend-expanded", - "credential": "manager" - }, - { - "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" - } - ] -} 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 55be5f87eca..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "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" - }, - { - "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" - } - ] -} 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 593a8241af7..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - }, - { - "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" - } - ] -} 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..d19e490dfb3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json @@ -0,0 +1,87 @@ +{ + "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", + "requireSameDimensions": false + }, + { + "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 0bf9a0a1af2..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": "my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_current-month-visible", - "credential": "staff" - }, - { - "label": "My Leave Calendar tooltip", - "url": "my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_tooltip", - "credential": "staff" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave.json new file mode 100644 index 00000000000..ebbd90f628e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave.json @@ -0,0 +1,46 @@ +{ + "scenarios": [ + { + "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-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 fb1d214d625..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": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-pending-show-comments", - "credential": "staff" - }, - { - "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" - }, - { - "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" - }, - { - "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" - } - ] -} 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 deleted file mode 100644 index 7e389adbeaa..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave and Absences: My report", - "url": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report", - "credential": "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 9827f5f163f..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,13 +1,13 @@ { "scenarios": [ { - "label": "SSP - My Details", - "url": "hr-details" + "label": "SSP / My Details", + "url": "{{siteUrl}}/hr-details" }, { - "label": "SSP - Edit My Details", - "url": "hr-details", - "onReadyScript": "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/ssp-onboarding-wizard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json new file mode 100644 index 00000000000..0a83c2822e9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json @@ -0,0 +1,47 @@ +{ + "scenarios": [ + { + "label": "SSP / Onboarding Wizard / Customize SSP", + "url": "{{siteUrl}}/customize-onboarding-wizard" + }, + { + "label": "SSP / Onboarding Wizard / Password", + "url": "{{siteUrl}}/user/1/edit" + }, + { + "label": "SSP / Onboarding Wizard / Personal Details", + "url": "{{siteUrl}}/onboarding-form" + }, + { + "label": "SSP / Onboarding Wizard / Address", + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/address.js" + }, + { + "label": "SSP / Onboarding Wizard / Contact Info", + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/contact.js" + }, + { + "label": "SSP / Onboarding Wizard / Payroll", + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/payroll.js" + }, + { + "label": "SSP / Onboarding Wizard / Emergency Contact", + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/emergency_contact.js" + }, + { + "label": "SSP / Onboarding Wizard / Dependants", + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/dependents.js", + "requireSameDimensions": false + }, + { + "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 ceea6b6d8a7..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 @@ -1,20 +1,22 @@ { "scenarios": [ { - "label": "SSP - Reports", - "url": "reports" + "label": "SSP / Reports", + "url": "{{siteUrl}}/reports" }, { - "label": "SSP - Reports people", - "url": "reports/people/" + "label": "SSP / Reports / People", + "url": "{{siteUrl}}/reports/people/", + "onReadyScript": "ssp/reports-show.js" }, { - "label": "SSP - Reports - Leave and Absence", - "url": "reports/leave_and_absence/" + "label": "SSP / Reports / Leave and Absence", + "url": "{{siteUrl}}/reports/leave_and_absence/", + "onReadyScript": "ssp/reports-show.js" }, { - "label": "SSP - Reports - Age groups", - "url": "reports/settings/age_group/" + "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 2b133e8b1bc..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,8 +1,8 @@ { "scenarios": [ { - "label": "SSP - Staff Directory", - "url": "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 e1585c7b05e..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 @@ -1,21 +1,20 @@ { "scenarios": [ { - "label": "SSP - Tasks", - "url": "tasks-and-documents", - "credential": "admin" + "label": "SSP / Tasks", + "url": "{{siteUrl}}/tasks-and-documents", + "onReadyScript": "ssp/tasks-show.js" }, { - "label": "SSP - Tasks - Show Completed tasks", - "url": "tasks-and-documents", - "onReadyScript": "ssp/tasks-show-completed-tasks", - "credential": "admin" + "label": "SSP / Tasks / Show Completed tasks", + "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" + "label": "SSP / Tasks / Create new tasks", + "url": "{{siteUrl}}/tasks-and-documents", + "onReadyScript": "ssp/tasks-create-new-task.js", + "user": "admin" } ] } 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..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,45 +2,38 @@ "scenarios": [ { "label": "T&A / Documents", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "close-any-modal", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/show.js" }, { "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..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,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:civihr_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:civihr_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:civihr_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:civihr_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:civihr_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:civihr_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: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 dda9f1a91f0..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,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: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 708139b0d16..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,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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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:civihr_staff}}&selectedChild=hrjobcontract", + "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: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 86345bd47db..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,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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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:civihr_staff}}&selectedChild=hrjobroles", + "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: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 07d9a7df4fb..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,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:civihr_staff}}&selectedChild=civitasks", + "onReadyScript": "contact-summary/tasks/show.js" } ] } 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; -}; diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 4bd6bba625f..e3dc1c4fd2b 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -2,7 +2,8 @@ var _ = require('lodash'); var argv = require('yargs').argv; var backstopjs = require('backstopjs'); var clean = require('gulp-clean'); -var exec = require('child_process').exec; +var Chromy = require('chromy'); +var execSync = require('child_process').execSync; var file = require('gulp-file'); var fs = require('fs'); var gulp = require('gulp'); @@ -12,18 +13,15 @@ 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 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}' } - } +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'), + 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) { @@ -35,78 +33,132 @@ module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (ac }; }); +/** + * Concatenates all the scenarios (if no specific scenario file is specified) + * + * @param {Object} usersIds + * @return {Array} + */ +function buildScenariosList (usersIds) { + 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, usersIds) + }); + }) + .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 * * @param {String} siteUrl * @param {String} scenarioUrl - * @param {Object} contactIdsByRoles + * @param {Object} usersIds * @return {String} */ -function constructBackstopJSScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles) { - scenarioUrl = scenarioUrl.replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, contactRole) { - return contactIdsByRoles[contactRole]; - }); - - return siteUrl + '/' + scenarioUrl; +function constructScenarioUrl (siteUrl, scenarioUrl, usersIds) { + return scenarioUrl + .replace('{{siteUrl}}', siteUrl) + .replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, user) { + return usersIds[user].civi; + }); } /** - * Fetches civicrm contacts who's 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. + * 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 {Promise} resolved with {Object}, ex. { 'staff': 204, ... etc } + * @return {String} */ -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; +function createTempConfigFile () { + var content = JSON.parse(fs.readFileSync(FILES.tpl)); - 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]; - - return [role, contact.contact_id]; - }) - .fromPairs() - .value(); - - missingRoles = _.difference(['staff', 'manager', 'admin'], _.keys(idsByRoles)); + return getUsersIds() + .then(buildScenariosList) + .then(function (scenarios) { + content.scenarios = scenarios; - 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')); - } - - resolve(idsByRoles); + return JSON.stringify(content); }); +} + +/** + * Given a set of UF matches, it finds the contact with the specified drupal id + * + * @param {Array} ufMatches + * @param {Number} drupalId + * @return {Object} + */ +function findContactByDrupalId (ufMatches, drupalId) { + return _.find(ufMatches, function (match) { + return match.uf_id === drupalId; }); } /** - * Creates the site config file is in the backstopjs folder, if it doesn't exists yet + * Creates and returns a mapping of users to their drupal and civi ids * - * @return {Boolean} Whether the file had to be created or not + * 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 touchConfigFile () { - var created = false; +function getUsersIds () { + return new Promise(function (resolve, reject) { + var usersIds, ufMatches; + var userInfoCmd = 'drush user-information ' + USERS.join(',') + ' --format=json'; + var ufMatchCmd = 'echo \'{ "uf_id": { "IN":[%{uids}] } }\' | cv api UFMatch.get sequential=1'; - 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; - } + usersIds = _.transform(JSON.parse(execSync(userInfoCmd)), function (result, user) { + result[user.name] = { drupal: user.uid }; + }); - return created; + ufMatchCmd = ufMatchCmd.replace('%{uids}', _.map(usersIds, 'drupal').join(',')); + ufMatches = JSON.parse(execSync(ufMatchCmd)).values; + + usersIds = _.transform(usersIds, function (result, userIds, name) { + userIds.civi = findContactByDrupalId(ufMatches, userIds.drupal).contact_id; + result[name] = userIds; + }); + + resolve(usersIds); + }); } /** @@ -119,44 +171,35 @@ function touchConfigFile () { * @return {Promise} */ 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' + + '\tOne has been created for you under ' + path.basename(BACKSTOP_DIR) + '/\n' + '\tPlease insert the real value for each placeholder and try again' ); } - return getRolesAndIDs() - .then(function (contactIdsByRoles) { + return writeCookies() + .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')); }); }); }); @@ -167,68 +210,77 @@ 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 + * Returns the content of site config file * - * @param {Object} contactIdsByRoles - * @return {String} + * @return {Object} */ -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)); +function siteConfig () { + return JSON.parse(fs.readFileSync(FILES.siteConfig)); +} - content.scenarios = scenariosList().map(function (scenario) { - scenario.url = constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles); +/** + * 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 touchSiteConfigFile () { + var created = false; - return scenario; - }); + try { + fs.readFileSync(FILES.siteConfig); + } catch (err) { + fs.writeFileSync(FILES.siteConfig, JSON.stringify(CONFIG_TPL, null, 2)); + + created = true; + } - return JSON.stringify(content); + return created; } /** - * Concatenates all the scenarios, or returns only the scenario passed as - * an argument to the gulp task + * Writes the session cookie files that will be used to log in as different users * - * The first scenario of the list gets the login script to run + * 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 * - * @return {Array} + * The cookie is then stored in a json file which is used by the BackstopJS scenarios + * to log in + * + * @return {Promise} */ -function scenariosList () { - 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) { - return _.assign(scenario, { delay: scenario.delay || 6000 }); - }) - .tap(function (scenarios) { - var previousCredential; +function writeCookies () { + var cookiesDir = path.join(BACKSTOP_DIR, 'cookies'); + var config = siteConfig(); - scenarios.forEach(function (scenario, index) { - scenario.credential = scenario.credential || DEFAULT_CREDENTIAL; - scenario.count = '(' + (index + 1) + ' of ' + scenarios.length + ')'; - scenario.onBeforeScript = 'init'; + if (!fs.existsSync(cookiesDir)) { + fs.mkdirSync(cookiesDir); + } - if (index === 0 || previousCredential !== scenario.credential) { - scenario.performLogin = true; + 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 (index !== 0) { - scenario.performLogout = true; - } - } + if (fs.existsSync(cookieFilePath)) { + fs.unlinkSync(cookieFilePath); + } - previousCredential = scenario.credential; - }); + loginUrl = execSync('drush uli --name=' + user + ' --uri=' + config.url + ' --browser=0', { encoding: 'utf8' }); + chromy = new Chromy({ port: CHROMY_STARTING_PORT + index, gotoTimeout: 60000 }); - return scenarios; - }) - .value(); + chromy.chain() + .goto(config.url) + .goto(loginUrl) + .getCookies() + .result(function (cookies) { + fs.writeFileSync(cookieFilePath, JSON.stringify(cookies)); + }) + .end() + .then(function () { + chromy.close(); + resolve(); + }); + }); + })); } diff --git a/uk.co.compucorp.civicrm.hrcore/hrcore.civix.php b/uk.co.compucorp.civicrm.hrcore/hrcore.civix.php index 49a45eef221..ea696b0d674 100644 --- a/uk.co.compucorp.civicrm.hrcore/hrcore.civix.php +++ b/uk.co.compucorp.civicrm.hrcore/hrcore.civix.php @@ -2,6 +2,83 @@ // AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file +/** + * The ExtensionUtil class provides small stubs for accessing resources of this + * extension. + */ +class CRM_HRCore_ExtensionUtil { + const SHORT_NAME = "hrcore"; + const LONG_NAME = "uk.co.compucorp.civicrm.hrcore"; + const CLASS_PREFIX = "CRM_HRCore"; + + /** + * Translate a string using the extension's domain. + * + * If the extension doesn't have a specific translation + * for the string, fallback to the default translations. + * + * @param string $text + * Canonical message text (generally en_US). + * @param array $params + * @return string + * Translated text. + * @see ts + */ + public static function ts($text, $params = array()) { + if (!array_key_exists('domain', $params)) { + $params['domain'] = array(self::LONG_NAME, NULL); + } + return ts($text, $params); + } + + /** + * Get the URL of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: 'http://example.org/sites/default/ext/org.example.foo'. + * Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function url($file = NULL) { + if ($file === NULL) { + return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/'); + } + return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file); + } + + /** + * Get the path of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo'. + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function path($file = NULL) { + // return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file); + return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + } + + /** + * Get the name of a class within this extension. + * + * @param string $suffix + * Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'. + * @return string + * Ex: 'CRM_Foo_Page_HelloWorld'. + */ + public static function findClass($suffix) { + return self::CLASS_PREFIX . '_' . str_replace('\\', '_', $suffix); + } + +} + +use CRM_HRCore_ExtensionUtil as E; + /** * (Delegated) Implements hook_civicrm_config(). * @@ -19,14 +96,14 @@ function _hrcore_civix_civicrm_config(&$config = NULL) { $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR; $extDir = $extRoot . 'templates'; - if ( is_array( $template->template_dir ) ) { - array_unshift( $template->template_dir, $extDir ); + if (is_array($template->template_dir)) { + array_unshift($template->template_dir, $extDir); } else { - $template->template_dir = array( $extDir, $template->template_dir ); + $template->template_dir = array($extDir, $template->template_dir); } - $include_path = $extRoot . PATH_SEPARATOR . get_include_path( ); + $include_path = $extRoot . PATH_SEPARATOR . get_include_path(); set_include_path($include_path); } @@ -131,7 +208,7 @@ function _hrcore_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { * @return CRM_HRCore_Upgrader */ function _hrcore_civix_upgrader() { - if (!file_exists(__DIR__.'/CRM/HRCore/Upgrader.php')) { + if (!file_exists(__DIR__ . '/CRM/HRCore/Upgrader.php')) { return NULL; } else { @@ -167,7 +244,8 @@ function _hrcore_civix_find_files($dir, $pattern) { while (FALSE !== ($entry = readdir($dh))) { $path = $subdir . DIRECTORY_SEPARATOR . $entry; if ($entry{0} == '.') { - } elseif (is_dir($path)) { + } + elseif (is_dir($path)) { $todos[] = $path; } } @@ -189,9 +267,12 @@ function _hrcore_civix_civicrm_managed(&$entities) { $es = include $file; foreach ($es as $e) { if (empty($e['module'])) { - $e['module'] = 'uk.co.compucorp.civicrm.hrcore'; + $e['module'] = E::LONG_NAME; } $entities[] = $e; + if (empty($e['params']['version'])) { + $e['params']['version'] = '3'; + } } } } @@ -218,7 +299,7 @@ function _hrcore_civix_civicrm_caseTypes(&$caseTypes) { // throw new CRM_Core_Exception($errorMessage); } $caseTypes[$name] = array( - 'module' => 'uk.co.compucorp.civicrm.hrcore', + 'module' => E::LONG_NAME, 'name' => $name, 'file' => $file, ); @@ -244,7 +325,7 @@ function _hrcore_civix_civicrm_angularModules(&$angularModules) { $name = preg_replace(':\.ang\.php$:', '', basename($file)); $module = include $file; if (empty($module['ext'])) { - $module['ext'] = 'uk.co.compucorp.civicrm.hrcore'; + $module['ext'] = E::LONG_NAME; } $angularModules[$name] = $module; } @@ -271,8 +352,10 @@ function _hrcore_civix_glob($pattern) { * Inserts a navigation menu item at a given place in the hierarchy. * * @param array $menu - menu hierarchy - * @param string $path - path where insertion should happen (ie. Administer/System Settings) - * @param array $item - menu you need to insert (parent/child attributes will be filled for you) + * @param string $path - path to parent of this item, e.g. 'my_extension/submenu' + * 'Mailing', or 'Administer/System Settings' + * @param array $item - the item to insert (parent/child attributes will be + * filled for you) */ function _hrcore_civix_insert_navigation_menu(&$menu, $path, $item) { // If we are done going down the path, insert menu @@ -287,7 +370,7 @@ function _hrcore_civix_insert_navigation_menu(&$menu, $path, $item) { } else { // Find an recurse into the next level down - $found = false; + $found = FALSE; $path = explode('/', $path); $first = array_shift($path); foreach ($menu as $key => &$entry) { @@ -321,7 +404,7 @@ function _hrcore_civix_fixNavigationMenu(&$nodes) { if ($key === 'navID') { $maxNavID = max($maxNavID, $item); } - }); + }); _hrcore_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL); } @@ -358,7 +441,20 @@ function _hrcore_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { $configured = TRUE; $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if(is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) { + if (is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) { $metaDataFolders[] = $settingsDir; } } + +/** + * (Delegated) Implements hook_civicrm_entityTypes(). + * + * Find any *.entityType.php files, merge their content, and return. + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_entityTypes + */ + +function _hrcore_civix_civicrm_entityTypes(&$entityTypes) { + $entityTypes = array_merge($entityTypes, array ( + )); +} diff --git a/uk.co.compucorp.civicrm.hrcore/hrcore.php b/uk.co.compucorp.civicrm.hrcore/hrcore.php index 2a57939d13a..5e4d9a56b9a 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(). @@ -127,6 +125,25 @@ function hrcore_civicrm_buildForm($formName, &$form) { } } +/** + * Implements hook_civicrm_validateForm(). + * + * @param string $formName + * @param array $fields + * @param mixed $files + * @param object $form + * @param array $errors + */ +function hrcore_civicrm_validateForm($formName, &$fields, &$files, &$form, &$errors) { + $listeners = [ + new CRM_HRCore_Hook_ValidateForm_AdminFormOptionsValidation(), + ]; + + foreach ($listeners as $currentListener) { + $currentListener->handle($formName, $fields, $files, $form, $errors); + } +} + /** * Implements hook_civicrm_xmlMenu(). * @@ -147,6 +164,15 @@ function hrcore_civicrm_install() { _hrcore_civix_civicrm_install(); } +/** + * Implements hook_civicrm_postInstall(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall + */ +function hrcore_civicrm_postInstall() { + _hrcore_civix_civicrm_postInstall(); +} + /** * Implements hook_civicrm_uninstall(). * @@ -272,27 +298,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')); } /** diff --git a/uk.co.compucorp.civicrm.hrcore/info.xml b/uk.co.compucorp.civicrm.hrcore/info.xml index 8b35f4f7e8c..2941130ce0f 100644 --- a/uk.co.compucorp.civicrm.hrcore/info.xml +++ b/uk.co.compucorp.civicrm.hrcore/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/uk.co.compucorp.civicrm.hrcore/package-lock.json b/uk.co.compucorp.civicrm.hrcore/package-lock.json index bddabece23f..698d093321c 100644 --- a/uk.co.compucorp.civicrm.hrcore/package-lock.json +++ b/uk.co.compucorp.civicrm.hrcore/package-lock.json @@ -3070,24 +3070,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { @@ -3097,12 +3101,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "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", @@ -3111,34 +3117,40 @@ }, "chownr": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { @@ -3147,25 +3159,29 @@ }, "deep-extend": { "version": "0.4.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { @@ -3174,13 +3190,15 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { @@ -3196,7 +3214,8 @@ }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "requires": { @@ -3210,13 +3229,15 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.21", - "bundled": true, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, "optional": true, "requires": { @@ -3225,7 +3246,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { @@ -3234,7 +3256,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, "requires": { @@ -3244,18 +3267,21 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "1.0.1" @@ -3263,13 +3289,15 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "1.1.11" @@ -3277,12 +3305,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "minipass": { "version": "2.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, "requires": { "safe-buffer": "5.1.1", @@ -3291,7 +3321,8 @@ }, "minizlib": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, "optional": true, "requires": { @@ -3300,7 +3331,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -3308,13 +3340,15 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, "needle": { "version": "2.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "dev": true, "optional": true, "requires": { @@ -3325,7 +3359,8 @@ }, "node-pre-gyp": { "version": "0.9.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", "dev": true, "optional": true, "requires": { @@ -3343,7 +3378,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "requires": { @@ -3353,13 +3389,15 @@ }, "npm-bundled": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.1.10", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, "optional": true, "requires": { @@ -3369,7 +3407,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { @@ -3381,18 +3420,21 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1.0.2" @@ -3400,19 +3442,22 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { @@ -3422,19 +3467,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "dev": true, "optional": true, "requires": { @@ -3446,7 +3494,8 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } @@ -3454,7 +3503,8 @@ }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { @@ -3469,7 +3519,8 @@ }, "rimraf": { "version": "2.6.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "optional": true, "requires": { @@ -3478,42 +3529,49 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.5.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "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", @@ -3523,7 +3581,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { @@ -3532,7 +3591,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -3540,13 +3600,15 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { "version": "4.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, "optional": true, "requires": { @@ -3561,13 +3623,15 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { @@ -3576,12 +3640,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "yallist": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } diff --git a/uk.co.compucorp.civicrm.hrcore/tests/phpunit/CRM/HRCore/Service/Stats/StatsGathererTest.php b/uk.co.compucorp.civicrm.hrcore/tests/phpunit/CRM/HRCore/Service/Stats/StatsGathererTest.php index 37f3dbd612b..33289c648e4 100644 --- a/uk.co.compucorp.civicrm.hrcore/tests/phpunit/CRM/HRCore/Service/Stats/StatsGathererTest.php +++ b/uk.co.compucorp.civicrm.hrcore/tests/phpunit/CRM/HRCore/Service/Stats/StatsGathererTest.php @@ -18,6 +18,7 @@ use CRM_HRCore_Test_Fabricator_OptionValue as OptionValueFabricator; use CRM_HRCore_Service_Stats_StatsGatherer as StatsGatherer; use CRM_HRCore_Test_Helpers_SessionHelper as SessionHelper; +use CRM_Hrjobroles_Test_Fabricator_HrJobRoles as HrJobRolesFabricator; /** * @group headless @@ -60,29 +61,33 @@ public function testURLWillMatchCiviCRMConfigBaseURL() { $this->assertEquals($expected, $stats->getSiteUrl()); } - public function testEntityCountsWillMatchExpectedCount() { - $this->truncateTables(['civicrm_contact']); - $this->setDomainFromAddress('test@test.com', 'Test'); - - $documentType = OptionValueFabricator::fabricate([ - 'option_group_id' => 'activity_type', - 'component_id' => 'CiviDocument' - ]); - - // expect 3 + public function testContactCountWillMatchExpectedCount() { + $existingContactCount = civicrm_api3('Contact', 'getcount'); ContactFabricator::fabricate(); ContactFabricator::fabricate(); - $contactID = ContactFabricator::fabricateWithEmail()['id']; - SessionHelper::registerCurrentLoggedInContactInSession($contactID); + ContactFabricator::fabricate(); + $expectedContactCount = $existingContactCount + 3; + $stats = $this->getGatherer()->gather(); - // expect 1 UFMatch - UFMatchFabricator::fabricate(['contact_id' => $contactID]); + $this->assertEquals($expectedContactCount, $stats->getEntityCount('contact')); + } - // expect 2 Vacancies + public function testCMSUserCountWillMatchExpectedCount() { + $stats = $this->getGatherer()->gather(); + $this->assertEquals(20, $stats->getEntityCount('cmsUser')); + } + + public function testVacancyCountWillMatchExpectedCount() { HRVacancyFabricator::fabricate(); HRVacancyFabricator::fabricate(); + $stats = $this->getGatherer()->gather(); - // expect 1 Task + $this->assertEquals(2, $stats->getEntityCount('vacancy')); + } + + public function testTaskCountWillMatchExpectedCounts() { + $this->setDomainFromAddress('test@test.com', 'Test'); + $contactID = ContactFabricator::fabricateWithEmail()['id']; $params = ['component_id' => 'CiviTask', 'option_group_id' => 'activity_type']; $taskType = OptionValueFabricator::fabricate($params); $params = [ @@ -92,31 +97,87 @@ public function testEntityCountsWillMatchExpectedCount() { ]; TaskFabricator::fabricate($params); - // expect 1 Assignment + $stats = $this->getGatherer()->gather(); + + $this->assertEquals(1, $stats->getEntityCount('task')); + } + + public function testCaseTypeCountWillMatchExpectedCount() { + CaseTypeFabricator::fabricate(); + CaseTypeFabricator::fabricate(['name' => 'test_case_type_2']); + + $stats = $this->getGatherer()->gather(); + + $this->assertEquals(2, $stats->getEntityCount('caseType')); + } + + public function testAssignmentCountsWillMatchExpectedCount() { $caseType = CaseTypeFabricator::fabricate(); AssignmentFabricator::fabricate(['case_type_id' => $caseType['id']]); - // expect 2 Documents + $stats = $this->getGatherer()->gather(); + + $this->assertEquals(1, $stats->getEntityCount('assignment')); + } + + public function testDocumentCountWillMatchExpectedCount() { + $contactId = ContactFabricator::fabricate()['id']; + $documentType = OptionValueFabricator::fabricate([ + 'option_group_id' => 'activity_type', + 'component_id' => 'CiviDocument', + ]); $params['activity_type_id'] = $documentType['value']; + $params['target_contact_id'] = $contactId; + $params['source_contact_id'] = $contactId; DocumentFabricator::fabricate($params); DocumentFabricator::fabricate($params); - // expect 2 LeaveRequests + $stats = $this->getGatherer()->gather(); + + $this->assertEquals(2, $stats->getEntityCount('document')); + } + + public function testLeaveRequestCountsWillMatchExpectedCount() { + $contactID = ContactFabricator::fabricateWithEmail()['id']; + $this->setUpLeaveRequest($contactID); $this->fabricateLeaveRequest($contactID); $this->fabricateLeaveRequest($contactID); $stats = $this->getGatherer()->gather(); - $this->assertEquals(3, $stats->getEntityCount('contact')); - $this->assertEquals(1, $stats->getEntityCount('cmsUser')); - $this->assertEquals(2, $stats->getEntityCount('vacancy')); - $this->assertEquals(1, $stats->getEntityCount('task')); - $this->assertEquals(1, $stats->getEntityCount('assignment')); - $this->assertEquals(2, $stats->getEntityCount('document')); $this->assertEquals(2, $stats->getEntityCount('leaveRequest')); } + public function testJobRoleCountWillMatchExpectedCount() { + $contactID = ContactFabricator::fabricateWithEmail()['id']; + + $params = ['contact_id' => $contactID]; + $contract = HRJobContractFabricator::fabricate($params); + $params = ['job_contract_id' => $contract['id']]; + HrJobRolesFabricator::fabricate($params); + HrJobRolesFabricator::fabricate($params); + + $stats = $this->getGatherer()->gather(); + + $this->assertEquals(2, $stats->getEntityCount('jobRole')); + } + + public function testCostCenterCountWillMatchExpectedCount() { + $existingCostCenterCount = civicrm_api3('OptionValue', 'getcount', [ + 'option_group_id' => 'cost_centres' + ]); + OptionValueFabricator::fabricate([ + 'option_group_id' => 'cost_centres', + 'name' => 'Test Cost Center' + ]); + $costCenterCount = $existingCostCenterCount + 1; + + $stats = $this->getGatherer()->gather(); + + $this->assertEquals($costCenterCount, $stats->getEntityCount('costCenter')); + } + public function testLeaveRequestInLast100DaysCountMatchesExpectedCount() { $contactID = ContactFabricator::fabricateWithEmail()['id']; $this->setUpLeaveRequest($contactID); @@ -241,7 +302,6 @@ public function testDeletedEntitiesWillNotBeIncluded() { $stats = $this->getGatherer()->gather(); $this->assertEquals(1, $stats->getEntityCount('contact')); - $this->assertEquals(0, $stats->getEntityCount('cmsUser')); $this->assertEquals(0, $stats->getEntityCount('task')); $this->assertEquals(0, $stats->getEntityCount('assignment')); $this->assertEquals(0, $stats->getEntityCount('document')); @@ -260,12 +320,22 @@ public function testLatestLoginWillBeSet() { ); } + public function testInactiveCaseTypesWillNotBeIncluded() { + CaseTypeFabricator::fabricate(['is_active' => 0]); + CaseTypeFabricator::fabricate(['name' => 'test_case_type_2']); + + $stats = $this->getGatherer()->gather(); + + $this->assertEquals(1, $stats->getEntityCount('caseType')); + } + /** * @return StatsGatherer */ private function getGatherer() { $siteInformation = $this->prophesize(SiteInformationInterface::class); $siteInformation->getSiteName()->willReturn('foo'); + $siteInformation->getActiveUserCount()->willReturn(20); $roleService = $this->prophesize(RoleServiceInterface::class); $roleService->getRoleNames()->willReturn([1 => 'fake_role']); diff --git a/uk.co.compucorp.civicrm.hremails/info.xml b/uk.co.compucorp.civicrm.hremails/info.xml index e2b4e4cc502..168a88b9ff6 100644 --- a/uk.co.compucorp.civicrm.hremails/info.xml +++ b/uk.co.compucorp.civicrm.hremails/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/ACL/LeaveInformationTrait.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/ACL/LeaveInformationTrait.php index 0f3373882a4..054bfde46c8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/ACL/LeaveInformationTrait.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/ACL/LeaveInformationTrait.php @@ -4,6 +4,19 @@ trait CRM_HRLeaveAndAbsences_ACL_LeaveInformationTrait { use CRM_HRLeaveAndAbsences_Service_SettingsManagerTrait; + /** + * This method creates ACL clause that can be added to queries in order to + * filter results to follow leave request ACL rules. + * + * @return string + * Query String + */ + public function getLeaveInformationACLClauses() { + $query = "IN ({$this->getLeaveInformationACLQuery()})"; + + return $query; + } + /** * For any leave information (Entitlement, Leave Requests etc) the access * rules are: @@ -11,8 +24,8 @@ trait CRM_HRLeaveAndAbsences_ACL_LeaveInformationTrait { * - Managers can see their own information + the information from their * managees * - * This method creates ACL clauses that can be added to queries in order to - * filter results to follow these rules. + * This method creates an ACL query that selects contact IDs that the currently + * logged in contact has access to based on these rules, i.e * * The manager > managee relationship is determined by checking if there's an * active relationship between the two contacts and that the type of this @@ -22,20 +35,19 @@ trait CRM_HRLeaveAndAbsences_ACL_LeaveInformationTrait { * @return string * Query String */ - public function getLeaveInformationACLClauses() { + public function getLeaveInformationACLQuery() { $contactsTable = CRM_Contact_BAO_Contact::getTableName(); $relationshipTable = CRM_Contact_BAO_Relationship::getTableName(); $relationshipTypeTable = CRM_Contact_BAO_RelationshipType::getTableName(); $conditions = $this->getLeaveInformationACLWhereConditions('c.id'); - $query = "IN ( - SELECT c.id - FROM {$contactsTable} c - LEFT JOIN {$relationshipTable} r ON c.id = r.contact_id_a - LEFT JOIN {$relationshipTypeTable} rt ON rt.id = r.relationship_type_id - WHERE $conditions - )"; + $query = " + SELECT c.id + FROM {$contactsTable} c + LEFT JOIN {$relationshipTable} r ON c.id = r.contact_id_a + LEFT JOIN {$relationshipTypeTable} rt ON rt.id = r.relationship_type_id + WHERE $conditions"; return $query; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php new file mode 100644 index 00000000000..1bf8421fd2d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php @@ -0,0 +1,181 @@ + [ + 'restricted_value' => '', + 'level' => 1 + ], + 'to_date_amount' => [ + 'restricted_value' => '', + 'level' => 1 + ], + 'type_id' => [ + 'restricted_value' => '', + 'level' => 1 + ], + 'balance_change' => [ + 'restricted_value' => '', + 'level' => 1 + ], + 'sickness_reason' => [ + 'restricted_value' => '', + 'level' => 1 + ], + ]; + + /** + * CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissions constructor. + * + * @param array $apiRequest + * The Original API request parameters. + * @param LeaveRequestRightsService $leaveRequestRights + */ + public function __construct($apiRequest, LeaveRequestRightsService $leaveRequestRights) { + $this->leaveRequestRightsService = $leaveRequestRights; + $this->apiRequest = $apiRequest; + $this->setShouldRemoveDataRowIdentifier(); + $this->setVisibleAbsenceTypes(); + } + + /** + * {@inheritdoc} + */ + protected function getRestrictedFields() { + return $this->restrictedFields; + } + + /** + * Returns accessible contacts for a logged in user. i.e contact + * that a user has access to via the Leave Request ACL rules. + * + * @return array + */ + protected function getAccessibleContacts() { + if(!$this->accessibleContacts && !$this->currentUserIsAdmin()) { + $this->accessibleContacts = $this->leaveRequestRightsService->getLeaveContactsCurrentUserHasAccessTo(); + } + + return $this->accessibleContacts; + } + + /** + * {@inheritdoc} + */ + protected function getNewFieldValue($field, $oldValue, $dataRowIdentifierValue) { + $canAccessRestrictedData = $this->canAccessRestrictedData($dataRowIdentifierValue); + + if($this->currentUserIsAdmin() || $canAccessRestrictedData) { + return $oldValue; + } + + if ($field === 'type_id' && in_array($oldValue, $this->visibleAbsenceTypes)) { + return $oldValue; + } + + return $this->getRestrictedFields()[$field]['restricted_value']; + } + + /** + * Checks whether current user has access to the restricted data for the contact having its + * data represented by the Identifier value. + * + * @param mixed $dataRowIdentifierValue + * + * @return bool + */ + protected function canAccessRestrictedData($dataRowIdentifierValue) { + return in_array($dataRowIdentifierValue, $this->getAccessibleContacts()); + } + + /** + * Returns whether the current user is an Admin or not. + * + * @return bool + */ + protected function currentUserIsAdmin() { + return CRM_Core_Permission::check('administer leave and absences'); + } + + /** + * Sets the value of the removeDataRowIdentifier variable. + */ + private function setShouldRemoveDataRowIdentifier() { + if(empty($this->apiRequest['params']['initial_return'])){ + return; + } + + if (!in_array($this->getDataRowIdentifierKey(), $this->apiRequest['params']['initial_return'])) { + $this->removeDataRowIdentifier = TRUE; + } + } + + /** + * Sets the value of the visibleAbsenceTypes property + * with absence types that have the hide_label property + * as false. + */ + private function setVisibleAbsenceTypes() { + $activeAbsenceTypes = AbsenceType::getEnabledAbsenceTypes(); + $visibleAbsenceTypes = []; + foreach ($activeAbsenceTypes as $absenceType) { + if (!$absenceType->hide_label) { + $visibleAbsenceTypes[] = $absenceType->id; + } + } + + $this->visibleAbsenceTypes = $visibleAbsenceTypes; + } +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GetBreakDownFieldPermissions.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GetBreakDownFieldPermissions.php new file mode 100644 index 00000000000..df121f6b9ac --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GetBreakDownFieldPermissions.php @@ -0,0 +1,84 @@ +contactID = $this->getContactID($apiRequest); + + parent::__construct($apiRequest, $leaveRequestRights); + } + + /** + * Gets the contact ID that the request results belongs to. + * + * @param array $apiRequest + * + * @return int|string + */ + private function getContactID($apiRequest) { + $leaveRequestID = $apiRequest['params']['leave_request_id']; + + try { + $leaveRequest = LeaveRequest::findById($leaveRequestID); + + return $leaveRequest->contact_id; + } catch(Exception $e) { + return ''; + } + } + + /** + * {@inheritdoc} + */ + protected function getRestrictedFields() { + $fields = [ + 'amount' => [ + 'restricted_value' => '', + 'level' => 1 + ], + ]; + + return $fields; + } + + /** + * Checks whether current user has access to the restricted data for the contact_id linked + * to the request results. + * + * @param mixed $dataRowIdentifierValue + * + * @return bool + */ + protected function canAccessRestrictedData($dataRowIdentifierValue) { + return in_array($this->contactID, $this->getAccessibleContacts()); + } +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/LeaveFieldPermissions.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/LeaveFieldPermissions.php new file mode 100644 index 00000000000..a1479bb1762 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/LeaveFieldPermissions.php @@ -0,0 +1,131 @@ +filterFields($results['values']); + } + + /** + * Filters the fields and replaces values for restricted fields as necessary. + * + * @param array $data + * @param int $level + */ + protected function filterFields(&$data, $level = 0) { + foreach($data as $field => &$value) { + if($this->getDataRowIdentifierKey() && $this->getDataRowIdentifierLevel() && $level == 0) { + $rowData = [$field => $value]; + $this->setCurrentDataRowIdentifierValue($rowData); + } + + if ($this->removeDataRowIdentifier && $field === $this->getDataRowIdentifierKey() && $level === $this->getDataRowIdentifierLevel()) { + unset($data[$field]); + } + + if(array_key_exists($field, $this->getRestrictedFields()) && $level == $this->getRestrictedFields()[$field]['level']) { + $oldValue = $value; + $data[$field] = $this->getNewFieldValue($field, $oldValue, $this->getCurrentDataRowIdentifierValue()); + } + + if(is_array($value)) { + $this->filterFields($value, $level + 1); + } + } + } + + /** + * Sets the Identifier field value for the current result row set. + * It resets the value for the previous result row set first + * before attempting to store the value for the current row. + * + * @param array $data + * @param int $level + */ + private function setCurrentDataRowIdentifierValue($data, $level = 0) { + if ($level == 0) { + $this->currentDataRowIdentifierValue = ''; + } + + foreach($data as $field => $value) { + if($this->currentDataRowIdentifierValue) { + break; + } + + if($field == $this->getDataRowIdentifierKey() && $level == $this->getDataRowIdentifierLevel()) { + $this->currentDataRowIdentifierValue = $value; + break; + } + + if(is_array($value)) { + $this->setCurrentDataRowIdentifierValue($value, $level + 1); + } + } + } + + /** + * Gets the Identifier field value for the current result row set + * + * @return string + */ + private function getCurrentDataRowIdentifierValue() { + return $this->currentDataRowIdentifierValue; + } +} 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..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,12 @@ 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'; + if (isset($this->params['expired']) && $this->params['expired']) { + $conditions[] = $this->getExpiredCondition(); + } + + if (isset($this->params['expired']) && !$this->params['expired']) { + $conditions[] = $this->getNonExpiredCondition(); } if(!empty($this->params['public_holiday'])) { @@ -147,6 +149,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,10 +208,11 @@ 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'])) { + 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/CRM/HRLeaveAndAbsences/API/Wrapper/LeaveRequestFieldsVisibility.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Wrapper/LeaveRequestFieldsVisibility.php new file mode 100644 index 00000000000..b633d8dc602 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Wrapper/LeaveRequestFieldsVisibility.php @@ -0,0 +1,137 @@ + [ + 'handler' => 'CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissions', + 'request_requires_contact_id' => TRUE + ], + 'get' => [ + 'handler' => 'CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissions', + 'request_requires_contact_id' => TRUE + ], + 'getbreakdown' => [ + 'handler' => 'CRM_HRLeaveAndAbsences_API_Handler_GetBreakDownFieldPermissions' + ], + ]; + + /** + * The contact_id parameter needs to be present in the list of parameters + * to be returned so that each result row set to be precessed by the API + * handler can identify which data belongs to which contact depending on + * the data the current user has access to. If the contact_id is absent, + * the result set returned will hide restricted fields even for contact + * that should originally have access to those fields. + * + * @param $apiRequest + * @return mixed + */ + public function fromApiInput($apiRequest) { + if ($this->canHandleApiInput($apiRequest)) { + $this->setRequestReturnParameter($apiRequest); + } + + return $apiRequest; + } + + /** + * {@inheritdoc} + */ + public function toApiOutput($apiRequest, $result) { + if ($this->canHandleApiOutput($apiRequest)) { + $handler = $this->getHandler($apiRequest); + $handler->process($result); + } + + return $result; + } + + /** + * Returns the handler for the API action. + * + * @param $apiRequest + * + * @return mixed + */ + private function getHandler($apiRequest) { + $handler = $this->apiActions[$apiRequest['action']]['handler']; + $leaveRequestRights = new LeaveRequestRightsService(new LeaveManagerService()); + + return new $handler($apiRequest, $leaveRequestRights); + } + + /** + * Checks whether the request can be handled or not. + * + * @param $apiRequest + * + * @return bool + */ + private function canHandleTheRequest($apiRequest) { + $isTargetAction = array_key_exists($apiRequest['action'], $this->apiActions); + return $apiRequest['entity'] === 'LeaveRequest' && $isTargetAction; + } + + /** + * Checks If the API request output can be handled. + * + * @param $apiRequest + * + * @return bool + */ + private function canHandleApiOutput($apiRequest) { + return $this->canHandleTheRequest($apiRequest); + } + + /** + * Checks If the API request input can be handled. + * + * @param array $apiRequest + * + * @return bool + */ + private function canHandleApiInput($apiRequest) { + $canHandleRequest = $this->canHandleTheRequest($apiRequest); + $requiresContactID = !empty($this->apiActions[$apiRequest['action']]['request_requires_contact_id']); + + return $canHandleRequest && $requiresContactID; + } + + /** + * Ensures that the return parameter for the API input has all the dependencies + * needed to make the API handlers work. In this case the contact_id should be + * present in the list of fields to be returned in the result set so that the API + * handlers that requires this can return accurate results. + * + * @param array $apiRequest + * + */ + private function setRequestReturnParameter(&$apiRequest) { + $options = _civicrm_api3_get_options_from_params($apiRequest['params']); + $returnParams = array_keys($options['return']); + + if (!empty($returnParams)) { + if (FALSE === array_search('contact_id', $returnParams)) { + $apiRequest['params']['initial_return'] = $returnParams; + $returnParams[] = 'contact_id'; + $apiRequest['params']['return'] = $returnParams; + } + } + } +} 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..8c7d04a995c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php @@ -14,6 +14,8 @@ use CRM_Hrjobcontract_BAO_HRJobContract as JobContract; use CRM_HRLeaveAndAbsences_Factory_LeaveDateAmountDeduction as LeaveDateAmountDeductionFactory; use CRM_HRLeaveAndAbsences_Service_ContactWorkPattern as ContactWorkPatternService; +use CRM_HRLeaveAndAbsences_Service_LeaveRequestRights as LeaveRequestRightsService; +use CRM_HRLeaveAndAbsences_Service_LeaveManager as LeaveManagerService; class CRM_HRLeaveAndAbsences_BAO_LeaveRequest extends CRM_HRLeaveAndAbsences_DAO_LeaveRequest { @@ -1319,16 +1321,35 @@ public static function findById($id) { } /** - *{@inheritdoc} + * This is the LeaveRequest Implementation of the addSelectWhereClause method. It allows leave + * requests to be filtered based on LeaveRequest ACL rules. The filtering is done basically + * for TOIL requests. A staff can not fetch TOIL requests for other contacts, A manager cannot + * fetch TOIL requests for contacts that are not managees but an Admin can fetch all TOIL requests. + * Requests other than TOIL requests are not restricted by this ACL rules. */ public function addSelectWhereClause() { if (CRM_Core_Permission::check([['view all contacts', 'edit all contacts']])) { return; } - $clauses['contact_id'] = $this->getLeaveInformationACLClauses(); + $leaveTable = CRM_HRLeaveAndAbsences_BAO_LeaveRequest::getTableName(); + $leaveRequestRights = new LeaveRequestRightsService(new LeaveManagerService()); + + $accessibleContacts = $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo(); + $contactsAccessIN = "'" . implode(', ', $accessibleContacts) . "'"; + $notAccessibleLeaveRequestQuery = "SELECT id FROM {$leaveTable} + WHERE contact_id NOT IN ($contactsAccessIN) AND request_type ='" . LeaveRequest::REQUEST_TYPE_TOIL . "'"; + + $query = "NOT IN ($notAccessibleLeaveRequestQuery)"; + + //Setting this to an empty array has same effect as allowing a contact have access to all + //contacts on the leave request table and the Civi default ACL will not be applied + $clauses['contact_id'] = []; + //Remove leave request ID's that the contact does not have access to + $clauses['id'] = $query; CRM_Utils_Hook::selectWhereClause($this, $clauses); + return $clauses; } 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..447da2ef193 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,29 @@ 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' - ); - } + $workPattern = self::findById($params['id']); + + if(!$workPattern->isActive() && $isToBeSetAsDefault) { + throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( + 'You cannot set a disabled work pattern as the default' + ); + } + + 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 && $workPattern->isDefault()) { + throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( + 'It is not possible to have no default Work Pattern' + ); } } @@ -178,17 +193,22 @@ private static function validateWorkPatternTitle($params) { } /** - * Checks whether the Work Pattern with the given ID - * is the default Work Pattern or not. - * - * @param int $workPatternID + * Checks whether the Work Pattern is the default Work Pattern or not. * * @return boolean */ - private static function isDefault($workPatternID) { - $workPattern = self::findById($workPatternID); + public function isDefault() { + return (bool)$this->is_default; + } - return $workPattern->is_default; + /** + * + * Checks whether the Work Pattern is enabled. + * + * @return boolean + */ + public function isActive() { + return (bool)$this->is_active; } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php index 10d4a34375d..b3d365ac8ce 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php @@ -30,7 +30,7 @@ * * Generated from xml/schema/CRM/HRLeaveAndAbsences/AbsenceType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:894f42b522069204b99d7631796928f5) + * (GenCodeChecksum:1065880692bdb889904b901117a7eb96) */ require_once 'CRM/Core/DAO.php'; require_once 'CRM/Utils/Type.php'; @@ -186,6 +186,11 @@ class CRM_HRLeaveAndAbsences_DAO_AbsenceType extends CRM_Core_DAO { * @var string */ public $calculation_unit; + /** + * + * @var boolean + */ + public $hide_label; /** * Class constructor. */ @@ -465,6 +470,15 @@ static function &fields() { 'optionEditPath' => 'civicrm/admin/options/hrleaveandabsences_absence_type_calculation_unit', ) ) , + 'hide_label' => array( + 'name' => 'hide_label', + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'title' => ts('This controls the visibility of the Leave Type label in the calendar and feeds.') , + 'table_name' => 'civicrm_hrleaveandabsences_absence_type', + 'entity' => 'AbsenceType', + 'bao' => 'CRM_HRLeaveAndAbsences_DAO_AbsenceType', + 'localizable' => 0, + ) , ); CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php index f3661b6a4b5..7bfdd701c7b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php @@ -30,7 +30,7 @@ * * Generated from xml/schema/CRM/HRLeaveAndAbsences/LeaveBalanceChangeExpiryLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:00010b2fd39ed197ea73c2cbda8ad725) + * (GenCodeChecksum:01a66483965afa9ab1cd90195e081cc9) */ require_once 'CRM/Core/DAO.php'; require_once 'CRM/Utils/Type.php'; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php index 8ca89082d76..8f771128492 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php @@ -76,7 +76,7 @@ public function postProcess() { //when a checkbox is not checked, it is not sent on the request //so we check if it wasn't sent and set the param value to 0 - $checkboxFields = ['is_default', 'is_active', 'allow_accruals_request', 'allow_carry_forward']; + $checkboxFields = ['is_default', 'is_active', 'allow_accruals_request', 'allow_carry_forward', 'hide_label']; foreach ($checkboxFields as $field) { if(!array_key_exists($field, $params)) { $params[$field] = 0; @@ -132,6 +132,11 @@ private function addBasicDetailsFields() { $this->getDAOFieldAttributes('color'), TRUE ); + $this->add( + 'checkbox', + 'hide_label', + ts('Hide leave type label on public calendars and feeds?') + ); $this->add( 'checkbox', 'is_default', diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php index c392b880d7b..b3e919208ac 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php @@ -6,6 +6,8 @@ class CRM_HRLeaveAndAbsences_Service_LeaveRequestRights { + use CRM_HRLeaveAndAbsences_ACL_LeaveInformationTrait; + /** * @var \CRM_HRLeaveAndAbsences_Service_LeaveManager */ @@ -173,4 +175,28 @@ public function canCancelToilWithPastDates($contactID, $absenceTypeID) { return TRUE; } + + /** + * Returns the leave contact ids that the current logged in user has access to, For a + * user with staff role it would be that user contact id alone, for a manager it + * would be the contact Id's of the staff he approves leave for. The query is not ran + * for an Admin user because in reality an Admin user has access to all contacts. + * + * @return array + */ + public function getLeaveContactsCurrentUserHasAccessTo() { + $results = []; + + if($this->currentUserIsAdmin()) { + return $results; + } + $query = $this->getLeaveInformationACLQuery(); + $contactIds = CRM_CORE_DAO::executeQuery($query); + + while ($contactIds->fetch()) { + $results[] = $contactIds->id; + } + + return $results; + } } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php index 6a123c158c9..d674f79e6f9 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php @@ -34,6 +34,7 @@ class CRM_HRLeaveAndAbsences_Upgrader extends CRM_HRLeaveAndAbsences_Upgrader_Ba use CRM_HRLeaveAndAbsences_Upgrader_Step_1026; use CRM_HRLeaveAndAbsences_Upgrader_Step_1027; use CRM_HRLeaveAndAbsences_Upgrader_Step_1028; + use CRM_HRLeaveAndAbsences_Upgrader_Step_1029; /** * A list of directories to be scanned for XML installation files diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Base.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Base.php index bd5b017186f..0d69a544e5b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Base.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Base.php @@ -1,6 +1,7 @@ run($xml_file); return TRUE; @@ -107,7 +113,26 @@ protected static function executeCustomDataFileByAbsPath($xml_file) { public function executeSqlFile($relativePath) { CRM_Utils_File::sourceSQLFile( CIVICRM_DSN, - $this->extensionDir . '/' . $relativePath + $this->extensionDir . DIRECTORY_SEPARATOR . $relativePath + ); + return TRUE; + } + + /** + * @param string $tplFile + * The SQL file path (relative to this extension's dir). + * Ex: "sql/mydata.mysql.tpl". + * @return bool + */ + public function executeSqlTemplate($tplFile) { + // Assign multilingual variable to Smarty. + $upgrade = new CRM_Upgrade_Form(); + + $tplFile = CRM_Utils_File::isAbsolute($tplFile) ? $tplFile : $this->extensionDir . DIRECTORY_SEPARATOR . $tplFile; + $smarty = CRM_Core_Smarty::singleton(); + $smarty->assign('domainID', CRM_Core_Config::domainID()); + CRM_Utils_File::sourceSQLFile( + CIVICRM_DSN, $smarty->fetch($tplFile), NULL, TRUE ); return TRUE; } @@ -205,7 +230,7 @@ public function enqueuePendingRevisions(CRM_Queue_Queue $queue) { * @return array(revisionNumbers) sorted numerically */ public function getRevisions() { - if (! is_array($this->revisions)) { + if (!is_array($this->revisions)) { $this->revisions = array(); $clazz = new ReflectionClass(get_class($this)); @@ -222,24 +247,42 @@ public function getRevisions() { } public function getCurrentRevision() { - // return CRM_Core_BAO_Extension::getSchemaVersion($this->extensionName); + $revision = CRM_Core_BAO_Extension::getSchemaVersion($this->extensionName); + if (!$revision) { + $revision = $this->getCurrentRevisionDeprecated(); + } + return $revision; + } + + private function getCurrentRevisionDeprecated() { $key = $this->extensionName . ':version'; - return CRM_Core_BAO_Setting::getItem('Extension', $key); + if ($revision = CRM_Core_BAO_Setting::getItem('Extension', $key)) { + $this->revisionStorageIsDeprecated = TRUE; + } + return $revision; } public function setCurrentRevision($revision) { - // We call this during hook_civicrm_install, but the underlying SQL - // UPDATE fails because the extension record hasn't been INSERTed yet. - // Instead, track revisions in our own namespace. - // CRM_Core_BAO_Extension::setSchemaVersion($this->extensionName, $revision); - - $key = $this->extensionName . ':version'; - CRM_Core_BAO_Setting::setItem($revision, 'Extension', $key); + CRM_Core_BAO_Extension::setSchemaVersion($this->extensionName, $revision); + // clean up legacy schema version store (CRM-19252) + $this->deleteDeprecatedRevision(); return TRUE; } + private function deleteDeprecatedRevision() { + if ($this->revisionStorageIsDeprecated) { + $setting = new CRM_Core_BAO_Setting(); + $setting->name = $this->extensionName . ':version'; + $setting->delete(); + CRM_Core_Error::debug_log_message("Migrated extension schema revision ID for {$this->extensionName} from civicrm_setting (deprecated) to civicrm_extension.\n"); + } + } + // ******** Hook delegates ******** + /** + * @see https://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install + */ public function onInstall() { $files = glob($this->extensionDir . '/sql/*_install.sql'); if (is_array($files)) { @@ -247,6 +290,12 @@ public function onInstall() { CRM_Utils_File::sourceSQLFile(CIVICRM_DSN, $file); } } + $files = glob($this->extensionDir . '/sql/*_install.mysql.tpl'); + if (is_array($files)) { + foreach ($files as $file) { + $this->executeSqlTemplate($file); + } + } $files = glob($this->extensionDir . '/xml/*_install.xml'); if (is_array($files)) { foreach ($files as $file) { @@ -256,13 +305,31 @@ public function onInstall() { if (is_callable(array($this, 'install'))) { $this->install(); } + } + + /** + * @see https://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall + */ + public function onPostInstall() { $revisions = $this->getRevisions(); if (!empty($revisions)) { $this->setCurrentRevision(max($revisions)); } + if (is_callable(array($this, 'postInstall'))) { + $this->postInstall(); + } } + /** + * @see https://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall + */ public function onUninstall() { + $files = glob($this->extensionDir . '/sql/*_uninstall.mysql.tpl'); + if (is_array($files)) { + foreach ($files as $file) { + $this->executeSqlTemplate($file); + } + } if (is_callable(array($this, 'uninstall'))) { $this->uninstall(); } @@ -272,9 +339,11 @@ public function onUninstall() { CRM_Utils_File::sourceSQLFile(CIVICRM_DSN, $file); } } - $this->setCurrentRevision(NULL); } + /** + * @see https://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable + */ public function onEnable() { // stub for possible future use if (is_callable(array($this, 'enable'))) { @@ -282,6 +351,9 @@ public function onEnable() { } } + /** + * @see https://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable + */ public function onDisable() { // stub for possible future use if (is_callable(array($this, 'disable'))) { @@ -300,4 +372,5 @@ public function onUpgrade($op, CRM_Queue_Queue $queue = NULL) { default: } } + } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php new file mode 100644 index 00000000000..e6db5418db3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php @@ -0,0 +1,24 @@ +thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:1px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 8px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, rgba(0,0,0,0.1), rgba(0,0,0,0.1) 5px, transparent 5px, transparent 8px)}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend>.row:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend .chr_leave-calendar__legend__entry{margin-top:10px}@media (min-width: 768px){#bootstrap-theme .chr_leave-calendar__legend .chr_leave-calendar__legend__entry{margin-top:0}}#bootstrap-theme .chr_leave-calendar__legend__entry{overflow:auto}#bootstrap-theme .chr_leave-calendar__legend__entry+#bootstrap-theme .chr_leave-calendar__legend__entry{margin-top:10px}#bootstrap-theme .chr_leave-calendar__legend__entry>.chr_leave-calendar__item{font-size:8px;height:20px;margin-right:10px;position:absolute;width:20px}#bootstrap-theme .chr_leave-calendar__legend__label{display:inline-block;font-size:12px;margin-left:26px}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip_item{cursor:pointer;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip_item:hover{background-color:#e8eef0}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip_item{cursor:pointer;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip_item:hover{background-color:#e8eef0}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} +#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-generic-leave{background-color:#4d4d68}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-selected,#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-clickable:hover{border:solid 1px #fff;border-radius:4px;box-shadow:0 0 1px 0 #c7cbd0;height:26px;margin-bottom:-1px;margin-left:-2px;margin-right:9px;margin-top:9px;padding-left:9px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__reset-absence-types-filter{color:#464354}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.civix.php b/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.civix.php index bd8c4e0046d..018ee45e418 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.civix.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.civix.php @@ -2,6 +2,83 @@ // AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file +/** + * The ExtensionUtil class provides small stubs for accessing resources of this + * extension. + */ +class CRM_HRLeaveAndAbsences_ExtensionUtil { + const SHORT_NAME = "hrleaveandabsences"; + const LONG_NAME = "uk.co.compucorp.civicrm.hrleaveandabsences"; + const CLASS_PREFIX = "CRM_HRLeaveAndAbsences"; + + /** + * Translate a string using the extension's domain. + * + * If the extension doesn't have a specific translation + * for the string, fallback to the default translations. + * + * @param string $text + * Canonical message text (generally en_US). + * @param array $params + * @return string + * Translated text. + * @see ts + */ + public static function ts($text, $params = array()) { + if (!array_key_exists('domain', $params)) { + $params['domain'] = array(self::LONG_NAME, NULL); + } + return ts($text, $params); + } + + /** + * Get the URL of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: 'http://example.org/sites/default/ext/org.example.foo'. + * Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function url($file = NULL) { + if ($file === NULL) { + return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/'); + } + return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file); + } + + /** + * Get the path of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo'. + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function path($file = NULL) { + // return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file); + return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + } + + /** + * Get the name of a class within this extension. + * + * @param string $suffix + * Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'. + * @return string + * Ex: 'CRM_Foo_Page_HelloWorld'. + */ + public static function findClass($suffix) { + return self::CLASS_PREFIX . '_' . str_replace('\\', '_', $suffix); + } + +} + +use CRM_HRLeaveAndAbsences_ExtensionUtil as E; + /** * (Delegated) Implements hook_civicrm_config(). * @@ -19,14 +96,14 @@ function _hrleaveandabsences_civix_civicrm_config(&$config = NULL) { $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR; $extDir = $extRoot . 'templates'; - if ( is_array( $template->template_dir ) ) { - array_unshift( $template->template_dir, $extDir ); + if (is_array($template->template_dir)) { + array_unshift($template->template_dir, $extDir); } else { - $template->template_dir = array( $extDir, $template->template_dir ); + $template->template_dir = array($extDir, $template->template_dir); } - $include_path = $extRoot . PATH_SEPARATOR . get_include_path( ); + $include_path = $extRoot . PATH_SEPARATOR . get_include_path(); set_include_path($include_path); } @@ -55,6 +132,20 @@ function _hrleaveandabsences_civix_civicrm_install() { } } +/** + * Implements hook_civicrm_postInstall(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall + */ +function _hrleaveandabsences_civix_civicrm_postInstall() { + _hrleaveandabsences_civix_civicrm_config(); + if ($upgrader = _hrleaveandabsences_civix_upgrader()) { + if (is_callable(array($upgrader, 'onPostInstall'))) { + $upgrader->onPostInstall(); + } + } +} + /** * Implements hook_civicrm_uninstall(). * @@ -117,7 +208,7 @@ function _hrleaveandabsences_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = * @return CRM_HRLeaveAndAbsences_Upgrader */ function _hrleaveandabsences_civix_upgrader() { - if (!file_exists(__DIR__.'/CRM/HRLeaveAndAbsences/Upgrader.php')) { + if (!file_exists(__DIR__ . '/CRM/HRLeaveAndAbsences/Upgrader.php')) { return NULL; } else { @@ -153,7 +244,8 @@ function _hrleaveandabsences_civix_find_files($dir, $pattern) { while (FALSE !== ($entry = readdir($dh))) { $path = $subdir . DIRECTORY_SEPARATOR . $entry; if ($entry{0} == '.') { - } elseif (is_dir($path)) { + } + elseif (is_dir($path)) { $todos[] = $path; } } @@ -175,9 +267,12 @@ function _hrleaveandabsences_civix_civicrm_managed(&$entities) { $es = include $file; foreach ($es as $e) { if (empty($e['module'])) { - $e['module'] = 'uk.co.compucorp.civicrm.hrleaveandabsences'; + $e['module'] = E::LONG_NAME; } $entities[] = $e; + if (empty($e['params']['version'])) { + $e['params']['version'] = '3'; + } } } } @@ -204,7 +299,7 @@ function _hrleaveandabsences_civix_civicrm_caseTypes(&$caseTypes) { // throw new CRM_Core_Exception($errorMessage); } $caseTypes[$name] = array( - 'module' => 'uk.co.compucorp.civicrm.hrleaveandabsences', + 'module' => E::LONG_NAME, 'name' => $name, 'file' => $file, ); @@ -230,7 +325,7 @@ function _hrleaveandabsences_civix_civicrm_angularModules(&$angularModules) { $name = preg_replace(':\.ang\.php$:', '', basename($file)); $module = include $file; if (empty($module['ext'])) { - $module['ext'] = 'uk.co.compucorp.civicrm.hrleaveandabsences'; + $module['ext'] = E::LONG_NAME; } $angularModules[$name] = $module; } @@ -257,8 +352,10 @@ function _hrleaveandabsences_civix_glob($pattern) { * Inserts a navigation menu item at a given place in the hierarchy. * * @param array $menu - menu hierarchy - * @param string $path - path where insertion should happen (ie. Administer/System Settings) - * @param array $item - menu you need to insert (parent/child attributes will be filled for you) + * @param string $path - path to parent of this item, e.g. 'my_extension/submenu' + * 'Mailing', or 'Administer/System Settings' + * @param array $item - the item to insert (parent/child attributes will be + * filled for you) */ function _hrleaveandabsences_civix_insert_navigation_menu(&$menu, $path, $item) { // If we are done going down the path, insert menu @@ -273,12 +370,14 @@ function _hrleaveandabsences_civix_insert_navigation_menu(&$menu, $path, $item) } else { // Find an recurse into the next level down - $found = false; + $found = FALSE; $path = explode('/', $path); $first = array_shift($path); foreach ($menu as $key => &$entry) { if ($entry['attributes']['name'] == $first) { - if (!$entry['child']) $entry['child'] = array(); + if (!isset($entry['child'])) { + $entry['child'] = array(); + } $found = _hrleaveandabsences_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key); } } @@ -305,7 +404,7 @@ function _hrleaveandabsences_civix_fixNavigationMenu(&$nodes) { if ($key === 'navID') { $maxNavID = max($maxNavID, $item); } - }); + }); _hrleaveandabsences_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL); } @@ -342,7 +441,104 @@ function _hrleaveandabsences_civix_civicrm_alterSettingsFolders(&$metaDataFolder $configured = TRUE; $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if(is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) { + if (is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) { $metaDataFolders[] = $settingsDir; } } + +/** + * (Delegated) Implements hook_civicrm_entityTypes(). + * + * Find any *.entityType.php files, merge their content, and return. + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_entityTypes + */ + +function _hrleaveandabsences_civix_civicrm_entityTypes(&$entityTypes) { + $entityTypes = array_merge($entityTypes, array ( + 'CRM_HRLeaveAndAbsences_DAO_AbsencePeriod' => + array ( + 'name' => 'AbsencePeriod', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_AbsencePeriod', + 'table' => 'civicrm_absenceperiod', + ), + 'CRM_HRLeaveAndAbsences_DAO_AbsenceType' => + array ( + 'name' => 'AbsenceType', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_AbsenceType', + 'table' => 'civicrm_hrleaveandabsences_absence_type', + ), + 'CRM_HRLeaveAndAbsences_DAO_ContactWorkPattern' => + array ( + 'name' => 'ContactWorkPattern', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_ContactWorkPattern', + 'table' => 'civicrm_hrleaveandabsences_contact_work_pattern', + ), + 'CRM_HRLeaveAndAbsences_DAO_LeaveBalanceChange' => + array ( + 'name' => 'LeaveBalanceChange', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_LeaveBalanceChange', + 'table' => 'civicrm_hrleaveandabsences_leave_balance_change', + ), + 'CRM_HRLeaveAndAbsences_DAO_LeaveBalanceChangeExpiryLog' => + array ( + 'name' => 'LeaveBalanceChangeExpiryLog', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_LeaveBalanceChangeExpiryLog', + 'table' => 'civicrm_leave_balance_change_expiry_log', + ), + 'CRM_HRLeaveAndAbsences_DAO_LeavePeriodEntitlement' => + array ( + 'name' => 'LeavePeriodEntitlement', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_LeavePeriodEntitlement', + 'table' => 'civicrm_hrleaveandabsences_leave_period_entitlement', + ), + 'CRM_HRLeaveAndAbsences_DAO_LeavePeriodEntitlementLog' => + array ( + 'name' => 'LeavePeriodEntitlementLog', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_LeavePeriodEntitlementLog', + 'table' => 'civicrm_hrleaveandabsences_leave_period_entitlement_log', + ), + 'CRM_HRLeaveAndAbsences_DAO_LeaveRequest' => + array ( + 'name' => 'LeaveRequest', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_LeaveRequest', + 'table' => 'civicrm_hrleaveandabsences_leave_request', + ), + 'CRM_HRLeaveAndAbsences_DAO_LeaveRequestDate' => + array ( + 'name' => 'LeaveRequestDate', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_LeaveRequestDate', + 'table' => 'civicrm_hrleaveandabsences_leave_request_date', + ), + 'CRM_HRLeaveAndAbsences_DAO_NotificationReceiver' => + array ( + 'name' => 'NotificationReceiver', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_NotificationReceiver', + 'table' => 'civicrm_hrleaveandabsences_notification_receiver', + ), + 'CRM_HRLeaveAndAbsences_DAO_PublicHoliday' => + array ( + 'name' => 'PublicHoliday', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_PublicHoliday', + 'table' => 'civicrm_hrleaveandabsences_public_holiday', + ), + 'CRM_HRLeaveAndAbsences_DAO_WorkDay' => + array ( + 'name' => 'WorkDay', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_WorkDay', + 'table' => 'civicrm_hrleaveandabsences_work_day', + ), + 'CRM_HRLeaveAndAbsences_DAO_WorkPattern' => + array ( + 'name' => 'WorkPattern', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_WorkPattern', + 'table' => 'civicrm_hrleaveandabsences_work_pattern', + ), + 'CRM_HRLeaveAndAbsences_DAO_WorkWeek' => + array ( + 'name' => 'WorkWeek', + 'class' => 'CRM_HRLeaveAndAbsences_DAO_WorkWeek', + 'table' => 'civicrm_hrleaveandabsences_work_week', + ), + )); +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.php b/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.php index 162aad95f9e..8a03b47686d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/hrleaveandabsences.php @@ -360,6 +360,7 @@ function hrleaveandabsences_civicrm_container(\Symfony\Component\DependencyInjec */ function hrleaveandabsences_civicrm_postInstall() { _hrleaveandabsences_set_has_leave_approved_by_as_default_relationship_type(); + _hrleaveandabsences_civix_civicrm_postInstall(); } /** @@ -452,6 +453,7 @@ function hrleaveandabsences_civicrm_validateForm($formName, &$fields, &$files, & */ function hrleaveandabsences_civicrm_apiWrappers(&$wrappers, $apiRequest) { $wrappers[] = new CRM_HRLeaveAndAbsences_API_Wrapper_LeaveRequestDates(); + $wrappers[] = new CRM_HRLeaveAndAbsences_API_Wrapper_LeaveRequestFieldsVisibility(); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/info.xml b/uk.co.compucorp.civicrm.hrleaveandabsences/info.xml index 0045a44b075..f360f86089c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/info.xml +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/info.xml @@ -8,8 +8,8 @@ Compucorp Ltd info@compucorp.co.uk - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7 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 bcb8533926d..657c7a20841 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(n,t,o,s){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var i=a.defer();n&&t||i.reject("contact_id and period_id are mandatory");var r={contact_id:n,period_id:t,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(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,n,a,o){return t.balanceChangeByAbsenceType(e,n,a,o)},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(A(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)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(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(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=n.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function A(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(P).then("period"===e?f:n.noop).then("contacts"===e?q:n.noop).then(function(){h("contacts"===e)})}function I(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 w(){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(P).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:F(t),isAccruedTOIL:D(t,"toil"),isRequested:A(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 P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function A(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 I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function 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:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function k(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){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:P(n.date)})}),s.then(function(){return Y[t]&&Y[t][n.date]?Y[t][n.date]:[]}).then(function(a){a=U(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 U(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 F(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],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&&F(),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(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,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(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function A(){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 I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function 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(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function U(){return h(ne.request.from_date)===h(ne.request.to_date)}function F(){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")&&U()||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=P,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),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(G).then(A).then(O).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return 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){w[e.label]=n})})).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 P(){e.forEach(I,function(e){e()})}function A(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=[],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=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(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 n=j[e.status];n?n(e.leaveRequest):W.refresh()}function b(n){n.dataIndex=e.indexBy(n.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(n){W.absencePeriods=e.sortBy(n,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(n){W.absenceTypes=n,W.absenceTypesIndexed=e.indexBy(n,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){return t.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(n){n.balanceChanges={holidays:e[0][n.id],approved:e[1][n.id],pending:e[2][n.id]}})})}function T(){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(n){var t=e.find(W.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},!(0===n.entitlement&&"1"!==n.allow_overuse&&"1"!==n.allow_accruals_request)})})}function D(){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 t.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),A({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(n){W.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function A(n){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})}},n),null,"from_date ASC",null,!1)}function R(e,n){return A(n).then(function(n){W.sections[e].data=n.list})}function I(){return t.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(n){W.leaveRequestStatuses=e.indexBy(n,"value")})}function M(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(W.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 x(e){return t.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(n){e.forEach(W.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&&B(n,a))})}function B(n,t){var a=["future","current"],o=W.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 U(){W.loading.content=!0,t.all([T(),C()]).then(function(){W.loading.content=!1}).then(function(){return t.all([I(),h()])})}function F(e){var n=W.sections[e];n.open=!n.open,n.open&&!n.data.length&&k(n)}function N(n){return e.find(W.leaveRequestStatuses,function(e){return e.name===n}).value}n.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:D},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(){t.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return t.all([T(),C()])}).then(function(){W.loading.content=!1}),$()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"}, -templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return 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(A)).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 P(e){return D(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return A(e).then(function(){O(e,!0)})})}function A(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){L[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return L[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),A("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?A("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}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function 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 P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function A(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(T(),D(),A())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),L(),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))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,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 P(){["from","to"].forEach(D)}function A(){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 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?U():F("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(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: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(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id: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){Ae={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:Ae.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){A(),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(Ae.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,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(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){Oe.forEach(function(e){e()})}function De(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Ae,Re={},Ie=0,we={},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=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=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=De,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}), -define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

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

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

    ","

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

    ","

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

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(x.selectedPeriod.start_date).clone().startOf("month"),a=n(x.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");x.months=e}function p(){s.$new().$watch(function(){return x.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){x.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){x.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(E)+"Controller").init(x)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){x.absencePeriods=t.sortBy(e,"start_date"),x.selectedPeriod=t.find(x.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){x.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){x.filters.optionValues.regions=e.hrjc_region,x.filters.optionValues.locations=e.hrjc_location,x.filters.optionValues.levelTypes=e.hrjc_level_type,x.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){x.supportData.absenceTypes=e[0],x.supportData.publicHolidays=e[1],x.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,x.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,x.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,x.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return x.injectMonths&&(e=O("destroyed"),x.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){x.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=x.selectedMonths.length?x.months.filter(function(e){return t.includes(x.selectedMonths,e.index)}):x.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){x.selectedMonths=[n().month()]}function T(){return x.roleOverride?r.resolve().then(function(){E=x.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){E=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===x.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,E,x=this;x.absencePeriods=[],x.contacts=[],x.contactIdsToReduceTo=null,x.injectMonths=!1,x.months=[],x.selectedMonths=null,x.selectedPeriod=null,x.showContactName=!1,x.showFilters=!1,x.supportData={},x.loading={calendar:!0,page:!0},x.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},x.labelPeriod=g,x.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return x.showFilters?$():t.noop}).then(function(){h()}).then(function(){x.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(x(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function R(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[R(u.statusNames.approved),R(u.statusNames.adminApproved),R(u.statusNames.awaitingApproval),R(u.statusNames.moreInformationRequired)]}function T(){return Y.month.loading=!0,a.all([I(),O()]).then(E).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date},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}), -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(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"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return xe.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return xe.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||R())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function E(){Me.errors=[]}function x(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Se,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function G(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){xe.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(Ee="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ee="admin")}).then(function(){return"staff"===Ee&&u(_.permissions.ssp.manage).then(function(e){e&&(Ee="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ee===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Se=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():x()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(xe.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",Ee="",xe=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=S,Me.canSubmit=T,Me.closeAlert=E,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=G,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n, -leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(B(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(!B(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 B(e.template)?this.fromString(e.template,t):B(e.templateUrl)?this.fromUrl(e.templateUrl,t):B(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return j(e)?e(t):e},this.fromUrl=function(n,a){return j(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return j(e)||U(e)&&j(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||!B(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return B(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 B(e)&&(f=e),f},this.strictMode=function(e){return B(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!B(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){j(n)&&(t=t&&B(e[a])&&j(e[a]))}),t},this.type=function(e,t,n){if(!B(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),B(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!B(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)j(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==j?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==j?(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 j},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return B(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!B(r))return n;if(!B(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),j(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var B=t.isDefined,j=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

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

    ","

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

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

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

    ","

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

    ","

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

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||S()})}function h(e){E.injectMonths=!0,O("injected").then(function(){S(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(T)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function S(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function T(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){R().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function S(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[S(u.statusNames.approved),S(u.statusNames.adminApproved),S(u.statusNames.awaitingApproval),S(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date},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(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;Te.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||S())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Te,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Se++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Te[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Te=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Se&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Se>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Se=0,Te={},Re=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=T,Le.canSubmit=R,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}}, -format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(B(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(!B(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 B(e.template)?this.fromString(e.template,t):B(e.templateUrl)?this.fromUrl(e.templateUrl,t):B(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return j(e)?e(t):e},this.fromUrl=function(n,a){return j(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return j(e)||U(e)&&j(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||!B(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return B(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 B(e)&&(f=e),f},this.strictMode=function(e){return B(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!B(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){j(n)&&(t=t&&B(e[a])&&j(e[a]))}),t},this.type=function(e,t,n){if(!B(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),B(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!B(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)j(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==j?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==j?(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 j},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return B(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!B(r))return n;if(!B(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),j(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var B=t.isDefined,j=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(t,n,a,r,o,s,i){function u(){return{loadContacts:function(){return l.loadContactsForAdmin()}}}function c(e){s.info("",["

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

    ","

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

    ","

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

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

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

    ","

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

    ","

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

    "].join(""))}t.debug("LeaveCalendarAdminController");var l,d;return{init:function(t){return d=t,l=i.init(d),d.filters.userSettings.assignedTo=e.find(d.filtersByAssignee,{type:"me"}),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.showAdminFilteringHint=c,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(t,n,a,r){function o(){return{loadContacts:function(){return s.loadLookUpAndFilteredContacts()}}}t.debug("LeaveCalendarManagerController");var s,i;return{init:function(t){return i=t,s=r.init(i),i.filters.userSettings.assignedTo=e.find(i.filtersByAssignee,{type:"me"}),i.showContactName=!0,i.showFilters=!0,o()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return s.displaySingleContact?o.loadFilteredContacts():"admin"===s.userPermissionRole?o.loadContactsForAdmin():o.loadLookUpAndFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,s.displaySingleContact&&(s.showFilters=!1,s.lookupContacts=[{id:s.contactId}]),r()}}}n.controller("LeaveCalendarStaffController",["$log","$q","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){H.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(H.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(H.selectedPeriod.start_date).clone().startOf("month"),a=t(H.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(S(n)),n.add(1,"month");H.months=e}function p(){return e.includes(["admin","manager"],H.userPermissionRole)}function h(e){return e.format("YYYY-MM")}function v(){o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H.supportData.absenceTypesToFilterBy=t,O(!0)})}function g(){o.$new().$watch(function(){return H.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(B(),k(),O())})}function b(e){H.injectMonth=!0,F("injected").then(function(){O(e)}).then(function(){H.loading.calendar=!1})}function y(){N=n("LeaveCalendar"+e.capitalize(U)+"Controller").init(H)}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return i.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function $(){return u.all().then(u.loadCalculationUnits)}function C(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function A(){return N.loadContacts().then(function(e){H.contacts=e})}function w(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){H.filters.optionValues.regions=e.hrjc_region,H.filters.optionValues.locations=e.hrjc_location,H.filters.optionValues.levelTypes=e.hrjc_level_type,H.filters.optionValues.departments=e.hrjc_department})}function T(){return c.all()}function P(){return a.all([$(),T(),C()]).then(function(t){H.supportData.absenceTypes=t[0],H.supportData.publicHolidays=t[1],H.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,H.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,H.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,H.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function D(){var e=a.resolve();return H.injectMonth&&(e=F("destroyed"),H.injectMonth=!1),e}function S(e){return{index:h(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function R(){var t=H.selectedPeriod.id;H.selectedPeriod=e.find(H.absencePeriods,function(e){return!!e.current}),t!==H.selectedPeriod.id&&f(),L(),k(),I("month")}function x(e){var n="previous"===e?"subtract":"add";B(t(H.selectedMonth.moment)[n](1,"month")),k(),I("month")}function I(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(D).then("period"===t&&f).then("period"===t&&E).then("contacts"===t&&A).then("month"===t&&k).then(function(){b("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function L(){B(t())}function E(){B(H.months[0].moment)}function M(n){var a="previous"===n?"first":"last",r=e[a](H.months),o=t().year(r.year).month(r.month);H.monthPaginatorsAvailability[n]=!H.selectedMonth.moment.isSame(o,"month")}function k(){M("previous"),M("next")}function B(t){t&&(H.selectedMonthIndex=h(t)),H.selectedMonth=e.find(H.months,{index:H.selectedMonthIndex})}function j(){return a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){H.userPermissionRole=e[0]?"admin":e[1]?"manager":"staff",U=H.roleOverride?H.roleOverride:H.userPermissionRole})}function F(t){return a(function(n){ +var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var N,U,H=this;H.absencePeriods=[],H.contacts=[],H.contactIdsToReduceTo=null,H.injectMonth=!1,H.months=[],H.selectedMonth={},H.selectedMonthIndex="",H.selectedPeriod=null,H.showContactName=!1,H.showFilters=!1,H.userPermissionRole="staff",H.loading={calendar:!0,page:!0},H.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},H.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],H.filters.userSettings.assignedTo=H.filtersByAssignee[2],H.monthPaginatorsAvailability={previous:!0,next:!0},H.supportData={absenceTypesToFilterBy:[]},H.canManageRequests=p,H.labelPeriod=_,H.navigateToCurrentMonth=R,H.paginateMonth=x,H.refresh=I,function(){j().then(g).then(v).then(y).then(D).then(function(){return a.all([q(),A(),P(),H.showFilters?w():e.noop])}).then(function(){m(),b(),k()}).then(function(){H.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:x()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?X.supportData.absenceTypesToFilterBy:e.pluck(X.supportData.absenceTypes,"id")}};return b(),s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=_(e.list)),C(e.list)})}function L(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function E(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=S(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function k(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function B(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:P(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=N(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:q(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return B(e,t.id)}))}))}function F(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&I()}function N(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function H(e){h(e),-1!==x().indexOf(e.status_id)&&c(e)}function W(e){return a.all(S(e).map(function(t){return B(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=k,X.contactsList=f,X.getContactUrl=y,function(){var e=t().month(X.month.month).year(X.month.year);$(),A(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):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){e.stopPropagation(),o.openModal(t,n,a)}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(){N(e),"from"===e&&F(),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 E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function j(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),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")&&j()||te.isMode("create")&&(I("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=x,te.isLeaveType=I,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(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 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 C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,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){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)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){ +Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function A(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function w(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS: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 D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function x(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function 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 j(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([w(),A()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),$(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([w(),A()])}).then(M).then(function(){Y.loading.content=!1}),j()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return 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),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(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function $(){["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 f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=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([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),j(),l(),O())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),j()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),j()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function B(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function j(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),B(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return r.leaveManagees(void 0,{unassigned:!0})}function u(){var t=e.get(n,"filters.userSettings.assignedTo.type","all");return m().then(function(e){return n.lookupContacts=e,a.all([d(),"me"!==t?c():a.resolve(null)])}).then(function(e){var t=e[0];return n.contactIdsToReduceTo=e[1],t})}function c(){return l().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function l(){return v?a.resolve(v):o.all()}function d(){return r.all(h(),null,"display_name").then(function(e){return e.list})}function m(){var t=e.get(n,"filters.userSettings.assignedTo.type","all");return(0,g[t])()}function f(){return m().then(function(e){n.lookupContacts=e}).then(d)}function p(){return r.leaveManagees(n.contactId)}function h(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length,o="all"!==e.get(n,"filters.userSettings.assignedTo.type","all");return a?t.id={IN:[n.filters.userSettings.contact.id]}:(o||r)&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var v,g={all:s,me:p,unassigned:i};return{loadContactsForAdmin:u,loadFilteredContacts:d,loadLookUpContacts:m,loadLookUpAndFilteredContacts:f}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===ke.selectedAbsenceType.calculation_unit_name?delete ke.request[e+"_date_amount"]:delete ke.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=ke.requestStatuses[_.statusNames.awaitingApproval].value;xe.status_id===e&&e!==ke.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!ke.loading.entitlements&&(!!ie("admin")||!oe("view")&&!(ie("manager")&&!oe("create")))}function R(){var e=P();return ke.isMode("edit")&&(e=e&&(Y()||D())),ke.canManage&&ke.requestStatuses&&(e=e&&!!ke.getStatusFromValue(ke.newStatusOnSave)),(e=e&&!!ke.period.id)&&!ke.isMode("view")}function x(){ke.isSelfRecord?ke.request.status_id=ke.requestStatuses[_.statusNames.awaitingApproval].value:ke.canManage&&(ke.request.status_id=ke.newStatusOnSave||ke.request.status_id)}function I(){if(ke.isMode("edit")&&!ke.isRole("staff")&&"toil"!==U())return ke.request.calculateBalanceChange(ke.selectedAbsenceType.calculation_unit_name).then(function(e){if(+ke.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){return"toil"!==U()&&!ke.request.change_balance}function L(){ke.errors=[]}function E(){return ke.request.create().then(Ae).then(function(){he("LeaveRequest::new")})}function M(){ne()&&!ke.isRole("staff")&&(ke.request.change_balance=!0)}function k(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return ke.request.delete().then(function(){ke.dismissModal(),d.publish("LeaveRequest::delete",ke.request)})}})}function B(){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 F(){return N(ke.getStatusFromValue(ke.request.status_id).name)}function N(e){return n.map(Se[e],function(e){return ke.requestStatuses[e]})}function U(){return ke.request?ke.request.request_type:ke.leaveType||null}function H(){return!ke.request||e.equals({},ke.requestStatuses)?[]:ke.request.status_id?F():N("none")}function W(e){return n.find(ke.requestStatuses,function(t){return t.value===e})}function V(e){ke.errors=n.isArray(e)?e:[e],ke.loading.absenceTypes=!1,ke.submitting=!1}function Y(){return!e.equals(xe,ke.request.attributes())||ke.canManage&&ke.newStatusOnSave}function G(){return ke.postContactSelection=!0,ke.staffMemberSelectionComplete=!1,ke.request.contact_id?r.resolve().then(ce).then(le).then(ge).then(ye).then(te).then(X).then(ke.isMode("edit")?_e:n.noop).then(function(){ke.postContactSelection=!1,ke.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return r.reject(e)}):r.reject("The contact id was not set")}function z(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Se.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Se.awaiting_approval=e,Se.more_information_required=e,Se.rejected=e,Se.approved=e,Se.cancelled=[_.statusNames.awaitingApproval].concat(e)}function X(){return ke.canManage?f.find(ke.request.contact_id).then(function(e){ke.contactName=e.display_name}):r.resolve()}function J(){var e="my-leave"===o.section,t=+Oe==+n.get(ke,"leaveRequest.contact_id"),a=!n.get(ke,"leaveRequest.id");ke.isSelfRecord=e&&(t||a)}function K(){Ie.push(o.$on("LeaveRequestPopup::requestObjectUpdated",_e),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){le().then(ge).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",ke.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){V(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",we),s.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;ke.request=ke.leaveRequest||null,e=U(),t=ke.initRequestAttributes(),"leave"===e?ke.request=y.init(t):"sickness"===e?ke.request=q.init(t):"toil"===e&&(ke.request=$.init(t))}function Z(){var e={};return ke.request?e=ke.request.attributes():ke.canManage||(e={contact_id:Oe}),e}function ee(){if(Ee="staff",!ke.isSelfRecord)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(){ke.canManage=ke.isRole("manager")||ke.isRole("admin")})}function te(){(ke.isRole("admin")||ke.isMode("create")&&ke.isRole("manager"))&&(ke.newStatusOnSave=ke.requestStatuses[_.statusNames.approved].value)}function ne(){return!ke.request.status_id||!n.includes(["cancelled","rejected"],W(ke.request.status_id).name)}function ae(e){var t=ke.getStatusFromValue(ke.request.status_id);return!!t&&t.name===e}function re(e){return ke.request&&ke.request.request_type===e}function oe(e){return ke.mode===e}function se(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 ie(e){return Ee===e}function ue(){return h.all().then(function(e){ke.absencePeriods=e})}function ce(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function le(){return ke.loading.entitlements=!0,g.all({contact_id:ke.request.contact_id,period_id:ke.period.id,type_id:{IN:De.ids}},!0).finally(function(){ke.loading.entitlements=!1})}function de(){return p.get().then(function(e){Oe=e.contactId})}function me(){return ke.selectedContactId?f.find(ke.selectedContactId).then(function(e){ke.managedContacts=[e]}):ke.isRole("admin")?f.all().then(function(e){ke.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){ke.managedContacts=e})}function fe(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){ke.requestStatuses=n.indexBy(e,"name")})}function pe(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 he(e){T(),d.publish(e,ke.request),ke.errors=[],ke.dismissModal()}function ve(){["from","to"].forEach(function(e){ke.request[e+"_date"]=xe[e+"_date"]})}function ge(e){if(ke.absenceTypes=pe(De.types,e),!ke.absenceTypes.length)return r.reject(Le)}function be(){ke.period=n.find(ke.absencePeriods,function(e){return ke.isMode("create")?e.current:se(ke.request,e)})}function ye(){ke.isMode("create")?(ke.selectedAbsenceType=ke.absenceTypes[0],ke.request.type_id=ke.selectedAbsenceType.id):ke.selectedAbsenceType=n.find(ke.absenceTypes,function(e){return e.id===ke.request.type_id})}function _e(){xe=e.copy(ke.request.attributes())}function qe(){var e;ke.request.id?(e=[ke.requestStatuses[_.statusNames.approved].value,ke.requestStatuses[_.statusNames.adminApproved].value,ke.requestStatuses[_.statusNames.rejected].value,ke.requestStatuses[_.statusNames.cancelled].value],ke.mode="edit",ke.isRole("staff")&&e.indexOf(ke.request.status_id)>-1&&(ke.mode="view")):ke.mode="create"}function $e(){var e=ke.request.status_id;if(!ke.isMode("view")&&!ke.submitting)return ke.submitting=!0,x(),w(),ke.request.isValid().then(ne()&&I).then(M).then(O()&&ve).then(Ce).then(function(){return ke.isMode("edit")?Pe():E()}).catch(function(t){ke.request.status_id=e,t&&V(t)}).finally(function(){ke.submitting=!1})}function Ce(){return r.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ae(){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 we(){Ie.forEach(function(e){e()})}function Te(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return ke.request.update().then(Ae).then(function(){ke.isRole("manager")?he("LeaveRequest::updatedByManager"):(ke.isRole("staff")||ke.isRole("admin"))&&he("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Se={},Re=0,xe={},Ie=[],Oe="",Le="No entitlement",Ee="",Me=[],ke=n.assign(this,m);ke.absencePeriods=[],ke.absenceTypes=[],ke.canManage=!1,ke.contactName=null,ke.errors=[],ke.loading={absenceTypes:!0,entitlements:!0},ke.managedContacts=[],ke.mode="",ke.newStatusOnSave=null,ke.period={},ke.postContactSelection=!1,ke.requestStatuses={},ke.selectedAbsenceType={},ke.staffMemberSelectionComplete=!1,ke.submitting=!1,ke.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},ke.canChangeAbsenceType=S,ke.canSubmit=R,ke.closeAlert=L,ke.deleteLeaveRequest=k,ke.dismissModal=B,ke.getStatuses=H,ke.getStatusFromValue=W,ke.initAfterContactSelection=G,ke.initRequestAttributes=Z,ke.isLeaveStatus=ae,ke.isLeaveType=re,ke.isMode=oe,ke.isRole=ie,ke.submit=$e,ke.updateAbsenceType=Te,function(){ke.loading.absenceTypes=!0,z(),K(),de().then(J).then(function(){return r.all([ee(),ue(),fe()])}).then(Q).then(qe).then(be).then(function(){return ke.canManage&&!ke.isMode("edit")&&me()}).then(function(){if(ke.selectedContactId&&(ke.request.contact_id=ke.selectedContactId),ke.request.contact_id)return ke.initAfterContactSelection()}).catch(V).finally(function(){ke.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){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,forceRecalculateBalanceChange:s}},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):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js index 40ec97e1787..d1e659d8942 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js @@ -41,6 +41,7 @@ define([ 'leave-absences/shared/models/absence-type.model', 'leave-absences/shared/models/entitlement.model', 'leave-absences/shared/modules/shared-settings', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/absence-tab/components/absence-tab-container.component', 'leave-absences/absence-tab/components/absence-tab-entitlements.component', diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js index e496863348b..9a12c3eeb69 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js @@ -28,6 +28,7 @@ define([ 'leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller', 'leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller', 'leave-absences/shared/modules/shared-settings', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/admin-dashboard/modules/config', 'leave-absences/admin-dashboard/components/admin-dashboard-container' diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js index ac140d1f4cb..10842627286 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js @@ -33,6 +33,7 @@ define([ 'leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller', 'leave-absences/shared/models/absence-period.model', 'leave-absences/shared/models/absence-type.model', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/manager-leave/components/manager-leave-container', 'leave-absences/manager-leave/modules/config' diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/app.js index 53b711886eb..65ffa041952 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/app.js @@ -3,24 +3,26 @@ define([ 'common/angular', 'common/models/session.model', + 'common/modules/templates', 'common/services/pub-sub', + 'common/components/notification-badge.component', 'leave-absences/shared/modules/shared-settings', 'leave-absences/shared/models/leave-request.model', - 'leave-absences/shared/components/leave-notification-badge.component', 'leave-absences/manager-notification-badge/modules/config', 'leave-absences/manager-notification-badge/components/manager-notification-badge.component' ], function (angular) { angular.module('manager-notification-badge', [ 'ngResource', + 'common.components', + 'common.templates', 'leave-absences.settings', 'leave-absences.models', - 'leave-absences.components', 'manager-notification-badge.components', 'manager-notification-badge.config' ]) - .run(['$log', function ($log) { - $log.debug('app.run'); - }]); + .run(['$log', function ($log) { + $log.debug('app.run'); + }]); return angular; }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/components/manager-notification-badge.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/components/manager-notification-badge.component.js index 28245767952..f6611775af5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/components/manager-notification-badge.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-notification-badge/components/manager-notification-badge.component.js @@ -17,8 +17,12 @@ define([ function ManagerNotificationBadgeController ($log, $q, Session, OptionGroup, sharedSettings) { $log.debug('Component: manager-notification-badge'); - var filters = {}; var vm = this; + var leaveRequestFilters = { + apiName: 'LeaveRequest', + params: {} + }; + vm.refreshCountEventName = 'ManagerBadge:: Update Count'; (function init () { @@ -26,7 +30,7 @@ define([ getManagerId(), getStatusId() ]).then(function () { - vm.filters = filters; + vm.filters = [leaveRequestFilters]; }); })(); @@ -38,7 +42,7 @@ define([ function getManagerId () { return Session.get() .then(function (session) { - filters.managed_by = session.contactId; + leaveRequestFilters.params.managed_by = session.contactId; }); } @@ -50,7 +54,7 @@ define([ function getStatusId () { return loadStatuses() .then(function (leaveRequestStatuses) { - filters.status_id = _.find(leaveRequestStatuses, function (status) { + leaveRequestFilters.params.status_id = _.find(leaveRequestStatuses, function (status) { return status.name === sharedSettings.statusNames.awaitingApproval; }).value; }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js index a5adeb64718..dedd083c9d7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js @@ -45,6 +45,7 @@ define([ 'leave-absences/shared/models/public-holiday.model', 'leave-absences/shared/modules/shared-settings', 'leave-absences/shared/modules/shared-settings', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/my-leave/components/my-leave-container.component', 'leave-absences/my-leave/modules/config' diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js index 0da8fe32c30..423784caf24 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js @@ -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,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 - * @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 (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; }, @@ -79,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) { @@ -103,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', @@ -113,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) { @@ -128,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 */ @@ -148,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) { @@ -158,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) { @@ -171,17 +159,16 @@ define([ }); return this.sendPOST('LeaveRequest', 'deleteattachment', params) - .then(function (result) { - return result.values; - }); + .then(function (result) { + return result.values; + }); }, /** * 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) { @@ -190,37 +177,35 @@ define([ }); return this.sendPOST('LeaveRequest', 'deletecomment', params) - .then(function (commentsData) { - return commentsData.values; - }); + .then(function (commentsData) { + return commentsData.values; + }); }, /** * 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'); - return this.sendGET('LeaveRequest', 'getFull', { id: id }) - .then(function (response) { - if (response.values.length === 0) { - return $q.reject('LeaveRequest not found with this ID'); - } + return this.sendGET('LeaveRequest', 'getFull', { id: id }, false) + .then(function (response) { + if (response.values.length === 0) { + return $q.reject('LeaveRequest not found with this ID'); + } - return response.values[0]; - }); + return response.values[0]; + }); }, /** * 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) { @@ -229,17 +214,16 @@ define([ }); return this.sendGET('LeaveRequest', 'getattachments', params, false) - .then(function (attachments) { - return attachments.values; - }); + .then(function (attachments) { + return attachments.values; + }); }, /** * 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) { @@ -248,17 +232,17 @@ define([ }); return this.sendGET('LeaveRequest', 'getcomment', params, false) - .then(function (commentsData) { - return commentsData.values; - }); + .then(function (commentsData) { + return commentsData.values; + }); }, /** * 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,31 +251,31 @@ define([ leave_request_id: leaveRequestID, contact_id: contactID }) - .then(function (response) { - return response.values; - }); + .then(function (response) { + return response.values; + }); }, /** * 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); 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; }, @@ -299,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) { @@ -313,16 +296,16 @@ define([ }); return this.sendPOST('LeaveRequest', 'addcomment', params) - .then(function (commentsData) { - return commentsData.values; - }); + .then(function (commentsData) { + return commentsData.values; + }); }, /** * 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); @@ -333,9 +316,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/src/leave-absences/shared/components/leave-calendar-day.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js index 837fe05646a..620556f5878 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js @@ -18,22 +18,15 @@ define([ controller: LeaveCalendarDayController }); - LeaveCalendarDayController.$inject = ['$log', '$scope', '$timeout', 'LeavePopup']; + LeaveCalendarDayController.$inject = ['$log', '$scope', 'LeavePopup']; - function LeaveCalendarDayController ($log, $scope, $timeout, LeavePopup) { + function LeaveCalendarDayController ($log, $scope, LeavePopup) { 'use strict'; $log.debug('Component: leave-calendar-day'); var vm = this; - vm.tooltip = { - show: false, - day_cell_hovered: false, - tooltip_hovered: false - }; - vm.openLeavePopup = openLeavePopup; - vm.toggleTooltip = toggleTooltip; (function init () { watchLeaveRequests(); @@ -42,19 +35,11 @@ define([ /** * Opens the leave request popup * - * When leave-request-actions.component sits inside manage-request component's table rows, - * and the table row has a click event to open leave request, so event.stopPropagation() - * is necessary to prevent the parents click event from being called - * * @param {Object} event * @param {Object} leaveRequest - * @param {String} leaveType - * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (event, leaveRequest, leaveType, selectedContactId, isSelfRecord) { - event.stopPropagation(); - LeavePopup.openModal(leaveRequest, leaveType, selectedContactId, isSelfRecord); + function openLeavePopup (event, leaveRequest) { + LeavePopup.openModalByID(leaveRequest.id); } /** @@ -107,19 +92,36 @@ define([ * @param {Object} leaveRequestAttributes */ function resolveLeaveRequestAbsenceTypeTitle (leaveRequest, leaveRequestAttributes) { + var absenceType = _.find(vm.supportData.absenceTypes, { id: leaveRequest.type_id }); + vm.contactData.leaveRequestsAttributes[leaveRequest.id].absenceTypeTitle = - _.find(vm.supportData.absenceTypes, { id: leaveRequest.type_id }).title; + absenceType.title; } /** * Sets a unit name to the leave requests attributes + * @NOTE this function contains an adhoc solution + * and should be refactored as soon as possible. + * We do not know what calculation to use for generic leave types + * so we rely on the "from_date_type" field to identify it. + * @see PCHR-3774 * * @param {LeaveRequestInstance} leaveRequest * @param {Object} leaveRequestAttributes */ function resolveLeaveRequestCalculationUnit (leaveRequest, leaveRequestAttributes) { - var absenceType = _.find(vm.supportData.absenceTypes, { id: leaveRequest.type_id }); - var calculationUnit = _.find(vm.supportData.calculationUnits, { 'value': absenceType.calculation_unit }); + var absenceType, calculationUnit; + + // @NOTE This block is an adhoc mentioned in the function description + if (!leaveRequest.type_id) { + leaveRequestAttributes.unit = leaveRequest.from_date_type + ? 'days' : 'hours'; + + return; + } + + absenceType = _.find(vm.supportData.absenceTypes, { id: leaveRequest.type_id }); + calculationUnit = _.find(vm.supportData.calculationUnits, { 'value': absenceType.calculation_unit }); leaveRequestAttributes.unit = calculationUnit.name; } @@ -132,8 +134,8 @@ define([ * @param {Object} leaveRequestAttributes */ function resolveLeaveRequestDates (leaveRequest, leaveRequestAttributes) { - leaveRequestAttributes.from_date = new Date(leaveRequest.from_date); - leaveRequestAttributes.to_date = new Date(leaveRequest.to_date); + leaveRequestAttributes.from_date = moment(leaveRequest.from_date).toDate(); + leaveRequestAttributes.to_date = moment(leaveRequest.to_date).toDate(); } /** @@ -195,26 +197,6 @@ define([ }); } - /** - * Toggles tooltip for the day. - * It reacts to entering/leaving either day cell or the tooltip itself, - * if either of the elements are hovered, it remains the tooltip open. - * It instantly shows a tooltip, but has a 100ms timeout to hide it once unhovered. - * - * @TODO this should be moved to a decorator to uib-tooltip - * - * @param {String} sourceElement day_cell|tooltip - * @param {Boolean} isHovered - */ - function toggleTooltip (sourceElement, isHovered) { - $timeout(function () { - vm.tooltip[sourceElement + '_hovered'] = isHovered; - - vm.tooltip.show = - vm.tooltip.day_cell_hovered || vm.tooltip.tooltip_hovered; - }, isHovered ? 0 : 100); - } - /** * Waits for the leave request to be accesible before mapping the necessary * leave request fields to it. diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/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..98285e7e5ad 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -1,8 +1,9 @@ /* eslint-env amd */ define([ + 'common/lodash', 'leave-absences/shared/modules/components' -], function (components) { +], function (_, components) { components.component('leaveCalendarLegend', { bindings: { absenceTypes: '<' @@ -11,28 +12,112 @@ define([ return sharedSettings.sharedPathTpl + 'components/leave-calendar-legend.html'; }], controllerAs: 'legend', - controller: ['$log', controller] + controller: leaveCalendarLegendController }); - function controller ($log) { + leaveCalendarLegendController.$inject = ['$log', '$rootScope']; + + function leaveCalendarLegendController ($log, $rootScope) { $log.debug('Component: leave-calendar-legend'); var vm = this; - vm.legendCollapsed = true; + vm.absenceTypesToFilterBy = []; + vm.legendCollapsed = false; + vm.nonWorkingDayTypes = [ + { label: 'Weekend', cssClassSuffix: 'weekend' }, + { label: 'Public Holiday', cssClassSuffix: 'public-holiday' }, + { label: 'Non Working Day', cssClassSuffix: 'non-working-day' } + ]; + vm.otherBadges = [ + { label: 'AM', description: 'AM Only' }, + { label: 'PM', description: 'PM Only' }, + { label: 'HH:MM', description: 'Time', cssClassSuffix: 'hours' }, + { label: '', description: 'Requested', cssClassSuffix: 'requested' }, + { label: 'AT', description: 'Accrued TOIL' } + ]; + + vm.checkIfAbsenceTypeIdIsDefined = checkIfAbsenceTypeIdIsDefined; + vm.checkIfAbsenceTypeIsSelectedForFiltering = checkIfAbsenceTypeIsSelectedForFiltering; vm.getAbsenceTypeStyle = getAbsenceTypeStyle; + vm.resetFilteringByAbsenceTypes = resetFilteringByAbsenceTypes; + vm.toggleFilteringByAbsenceType = toggleFilteringByAbsenceType; + + (function init () { + initWatchers(); + }()); + + /** + * Checks if the given absence type has a defined id or not. + * + * @param {Object} absenceType + * @return {Boolean} + */ + function checkIfAbsenceTypeIdIsDefined (absenceType) { + return !!absenceType.id; + } + + /** + * Checks if absence type is selected for filtering + * + * @param {String} absenceTypeId + * @return {Boolean} + */ + function checkIfAbsenceTypeIsSelectedForFiltering (absenceTypeId) { + var isIncludedInTheAbsenceTypeFilters = _.includes(vm.absenceTypesToFilterBy, absenceTypeId); + var noAbsenceTypesFiltersHaveBeenSelected = !vm.absenceTypesToFilterBy.length; + + return noAbsenceTypesFiltersHaveBeenSelected || isIncludedInTheAbsenceTypeFilters; + } /** - * Uses the absence type color to return border and background color styles + * Uses the absence type color to return background color style * * @param {AbsenceTypeInstance} absenceType * @return {Object} */ function getAbsenceTypeStyle (absenceType) { return { - backgroundColor: absenceType.color, - borderColor: absenceType.color + backgroundColor: absenceType.color }; } + + /** + * Watches the state of the absence types filter + */ + function initWatchers () { + $rootScope.$new().$watch(function () { + return vm.absenceTypesToFilterBy; + }, function (newValue, oldValue) { + if (newValue !== oldValue) { + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', + vm.absenceTypesToFilterBy); + } + }, true); + } + + /** + * Resets filtering by absence types + */ + function resetFilteringByAbsenceTypes () { + vm.absenceTypesToFilterBy = []; + } + + /** + * Toggles filtering by a given absence type + * + * @param {String} absenceTypeId + */ + function toggleFilteringByAbsenceType (absenceTypeId) { + var hasAlreadyBeenSelected = _.includes(vm.absenceTypesToFilterBy, absenceTypeId); + + if (hasAlreadyBeenSelected) { + _.remove(vm.absenceTypesToFilterBy, function (_absenceTypeId_) { + return absenceTypeId === _absenceTypeId_; + }); + } else { + vm.absenceTypesToFilterBy.push(absenceTypeId); + } + } } }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index b3d0068c8e7..eb8db37aa64 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -8,6 +8,7 @@ define([ ], function (_, moment, components) { components.component('leaveCalendarMonth', { bindings: { + showTheseContacts: '<', contacts: '<', contactIdsToReduceTo: '<', month: '<', @@ -46,7 +47,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 +75,8 @@ define([ */ function buildMonthStructure (dateMoment) { return { - index: dateMoment.month(), + index: dateMoment.format('YYYY-MM'), + month: dateMoment.month(), year: dateMoment.year(), name: dateMoment.format('MMMM'), loading: true, @@ -126,7 +128,10 @@ define([ */ function contactsList () { return !vm.showOnlyWithLeaveRequests ? vm.contacts : vm.contacts.filter(function (contact) { - return Object.keys(leaveRequests[contact.id] || {}).length; + var hasLeaveRequests = Object.keys(leaveRequests[contact.id] || {}).length; + var isAlwaysShown = _.includes(vm.showTheseContacts, contact.id); + + return hasLeaveRequests || isAlwaysShown; }); } @@ -195,6 +200,15 @@ define([ return indexedLeaveRequest; } + /** + * Flushes days data + */ + function flushDays () { + vm.month.days.forEach(function (day) { + day.contactsData = {}; + }); + } + /** * Get profile URL for the given contact id * @@ -204,6 +218,20 @@ define([ return CRM.url('civicrm/contact/view', { cid: contactId }); } + /** + * Returns a filtered list of leave requests with defined absence types. + * This is useful to only get leave requests the contact has access to. + * + * @param {Array} leaveRequests a list of leave requests. + * @return {Array} a filtered list of leave requests. + * @TODO this check should be performed on the back-end. + */ + function getLeaveRequestsWithDefinedAbsenceTypes (leaveRequests) { + return _.filter(leaveRequests, function (leaveRequest) { + return !!leaveRequest.type_id; + }); + } + /** * Returns leave requests additional attributes for UI * @@ -269,7 +297,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 +383,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'); })); @@ -424,16 +452,30 @@ define([ * @return {Promise} */ 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 }, + var isRequestFilteredByAbsenceType = vm.supportData.absenceTypesToFilterBy.length > 0; + var params = { + from_date: { to: vm.month.days[vm.month.days.length - 1].date + ' 23:59:59' }, + to_date: { from: vm.month.days[0].date + ' 00:00:00' }, status_id: { 'IN': leaveStatusesToBeDisplayed() }, contact_id: { 'IN': vm.contacts.map(function (contact) { return contact.id; })}, - type_id: { IN: _.pluck(vm.supportData.absenceTypes, 'id') } - }, null, null, null, false) + type_id: { 'IN': isRequestFilteredByAbsenceType + ? vm.supportData.absenceTypesToFilterBy + : _.pluck(vm.supportData.absenceTypes, 'id') } + }; + + flushDays(); + + return LeaveRequest.all(params, null, null, null, false) .then(function (leaveRequestsData) { + leaveRequests = {}; + + if (isRequestFilteredByAbsenceType) { + leaveRequestsData.list = getLeaveRequestsWithDefinedAbsenceTypes( + leaveRequestsData.list); + } + return indexLeaveRequests(leaveRequestsData.list); }); } @@ -561,24 +603,20 @@ 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(); } + /** + * Sorts leave requests by either date or AM/PM + * + * @param {Array} leaveRequests array of leave requests instances + */ function sortLeaveRequests (leaveRequests) { return _.sortBy(leaveRequests, function (leaveRequest) { return +moment(leaveRequest.from_date).format('X') + diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/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..73dc4393e8c 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,17 +1,17 @@ /* 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: '<', + displaySingleContact: ' * + * @param {String} status * @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/src/leave-absences/shared/components/leave-notification-badge.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-notification-badge.component.js deleted file mode 100644 index d08c8908f84..00000000000 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-notification-badge.component.js +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-env amd */ - -define([ - 'leave-absences/shared/modules/components' -], function (components) { - components.component('leaveNotificationBadge', { - bindings: { - filters: '<', - refreshCountEventName: '<' - }, - templateUrl: ['shared-settings', function (sharedSettings) { - return sharedSettings.sharedPathTpl + 'components/leave-notification-badge.html'; - }], - controllerAs: 'badge', - controller: LeaveNotificationBadgeController - }); - - LeaveNotificationBadgeController.$inject = ['$log', 'pubSub', 'LeaveRequest']; - - function LeaveNotificationBadgeController ($log, pubSub, LeaveRequest) { - $log.debug('Component: leave-notification-badge'); - - var vm = this; - vm.count = 0; - - (function init () { - initListeners(); - fetchCount(); - })(); - - /** - * Fetch count of leave requests which matches the filter - * - * @return {Promise} - */ - function fetchCount () { - return LeaveRequest.all(vm.filters, null, null, null, false) - .then(function (leaveRequests) { - vm.count = leaveRequests.list.length; - }); - } - - /** - * Initializes the event listeners - */ - function initListeners () { - pubSub.subscribe(vm.refreshCountEventName, fetchCount); - } - } -}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js index 609dec4a0ff..42eada5272f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js @@ -268,11 +268,10 @@ define([ * @param {Object} leaveRequest * @param {String} leaveType * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (event, leaveRequest, leaveType, selectedContactId, isSelfRecord) { + function openLeavePopup (event, leaveRequest, leaveType, selectedContactId) { event.stopPropagation(); - LeavePopup.openModal(leaveRequest, leaveType, selectedContactId, isSelfRecord); + LeavePopup.openModal(leaveRequest, leaveType, selectedContactId); } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js index 8f7cf0ec81e..cb7fd715143 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js @@ -8,7 +8,6 @@ define([ components.component('leaveRequestRecordActions', { bindings: { contactId: '<', - isSelfRecord: '<', selectedContactId: '<' }, templateUrl: ['shared-settings', function (sharedSettings) { @@ -39,7 +38,7 @@ define([ queryParams = beforeHashQueryParams.parse(); if (queryParams.openModal) { - openLeavePopup(null, queryParams.openModal, vm.selectedContactId, vm.isSelfRecord); + openLeavePopup(null, queryParams.openModal, vm.selectedContactId); } }()); @@ -49,9 +48,8 @@ define([ * @param {Object} leaveRequest * @param {String} leaveType * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (leaveRequest, leaveType, selectedContactId, isSelfRecord) { + function openLeavePopup (leaveRequest, leaveType, selectedContactId) { LeavePopup.openModal.apply(LeavePopup, arguments); } } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js index ad438c9f138..d57c23464d7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js @@ -22,8 +22,8 @@ define([ ]; function ManageLeaveRequestsController ($log, $q, $rootScope, Contact, - checkPermissions, OptionGroup, sharedSettings, AbsencePeriod, AbsenceType, - LeaveRequest, LeavePopup, pubSub) { + checkPermissions, OptionGroup, sharedSettings, AbsencePeriod, AbsenceType, + LeaveRequest, LeavePopup, pubSub) { 'use strict'; $log.debug('Component: manage-leave-requests'); @@ -403,9 +403,8 @@ define([ * @param {Object} leaveRequest * @param {String} leaveType * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (leaveRequest, leaveType, selectedContactId, isSelfRecord) { + function openLeavePopup (leaveRequest, leaveType, selectedContactId) { LeavePopup.openModal.apply(LeavePopup, arguments); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/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 f48b81b8c2f..22833255a0f 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. @@ -200,32 +232,43 @@ 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, { + expired: 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] + expired: results[1][absenceType.id], + approved: results[2][absenceType.id], + pending: results[3][absenceType.id] }; }); }); } /** - * 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} */ @@ -236,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')); - }); }); } @@ -417,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) @@ -447,21 +483,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 { - 'expiry_date': listEntry.toil_expiry_date, - 'type': { + return toils.map(function (toil) { + return _.assign({}, toil, { + expiry_date: toil.toil_expiry_date, + amount: toil.toil_to_accrue, + type: { 'label': 'Accrued TOIL' } - }; + }); }); }); } @@ -534,6 +573,7 @@ define([ loadEntitlements(), loadBalanceChanges() ]) + .then(processAbsenceTypes) .then(function () { vm.loading.content = false; }) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js index 852a7e022ad..f62756b8d26 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js @@ -95,12 +95,15 @@ define([ initAvailableStatusesMatrix(); initListeners(); - return $q.all([ - loadLoggedInContactId(), - initRoles(), - loadAbsencePeriods(), - loadStatuses() - ]) + return loadLoggedInContactId() + .then(initIsSelfRecord) + .then(function () { + return $q.all([ + initRoles(), + loadAbsencePeriods(), + loadStatuses() + ]); + }) .then(initRequest) .then(setModalMode) .then(setInitialAbsencePeriod) @@ -273,6 +276,17 @@ define([ }); } + /** + * Checks if request dates and times need to be reverted to the original state. + * They need to be reverted if the balance has not been changed for all requests + * except TOIL because its balance is independent from the dates and times. + * + * @return {Boolean} + */ + function checkIfRequestDatesAndTimesNeedToBeReverted () { + return getLeaveType() !== 'toil' && !vm.request.change_balance; + } + /** * Closes the error alerts if any */ @@ -509,6 +523,19 @@ define([ return $q.resolve(); } + /** + * Initializes the is self record property and sets it to true when + * on My Leave section and the user is editing their own request or creating + * a new one for themselves. + */ + function initIsSelfRecord () { + var isSectionMyLeave = $rootScope.section === 'my-leave'; + var isMyOwnRequest = +loggedInContactId === +_.get(vm, 'leaveRequest.contact_id'); + var isNewRequest = !_.get(vm, 'leaveRequest.id'); + + vm.isSelfRecord = isSectionMyLeave && (isMyOwnRequest || isNewRequest); + } + /** * Initialises listeners */ @@ -585,7 +612,7 @@ define([ // If the user is creating or editing their own leave, they will be // treated as a staff regardless of their actual role. - if ($rootScope.section === 'my-leave') { + if (vm.isSelfRecord) { return; } @@ -931,7 +958,7 @@ define([ return vm.request.isValid() .then(isBalanceChangeRecalculationNeeded() && checkIfBalanceChangeHasChanged) .then(decideIfBalanceChangeNeedsAForceRecalculation) - .then(!vm.request.change_balance && revertRequestOriginalDatesAndTimes) + .then(checkIfRequestDatesAndTimesNeedToBeReverted() && revertRequestOriginalDatesAndTimes) .then(submitAllTabs) .then(function () { return vm.isMode('edit') ? updateRequest() : createRequest(); 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..cd9be49e531 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js @@ -8,12 +8,14 @@ define([ 'common/services/notification.service' ], function (_, moment, controllers) { controllers.controller('LeaveCalendarAdminController', ['$log', '$q', - 'Contact', 'ContactInstance', 'Contract', 'notificationService', controller]); + 'Contact', 'ContactInstance', 'Contract', 'notificationService', + 'LeaveCalendarService', controller]); - function controller ($log, $q, Contact, ContactInstance, Contract, notification) { + function controller ($log, $q, Contact, ContactInstance, Contract, notification, + LeaveCalendarService) { $log.debug('LeaveCalendarAdminController'); - var contracts, vm; + var leaveCalendar, vm; return { /** @@ -22,15 +24,11 @@ define([ */ init: function (_vm_) { vm = _vm_; + leaveCalendar = LeaveCalendarService.init(vm); + vm.filters.userSettings.assignedTo = _.find(vm.filtersByAssignee, { type: 'me' }); vm.showContactDetailsLink = true; vm.showContactName = true; vm.showFilters = true; - vm.filtersByAssignee = [ - { type: 'me', label: 'People I approve' }, - { type: 'unassigned', label: 'People without approver' }, - { type: 'all', label: 'All' } - ]; - vm.filters.userSettings.assignedTo = vm.filtersByAssignee[0]; vm.showAdminFilteringHint = showAdminFilteringHint; @@ -38,31 +36,6 @@ define([ } }; - /** - * Get contact IDs filtered according to contracts that belong - * to the currently selected absence period - * - * @return {Promise} resolved to contacts list - */ - function loadContactIdsToReduceTo () { - return loadContracts() - .then(function (contracts) { - var contractsInAbsencePeriod = contracts.filter(function (contract) { - var details = contract.info.details; - - return ( - moment(details.period_start_date).isSameOrBefore(vm.selectedPeriod.end_date) && - (moment(details.period_end_date).isSameOrAfter(vm.selectedPeriod.start_date) || - !details.period_end_date) - ); - }); - - return _.uniq(contractsInAbsencePeriod.map(function (contract) { - return contract.contact_id; - })); - }); - } - /** * Returns the api of the sub-controller * @@ -76,89 +49,7 @@ define([ * @return {Promise} resolves as an {Array} */ loadContacts: function () { - var filterByAssignee = vm.filters.userSettings.assignedTo.type; - - return lookupContacts(filterByAssignee) - .then(function (contacts) { - vm.lookupContacts = contacts; - }) - .then(function () { - return (filterByAssignee !== 'me' - ? loadContactIdsToReduceTo() : $q.resolve(null)); - }) - .then(function (contactIdsToReduceTo) { - vm.contactIdsToReduceTo = contactIdsToReduceTo; - - return loadContacts(); - }) - .then(function (contacts) { - return contacts; - }); - } - }; - } - - /** - * Load all contacts with respect to filters - * - * @return {Promise} - */ - function loadContacts () { - return Contact.all(prepareContactFilters(), null, 'display_name') - .then(function (contacts) { - return contacts.list; - }); - } - - /** - * Load all contracts or retrieve them from cache - * - * @return {Promise} - */ - function loadContracts () { - return contracts ? $q.resolve(contracts) : Contract.all(); - } - - /** - * Returns the loading contacts promise depending on the - * filter by assignee chosen - * - * @param {String} filterByAssignee (me|unassigned|all) - * @return {Promise} resolved to a list of loaded contacts - */ - function lookupContacts (filterByAssignee) { - if (filterByAssignee === 'me') { - return Contact.leaveManagees(vm.contactId); - } else if (filterByAssignee === 'unassigned') { - return Contact.leaveManagees(undefined, { - unassigned: true - }); - } else { - return Contact.all().then(function (contacts) { - return contacts.list; - }); - } - } - - /** - * Returns the filter object for contacts api - * - * @TODO This function should be a part of a Filter component, which is planned for future - * - * @return {Object} - */ - function prepareContactFilters () { - return { - department: vm.filters.userSettings.department ? vm.filters.userSettings.department.value : null, - level_type: vm.filters.userSettings.level_type ? vm.filters.userSettings.level_type.value : null, - location: vm.filters.userSettings.location ? vm.filters.userSettings.location.value : null, - region: vm.filters.userSettings.region ? vm.filters.userSettings.region.value : null, - id: { - 'IN': vm.filters.userSettings.contact - ? [vm.filters.userSettings.contact.id] - : vm.lookupContacts.map(function (contact) { - return contact.id; - }) + return leaveCalendar.loadContactsForAdmin(); } }; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js index 279c60aef90..226646d3179 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js @@ -6,12 +6,12 @@ define([ 'leave-absences/shared/modules/controllers' ], function (_, moment, controllers) { controllers.controller('LeaveCalendarManagerController', ['$log', 'Contact', - 'ContactInstance', controller]); + 'ContactInstance', 'LeaveCalendarService', controller]); - function controller ($log, Contact, ContactInstance) { + function controller ($log, Contact, ContactInstance, LeaveCalendarService) { $log.debug('LeaveCalendarManagerController'); - var vm; + var leaveCalendar, vm; return { /** @@ -20,6 +20,8 @@ define([ */ init: function (_vm_) { vm = _vm_; + leaveCalendar = LeaveCalendarService.init(vm); + vm.filters.userSettings.assignedTo = _.find(vm.filtersByAssignee, { type: 'me' }); vm.showContactName = true; vm.showFilters = true; @@ -40,47 +42,7 @@ define([ * @return {Promise} resolves as an {Array} */ loadContacts: function () { - return ContactInstance.init({ id: vm.contactId }) - .leaveManagees() - .then(function (contacts) { - vm.lookupContacts = contacts; - }) - .then(loadContacts); - } - }; - } - - /** - * Load all contacts with respect to filters - * - * @return {Promise} - */ - function loadContacts () { - return Contact.all(prepareContactFilters(), null, 'display_name') - .then(function (contacts) { - return contacts.list; - }); - } - - /** - * Returns the filter object for contacts api - * - * @TODO This function should be a part of a Filter component, which is planned for future - * - * @return {Object} - */ - function prepareContactFilters () { - return { - department: vm.filters.userSettings.department ? vm.filters.userSettings.department.value : null, - level_type: vm.filters.userSettings.level_type ? vm.filters.userSettings.level_type.value : null, - location: vm.filters.userSettings.location ? vm.filters.userSettings.location.value : null, - region: vm.filters.userSettings.region ? vm.filters.userSettings.region.value : null, - id: { - 'IN': vm.filters.userSettings.contact - ? [vm.filters.userSettings.contact.id] - : vm.lookupContacts.map(function (contact) { - return contact.id; - }) + return leaveCalendar.loadLookUpAndFilteredContacts(); } }; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js index 4e364514ae5..f2ec7dd1a50 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js @@ -5,12 +5,13 @@ define([ 'common/moment', 'leave-absences/shared/modules/controllers' ], function (_, moment, controllers) { - controllers.controller('LeaveCalendarStaffController', ['$log', 'Contact', controller]); + controllers.controller('LeaveCalendarStaffController', ['$log', '$q', 'Contact', + 'LeaveCalendarService', controller]); - function controller ($log, Contact) { + function controller ($log, $q, Contact, LeaveCalendarService) { $log.debug('LeaveCalendarStaffController'); - var vm; + var leaveCalendar, vm; return { /** @@ -19,7 +20,16 @@ define([ */ init: function (_vm_) { vm = _vm_; - vm.filters.userSettings.contacts_with_leaves = false; + leaveCalendar = LeaveCalendarService.init(vm); + vm.filters.userSettings.contacts_with_leaves = true; + vm.showTheseContacts = [vm.contactId]; + vm.showContactName = true; + vm.showFilters = true; + + if (vm.displaySingleContact) { + vm.showFilters = false; + vm.lookupContacts = [{ id: vm.contactId }]; + } return api(); } @@ -33,20 +43,22 @@ define([ function api () { return { /** - * Returns the data of the current contact + * Returns the data of the current contact. * - * It returns it as a single-item array to comply with the standard - * structure leave-calendar expect to receive the contacts as + * It displays a list of contacts taking leave for the current selected + * period. If the display single contact property is set, it will only + * fetch the information for the contact provided. * * @return {Promise} resolves as an {Array} */ loadContacts: function () { - return Contact.all({ - id: { in: [vm.contactId] } - }) - .then(function (contacts) { - return contacts.list; - }); + if (vm.displaySingleContact) { + return leaveCalendar.loadFilteredContacts(); + } else if (vm.userPermissionRole === 'admin') { + return leaveCalendar.loadContactsForAdmin(); + } else { + return leaveCalendar.loadLookUpAndFilteredContacts(); + } } }; } 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..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 @@ -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} filters + * @return {Promise} Resolves with {Object} Balance Change data */ - balanceChangeByAbsenceType: function (contactId, periodId, statuses, isPublicHoliday) { - return leaveRequestAPI.balanceChangeByAbsenceType(contactId, periodId, statuses, isPublicHoliday); + balanceChangeByAbsenceType: function (filters) { + return leaveRequestAPI.balanceChangeByAbsenceType(this.processFilters(filters)); }, /** * 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/src/leave-absences/shared/services/leave-calendar.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js new file mode 100644 index 00000000000..77e191dca04 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js @@ -0,0 +1,209 @@ +/* eslint-env amd */ + +define([ + 'common/lodash', + 'common/moment', + 'leave-absences/shared/modules/services' +], function (_, moment, services) { + 'use strict'; + + services.factory('LeaveCalendarService', LeaveCalendarService); + + LeaveCalendarService.$inject = [ + '$log', '$q', 'Contact', 'Contract' + ]; + + function LeaveCalendarService ($log, $q, Contact, Contract) { + $log.debug('LeaveCalendarService'); + + /** + * Returns a list of common functions that are sahred between leave calendar + * sub controller. + * + * @param {Object} vm - the sub controller's view model. + * @return {Object} a collection of functions. + */ + function init (vm) { + var contracts; + var contactsLookUpStrategies = { + all: loadAllContacts, + me: loadMyManagees, + unassigned: loadAllUnassignedContacts + }; + + return { + loadContactsForAdmin: loadContactsForAdmin, + loadFilteredContacts: loadFilteredContacts, + loadLookUpContacts: loadLookUpContacts, + loadLookUpAndFilteredContacts: loadLookUpAndFilteredContacts + }; + + /** + * Returns a promise of all the contacts that can be used for look up + * against the ids to reduce by. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadAllContacts () { + return Contact.all().then(function (contacts) { + return contacts.list; + }); + } + + /** + * Returns a promise of all the contacts that are not assigned to another + * contact. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadAllUnassignedContacts () { + return Contact.leaveManagees(undefined, { + unassigned: true + }); + } + + /** + * Returns contacts depending on the selected assignation type (my assignees, + * unnassigned contacts, or all contacts) and stores a list of lookup contact + * ids to based on contacts with active contracts. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadContactsForAdmin () { + var filterByAssignee = _.get(vm, 'filters.userSettings.assignedTo.type', 'all'); + + return loadLookUpContacts() + .then(function (contacts) { + vm.lookupContacts = contacts; + + return $q.all([ + loadFilteredContacts(), + filterByAssignee !== 'me' + ? loadContactIdsToReduceTo() + : $q.resolve(null) + ]); + }) + .then(function (results) { + var contacts = results[0]; + + vm.contactIdsToReduceTo = results[1]; + + return contacts; + }); + } + + /** + * Returns a promise of a list of contact ids for contacts with contracts + * that are valid for the selected period's start and end dates. + * + * @return {Promise} resolves to an array of contact ids. + */ + function loadContactIdsToReduceTo () { + return loadContracts() + .then(function (contracts) { + var contractsInAbsencePeriod = contracts.filter(function (contract) { + var details = contract.info.details; + + return ( + moment(details.period_start_date).isSameOrBefore(vm.selectedPeriod.end_date) && + (moment(details.period_end_date).isSameOrAfter(vm.selectedPeriod.start_date) || + !details.period_end_date) + ); + }); + + return _.uniq(contractsInAbsencePeriod.map(function (contract) { + return contract.contact_id; + })); + }); + } + + /** + * Returns a list of all contracts. The result is cached locally. + * + * @return {Promise} resolves to an array of contracts. + */ + function loadContracts () { + return contracts ? $q.resolve(contracts) : Contract.all(); + } + + /** + * Returns a list of contacts reduced by the leave calendar filters and + * sorts them by the contact's display name. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadFilteredContacts () { + return Contact.all(prepareContactFilters(), null, 'display_name') + .then(function (contacts) { + return contacts.list; + }); + } + + /** + * Loads a list of contacts that can be used for look up. The list is based + * on the assignees type filter. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadLookUpContacts () { + var filterByAssignee = _.get(vm, 'filters.userSettings.assignedTo.type', 'all'); + var loadLookUpContactsMethod = contactsLookUpStrategies[filterByAssignee]; + + return loadLookUpContactsMethod(); + } + + /** + * Requests a list of look up contacts, stores them, and then returns + * a list of filtered contacts based on the previously stored look ups. + * + * @return {Promise} resolve to an array of contacts. + */ + function loadLookUpAndFilteredContacts () { + return loadLookUpContacts() + .then(function (lookupContacts) { + vm.lookupContacts = lookupContacts; + }) + .then(loadFilteredContacts); + } + + /** + * Returns a promise of all the contacts that are managed by the logged in + * user. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadMyManagees () { + return Contact.leaveManagees(vm.contactId); + } + + /** + * Returns a map of filters to pass to the Contact API. + * + * @return {Object} + */ + function prepareContactFilters () { + var filters = { + department: _.get(vm, 'filters.userSettings.department.value', null), + level_type: _.get(vm, 'filters.userSettings.level_type.value', null), + location: _.get(vm, 'filters.userSettings.location.value', null), + region: _.get(vm, 'filters.userSettings.region.value', null) + }; + var hasContactFilter = !!vm.filters.userSettings.contact; + var hasLookUpContactsFilter = _.isArray(vm.lookupContacts) && vm.lookupContacts.length; + var notRequestingAllContacts = _.get(vm, 'filters.userSettings.assignedTo.type', 'all') !== 'all'; + + if (hasContactFilter) { + filters.id = { 'IN': [vm.filters.userSettings.contact.id] }; + } else if (notRequestingAllContacts || hasLookUpContactsFilter) { + filters.id = { 'IN': _.pluck(vm.lookupContacts, 'id') }; + } + + return filters; + } + } + + return { + init: init + }; + } +}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js index 02088efcfb3..9bf45fe7648 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js @@ -47,10 +47,9 @@ define([ * @param {String} leaveType * @param {String} selectedContactId - Contact ID for the contact dropdown * when the manager/admin is opening the request - * @param {Boolean} isSelfRecord - True If the owner is opening the leave request * @param {Boolean} forceRecalculateBalanceChange optional */ - function openModal (leaveRequest, leaveType, selectedContactId, isSelfRecord, forceRecalculateBalanceChange) { + function openModal (leaveRequest, leaveType, selectedContactId, forceRecalculateBalanceChange) { $modal.open({ appendTo: $rootElement.children().eq(0), templateUrl: sharedSettings.sharedPathTpl + 'components/leave-request-popup/leave-request-popup.html', @@ -63,7 +62,6 @@ define([ leaveType: leaveType, leaveRequest: leaveRequest, selectedContactId: selectedContactId, - isSelfRecord: isSelfRecord, forceRecalculateBalanceChange: forceRecalculateBalanceChange }; }, @@ -88,7 +86,7 @@ define([ return checkPermissionBeforeOpeningPopup(leaveRequest) .then(function (hasPermission) { if (hasPermission) { - openModal(leaveRequest, leaveRequest.request_type, leaveRequest.contact_id, $rootScope.section === 'my-leave'); + openModal(leaveRequest, leaveRequest.request_type, leaveRequest.contact_id); } else { notification.error('Error', 'You dont have permission to see this leave request'); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/manager-notification-badge/component/manager-notification-badge.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/manager-notification-badge/component/manager-notification-badge.component.spec.js index 9d3320f66d0..efffec59320 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/manager-notification-badge/component/manager-notification-badge.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/manager-notification-badge/component/manager-notification-badge.component.spec.js @@ -30,11 +30,14 @@ define([ expect($log.debug).toHaveBeenCalled(); }); - it('sets the filter with manager id and status id', function () { - expect(controller.filters).toEqual({ - managed_by: window.Drupal.settings.currentCiviCRMUserId, - status_id: '3' - }); + it('sets the filter with manager id and status id for leave request', function () { + expect(controller.filters).toEqual([{ + apiName: 'LeaveRequest', + params: { + managed_by: window.Drupal.settings.currentCiviCRMUserId, + status_id: '3' + } + }]); }); function compileComponent () { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js new file mode 100644 index 00000000000..ae7f76f2d56 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js @@ -0,0 +1,79 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/lodash', + 'common/mocks/data/contact.data' +], function (_, contactsMockData) { + var $q, vm; + var LeaveCalendarService = jasmine.createSpyObj('LeaveCalendarService', ['init']); + var leaveCalendarInstance = jasmine.createSpyObj('leaveCalendarInstance', [ + 'loadContactsForAdmin', 'loadFilteredContacts', 'loadLookUpContacts', + 'loadLookUpAndFilteredContacts']); + var data = { + contactIdsToReduceTo: [_.uniqueId(), _.uniqueId(), _.uniqueId()], + filteredContacts: _.clone(contactsMockData.all.values.slice(0, 2)), + lookedUpContacts: _.clone(contactsMockData.all.values) + }; + + /** + * Simulates the init function of the leave calendar service. It stores the view + * model reference and returns a leave calendar instance. + * + * @param {Object} vm the view model containing the filters information, selected period, etc. + * @return {Object} a mock leave calendar instance. + */ + function LeaveCalendarServiceInit (_vm_) { + vm = _vm_; + + return leaveCalendarInstance; + } + + /** + * Simulates a call to the leave calendar instance's loadContactsForAdmin method. + * It assigns the contact ids to reduce to and the look up contacts to the previously provided + * view model. Finally, it returns a list of filtered contacts. + * + * @return {Promise} resolves to a list of contacts. + */ + function loadContactsForAdmin () { + vm.contactIdsToReduceTo = data.contactIdsToReduceTo; + + return loadLookUpAndFilteredContacts(); + } + + /** + * Simulates a call to the leave calendar instance's loadLookUpAndFilteredContacts + * method. It stores a list of look up contacts and returns a list contacts. + * + * @return {Promise} resolves to a list of contacts. + */ + function loadLookUpAndFilteredContacts () { + vm.lookupContacts = data.lookedUpContacts; + + return $q.resolve(data.filteredContacts); + } + + /** + * Initializes the leave calendar service mock for testing purposes. + * + * @param $q the angular $q service. + */ + function setup (_$q_) { + $q = _$q_; + LeaveCalendarService.init.and.callFake(LeaveCalendarServiceInit); + leaveCalendarInstance.loadContactsForAdmin.and.callFake(loadContactsForAdmin); + leaveCalendarInstance.loadFilteredContacts.and.returnValue($q.resolve( + data.filteredContacts)); + leaveCalendarInstance.loadLookUpContacts.and.returnValue($q.resolve( + data.lookedUpContacts)); + leaveCalendarInstance.loadLookUpAndFilteredContacts.and + .callFake(loadLookUpAndFilteredContacts); + } + + return { + data: data, + instance: leaveCalendarInstance, + service: LeaveCalendarService, + setup: setup + }; +}); 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..a9b70933bd3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js @@ -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); }); @@ -580,9 +582,9 @@ define([ $httpBackend.flush(); }); - it('calls the LeaveRequest.get endpoint', function () { + it('calls the LeaveRequest.get endpoint and does not cache results', function () { promise.then(function () { - expect(LeaveRequestAPI.sendGET).toHaveBeenCalledWith('LeaveRequest', 'getFull', { id: id }); + expect(LeaveRequestAPI.sendGET).toHaveBeenCalledWith('LeaveRequest', 'getFull', { id: id }, false); }); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js index 34e66b77bb4..287cdecddc7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js @@ -12,16 +12,15 @@ define([ 'use strict'; describe('leaveCalendarDay', function () { - var $componentController, $log, $rootScope, $timeout, absenceType, absenceTypes, + var $componentController, $log, $rootScope, absenceType, absenceTypes, calculationUnits, calculationUnitInDays, calculationUnitInHours, contactData, controller, dayTypes, LeavePopup, leaveRequest, leaveRequestAttributes; beforeEach(module('manager-leave')); - beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_, _$timeout_, _LeavePopup_) { + beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_, _LeavePopup_) { $componentController = _$componentController_; $log = _$log_; $rootScope = _$rootScope_; - $timeout = _$timeout_; absenceTypes = _.cloneDeep(absenceTypeData.all().values); contactData = {}; leaveRequest = _.cloneDeep(leaveRequestData.all().values[0]); @@ -46,6 +45,7 @@ define([ 'hrleaveandabsences_absence_type_calculation_unit', 'name', 'hours').value; + absenceTypes.push({ id: '', title: 'Leave' }); spyOn($log, 'debug'); compileComponent(); })); @@ -128,6 +128,46 @@ define([ }); }); + /** + * @NOTE this block tests an adhoc solution. + * @see /shared/components/leave-calendar-day.component.js + * resolveLeaveRequestCalculationUnit() + * @see PCHR-3774 + */ + describe('when absence type is a generic leave type', function () { + beforeEach(function () { + leaveRequest.type_id = ''; + }); + + describe('when leave request "from_date_type" is *not* empty', function () { + beforeEach(function () { + leaveRequest.from_date_type = '1'; + contactData.leaveRequests = [leaveRequest]; + + compileComponent(); + $rootScope.$digest(); + }); + + it('sets the "days" calculation unit', function () { + expect(leaveRequestAttributes.unit).toEqual('days'); + }); + }); + + describe('when leave request "from_date_type" is empty', function () { + beforeEach(function () { + delete leaveRequest.from_date_type; + contactData.leaveRequests = [leaveRequest]; + + compileComponent(); + $rootScope.$digest(); + }); + + it('sets the "hours" calculation unit', function () { + expect(leaveRequestAttributes.unit).toEqual('hours'); + }); + }); + }); + describe('Resolving the day\'s label', function () { var absenceType; @@ -239,90 +279,19 @@ define([ describe('openLeavePopup()', function () { var event; - var leaveRequest = { key: 'value' }; - var leaveType = 'some_leave_type'; - var selectedContactId = '101'; - var isSelfRecord = true; + var leaveRequest = { id: _.uniqueId() }; beforeEach(function () { event = jasmine.createSpyObj('event', ['stopPropagation']); - spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(event, leaveRequest, leaveType, selectedContactId, isSelfRecord); + spyOn(LeavePopup, 'openModalByID'); + controller.openLeavePopup(event, leaveRequest); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); - }); - - it('stops the event from propagating', function () { - expect(event.stopPropagation).toHaveBeenCalled(); + expect(LeavePopup.openModalByID).toHaveBeenCalledWith(leaveRequest.id); }); }); - // @TODO this should be moved to a decorator to uib-tooltip - describe('toggleTooltip()', function () { - it('has the tooltip hidden by default', function () { - expect(controller.tooltip.show).toBe(false); - }); - - describe('when user hovers the day cell', function () { - beforeEach(function () { - toggleTooltip('day_cell', true); - }); - - it('shows tooltip', function () { - expect(controller.tooltip.show).toBe(true); - }); - - describe('and then user unhovers the day cell', function () { - beforeEach(function () { - toggleTooltip('day_cell', false); - }); - - it('hides the tooltip', function () { - expect(controller.tooltip.show).toBe(false); - }); - }); - - describe('and then user unhovers the day cell but hovers the tooltip', function () { - beforeEach(function () { - toggleTooltip('day_cell', false); - toggleTooltip('tooltip', true); - }); - - it('leaves the tooltip shown', function () { - expect(controller.tooltip.show).toBe(true); - }); - - describe('and then user unhovers the tooltip', function () { - beforeEach(function () { - toggleTooltip('tooltip', false); - }); - - it('hides the tooltip', function () { - expect(controller.tooltip.show).toBe(false); - }); - }); - - describe('and then user unhovers the tooltip but hovers the day cell back', function () { - beforeEach(function () { - toggleTooltip('tooltip', false); - toggleTooltip('tooltip', true); - }); - - it('leaves the tooltip shown', function () { - expect(controller.tooltip.show).toBe(true); - }); - }); - }); - }); - - function toggleTooltip (sourceElement, isHovered) { - controller.toggleTooltip(sourceElement, isHovered); - $timeout.flush(); - } - }); - /** * Compiles and stores the component instance. Passes the contact and * support data to the controller. 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..5d3db391fda 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -8,12 +8,13 @@ define([ 'use strict'; describe('leaveCalendarLegend', function () { - var $componentController, $log, controller, mockedAbsenceTypes; + var $componentController, $log, $rootScope, controller, mockedAbsenceTypes; beforeEach(module('leave-absences.templates', 'leave-absences.components')); beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_) { $componentController = _$componentController_; $log = _$log_; + $rootScope = _$rootScope_; mockedAbsenceTypes = AbsenceTypeData.all().values; @@ -25,8 +26,46 @@ define([ expect($log.debug).toHaveBeenCalled(); }); - it('is collapsed', function () { - expect(controller.legendCollapsed).toBe(true); + it('is expanded', function () { + expect(controller.legendCollapsed).toBe(false); + }); + + it('has a list of "non working" day types badges', function () { + expect(controller.nonWorkingDayTypes).toEqual(jasmine.objectContaining([{ + label: jasmine.any(String), + cssClassSuffix: jasmine.any(String) + }])); + }); + + it('has a total of 3 "non working" day types badges', function () { + expect(controller.nonWorkingDayTypes.length).toBe(3); + }); + + it('has a list of "other" badges', function () { + expect(controller.otherBadges).toEqual(jasmine.objectContaining([{ + label: jasmine.any(String), + description: jasmine.any(String) + }])); + }); + + it('has a total of 5 "other" badges', function () { + expect(controller.otherBadges.length).toBe(5); + }); + + describe('checkIfAbsenceTypeIdIsDefined()', function () { + describe('when the absence type has an id defined', function () { + it('returns true', function () { + expect(controller.checkIfAbsenceTypeIdIsDefined({ id: _.uniqueId() })) + .toBe(true); + }); + }); + + describe('when the absence type has an empty id', function () { + it('returns false', function () { + expect(controller.checkIfAbsenceTypeIdIsDefined({ id: '' })) + .toBe(false); + }); + }); }); describe('getAbsenceTypeStyle()', function () { @@ -38,9 +77,78 @@ define([ }); it('uses the color of the given absence type to define border and background colors', function () { - expect(style).toEqual({ - backgroundColor: absenceType.color, - borderColor: absenceType.color + expect(style).toEqual({ backgroundColor: absenceType.color }); + }); + }); + + describe('absence types filter selection storage', function () { + beforeEach(function () { + spyOn($rootScope, '$emit'); + $rootScope.$digest(); + }); + + it('has all absence types selelected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(true); + }); + + describe('when an absence type is selected', function () { + beforeEach(function () { + controller.toggleFilteringByAbsenceType('1'); + $rootScope.$digest(); + }); + + it('has the absence type selected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + }); + + it('has other absence type not selected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(false); + }); + + it('notifies parent controller', function () { + expect($rootScope.$emit).toHaveBeenCalledWith( + 'LeaveCalendar::updateFiltersByAbsenceType', ['1']); + }); + + describe('when the same absence type is deselected', function () { + beforeEach(function () { + controller.toggleFilteringByAbsenceType('1'); + }); + + it('selects all absence types back', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(true); + }); + }); + + describe('when another absence type is selected', function () { + beforeEach(function () { + controller.toggleFilteringByAbsenceType('2'); + }); + + it('contains multiple absence types', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + }); + + it('leave other absence types not selected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(false); + }); + + describe('when absence types filter is reset', function () { + beforeEach(function () { + controller.resetFilteringByAbsenceTypes(); + }); + + it('selects all absence types back', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(true); + }); + }); }); }); }); 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..b1bdf017d82 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-02', 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 () { @@ -173,11 +173,23 @@ 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' } }) ); }); + + describe('when leave requests are reloaded', function () { + beforeEach(function () { + $rootScope.$emit('LeaveCalendar::showMonth', true); + }); + + it('flushes days data before populating it', function () { + expect(_.every(controller.month.days, function (day) { + return !Object.keys(day.contactsData).length; + })).toBe(true); + }); + }); }); describe('contacts', function () { @@ -188,7 +200,7 @@ contactIdsToReduceTo = randomContactIds; compileComponent(); - sendShowMonthsSignal(); + sendShowMonthSignal(); $rootScope.$digest(); }); @@ -203,7 +215,7 @@ contactIdsToReduceTo = null; compileComponent(); - sendShowMonthsSignal(); + sendShowMonthSignal(); $rootScope.$digest(); }); @@ -217,7 +229,7 @@ beforeEach(function () { controller.currentPage = 5; - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('resets it to 0', function () { @@ -230,7 +242,7 @@ Calendar.get.calls.reset(); LeaveRequest.all.calls.reset(); - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('does not fetch the data again', function () { @@ -244,7 +256,7 @@ Calendar.get.calls.reset(); LeaveRequest.all.calls.reset(); - sendShowMonthsSignal(true, true); + sendShowMonthSignal(true, true); }); it('fetches the data again', function () { @@ -252,23 +264,58 @@ expect(LeaveRequest.all).toHaveBeenCalled(); }); }); - }); - describe('when it is not included in the list of months to show', function () { - beforeEach(function () { - sendShowMonthsSignal(false); - }); + describe('filter by absence types', function () { + var filterValue = ['777', '888']; - it('hides itself', function () { - expect(controller.visible).toBe(false); - }); + beforeEach(function () { + controller.supportData.absenceTypesToFilterBy = filterValue; - it("does not load the contacts' work pattern calendars", function () { - expect(Calendar.get).not.toHaveBeenCalled(); - }); + $rootScope.$emit('LeaveCalendar::showMonth', true); + $rootScope.$digest(); + }); - it("does not load the contacts' leave requests", function () { - expect(LeaveRequest.all).not.toHaveBeenCalled(); + it('loads leave requests for only selected absence types', function () { + expect(LeaveRequest.all).toHaveBeenCalledWith(jasmine.objectContaining({ + type_id: { 'IN': filterValue } + }), null, null, null, false); + }); + + describe('displaying only public leave requests', function () { + var privateLeaveRequests; + var contactId = _.uniqueId(); + + beforeEach(function () { + var leaveRequests = _.cloneDeep(LeaveRequestData.all().values); + + leaveRequests.slice(0, 3).forEach(function (leaveRequest) { + leaveRequest.contact_id = contactId; + leaveRequest.type_id = ''; + + return leaveRequest; + }); + + LeaveRequest.all.and.returnValue($q.resolve({ + count: leaveRequests.length, + list: leaveRequests + })); + + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', filterValue); + $rootScope.$digest(); + + // Gets private requests assigned to the contact and stored in + // the calendar month controller: + privateLeaveRequests = _.chain(controller.month.days).pluck('contactsData') + .pluck(contactId).pluck('leaveRequests').flatten() + .filter(function (leaveRequest) { + return leaveRequest.type_id === ''; + }).value(); + }); + + it('is does not store information about private requests', function () { + expect(privateLeaveRequests.length).toBe(0); + }); + }); }); }); }); @@ -402,7 +449,7 @@ describe("day's data specific for each contact", function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('is indexed by contact id', function () { @@ -652,7 +699,7 @@ describe('event listeners', function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); describe('when a leave request is deleted', function () { @@ -838,7 +885,7 @@ describe('contactsList()', function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); describe('when show-only-with-leave-requests is set to false', function () { @@ -863,6 +910,22 @@ }); }); + describe('when show-only-with-leave-requests is set to true, but specific contacts must be shown even if they have no leave requests', function () { + var expectedContact; + + beforeEach(function () { + expectedContact = { id: _.uniqueId() }; + controller.showOnlyWithLeaveRequests = true; + controller.showTheseContacts = [expectedContact.id]; + + controller.contacts.push(expectedContact); + }); + + it('returns a list including the contacts that have no leave requests', function () { + expect(controller.contactsList()).toContain(expectedContact); + }); + }); + describe('when show-only-with-leave-requests is set to true and there is no leave request for contacts', function () { beforeEach(function () { LeaveRequest.all.and.callFake(function () { @@ -941,12 +1004,21 @@ * @param {Boolean} sendSignal - if to send a month signal or not */ function compileComponent (sendSignal) { + var absenceTypes = _.clone(AbsenceTypeData.all().values); + + // append generic absence type: + absenceTypes.push({ + id: '', + label: 'Leave' + }); + controller = $componentController('leaveCalendarMonth', null, { - contacts: ContactData.all.values, + contacts: _.clone(ContactData.all.values), month: february, period: period2016, supportData: { - absenceTypes: AbsenceTypeData.all().values, + absenceTypes: absenceTypes, + absenceTypesToFilterBy: [], dayTypes: OptionGroupData.getCollection('hrleaveandabsences_leave_request_day_type'), leaveRequestStatuses: OptionGroupData.getCollection('hrleaveandabsences_leave_request_status'), publicHolidays: publicHolidays @@ -954,7 +1026,7 @@ contactIdsToReduceTo: contactIdsToReduceTo }); - !!sendSignal && sendShowMonthsSignal(); + !!sendSignal && sendShowMonthSignal(); } /** @@ -973,18 +1045,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 013cf4c6b0e..4ebac68ce7c 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', @@ -29,6 +30,8 @@ id: CRM.vars.leaveAndAbsences.contactId, role: 'staff' }; + var currentYear = 2016; + var currentMonth = 1; beforeEach(module('common.mocks', 'leave-absences.templates', 'leave-absences.mocks', 'my-leave', function (_$provide_, _$controllerProvider_) { $provide = _$provide_; @@ -69,6 +72,7 @@ sharedSettings = _sharedSettings_; notification = _notificationService_; + spyOn(window, 'alert'); spyOn($log, 'debug'); spyOn($rootScope, '$emit').and.callThrough(); spyOn(AbsencePeriod, 'all'); @@ -93,7 +97,7 @@ // The mocked "work pattern calendar" and "leave request" data is made for // the month of February, so we pretend we are in February beforeAll(function () { - jasmine.clock().mockDate(new Date(2016, 1, 1)); + jasmine.clock().mockDate(new Date(currentYear, currentMonth, 1)); }); afterAll(function () { @@ -104,6 +108,22 @@ expect($log.debug).toHaveBeenCalled(); }); + it('has an array of filters by assignee', function () { + expect(controller.filtersByAssignee).toEqual([ + { type: 'me', label: 'People I approve' }, + { type: 'unassigned', label: 'People without approver' }, + { type: 'all', label: 'All' } + ]); + }); + + it('selects the assignee filter "All" by default', function () { + expect(controller.filters.userSettings.assignedTo.type).toBe('all'); + }); + + it('sets the user permission role to staff by default', function () { + expect(controller.userPermissionRole).toBe('staff'); + }); + describe('on init', function () { it('hides the loader for the whole page', function () { expect(controller.loading.page).toBe(false); @@ -122,6 +142,10 @@ ]); }); + it('hides filters on mobile viewport by default', function () { + expect(controller.filters.hideOnMobile).toBe(true); + }); + describe('after loading support data', function () { it('stores absence types', function () { expect(controller.supportData.absenceTypes.length).not.toBe(0); @@ -143,9 +167,63 @@ expect(controller.supportData.leaveRequestStatuses.length).not.toBe(0); }); + it('has default filter by absence type', function () { + expect(controller.supportData.absenceTypesToFilterBy).toEqual([]); + }); + it('stores toil amounts', function () { expect(controller.supportData.toilAmounts).toBeDefined(); }); + + it('appends a generic absence type that can be used for private leave requests', function () { + expect(controller.supportData.absenceTypes).toContain({ + id: '', + title: 'Leave', + color: '#4D4D68', + calculation_unit: _.chain(controller.supportData.calculationUnits) + .find({ name: 'days' }).get('value').value() + }); + }); + + describe('setting the user permission role', function () { + var scenarios = [ + { role: 'admin' }, + { role: 'manager' }, + { role: 'staff' } + ]; + + scenarios.forEach(function (scenario) { + describe('when the ' + scenario.role + ' opens the calendar', function () { + beforeEach(function () { + currentContact.role = scenario.role; + compileComponent(); + }); + + it('sets the user permission role equal to ' + scenario.role, function () { + expect(controller.userPermissionRole).toBe(scenario.role); + }); + }); + }); + }); + }); + + describe('filter by absence types', function () { + var filterValue = ['777', '888']; + + beforeEach(function () { + $rootScope.$emit.calls.reset(); + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', filterValue); + $rootScope.$digest(); + }); + + it('stores the filter value in the support data', function () { + expect(controller.supportData.absenceTypesToFilterBy) + .toEqual(filterValue); + }); + + it('refreshes the month data', function () { + expect($rootScope.$emit.calls.mostRecent().args[0]).toBe('LeaveCalendar::showMonth'); + }); }); describe('taking leave filter', function () { @@ -164,8 +242,8 @@ compileComponent(); }); - it('sets the filter to *off* by default', function () { - expect(controller.filters.userSettings.contacts_with_leaves).toBe(false); + it('sets the filter to *on* by default', function () { + expect(controller.filters.userSettings.contacts_with_leaves).toBe(true); }); }); }); @@ -243,111 +321,83 @@ }); }); - describe('additional contacts filter', function () { - describe('when the user is an admin', function () { + describe('month paginators', function () { + describe('when current month is the first month of the current absence period', function () { beforeEach(function () { - currentContact.role = 'admin'; + controller.selectedMonthIndex = _.first(controller.months).index; - compileComponent(); + $rootScope.$digest(); }); - describe('when filter by assignee is set to "Me"', function () { - beforeEach(function () { - selectFilterByAssignee('me'); - }); - - it('does *not* load additional contacts IDs to filter', function () { - expect(controller.contactIdsToReduceTo).toEqual(null); - }); + it('does not allow to paginate to the previous month', function () { + expect(controller.monthPaginatorsAvailability.previous).toBe(false); }); + }); - describe('when filter by assignee is *not* set to "Me"', function () { - beforeEach(function () { - selectFilterByAssignee('all'); - }); + describe('when current month is the last month of the current absence period', function () { + beforeEach(function () { + controller.selectedMonthIndex = _.last(controller.months).index; - it('loads additional contacts IDs to filter', function () { - expect(controller.contactIdsToReduceTo).toEqual(jasmine.any(Array)); - }); + $rootScope.$digest(); + }); + + it('does not allow to paginate to the previous month', function () { + expect(controller.monthPaginatorsAvailability.next).toBe(false); }); }); - describe('when the user is a manager', function () { + describe('when current month is neither the first nor the last month of the current absence period', function () { beforeEach(function () { - currentContact.role = 'manager'; + controller.selectedMonthIndex = controller.months[1].index; - compileComponent(); + $rootScope.$digest(); }); - it('does not load additional contacts IDs to filter', function () { - expect(controller.contactIdsToReduceTo).toBe(null); + it('allows to paginate the month in both directions', function () { + expect(controller.monthPaginatorsAvailability.previous).toBe(true); + expect(controller.monthPaginatorsAvailability.next).toBe(true); }); }); - - afterEach(function () { - currentContact.role = 'staff'; - }); }); - describe('filter by assignee', function () { - it('does *not* have such a filter for staff', function () { - expect(controller.filtersByAssignee).not.toBeDefined(); - }); - - describe('when user is Admin', function () { + describe('additional contacts filter', function () { + describe('when the user is an admin', function () { beforeEach(function () { currentContact.role = 'admin'; compileComponent(); }); - it('has the filter available', function () { - expect(controller.filtersByAssignee).toBeDefined(); - }); - describe('when filter by assignee is set to "Me"', function () { beforeEach(function () { selectFilterByAssignee('me'); }); - it('does *not* load contracts', function () { - expect(Contract.all).not.toHaveBeenCalledWith(); - }); - - it('loads only managees', function () { - expect(Contact.all).not.toHaveBeenCalledWith(); - expect(Contact.leaveManagees).toHaveBeenCalledWith(currentContact.id); + it('does *not* load additional contacts IDs to filter', function () { + expect(controller.contactIdsToReduceTo).toEqual(null); }); }); - describe('when filter by assignee is set to "Unassigned"', function () { + describe('when filter by assignee is *not* set to "Me"', function () { beforeEach(function () { - selectFilterByAssignee('unassigned'); - }); - - it('loads all contracts', function () { - expect(Contract.all).toHaveBeenCalledWith(); + selectFilterByAssignee('all'); }); - it('loads all contacts', function () { - expect(Contact.leaveManagees).toHaveBeenCalledWith(undefined, { - unassigned: true - }); + it('loads additional contacts IDs to filter', function () { + expect(controller.contactIdsToReduceTo).toEqual(jasmine.any(Array)); }); }); + }); - describe('when filter by assignee is set to "All"', function () { - beforeEach(function () { - selectFilterByAssignee('all'); - }); + describe('when the user is a manager', function () { + beforeEach(function () { + currentContact.role = 'manager'; - it('loads all contracts', function () { - expect(Contract.all).toHaveBeenCalledWith(); - }); + compileComponent(); + }); - it('loads all contacts', function () { - expect(Contact.all).toHaveBeenCalledWith(); - }); + it('does not load additional contacts IDs to filter', function () { + expect(controller.contactIdsToReduceTo).toBe(null); }); }); @@ -401,6 +451,20 @@ it('selects the current period', function () { expect(controller.selectedPeriod.current).toBe(true); }); + + describe('when absence period has been changed', function () { + beforeEach(function () { + controller.injectMonth = false; + controller.selectedPeriod = controller.absencePeriods[1]; + + controller.refresh('period'); + $rootScope.$digest(); + }); + + it('sets the first month from the period as the selected month', function () { + expect(controller.selectedMonth).toEqual(controller.months[0]); + }); + }); }); describe('months', function () { @@ -409,14 +473,24 @@ 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('sorts the list of the months', function () { + var months = controller.months; + var monthsSorted = _.sortBy(months, function (month) { + return new Date(month.moment); + }); + + expect(months).toEqual(monthsSorted); + }); + it('selects the current month', function () { - expect(controller.selectedMonths).toEqual([moment().month()]); + expect(controller.selectedMonth).toEqual(_.find(controller.months, + { index: moment().format('YYYY-MM') })); }); }); @@ -445,7 +519,25 @@ describe('filter option values', function () { var optionGroups = ['hrjc_region', 'hrjc_location', 'hrjc_level_type', 'hrjc_department']; - describe('when the filters should not be shown', function () { + describe('when the subcontroller does not show filters', function () { + beforeEach(function () { + var staffController = $controller('LeaveCalendarStaffController').init(controller); + + // mocks the staff sub controller to hide the filters: + $controllerProvider.register('LeaveCalendarStaffController', function () { + return { + init: function (vm) { + vm.showFilters = false; + + return staffController; + } + }; + }); + + OptionGroup.valuesOf.calls.reset(); + compileComponent(); + }); + it('does not fetch the filters option values', function () { expect(OptionGroup.valuesOf).not.toHaveBeenCalledWith(optionGroups); }); @@ -470,30 +562,13 @@ controller.injectMonths = true; }); - describe('when it has not yet received the "month injected" event from all the months', 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 () { + describe('when it has received the "month injected" event from the month', 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'); }); }); }); @@ -510,39 +585,99 @@ 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(); - }); + describe('canManageRequests()', function () { + var scenarios = [ + { role: 'admin', expectedResult: true }, + { role: 'manager', expectedResult: true }, + { role: 'staff', expectedResult: false } + ]; + + scenarios.forEach(function (scenario) { + describe('when the ' + scenario.role + ' checks if they can manage requests', function () { + beforeEach(function () { + currentContact.role = scenario.role; + compileComponent(); + }); - it('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) - ); + it('returns ' + scenario.expectedResult, function () { + expect(controller.canManageRequests()).toBe(scenario.expectedResult); + }); }); }); + }); - describe('when none of the months are selected', function () { - beforeEach(function () { - controller.selectedMonths = []; - $rootScope.$digest(); - }); + describe('navigateToCurrentMonth()', function () { + var currentAbsencePeriod; + + beforeEach(function () { + currentAbsencePeriod = _.find(controller.absencePeriods, + { current: true }); + controller.injectMonth = false; + controller.selectedPeriod = controller.absencePeriods[1]; + $rootScope.$digest(); + controller.selectedMonthIndex = + moment().year(currentYear).month(currentMonth).format('YYYY-MM'); + $rootScope.$digest(); + controller.navigateToCurrentMonth(); + $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)); + it('sets the selected month as the current month', function () { + expect(controller.selectedMonth.year).toBe(currentYear); + expect(controller.selectedMonth.month).toBe(currentMonth); + }); + + it('sets the current absence period', function () { + expect(controller.selectedPeriod).toEqual(currentAbsencePeriod); + }); + }); + + describe('paginateMonth()', function () { + var currentlySelectedMonth; + var tests = [ + { directions: 'previous', monthDifference: -1 }, + { directions: 'next', monthDifference: 1 }, + { directions: 'previous next previous next next', monthDifference: 1 }, + { directions: 'next previous next previous previous', monthDifference: -1 } + ]; + + beforeEach(function () { + currentlySelectedMonth = controller.selectedMonth.month; + // This is needed to test the paginators availability + controller.months = _.slice(controller.months, 0, 3); + }); + + tests.forEach(function (test) { + describe('when user paginates to the ' + test.directions + ' month', function () { + var directions; + + beforeEach(function () { + directions = test.directions.split(' '); + controller.injectMonth = false; + directions.forEach(function (direction) { + controller.paginateMonth(direction); + }); + $rootScope.$digest(); + simulateMonthWithSignal('injected', controller.months.length); + $rootScope.$digest(); + }); + + it('sets the selected month according to ' + test.directions + ' directions', function () { + expect(controller.selectedMonth.moment + .diff(currentlySelectedMonth.moment, 'month')).toBe(test.monthDifference); + }); + + it('does not allow to paginate further because the are no more months in the last mentioned direction', function () { + expect(controller.monthPaginatorsAvailability[_.last(directions)]).toBe(false); + }); + + it('refreshes the month component without force data reload', function () { + expect($rootScope.$emit).toHaveBeenCalledWith('LeaveCalendar::showMonth', false); + }); }); }); }); @@ -610,8 +745,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 () { @@ -624,10 +759,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); }); }); @@ -636,8 +768,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 () { @@ -650,10 +782,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); }); }); }); @@ -706,13 +835,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/js/angular/test/shared/components/leave-notification-badge.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-notification-badge.component.spec.js deleted file mode 100644 index 6ca694b9ba5..00000000000 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-notification-badge.component.spec.js +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-env amd, jasmine */ - -define([ - 'leave-absences/shared/components/leave-notification-badge.component' -], function () { - 'use strict'; - - describe('leaveNotificationBadge', function () { - var $componentController, $log, $rootScope, $q, controller, LeaveRequest, pubSub; - var apiReturnValue = { list: [1, 2, 3] }; - var eventName = 'some-event'; - var filters = { list: 'somevalue' }; - - beforeEach(module('leave-absences.templates', 'leave-absences.mocks', 'manager-leave')); - - beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_, _$q_, _pubSub_, _LeaveRequest_) { - $componentController = _$componentController_; - $log = _$log_; - $q = _$q_; - $rootScope = _$rootScope_; - pubSub = _pubSub_; - LeaveRequest = _LeaveRequest_; - - spyOn($log, 'debug'); - spyOn(LeaveRequest, 'all').and.returnValue($q.resolve(apiReturnValue)); - - compileComponent(); - })); - - it('is initialized', function () { - expect($log.debug).toHaveBeenCalled(); - }); - - describe('on init', function () { - it('sets the event name same as the passed attribute', function () { - expect(controller.refreshCountEventName).toBe(eventName); - }); - - it('calls Leave Request API to get the count', function () { - expect(LeaveRequest.all).toHaveBeenCalledWith(filters, null, null, null, false); - }); - - describe('after api returns with value', function () { - it('sets count to number of records returned', function () { - expect(controller.count).toBe(apiReturnValue.list.length); - }); - }); - }); - - describe('when event is fired', function () { - beforeEach(function () { - apiReturnValue = { list: [1, 2, 3, 4] }; - - pubSub.publish(eventName); - LeaveRequest.all.and.returnValue($q.resolve(apiReturnValue)); - }); - - it('calls Leave Request API to get the count', function () { - expect(LeaveRequest.all).toHaveBeenCalledWith(filters, null, null, null, false); - }); - - describe('after api returns with value', function () { - it('sets count to number of records returned', function () { - expect(controller.count).toBe(apiReturnValue.list.length); - }); - }); - }); - - function compileComponent () { - controller = $componentController('leaveNotificationBadge', null, { - refreshCountEventName: eventName, - filters: filters - }); - $rootScope.$digest(); - } - }); -}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js index 248c2a17f1c..845809c3d74 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js @@ -668,16 +668,15 @@ define([ var leaveRequest = { key: 'value' }; var leaveType = 'some_leave_type'; var selectedContactId = '101'; - var isSelfRecord = true; beforeEach(function () { event = jasmine.createSpyObj('event', ['stopPropagation']); spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(event, leaveRequest, leaveType, selectedContactId, isSelfRecord); + controller.openLeavePopup(event, leaveRequest, leaveType, selectedContactId); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId); }); it('stops the event from propagating', function () { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js index 7888174f7bb..5b152b07bfd 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js @@ -117,15 +117,14 @@ define([ var leaveRequest = { key: 'value' }; var leaveType = 'some_leave_type'; var selectedContactId = '101'; - var isSelfRecord = true; beforeEach(function () { spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(leaveRequest, leaveType, selectedContactId, isSelfRecord); + controller.openLeavePopup(leaveRequest, leaveType, selectedContactId); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js index 81d474b6505..acfb6854101 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js @@ -870,15 +870,14 @@ define([ var leaveRequest = { key: 'value' }; var leaveType = 'some_leave_type'; var selectedContactId = '101'; - var isSelfRecord = true; beforeEach(function () { spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(leaveRequest, leaveType, selectedContactId, isSelfRecord); + controller.openLeavePopup(leaveRequest, leaveType, selectedContactId); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/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 50189afe2e0..d8f18a7e322 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 () { @@ -264,10 +265,30 @@ }); }); + 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); - expect(args[2]).toEqual([ valueOfRequestStatus(sharedSettings.statusNames.approved) ]); + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(2)[0]; + + expect(args.statuses.in).toEqual([ + valueOfRequestStatus(sharedSettings.statusNames.approved) + ]); }); it('has stored them in each absence type', function () { @@ -282,9 +303,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(3)[0]; - expect(args[2]).toEqual([ + expect(args.statuses.in).toEqual([ valueOfRequestStatus(sharedSettings.statusNames.awaitingApproval), valueOfRequestStatus(sharedSettings.statusNames.moreInformationRequired) ]); @@ -364,10 +385,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(LeaveRequest.balanceChangeByAbsenceType).toHaveBeenCalledTimes(4); + expect(args.period_id).toEqual(newPeriod.id); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js index 671dff7d386..84bbced6b25 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js @@ -575,8 +575,8 @@ var leaveRequest = LeaveRequestInstance.init(mockData.findBy('status_id', status)); leaveRequest.contact_id = CRM.vars.leaveAndAbsences.contactId.toString(); - - initTestController({ leaveRequest: leaveRequest, isSelfRecord: true }); + $rootScope.section = 'my-leave'; + initTestController({ leaveRequest: leaveRequest }); expectedStatusValue = optionGroupMock.specificValue('hrleaveandabsences_leave_request_status', 'value', '3'); controller.balance.closing = 5; @@ -778,29 +778,56 @@ requestOriginalDates.to = controller.request.to_date; controller.newStatusOnSave = optionGroupMock.specificObject( 'hrleaveandabsences_leave_request_status', 'name', 'cancelled').value; - - controller.submit(); + controller.request.from_date = + moment(controller.request.from_date).add(15, 'minutes') + .format('YYYY-MM-DD HH:mm'); + controller.request.to_date = + moment(controller.request.to_date).add(15, 'minutes') + .format('YYYY-MM-DD HH:mm'); $rootScope.$digest(); }); - it('does not check the balance change', function () { - expect(LeaveRequestService.promptBalanceChangeRecalculation) - .not.toHaveBeenCalled(); - }); + describe('when request is not TOIL', function () { + beforeEach(function () { + controller.submit(); + $rootScope.$digest(); + }); - it('updates request', function () { - expect(controller.request.update).toHaveBeenCalled(); - }); + it('does not check the balance change', function () { + expect(LeaveRequestService.promptBalanceChangeRecalculation) + .not.toHaveBeenCalled(); + }); - it('tells the backend to not recalculate balance change', function () { - expect(controller.request.change_balance).toBeUndefined(); + it('updates request', function () { + expect(controller.request.update).toHaveBeenCalled(); + }); + + it('tells the backend to not recalculate balance change', function () { + expect(controller.request.change_balance).toBeUndefined(); + }); + + it('reverts to original request times', function () { + expect(moment(controller.request.from_date).format('HH:mm')).toEqual( + moment(requestOriginalDates.from).format('HH:mm')); + expect(moment(controller.request.to_date).format('HH:mm')).toEqual( + moment(requestOriginalDates.to).format('HH:mm')); + }); }); - it('reverts original request times', function () { - expect(moment(controller.request.from_date).format('HH:mm')).toEqual( - moment(requestOriginalDates.from).format('HH:mm')); - expect(moment(controller.request.to_date).format('HH:mm')).toEqual( - moment(requestOriginalDates.to).format('HH:mm')); + describe('when request is TOIL', function () { + beforeEach(function () { + controller.request.request_type = 'toil'; + + controller.submit(); + $rootScope.$digest(); + }); + + it('does not revert to original request times', function () { + expect(moment(controller.request.from_date).format('HH:mm')).not.toEqual( + moment(requestOriginalDates.from).format('HH:mm')); + expect(moment(controller.request.to_date).format('HH:mm')).not.toEqual( + moment(requestOriginalDates.to).format('HH:mm')); + }); }); }); @@ -1323,6 +1350,101 @@ } }); + describe('checking if it is a self record', function () { + var leaveRequest; + var loggedInContactId = CRM.vars.leaveAndAbsences.contactId.toString(); + var anotherContactId = _.uniqueId(); + + beforeEach(function () { + role = 'admin'; + leaveRequest = LeaveRequestInstance.init({}); + }); + + describe('when the section is My Leave', function () { + beforeEach(function () { + $rootScope.section = 'my-leave'; + }); + + describe('and the user is checking someone else\'s request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = anotherContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + + describe('and the user is checking my own request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = loggedInContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as true', function () { + expect(controller.isSelfRecord).toBe(true); + }); + }); + + describe('and the user creates a new request for themselves', function () { + beforeEach(function () { + initTestController({ mode: 'create', leaveRequest: leaveRequest }); + }); + + it('sets is self record as true', function () { + expect(controller.isSelfRecord).toBe(true); + }); + }); + }); + + describe('when the section is Manager Leave', function () { + beforeEach(function () { + $rootScope.section = 'manager-leave'; + }); + + describe('and the user is checking someone else\'s request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = anotherContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + + describe('and the user is checking my own request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = loggedInContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + + describe('and the user creates a new request for themselves', function () { + beforeEach(function () { + initTestController({ mode: 'create', leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + }); + }); + /** * Initialize the controller * diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js index 5488d3ca8f3..d019f3510cd 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js @@ -2,12 +2,13 @@ (function (CRM) { define([ + 'leave-absences/mocks/services/leave-calendar.service.mock', 'leave-absences/my-leave/app' - ], function () { + ], function (leaveCalendarServiceMock) { 'use strict'; describe('LeaveCalendarAdminController', function () { - var $controller, $log, $provide, $rootScope, Contact, controller; + var $controller, $log, $provide, $rootScope, Contact, controller, vm; var contactId = CRM.vars.leaveAndAbsences.contactId; beforeEach(module('my-leave', function (_$provide_) { @@ -16,9 +17,10 @@ beforeEach(inject(['api.contact.mock', function (ContactAPIMock) { $provide.value('api.contact', ContactAPIMock); + $provide.value('LeaveCalendarService', leaveCalendarServiceMock.service); }])); - beforeEach(inject(function (_$controller_, _$log_, _$rootScope_, _Contact_) { + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_, _Contact_) { $controller = _$controller_; $log = _$log_; $rootScope = _$rootScope_; @@ -26,6 +28,7 @@ spyOn($log, 'debug'); spyOn(Contact, 'all').and.callThrough(); + leaveCalendarServiceMock.setup($q); initController(); })); @@ -34,27 +37,49 @@ expect($log.debug).toHaveBeenCalled(); }); + it('initializes the leave calendar service', function () { + expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); + }); + + it('selects the assignee filter "People I approve" by default', function () { + expect(vm.filters.userSettings.assignedTo.type).toBe('me'); + }); + describe('loadContacts()', function () { - beforeEach(function () { - controller.loadContacts(); - $rootScope.$digest(); - }); + var contacts; + + describe('when loading all of the contacts', function () { + beforeEach(function (done) { + controller.loadContacts() + .then(function (_contacts_) { + contacts = _contacts_; + }) + .finally(done); + $rootScope.$digest(); + }); - it('filters the contact using the filters selected by the user', function () { - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('department'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('level_type'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('location'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('region'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('id'); + it('requests contacts by assignation type', function () { + expect(leaveCalendarServiceMock.instance.loadContactsForAdmin).toHaveBeenCalledWith(); + }); + + it('returns the list of filtered contacts', function () { + expect(contacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); + }); }); }); function initController () { - controller = $controller('LeaveCalendarAdminController').init({ + vm = { contactId: contactId, filters: { userSettings: {} }, - selectedPeriod: { start_date: '2016-01-01', end_date: '2016-12-31' } - }); + selectedPeriod: { start_date: '2016-01-01', end_date: '2016-12-31' }, + filtersByAssignee: [ + { type: 'me', label: 'People I approve' }, + { type: 'unassigned', label: 'People without approver' }, + { type: 'all', label: 'All' } + ] + }; + controller = $controller('LeaveCalendarAdminController').init(vm); } }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js index 1a1ac13d1b2..1f01a6af8c7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js @@ -2,12 +2,14 @@ (function (CRM) { define([ + 'leave-absences/mocks/services/leave-calendar.service.mock', 'leave-absences/my-leave/app' - ], function () { + ], function (leaveCalendarServiceMock) { 'use strict'; describe('LeaveCalendarManagerController', function () { - var $controller, $log, $provide, $rootScope, Contact, ContactInstance, controller, realContactInstance; + var $controller, $log, $provide, $rootScope, Contact, ContactInstance, controller, + realContactInstance, vm; var contactId = CRM.vars.leaveAndAbsences.contactId; beforeEach(module('my-leave', function (_$provide_) { @@ -16,15 +18,17 @@ beforeEach(inject(['api.contact.mock', function (ContactAPIMock) { $provide.value('api.contact', ContactAPIMock); + $provide.value('LeaveCalendarService', leaveCalendarServiceMock.service); }])); - beforeEach(inject(function (_$controller_, _$log_, _$rootScope_, _Contact_, _ContactInstance_) { + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_, _Contact_, _ContactInstance_) { $controller = _$controller_; $log = _$log_; $rootScope = _$rootScope_; Contact = _Contact_; ContactInstance = _ContactInstance_; + leaveCalendarServiceMock.setup($q); spyOn($log, 'debug'); spyOn(Contact, 'all').and.callThrough(); spyOnContactInstance(); @@ -36,22 +40,32 @@ expect($log.debug).toHaveBeenCalled(); }); + it('initializes the leave calendar service', function () { + expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); + }); + + it('selects the assignee filter "People I approve" by default', function () { + expect(vm.filters.userSettings.assignedTo.type).toBe('me'); + }); + describe('loadContacts()', function () { - beforeEach(function () { - controller.loadContacts(); + var contacts; + + beforeEach(function (done) { + controller.loadContacts() + .then(function (_contacts_) { + contacts = _contacts_; + }) + .finally(done); $rootScope.$digest(); }); - it('gets the leave managees of the current contact', function () { - expect(realContactInstance.leaveManagees).toHaveBeenCalled(); + it('requests the look up and filtered contacts', function () { + expect(leaveCalendarServiceMock.instance.loadLookUpAndFilteredContacts).toHaveBeenCalledWith(); }); - it('filters the contact using the filters selected by the user', function () { - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('department'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('level_type'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('location'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('region'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('id'); + it('returns the filtered contacts', function () { + expect(contacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); }); }); @@ -72,10 +86,16 @@ } function initController () { - controller = $controller('LeaveCalendarManagerController').init({ + vm = { contactId: contactId, - filters: { userSettings: {} } - }); + filters: { userSettings: {} }, + filtersByAssignee: [ + { type: 'me', label: 'People I approve' }, + { type: 'unassigned', label: 'People without approver' }, + { type: 'all', label: 'All' } + ] + }; + controller = $controller('LeaveCalendarManagerController').init(vm); } }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js index ab62da48daf..529f6edc164 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js @@ -2,23 +2,40 @@ (function (CRM) { define([ + 'common/lodash', + 'leave-absences/mocks/services/leave-calendar.service.mock', 'leave-absences/my-leave/app' - ], function () { + ], function (_, leaveCalendarServiceMock) { 'use strict'; describe('LeaveCalendarStaffController', function () { - var $controller, $log, Contact, controller; + var $controller, $log, $provide, $rootScope, canManageRequests, controller, + vm; var contactId = CRM.vars.leaveAndAbsences.contactId; - beforeEach(module('my-leave')); - beforeEach(inject(function (_$controller_, _$log_, _Contact_) { + beforeEach(module('my-leave', function (_$provide_) { + $provide = _$provide_; + })); + + beforeEach(inject(['api.contact.mock', function (ContactAPIMock) { + $provide.value('api.contact', ContactAPIMock); + $provide.value('LeaveCalendarService', leaveCalendarServiceMock.service); + }])); + + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_) { $controller = _$controller_; $log = _$log_; - Contact = _Contact_; + $rootScope = _$rootScope_; + canManageRequests = jasmine.createSpy('canManageRequests'); + vm = { + displaySingleContact: false, + contactId: contactId, + filters: { userSettings: {} }, + canManageRequests: canManageRequests + }; spyOn($log, 'debug'); - spyOn(Contact, 'all').and.callThrough(); - + leaveCalendarServiceMock.setup($q); initController(); })); @@ -26,23 +43,105 @@ expect($log.debug).toHaveBeenCalled(); }); + it('initializes the leave calendar service', function () { + expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); + }); + + it('displays the contact names', function () { + expect(vm.showContactName).toBe(true); + }); + + it('displays the contact filters', function () { + expect(vm.showFilters).toBe(true); + }); + + it('always displays the logged in contact even if they do not have requests for the selected period', function () { + expect(vm.showTheseContacts).toEqual([vm.contactId]); + }); + describe('loadContacts()', function () { - beforeEach(function () { - controller.loadContacts(); + var loadedContacts; + var scenarios = [ + { role: 'staff' }, + { role: 'manager' } + ]; + + scenarios.forEach(function (scenario) { + describe('as a ' + scenario.role, function () { + beforeEach(function (done) { + vm.userPermissionRole = scenario.role; + + controller.loadContacts() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('loads the look up and filtered contacts', function () { + expect(leaveCalendarServiceMock.instance.loadLookUpAndFilteredContacts).toHaveBeenCalledWith(); + }); + + it('returns the filtered contacts', function () { + expect(loadedContacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); + }); + }); }); - it('simply fetches the data of the current contact', function () { - expect(Contact.all).toHaveBeenCalledWith({ - id: { in: [contactId] } + describe('as an admin', function () { + beforeEach(function (done) { + vm.userPermissionRole = 'admin'; + controller.loadContacts() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('loads the filtered contacts', function () { + expect(leaveCalendarServiceMock.instance.loadContactsForAdmin).toHaveBeenCalledWith(); + }); + + it('returns the filtered contacts', function () { + expect(loadedContacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); + }); + }); + + describe('when the component should only display a single contact', function () { + beforeEach(function () { + vm.displaySingleContact = true; + vm.contactId = _.uniqueId(); + vm.lookupContacts = []; + initController(); + + controller.loadContacts(); + }); + + it('only loads the information for the given contact', function () { + expect(vm.lookupContacts).toEqual([{ id: vm.contactId }]); + expect(leaveCalendarServiceMock.instance.loadFilteredContacts).toHaveBeenCalledWith(); }); }); }); - function initController () { - controller = $controller('LeaveCalendarStaffController').init({ - contactId: contactId, - filters: { userSettings: {} } + describe('when the component only displays a single contact', function () { + beforeEach(function () { + vm.displaySingleContact = true; + initController(); }); + + it('does not show the filters', function () { + expect(vm.showFilters).toEqual(false); + }); + }); + + /** + * Initializes the leave calendar staff sub controller. + */ + function initController () { + controller = $controller('LeaveCalendarStaffController').init(vm); } }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/request-modal-details-toil.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/request-modal-details-toil.controller.spec.js index 85b5be7bdb3..8750d3b2664 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/request-modal-details-toil.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/request-modal-details-toil.controller.spec.js @@ -476,7 +476,7 @@ define([ requestModalHelper.setTestDates(controller, date2016, date2016To); $rootScope.$digest(); - expiryDate = new Date(controller.request.toil_expiry_date); + expiryDate = controller.convertDateFormatFromServer(controller.request.toil_expiry_date); originalToilToAccrue = optionGroupMock.specificObject('hrleaveandabsences_toil_amounts', 'name', 'quarter_day'); controller.request.toil_to_accrue = originalToilToAccrue.value; }); 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..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'; @@ -85,7 +86,7 @@ define([ var leaveRequestPromise; beforeEach(function () { - leaveRequestPromise = LeaveRequest.balanceChangeByAbsenceType(jasmine.any(String), jasmine.any(String)); + leaveRequestPromise = LeaveRequest.balanceChangeByAbsenceType(jasmine.any(Object)); }); afterEach(function () { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js new file mode 100644 index 00000000000..fb958ab0e61 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js @@ -0,0 +1,385 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/lodash', + 'common/mocks/data/contact.data', + 'common/mocks/data/contract.data', + 'common/models/contact', + 'common/models/contract', + 'common/services/hr-settings', + 'leave-absences/shared/services/leave-calendar.service' +], function (_, contactsMockData, contractsMockData) { + 'use strict'; + + describe('LeaveCalendarService', function () { + var $rootScope, Contact, contractApi, customContractValues, leaveCalendar, + loadedContacts, mockedContracts, vm; + var mockData = {}; + + beforeEach(module('common.mocks', 'common.models', 'common.services', + 'leave-absences.services', function ($provide) { + contractApi = { + all: jasmine.createSpy('all') + }; + customContractValues = [ + { contact_id: _.uniqueId(), period_start_date: '2000-01-01', period_end_date: '2000-01-31' }, + { contact_id: _.uniqueId(), period_start_date: '2000-02-01', period_end_date: '2000-02-29' }, + { contact_id: _.uniqueId(), period_start_date: '2000-03-01', period_end_date: '2000-03-31' } + ]; + mockedContracts = getMockedContracts(customContractValues); + + $provide.value('api.contract', contractApi); + }) + ); + + beforeEach(inject(function ($q, _$rootScope_, _Contact_, LeaveCalendarService) { + var contacts = contactsMockData.all.values; + $rootScope = _$rootScope_; + Contact = _Contact_; + mockData = { + lookupContacts: contacts, + contacts: contacts.slice(0, 2) + }; + vm = { + contactId: _.uniqueId(), + lookupContacts: [], + selectedPeriod: { start_date: '2000-01-01', end_date: '2000-03-31' }, + filters: { + userSettings: { + assignedTo: { type: 'all' }, + department: { value: _.uniqueId() }, + level_type: { value: _.uniqueId() }, + location: { value: _.uniqueId() }, + region: { value: _.uniqueId() } + } + } + }; + + spyOn(Contact, 'all').and.returnValue($q.resolve({ list: mockData.contacts })); + spyOn(Contact, 'leaveManagees').and.returnValue($q.resolve(mockData.lookupContacts)); + contractApi.all.and.returnValue($q.resolve(mockedContracts)); + + leaveCalendar = LeaveCalendarService.init(vm); + })); + + it('returns a leave calendar service instance', function () { + expect(leaveCalendar).toBeDefined(); + }); + + describe('loadContactsForAdmin()', function () { + describe('when loading all contacts', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'all'; + loadContactsForAdmin(done); + }); + + it('stores all look up contact', function () { + expect(vm.lookupContacts).toEqual(mockData.contacts); + }); + }); + + describe('when loading my assigned contacts', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'me'; + loadContactsForAdmin(done); + }); + + it('requests my assigned contacts', function () { + expect(Contact.leaveManagees).toHaveBeenCalledWith(vm.contactId); + }); + + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(mockData.contacts); + }); + + it('stores my assignees as look up contacts', function () { + expect(vm.lookupContacts).toEqual(mockData.lookupContacts); + }); + }); + + describe('when loading unassigned contacts', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'unassigned'; + + loadContactsForAdmin(done); + }); + + it('requests unassigned contacts', function () { + expect(Contact.leaveManagees) + .toHaveBeenCalledWith(undefined, { unassigned: true }); + }); + + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(mockData.contacts); + }); + + it('stores the unassigned contacts as look up contacts', function () { + expect(vm.lookupContacts).toEqual(mockData.lookupContacts); + }); + }); + + describe('populating the contact ids to reduce to', function () { + var expectedContactIdsToReduceTo; + + describe('when all the contracts are covered by the period filters', function () { + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id'); + vm.selectedPeriod = { + start_date: customContractValues[0].period_start_date, + end_date: customContractValues[2].period_end_date + }; + + loadContactsForAdmin(done); + }); + + it('returns all the contact ids with contracts within the selected period', function () { + expect(vm.contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + }); + + describe('when only some of the contracts are covered by the period filters', function () { + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id').slice(1, 3); + vm.selectedPeriod = { + start_date: customContractValues[1].period_start_date, + end_date: customContractValues[2].period_end_date + }; + + loadContactsForAdmin(done); + }); + + it('returns all the contact ids with contracts within the selected period', function () { + expect(vm.contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + }); + }); + }); + + describe('loadFilteredContacts()', function () { + var expectedFilters; + + beforeEach(function () { + expectedFilters = { + department: vm.filters.userSettings.department.value, + level_type: vm.filters.userSettings.level_type.value, + location: vm.filters.userSettings.location.value, + region: vm.filters.userSettings.region.value + }; + }); + + describe('general case', function () { + var filteredContacts; + + beforeEach(function (done) { + leaveCalendar.loadFilteredContacts() + .then(function (_filteredContacts_) { + filteredContacts = _filteredContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('requests a list of contacts using the selected filters and sorted by display name', function () { + expect(Contact.all).toHaveBeenCalledWith( + jasmine.objectContaining(expectedFilters), null, 'display_name'); + }); + + it('returns a list of filtered contacts', function () { + expect(filteredContacts).toEqual(mockData.contacts); + }); + }); + + describe('when the contact filter is selected', function () { + beforeEach(function () { + vm.filters.userSettings.contact = { id: _.uniqueId() }; + expectedFilters.id = { IN: [vm.filters.userSettings.contact.id] }; + + leaveCalendar.loadFilteredContacts(); + }); + + it('only returns the selected contact from the filter', function () { + expect(Contact.all).toHaveBeenCalledWith(expectedFilters, null, 'display_name'); + }); + }); + + describe('when there is a list of look up contacts', function () { + var expectedContactIds; + + beforeEach(function () { + vm.lookupContacts = _.shuffle(mockData.contacts).slice(0, 2); + expectedContactIds = _.pluck(vm.lookupContacts, 'id'); + expectedFilters.id = { IN: expectedContactIds }; + + leaveCalendar.loadFilteredContacts(); + }); + + it('only returns the contacts from the look up list', function () { + expect(Contact.all).toHaveBeenCalledWith(expectedFilters, null, 'display_name'); + }); + }); + + describe('when no contact or look up list are selected as filters', function () { + beforeEach(function () { + delete vm.lookupContacts; + delete vm.filters.userSettings.contact; + + leaveCalendar.loadFilteredContacts(); + }); + + it('does not filter the request by contact id', function () { + expect(Contact.all).not.toHaveBeenCalledWith(jasmine.objectContaining({ + id: { 'IN': jasmine.any(Array) } + }), null, 'display_name'); + }); + }); + + describe('when the asegnee filter is not "all" and the look up list is empty', function () { + beforeEach(function () { + vm.lookupContacts = []; + vm.filters.userSettings.assignedTo.type = 'me'; + + leaveCalendar.loadFilteredContacts(); + }); + + it('filters the request by look up contact ids', function () { + expect(Contact.all).toHaveBeenCalledWith(jasmine.objectContaining({ + id: { 'IN': vm.lookupContacts } + }), null, 'display_name'); + }); + }); + }); + + describe('loadLookUpAndFilteredContacts()', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'me'; + + leaveCalendar.loadLookUpAndFilteredContacts() + .then(function (contacts) { + loadedContacts = contacts; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('requests a list of look up contacts', function () { + expect(Contact.leaveManagees).toHaveBeenCalled(); + }); + + it('stores a list of look up contacts', function () { + expect(vm.lookupContacts).toEqual(mockData.lookupContacts); + }); + + it('requests a list of filtered contacts using the look ups', function () { + expect(Contact.all).toHaveBeenCalledWith(jasmine.objectContaining({ + id: { 'IN': _.pluck(vm.lookupContacts, 'id') } + }), null, 'display_name'); + }); + + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(mockData.contacts); + }); + }); + + describe('loadLookUpContacts()', function () { + describe('when the assignees filter value is "all"', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'all'; + + loadLookUpContacts(done); + }); + + it('requests all contacts', function () { + expect(Contact.all).toHaveBeenCalledWith(); + }); + + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(mockData.contacts); + }); + }); + + describe('when the assignees filter value is "me"', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'me'; + + loadLookUpContacts(done); + }); + + it('requests the logged in user\'s assigned contacts', function () { + expect(Contact.leaveManagees).toHaveBeenCalledWith(vm.contactId); + }); + + it('returns a list of the logged in user\'s assigned contacts', function () { + expect(loadedContacts).toEqual(mockData.lookupContacts); + }); + }); + + describe('when the assignees filter value is "unassigned"', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'unassigned'; + + loadLookUpContacts(done); + }); + + it('requests unassigned contacts', function () { + expect(Contact.leaveManagees) + .toHaveBeenCalledWith(undefined, { unassigned: true }); + }); + + it('returns a list of unassigned contacts', function () { + expect(loadedContacts).toEqual(mockData.lookupContacts); + }); + }); + }); + + /** + * Returns a list of mocked contracts with overriden values as provided by + * the custom contract values parameter. + * + * @param {Array} customContractValues a list of values to override for each contract. + * @return {Array} the list of overriden contracts. + */ + function getMockedContracts (customContractValues) { + var mockedContracts = _.cloneDeep(contractsMockData.all); + + mockedContracts.values = customContractValues.map(function (customContractValue, i) { + var contractData = mockedContracts.values[i] || {}; + + return _.extend(contractData, { + contact_id: customContractValue.contact_id, + 'info': { + details: { + period_start_date: customContractValue.period_start_date, + period_end_date: customContractValue.period_end_date + } + } + }); + }); + + return mockedContracts.values; + } + + /** + * Executes the load contacts for admin function and stores the result. + * + * @param {Function} done the jasmine done function to execute once the contact + * ids have been loaded. + */ + function loadContactsForAdmin (done) { + leaveCalendar.loadContactsForAdmin() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + } + + function loadLookUpContacts (done) { + leaveCalendar.loadLookUpContacts() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + } + }); +}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js index 68aea8ac628..8ab88dd2f8b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js @@ -44,7 +44,7 @@ define([ var forceRecalculateBalanceChange = true; beforeEach(function () { - LeavePopup.openModal(jasmine.any(String), jasmine.any(String), jasmine.any(String), jasmine.any(String), + LeavePopup.openModal(jasmine.any(String), jasmine.any(String), jasmine.any(String), forceRecalculateBalanceChange); $rootScope.$digest(); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index e4766859fd4..712707b8b64 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -1,9 +1,30 @@ -$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-generic-leave-background-color: #4d4d68; +$chr-leave-calendar-item-weekend-background-color: #c7cbd0; +$chr-leave-calendar-item-non-working-day-background-color: #41afcb; +$chr-leave-calendar-item-public-holiday-background-color: #8ec68a; +$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: 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__admin-filters-hint { + display: inline-block; + font-size: 20px; + vertical-align: middle; +} + +.chr_leave-calendar__admin-filters-select { + display: inline-block; + margin-right: 20px; + width: calc(100% - 50px); +} .chr_leave-calendar__dates-container { overflow-x: auto; @@ -15,12 +36,6 @@ $chr-leave-calendar-legend-size: 20px; } } -.chr_leave-calendar__names-container { - .chr_leave-calendar { - table-layout: fixed; - } -} - .chr_leave-calendar__day { font-size: $chr-leave-calendar-cell-font-size !important; line-height: 1.4em !important; @@ -40,6 +55,21 @@ $chr-leave-calendar-legend-size: 20px; color: $brand-primary !important; } +.chr_leave-calendar__day-container--type--non-working { + background-color: $chr-leave-calendar-item-non-working-day-background-color; +} + +.chr_leave-calendar__day-container--type--public-holiday { + background-color: $chr-leave-calendar-item-public-holiday-background-color; +} + +.chr_leave-calendar__day-container--type--weekend { + background-color: $chr-leave-calendar-item-weekend-background-color; +} + +.chr_leave-calendar__day-container { + height: 100%; +} .chr_leave-calendar__item { color: #fff; @@ -97,21 +127,9 @@ $chr-leave-calendar-legend-size: 20px; border-color: #eca67e; } -.chr_leave-calendar__day-container--type--non-working { - background-color: #41afcb; -} - -.chr_leave-calendar__day-container--type--public-holiday { - background-color: #8ec68a; -} - -.chr_leave-calendar__day-container--type--weekend { - background-color: #c7cbd0; -} - .chr_leave-calendar__item--alt { background-color: #fff !important; - border: 1px solid transparent; + border: 2px solid transparent; color: $gray-darker; } @@ -119,7 +137,8 @@ $chr-leave-calendar-legend-size: 20px; @include striped-background(rgba(255, 255, 255, 0.3)); &.chr_leave-calendar__item--alt { - @include striped-background(rgba(0, 0, 0, 0.1)); + @include striped-background($crm-white); + background-color: $crm-grayblue-dark !important; } } @@ -139,50 +158,106 @@ $chr-leave-calendar-legend-size: 20px; } } -.chr_leave-calendar__day-container { - 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__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: 0 $chr-leave-calendar-legend-badge-padding; + + &.chr_leave-calendar__legend__type-badge-weekend { + background-color: $chr-leave-calendar-item-weekend-background-color; } - .chr_leave-calendar__legend__entry { - margin-top: 10px; + &.chr_leave-calendar__legend__type-badge-non-working-day { + background-color: $chr-leave-calendar-item-non-working-day-background-color; + } - @media (min-width: $screen-sm-min) { - margin-top: 0; - } + &.chr_leave-calendar__legend__type-badge-public-holiday { + background-color: $chr-leave-calendar-item-public-holiday-background-color; } -} -.chr_leave-calendar__legend__entry { - overflow: auto; + &.chr_leave-calendar__legend__type-badge-generic-leave { + background-color: $chr-leave-calendar-item-generic-leave-background-color; + } - & + & { - margin-top: 10px; + &.chr_leave-calendar__legend__type-badge-selected, + &.chr_leave-calendar__legend__type-badge-clickable:hover { + border: solid 1px $crm-white; + border-radius: #{$chr-leave-calendar-legend-badge-border-radius + 2px}; + box-shadow: 0 0 1px 0 $chr-leave-calendar-item-weekend-background-color; + height: #{$chr-leave-calendar-legend-badge-size + 2px}; + margin-bottom: -1px; + margin-left: -2px; + margin-right: #{$chr-leave-calendar-legend-badge-margin - 1px}; + margin-top: #{$chr-leave-calendar-legend-badge-margin - 1px}; + padding-left: #{$chr-leave-calendar-legend-badge-padding + 1px}; } - > .chr_leave-calendar__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__type-badge-not-selected { + opacity: 0.4; } } -.chr_leave-calendar__legend__label { - display: inline-block; - font-size: $font-size-small; - margin-left: 26px; +.chr_leave-calendar__legend__reset-absence-types-filter { + color: $gray-darker; +} + +.chr_leave-calendar__legend__other-badge { + border: solid 1px $crm-grayblue-dark; + border-radius: $chr-leave-calendar-legend-badge-border-radius; + float: left; + font-size: $chr-leave-calendar-legend-badge-square-font-size; + font-weight: 600; + margin-right: $chr-leave-calendar-legend-badge-margin; + text-align: center; + width: $chr-leave-calendar-legend-badge-size; + + &.chr_leave-calendar__legend__other-badge-hours { + font-size: $chr-leave-calendar-legend-badge-square-hours-font-size; + font-weight: $badge-font-weight; + } + + &.chr_leave-calendar__legend__other-badge-requested { + @include striped-background(rgba(255, 255, 255, 0.6)); + background-color: $crm-grayblue-dark !important; + border: 0; + } } +.chr_leave-calendar__month-container { + margin: 0; + + > div { + padding: 0; + } +} .chr_leave-calendar__month-header { background: $panel-default-heading-bg; @@ -192,6 +267,21 @@ $chr-leave-calendar-legend-size: 20px; } } +.chr_leave-calendar__month-header__go-to-current-month { + text-transform: uppercase; +} + +.chr_leave-calendar__month-header__go-to-current-month, +.chr_leave-calendar__month-header__month-paginator { + margin-right: 10px; +} + +.chr_leave-calendar__month-header__month-paginator { + color: $gray-darker; + padding-left: 0; + padding-right: 0; +} + .chr_leave-calendar__name { font-size: $font-size-small !important; line-height: 100%; @@ -214,6 +304,12 @@ $chr-leave-calendar-legend-size: 20px; vertical-align: middle !important; } +.chr_leave-calendar__names-container { + .chr_leave-calendar { + table-layout: fixed; + } +} + .chr_leave-calendar__pagination { font-size: $chr-leave-calendar-cell-font-size; text-align: center; @@ -253,23 +349,3 @@ $chr-leave-calendar-legend-size: 20px; padding-right: 3px !important; } } - -.chr_leave-calendar__month-container { - margin: 0; - - > div { - padding: 0; - } -} - -.chr_leave-calendar__admin-filters-hint { - display: inline-block; - font-size: 20px; - vertical-align: middle; -} - -.chr_leave-calendar__admin-filters-select { - display: inline-block; - margin-right: 20px; - width: calc(100% - 50px); -} 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/scss/mixins/_gradients.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss index 23e156f3f70..74a24ddf024 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss @@ -1,3 +1,3 @@ @mixin striped-background($stripe-color) { - background: repeating-linear-gradient(45deg, $stripe-color, $stripe-color 5px, transparent 5px, transparent 8px); + background: repeating-linear-gradient(45deg, $stripe-color, $stripe-color 5px, transparent 5px, transparent 7px); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/sql/auto_install.sql b/uk.co.compucorp.civicrm.hrleaveandabsences/sql/auto_install.sql index 22fc0da4816..3356c8d3f13 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/sql/auto_install.sql +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/sql/auto_install.sql @@ -30,6 +30,7 @@ CREATE TABLE `civicrm_hrleaveandabsences_absence_type` ( `carry_forward_expiration_unit` int unsigned COMMENT 'The unit (months or days) of carry_forward_expiration_duration of this type default expiry', `is_sick` tinyint DEFAULT 0 COMMENT 'A flag which is used to determine if this Absence Type can be used for a Sickness Request', `calculation_unit` varchar(512) NOT NULL COMMENT 'One of the values of the Absence type calculation units option group', + `hide_label` tinyint DEFAULT 0 COMMENT 'This controls the visibility of the Leave Type label in the calendar and feeds.', PRIMARY KEY ( `id` ), UNIQUE INDEX `hrleaveandabsences_absence_type_title`(title) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl b/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl index d54e4e10f18..426bdb5e1bb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl @@ -49,6 +49,10 @@
    {$form.is_active.label}
    {$form.is_active.html}
    +
    +
    {$form.hide_label.label}
    +
    {$form.hide_label.html}
    +
    diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php new file mode 100644 index 00000000000..f488acec0e3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php @@ -0,0 +1,322 @@ + 0, + 'version' => 3, + 'count' => 6, + 'values' => + [ + 0 => + [ + 'id' => '17', + 'type_id' => '1', + 'contact_id' => '209', + 'status_id' => '6', + 'from_date' => '2016-01-30 00:00:00', + 'from_date_type' => '1', + 'to_date' => '2016-02-01 00:00:00', + 'to_date_type' => '1', + 'request_type' => 'leave', + 'is_deleted' => '0', + 'from_date_amount' => '0.00', + 'to_date_amount' => '0.00', + 'balance_change' => -1, + 'dates' => + [ + 0 => + [ + 'id' => '17', + 'date' => '2016-01-30', + ], + 1 => + [ + 'id' => '18', + 'date' => '2016-01-31', + ], + 2 => + [ + 'id' => '19', + 'date' => '2016-02-01', + ], + ], + ], + 1 => + [ + 'id' => '18', + 'type_id' => '1', + 'contact_id' => '204', + 'status_id' => '1', + 'from_date' => '2016-02-01 00:00:00', + 'from_date_type' => '1', + 'to_date' => '2016-02-03 00:00:00', + 'to_date_type' => '1', + 'request_type' => 'leave', + 'is_deleted' => '0', + 'from_date_amount' => '0.00', + 'to_date_amount' => '0.00', + 'balance_change' => -3, + 'dates' => + [ + 0 => + [ + 'id' => '20', + 'date' => '2016-02-01', + ], + 1 => + [ + 'id' => '21', + 'date' => '2016-02-02', + ], + 2 => + [ + 'id' => '22', + 'date' => '2016-02-03', + ], + ], + ], + 2 => + [ + 'id' => '24', + 'type_id' => '2', + 'contact_id' => '204', + 'status_id' => '1', + 'from_date' => '2016-10-20 00:00:00', + 'from_date_type' => '1', + 'to_date' => '2016-10-20 23:45:00', + 'to_date_type' => '1', + 'request_type' => 'leave', + 'is_deleted' => '0', + 'from_date_amount' => '0.00', + 'to_date_amount' => '0.00', + 'balance_change' => 1, + 'dates' => + [ + 0 => + [ + 'id' => '51', + 'date' => '2016-10-20', + ], + ], + ], + 3 => + [ + 'id' => '25', + 'type_id' => '2', + 'contact_id' => '208', + 'status_id' => '4', + 'from_date' => '2016-12-15 00:00:00', + 'from_date_type' => '1', + 'to_date' => '2016-12-15 23:45:00', + 'to_date_type' => '1', + 'request_type' => 'leave', + 'is_deleted' => '0', + 'from_date_amount' => '0.00', + 'to_date_amount' => '0.00', + 'balance_change' => 2, + 'dates' => + [ + 0 => + [ + 'id' => '52', + 'date' => '2016-12-15', + ], + ], + ], + 4 => + [ + 'id' => '27', + 'type_id' => '3', + 'contact_id' => '204', + 'status_id' => '6', + 'from_date' => '2017-02-01 00:00:00', + 'from_date_type' => '1', + 'to_date' => '2017-02-01 00:00:00', + 'to_date_type' => '1', + 'sickness_reason' => '2', + 'request_type' => 'sickness', + 'is_deleted' => '0', + 'from_date_amount' => '0.00', + 'to_date_amount' => '0.00', + 'balance_change' => -1, + 'dates' => + [ + 0 => + [ + 'id' => '63', + 'date' => '2017-02-01', + ], + ], + ], + 5 => + [ + 'id' => '28', + 'type_id' => '3', + 'contact_id' => '209', + 'status_id' => '6', + 'from_date' => '2017-02-01 00:00:00', + 'from_date_type' => '1', + 'to_date' => '2017-02-01 00:00:00', + 'to_date_type' => '1', + 'sickness_reason' => '2', + 'request_type' => 'sickness', + 'is_deleted' => '0', + 'from_date_amount' => '0.00', + 'to_date_amount' => '0.00', + 'balance_change' => -1, + 'dates' => + [ + 0 => + [ + 'id' => '63', + 'date' => '2017-02-01', + ], + ], + ], + ], + ]; + + public function testProcessWhenUserIsNotAnAdminUser() { + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + $this->setPermissions(); + //User has access to two leave contacts. + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([209, 208]); + $apiRequest = []; + $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); + + $sampleData = $this->sampleData; + $this->setAbsenceTypeID($sampleData, $absenceType->id); + + $results = $sampleData; + $expectedParams = $sampleData; + $expectedParams['values'][1]['from_date_amount'] = ''; + $expectedParams['values'][1]['to_date_amount'] = ''; + $expectedParams['values'][1]['balance_change'] = ''; + $expectedParams['values'][1]['type_id'] = ''; + $expectedParams['values'][2]['from_date_amount'] = ''; + $expectedParams['values'][2]['to_date_amount'] = ''; + $expectedParams['values'][2]['balance_change'] = ''; + $expectedParams['values'][2]['type_id'] = ''; + $expectedParams['values'][4]['sickness_reason'] = ''; + $expectedParams['values'][4]['from_date_amount'] = ''; + $expectedParams['values'][4]['to_date_amount'] = ''; + $expectedParams['values'][4]['balance_change'] = ''; + $expectedParams['values'][4]['type_id'] = ''; + $genericFieldHandler->process($results); + + $this->assertEquals($expectedParams, $results); + } + + + public function testProcessWhenUserIsAdmin() { + //Admin User + $this->setPermissions(['administer leave and absences']); + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([]); + $apiRequest = []; + $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); + + $results = $this->sampleData; + $expectedParams = $this->sampleData; + $genericFieldHandler->process($results); + + $this->assertEquals($expectedParams, $results); + $this->setPermissions(); + } + + public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEvenIfUserHasAccess() { + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + //User is Staff with ID of 204 and has full access to only his data + $this->setPermissions(); + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([204]); + $apiRequest = []; + $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); + + $sampleData = $this->sampleData; + $this->setAbsenceTypeID($sampleData, $absenceType->id); + unset($sampleData['values'][0], $sampleData['values'][3], $sampleData['values'][5]); + unset($sampleData['values'][1]['contact_id']); + unset($sampleData['values'][2]['contact_id']); + unset($sampleData['values'][4]['contact_id']); + + $results = $sampleData; + $expectedParams = $sampleData; + + //Staff will not be able to access all restricted fields for his + //records since the row identifier is absent + //The type_id field is not expected to be restricted to the user since the + //Absence type label is public which makes it accessible to user + $expectedParams['values'][1]['from_date_amount'] = ''; + $expectedParams['values'][1]['to_date_amount'] = ''; + $expectedParams['values'][1]['balance_change'] = ''; + $expectedParams['values'][2]['from_date_amount'] = ''; + $expectedParams['values'][2]['to_date_amount'] = ''; + $expectedParams['values'][2]['balance_change'] = ''; + $expectedParams['values'][4]['sickness_reason'] = ''; + $expectedParams['values'][4]['from_date_amount'] = ''; + $expectedParams['values'][4]['to_date_amount'] = ''; + $expectedParams['values'][4]['balance_change'] = ''; + + $genericFieldHandler->process($results); + + $this->assertEquals($expectedParams, $results); + } + + public function testTypeIDFieldIsNotHiddenWhenAbsenceTypeIsPublicAndUserDoesNotHaveAccessToTheLeaveContact() { + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + $this->setPermissions(); + //User has access to two leave contacts. + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([209, 208]); + $apiRequest = []; + $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); + + $sampleData = $this->sampleData; + $this->setAbsenceTypeID($sampleData, $absenceType->id); + + $results = $sampleData; + $expectedParams = $sampleData; + + // All other restricted fields are hidden for the user except the type ID field + // because the Absence type allows the label to be public. + $expectedParams['values'][1]['from_date_amount'] = ''; + $expectedParams['values'][1]['to_date_amount'] = ''; + $expectedParams['values'][1]['balance_change'] = ''; + $expectedParams['values'][2]['from_date_amount'] = ''; + $expectedParams['values'][2]['to_date_amount'] = ''; + $expectedParams['values'][2]['balance_change'] = ''; + $expectedParams['values'][4]['sickness_reason'] = ''; + $expectedParams['values'][4]['from_date_amount'] = ''; + $expectedParams['values'][4]['to_date_amount'] = ''; + $expectedParams['values'][4]['balance_change'] = ''; + $genericFieldHandler->process($results); + + $this->assertEquals($expectedParams, $results); + } + + private function setAbsenceTypeID(&$sampleData, $absenceTypeID) { + foreach ($sampleData['values'] as &$data) { + $data['type_id'] = $absenceTypeID; + } + } +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GetBreakDownFieldPermissionsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GetBreakDownFieldPermissionsTest.php new file mode 100644 index 00000000000..5cf6e407dc1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GetBreakDownFieldPermissionsTest.php @@ -0,0 +1,127 @@ + 0, + 'version' => 3, + 'count' => 3, + 'values' => + [ + 0 => + [ + 'id' => '17', + 'type' => 1, + 'label' => 'Test Label', + 'date' => '2016-01-30', + 'amount' => '0.00', + ], + 1 => + [ + 'id' => '18', + 'type' => 1, + 'label' => 'Test Label', + 'date' => '2016-01-31', + 'amount' => '0.00', + ], + 2 => + [ + 'id' => '19', + 'type' => 1, + 'label' => 'Test Label', + 'date' => '2016-02-01', + 'amount' => '-1.00', + ], + ], + ]; + + private function createLeaveRequest($contactID) { + return LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contactID, + 'type_id' => 1, + 'from_date' => CRM_Utils_Date::processDate('2016-01-30'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-01'), + 'status_id' => 1 + ]); + } + + public function testProcessForUserRequestingBreakDownForLeaveRequestContactHeHasAccessTo() { + //User with contact ID of 204 + $contactID = 204; + $this->setPermissions(); + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([$contactID]); + $leaveRequest = $this->createLeaveRequest($contactID); + $apiRequest = [ + 'params' => [ + 'leave_request_id' => $leaveRequest->id + ] + ]; + $getBreakDownFieldHandler = new GetBreakDownFieldHandler($apiRequest, $leaveRequestRights->reveal()); + $results = $this->sampleData; + $expectedParams = $this->sampleData; + + $getBreakDownFieldHandler->process($results); + $this->assertEquals($expectedParams, $results); + } + + public function testProcessForUserRequestingBreakdownForLeaveRequestContactHeDoesNotHaveAccessTo() { + //Staff with contact ID of 204 trying to access breakdown of staff with contact ID 206 + $contactID = 204; + $staffID = 206; + $this->setPermissions(); + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([$contactID]); + $leaveRequest = $this->createLeaveRequest($staffID); + $apiRequest = [ + 'params' => [ + 'leave_request_id' => $leaveRequest->id + ] + ]; + $getBreakDownFieldHandler = new GetBreakDownFieldHandler($apiRequest, $leaveRequestRights->reveal()); + $results = $this->sampleData; + $expectedParams = $this->sampleData; + $expectedParams['values'][0]['amount'] = ''; + $expectedParams['values'][1]['amount'] = ''; + $expectedParams['values'][2]['amount'] = ''; + + $getBreakDownFieldHandler->process($results); + $this->assertEquals($expectedParams, $results); + } + + public function testProcessForAdmin() { + //Admin can access all restricted fields for a contaxt + $this->setPermissions(['administer leave and absences']); + $staffID = 206; + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([]); + $leaveRequest = $this->createLeaveRequest($staffID); + $apiRequest = [ + 'params' => [ + 'leave_request_id' => $leaveRequest->id + ] + ]; + $getBreakDownFieldHandler = new GetBreakDownFieldHandler($apiRequest, $leaveRequestRights->reveal()); + $results = $this->sampleData; + $expectedParams = $this->sampleData; + + $getBreakDownFieldHandler->process($results); + $this->assertEquals($expectedParams, $results); + } + +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveBalanceChangeTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveBalanceChangeTest.php index 4dffab58a2c..29fb5e3e1a6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveBalanceChangeTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveBalanceChangeTest.php @@ -992,7 +992,7 @@ public function testTheLeaveRequestBreakdownReturnsOnlyTheLeaveBalanceChangesOfT // This balance change will not be returned because it's not linked to // the leave request LeaveBalanceChangeFabricator::fabricate([ - 'source_id' => 100, + 'source_id' => $expectedLeaveBalanceChanges[1]->source_id + 1, 'source_type' => LeaveBalanceChange::SOURCE_LEAVE_REQUEST_DAY, ]); 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, 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..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,54 @@ 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]); + + $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 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']); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php index a31f39d90ed..224527491f4 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php @@ -3,6 +3,7 @@ use CRM_HRLeaveAndAbsences_Service_LeaveRequestRights as LeaveRequestRightsService; use CRM_HRLeaveAndAbsences_BAO_LeaveRequest as LeaveRequest; use CRM_HRLeaveAndAbsences_Test_Fabricator_AbsenceType as AbsenceTypeFabricator; +use CRM_HRCore_Test_Fabricator_Contact as ContactFabricator; /** * Class CRM_HRLeaveAndAbsences_Service_LeaveRequestRightsTest @@ -281,6 +282,38 @@ public function testCanCancelToilWithPastDatesReturnsTrueWhenAbsenceTypeAllowsPa $this->assertTrue($leaveRightsService->canCancelToilWithPastDates($this->leaveContact, $absenceType->id)); } + public function testStaffMembersShouldOnlyHaveAccessToThemselves() { + $staffMember1 = ContactFabricator::fabricate(); + $staffMember2 = ContactFabricator::fabricate(); + $this->registerCurrentLoggedInContactInSession($staffMember1['id']); + $leaveRequestRightsService = $this->getLeaveRightsService(); + $accessibleContacts = $leaveRequestRightsService->getLeaveContactsCurrentUserHasAccessTo(); + $this->assertEquals([$staffMember1['id']], $accessibleContacts); + } + + public function testGetLeaveApproverShouldOnlyHaveAccessToManagees() { + $manager = ContactFabricator::fabricate(); + $staffMember1 = ContactFabricator::fabricate(); + $staffMember2 = ContactFabricator::fabricate(); + $this->registerCurrentLoggedInContactInSession($manager['id']); + $this->setContactAsLeaveApproverOf($manager, $staffMember2); + $leaveRequestRightsService = $this->getLeaveRightsService(); + $accessibleContacts = $leaveRequestRightsService->getLeaveContactsCurrentUserHasAccessTo(); + sort($accessibleContacts); + //The leave approver has access to his own contact id and that of his managees. + $this->assertEquals([$manager['id'],$staffMember2['id']], $accessibleContacts); + } + + public function testAdminShouldHaveAccessToAllContacts() { + $staffMember1 = ContactFabricator::fabricate(); + $staffMember2 = ContactFabricator::fabricate(); + $leaveRequestRightsService = $this->getLeaveRequestRightsForAdminAsCurrentUser(); + $accessibleContacts = $leaveRequestRightsService->getLeaveContactsCurrentUserHasAccessTo(); + //In reality, An admin user has access to all contacts, but an empty array is returned in + //this case. + $this->assertEquals([], $accessibleContacts); + } + private function getLeaveRightsService($isAdmin = FALSE, $isManager = FALSE) { $leaveManagerService = $this->createLeaveManagerServiceMock($isAdmin, $isManager); return new LeaveRequestRightsService($leaveManagerService); 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 828de26388d..02d94b06898 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -921,11 +921,11 @@ public function testGetFullShouldNotIncludeTheBalanceChangeIfTheReturnOptionIsNo $expectedValues = [ [ 'id' => $leaveRequest1->id, - 'dates' => $this->createLeaveRequestDatesArray($leaveRequest1) + 'dates' => $this->createLeaveRequestDatesArray($leaveRequest1), ], [ 'id' => $leaveRequest2->id, - 'dates' => $this->createLeaveRequestDatesArray($leaveRequest2) + 'dates' => $this->createLeaveRequestDatesArray($leaveRequest2), ] ]; @@ -971,11 +971,11 @@ public function testGetFullShouldNotIncludeTheDatesIfTheReturnOptionIsNotEmptyAn $expectedValues = [ [ 'id' => $leaveRequest1->id, - 'balance_change' => -1 + 'balance_change' => -1, ], [ 'id' => $leaveRequest2->id, - 'balance_change' => -1 + 'balance_change' => -1, ] ]; @@ -1036,17 +1036,17 @@ public function testGetFullIncludesBalanceChangesAndDatesForToilLeaveRequests() [ 'id' => $leaveRequest1->id, 'balance_change' => -1, - 'dates' => $this->createLeaveRequestDatesArray($leaveRequest1) + 'dates' => $this->createLeaveRequestDatesArray($leaveRequest1), ], [ 'id' => $leaveRequest2->id, 'balance_change' => -1, - 'dates' => $this->createLeaveRequestDatesArray($leaveRequest2) + 'dates' => $this->createLeaveRequestDatesArray($leaveRequest2), ], [ 'id' => $toilRequest->id, 'balance_change' => 8, - 'dates' => $this->createLeaveRequestDatesArray($toilRequest) + 'dates' => $this->createLeaveRequestDatesArray($toilRequest), ] ]; @@ -1092,11 +1092,11 @@ public function testGetFullShouldNotIncludeTheBalanceChangeAndDatesIfTheReturnOp $expectedValues = [ [ 'id' => $leaveRequest1->id, - 'type_id' => $this->absenceType->id + 'type_id' => $this->absenceType->id, ], [ 'id' => $leaveRequest2->id, - 'type_id' => $this->absenceType->id + 'type_id' => $this->absenceType->id, ] ]; @@ -1174,7 +1174,7 @@ public function testGetAndGetFullDoesNotReturnSoftDeletedLeaveRequests() { $this->assertNotEmpty($resultGetFull['values'][$leaveRequest3->id]); } - public function testGetAndGetFullReturnAllLeaveRequestsWhenTheExpiredParamIsNotPresent() { + public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredParamFalse() { $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 be included on + // the response since the "expired" flag is FALSE. $toilRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contract['contact_id'], 'type_id' => $type->id, @@ -1219,16 +1219,63 @@ public function testGetAndGetFullReturnAllLeaveRequestsWhenTheExpiredParamIsNotP '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(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]); } + 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 be included on + // the response since the "expired" flag is 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, @@ -1679,7 +1726,7 @@ public function testGetAndGetFullShouldReturnInformationForContactsWithActiveLea $this->assertNotEmpty($resultGetFull['values'][$leaveRequest1->id]); } - public function testGetAndGetFullShouldReturnEmptyResponseForALoggedInLeaveManagerWhenUnassignedIsTrue() { + public function testGetAndGetFullHidesRestrictedFieldsForUnAssignedContactForLoggedInLeaveManagerWhenUnassignedIsTrue() { $manager1 = ContactFabricator::fabricate(); $this->registerCurrentLoggedInContactInSession($manager1['id']); CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; @@ -1702,6 +1749,11 @@ public function testGetAndGetFullShouldReturnEmptyResponseForALoggedInLeaveManag ['period_start_date' => '2015-10-01'] ); + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + // Set Leave Approvers for staffMembers 1 and 2. // staffMember2 does not have an active leave manager relationship $this->setContactAsLeaveApproverOf($manager1, $staffMember1, null, null, true, 'has Leaves Approved By'); @@ -1709,7 +1761,7 @@ public function testGetAndGetFullShouldReturnEmptyResponseForALoggedInLeaveManag $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember1['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-01-01'), 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), 'from_date_type' => 1, @@ -1718,23 +1770,29 @@ public function testGetAndGetFullShouldReturnEmptyResponseForALoggedInLeaveManag $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember2['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-01-05'), 'to_date' => CRM_Utils_Date::processDate('2016-01-05'), 'from_date_type' => 1, - 'to_date_type' => 1 + '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('', $contactData['type_id']); + + $this->assertEquals(1, $resultGetFull['count']); + $contactData = array_shift($resultGetFull['values']); + $this->assertEquals($staffMember2['id'], $contactData['contact_id']); + $this->assertEquals('', $contactData['type_id']); + $this->assertEquals('', $contactData['balance_change']); } public function testGetAndGetFullShouldReturnResultsForContactsManagedByLoggedInLeaveManagerWhenUnassignedIsFalse() { @@ -3590,7 +3648,7 @@ public function testDeleteCommentShouldThrowAnExceptionIfCommentIDIsMissing() { civicrm_api3('LeaveRequest', 'deletecomment', []); } - public function testGetAndGetFullReturnsOnlyDataLinkedToLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { + public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOtherThanLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); @@ -3613,36 +3671,123 @@ public function testGetAndGetFullReturnsOnlyDataLinkedToLoggedInUserWhenUserIsNo ] ); - LeaveRequestFabricator::fabricateWithoutValidation([ + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact1['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), 'from_date_type' => 1, 'to_date_type' => 1, - 'status_id' => 1 + 'status_id' => 1, ], true); - LeaveRequestFabricator::fabricateWithoutValidation([ + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact2['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), 'from_date_type' => 1, 'to_date_type' => 1, - 'status_id' => 1 + 'status_id' => 1, ], true); + //The logged in contact would be able to see results for the other contact too since the Leave ACL + //allows it but would not be able to view field values for restricted fields. $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($leaveRequest1->type_id, $result['values'][0]['type_id']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals('', $result['values'][1]['type_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($leaveRequest1->type_id, $result['values'][0]['type_id']); + $this->assertNotEmpty($result['values'][0]['balance_change']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals('', $result['values'][1]['type_id']); + $this->assertEquals('', $result['values'][1]['balance_change']); } - public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUserManagesWhenLoggedInUserIsALeaveApprover() { + public function testGetAndGetFullShouldNotHideTypeIDFieldValueForContactsOtherThanLoggedInUserWhenUserIsStaffAndAbsenceTypeLabelIsPublic() { + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($contact1['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + //The type ID field will be visible since the Absence type label is set as public + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + //The logged in contact would be able to see results for the other contact too since the Leave ACL + //allows it and would not be able to view field values for restricted fields but would view the + //type_id field for other users since the Absence type label is public + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + $this->assertNotEmpty($result['values'][0]['balance_change']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + $this->assertEquals('', $result['values'][1]['balance_change']); + } + + public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLoggedInUserIsALeaveApprover() { $manager = ContactFabricator::fabricate(); $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); @@ -3668,50 +3813,64 @@ public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUser ] ); - LeaveRequestFabricator::fabricateWithoutValidation([ + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact1['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), 'from_date_type' => 1, 'to_date_type' => 1, - 'status_id' => 1 + 'status_id' => 1, ], true); - LeaveRequestFabricator::fabricateWithoutValidation([ + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact2['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), 'from_date_type' => 1, 'to_date_type' => 1, - 'status_id' => 1 + 'status_id' => 1, ], true); + //Results will be returned for both leave contacts even though contact1 is not being managed by + //the logged in manager but manager will not be able to view restricted field values for the contact + //which he's not a leave approver for. $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); - $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); + $this->assertEquals(2, $result['count']); + + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals('', $result['values'][0]['type_id']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); - $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); - } + $this->assertEquals(2, $result['count']); - public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUserManagesWhenLoggedInUserIsALeaveApproverWithOneOfTheAvailableRelationships() { - $this->setLeaveApproverRelationshipTypes([ - 'has leaves approved by', - 'has things managed by', - ]); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals('', $result['values'][0]['type_id']); + $this->assertEquals('', $result['values'][0]['balance_change']); - $manager1 = ContactFabricator::fabricate(); - $manager2 = ContactFabricator::fabricate(); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + $this->assertNotEmpty($result['values'][1]['balance_change']); + } + + public function testGetAndGetFullShouldNotHideTypeIDFieldValueForNonManageesWhenLoggedInUserIsALeaveApproverAndAbsenceTypeLabelIsPublic() { + $manager = 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'); + $this->registerCurrentLoggedInContactInSession($manager['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + $this->setContactAsLeaveApproverOf($manager, $contact2); HRJobContractFabricator::fabricate( [ 'contact_id' => $contact2['id'] ], @@ -3729,49 +3888,162 @@ public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUser ] ); + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + //Results will be returned for both leave contacts even though contact1 is not being managed by + //the logged in manager but manager will not be able to view restricted field values for the contact + //which he's not a leave approver for but would view the type_id field for other non managees since the + // Absence type label is public + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + $this->assertEquals('', $result['values'][0]['balance_change']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + $this->assertNotEmpty($result['values'][1]['balance_change']); + } + + public function testGetAndGetFullShouldNotReturnToilRequestsForContactsOtherThanLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($contact1['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + HRJobContractFabricator::fabricate( - [ 'contact_id' => $contact3['id'] ], + [ 'contact_id' => $contact1['id'] ], [ 'period_start_date' => '2016-01-01', 'period_end_date' => '2016-10-01' ] ); - $leaveRequestContact1 = LeaveRequestFabricator::fabricateWithoutValidation([ + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact1['id'], 'type_id' => $this->absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), 'from_date_type' => 1, 'to_date_type' => 1, - 'status_id' => 1 - ], true); + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); - LeaveRequestFabricator::fabricateWithoutValidation([ + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact2['id'], 'type_id' => $this->absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), 'from_date_type' => 1, 'to_date_type' => 1, - 'status_id' => 1 - ], true); + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + //The logged in contact would be not be able to view the other contact's TOIL request + //He can only view his own TOIL request + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(1, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(1, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + } + + public function testGetAndGetFullShouldNotReturnToilRequestsForNonManageesWhenLoggedInUserIsALeaveApprover() { + $manager = ContactFabricator::fabricate(); + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($manager['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + $this->setContactAsLeaveApproverOf($manager, $contact2); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); - $leaveRequestContact3 = LeaveRequestFabricator::fabricateWithoutValidation([ - 'contact_id' => $contact3['id'], + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['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' => 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); + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); - CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); - // Manager1 only manages contact2 (though the 'has things managed by' relationship), - // so only contact2 leave requests will be returned - $this->registerCurrentLoggedInContactInSession($manager1['id']); + //Results will be not be returned for contact1 since contact one is not a managee of the leave + //approver $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); $this->assertEquals(1, $result['count']); $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); @@ -3779,21 +4051,63 @@ public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUser $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 testGetAndGetFullShouldReturnToilRequestsForAllContactsWhenLoggedInUserIsAnAdmin() { + $admin = ContactFabricator::fabricate(); + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($admin['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API', 'view all contacts']; + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); - // 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]); + $result = civicrm_api3('LeaveRequest', 'get', ['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($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() { @@ -4131,7 +4445,7 @@ public function testGetBreakdownShouldReturnEmptyIfTheGiveLeaveRequestDoesnExist $this->assertEmpty($result['values']); } - public function testGetBreakdownShouldReturnEmptyIfAStaffMemberTriesToGetTheBreakdownOfAnotherStaffMember() { + public function testGetBreakdownHidesRestrictedFieldValuesOfAnotherStaffMemberWhenAStaffMemberTriesAccessingIt() { $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); @@ -4151,13 +4465,16 @@ public function testGetBreakdownShouldReturnEmptyIfAStaffMemberTriesToGetTheBrea $this->registerCurrentLoggedInContactInSession($contact1['id']); - // Contact1 should not be able to get the breakdown for a leave request of - // Contact2 + // Contact1 should also be able to get the breakdown for a leave request of + // Contact2 but not restricted fields $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ 'leave_request_id' => $leaveRequest->id, 'check_permissions' => true, ]); - $this->assertEmpty($result['values']); + $this->assertCount(3, $result['values']); + $this->assertEquals('', $result['values'][0]['amount']); + $this->assertEquals('', $result['values'][1]['amount']); + $this->assertEquals('', $result['values'][2]['amount']); $this->registerCurrentLoggedInContactInSession($contact2['id']); @@ -4167,49 +4484,34 @@ public function testGetBreakdownShouldReturnEmptyIfAStaffMemberTriesToGetTheBrea 'check_permissions' => true, ]); $this->assertCount(3, $result['values']); + $this->assertNotEmpty($result['values'][0]['amount']); + $this->assertNotEmpty($result['values'][1]['amount']); + $this->assertNotEmpty($result['values'][2]['amount']); } - public function testGetBreakdownShouldReturnEmptyIfAManagerTriesToGetTheBreakdownOfSomeoneWhoTheyDontManage() { + public function testGetBreakdownHidesRestrictedFieldValuesForNonManageesOfALeaveManager() { $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'), @@ -4220,11 +4522,25 @@ public function testGetBreakdownShouldNotReturnEmptyIfAManagerTriesToGetTheBreak $this->setContactAsLeaveApproverOf($manager, $contact2); $this->setPermissions(['access AJAX API']); + //Contact one is not among the managees of the manager so the restricted fields + //values will be hidden for the manager. $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ - 'leave_request_id' => $leaveRequest->id, + 'leave_request_id' => $leaveRequest1->id, 'check_permissions' => true, ]); $this->assertCount(3, $result['values']); + $this->assertEquals('', $result['values'][0]['amount']); + $this->assertEquals('', $result['values'][1]['amount']); + $this->assertEquals('', $result['values'][2]['amount']); + + $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ + 'leave_request_id' => $leaveRequest2->id, + 'check_permissions' => true, + ]); + $this->assertCount(3, $result['values']); + $this->assertNotEmpty($result['values'][0]['amount']); + $this->assertNotEmpty($result['values'][1]['amount']); + $this->assertNotEmpty($result['values'][2]['amount']); } public function testGetBreakdownReturnsResultsIfAnAdminTriesToAccessTheBreakdownOfAnyLeaveRequest() { @@ -4595,6 +4911,53 @@ public function testTheTimeForFromAndToDateOfLeaveRequestIsAddedCorrectlyWhenLea $this->assertEquals($toDate->format('Y-m-d') ." 23:59:00", $leaveRequest->to_date); } + public function testAContactCanViewRestrictedFieldsHeHasAccessToEvenWhenTheContactIdIsNotInTheReturnParameters() { + $contact1 = ContactFabricator::fabricate(); + $this->registerCurrentLoggedInContactInSession($contact1['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + $leaveRequest = 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 + ]); + + $result = civicrm_api3('LeaveRequest', 'get', [ + 'check_permissions' => true, + 'sequential' => 1, + 'return' => ['status_id', 'type_id'] + ]); + + $this->assertEquals(1, $result['count']); + //type_id is a restricted field but contact has access + $this->assertEquals($leaveRequest->type_id, $result['values'][0]['type_id']); + $this->assertEquals($leaveRequest->status_id, $result['values'][0]['status_id']); + $this->assertArrayNotHasKey('contact_id', $result['values'][0]); + + $result = civicrm_api3('LeaveRequest', 'getfull', [ + 'check_permissions' => true, + 'sequential' => 1, + 'return' => ['status_id', 'type_id'] + ]); + $this->assertEquals(1, $result['count']); + //type_id is a restricted field but contact has access + $this->assertEquals($leaveRequest->type_id, $result['values'][0]['type_id']); + $this->assertEquals($leaveRequest->status_id, $result['values'][0]['status_id']); + $this->assertArrayNotHasKey('contact_id', $result['values'][0]); + } + /** * @expectedException CiviCRM_API3_Exception * @expectedExceptionMessage Mandatory key(s) missing from params array: contact_id, leave_date diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/absence-tab/components/absence-tab-container.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/absence-tab/components/absence-tab-container.html index 49f2d79ae32..6b6d04f5e8b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/absence-tab/components/absence-tab-container.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/absence-tab/components/absence-tab-container.html @@ -12,7 +12,11 @@ - + diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/manager-notification-badge/components/manager-notification-badge.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/manager-notification-badge/components/manager-notification-badge.html index 5e55073536a..a8db2f13714 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/manager-notification-badge/components/manager-notification-badge.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/manager-notification-badge/components/manager-notification-badge.html @@ -1,5 +1,5 @@ - - + diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html index 98df8be2728..ef430d5c164 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html @@ -3,8 +3,7 @@ + selected-contact-id="myleave.contactId">
    -
    +
    -
    +
    + + + +
    -
    +
    -
    +
    +
    + + Show filters +
    +
    - -
    - +
    +

    + + + + {{calendar.selectedMonth.name}} {{calendar.selectedMonth.year}}

    +
    + + -
    -
    + + diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-actions.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-actions.html index 7f37d98ddac..a87c887f0f0 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-actions.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-actions.html @@ -7,7 +7,7 @@
  • {{action.label}} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-record-actions.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-record-actions.html index 81d404e95cb..055ca2874bb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-record-actions.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-request-record-actions.html @@ -12,7 +12,7 @@
  • + ng-click="vm.openLeavePopup(null, option.type, vm.selectedContactId)"> {{option.label}}
  • diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/xml/schema/CRM/HRLeaveAndAbsences/AbsenceType.xml b/uk.co.compucorp.civicrm.hrleaveandabsences/xml/schema/CRM/HRLeaveAndAbsences/AbsenceType.xml index ff5da964a0a..290273380b5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/xml/schema/CRM/HRLeaveAndAbsences/AbsenceType.xml +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/xml/schema/CRM/HRLeaveAndAbsences/AbsenceType.xml @@ -172,5 +172,11 @@ hrleaveandabsences_absence_type_calculation_unit + + hide_label + This controls the visibility of the Leave Type label in the calendar and feeds. + boolean + 0 + diff --git a/uk.co.compucorp.civicrm.hrsampledata/hrsampledata.php b/uk.co.compucorp.civicrm.hrsampledata/hrsampledata.php index 0e41ab0c52b..68f93e0b86a 100644 --- a/uk.co.compucorp.civicrm.hrsampledata/hrsampledata.php +++ b/uk.co.compucorp.civicrm.hrsampledata/hrsampledata.php @@ -25,6 +25,13 @@ function hrsampledata_civicrm_install() { return _hrsampledata_civix_civicrm_install(); } +/** + * Implementation of hook_civicrm_postInstall + */ +function hrsampledata_civicrm_postInstall() { + return _hrsampledata_civix_civicrm_postInstall(); +} + /** * Implementation of hook_civicrm_uninstall */ diff --git a/uk.co.compucorp.civicrm.hrsampledata/info.xml b/uk.co.compucorp.civicrm.hrsampledata/info.xml index 4a40caf84dd..97b20926675 100644 --- a/uk.co.compucorp.civicrm.hrsampledata/info.xml +++ b/uk.co.compucorp.civicrm.hrsampledata/info.xml @@ -8,8 +8,8 @@ Compucorp info@compucorp.com - 2018-04-30 - 1.7.6 + 2018-06-05 + 1.7.7 stable 4.7