UNPKG

zettapi_client

Version:

Client side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project

2 lines 33.9 kB
function dlKeyCode(){return{restrict:"A",link:function(e,t,r){t.bind("keypress",function(t){var n=t.which||t.keyCode;n==r.code&&e.$apply(function(){e.$eval(r.dlKeyCode,{$event:t})})})}}}var app=angular.module("zapi",["ngSanitize","ngAnimate","ui.bootstrap","blockUI","inform","chart.js","btford.socket-io","ngCsv","ngTable","selector","angularUtils.directives.dirPagination","angularMoment"]);app.constant("zapiPath","node_modules/zettapi_client/"),app.controller("entityCtrl",["$entity","entityMap","ErrorSvc","$page","mySocket","$window","$routeParams","$controller","$location","$scope","$uibModal","blockUI","inform","$route","NgTableParams",function($entity,entityMap,ErrorSvc,$page,mySocket,$window,$routeParams,$controller,$location,$scope,$uibModal,blockUI,inform,$route,NgTableParams){function flatten(e){function t(e,n){if(Object(e)!==e)r[n]=e;else if(Array.isArray(e)){for(var i=0,a=e.length;i<a;i++)t(e[i],n+"["+i+"]");0===a&&(r[n]=[])}else{var o=!0;for(var c in e)o=!1,t(e[c],n?n+"."+c:c);o&&n&&(r[n]={})}}var r={};return t(e,""),r}function unflatten(e){if(Object(e)!==e||Array.isArray(e))return e;var t=/\.?([^.\[\]]+)|\[(\d+)\]/g,r={};for(var n in e){for(var i,a=r,o="";i=t.exec(n);)a=a[o]||(a[o]=i[2]?[]:{}),o=i[2]||i[1];a[o]=e[n]}return r[""]||r}function get(e,t,r){blockUI.start("A obter dados..."),getLookups($scope.lookup,function(n,i){return n?(inform.add("Não foi possível obter dados.",{ttl:2e3,type:"danger"}),blockUI.stop(),void r(n)):($scope.lookup=i,$routeParams.id||"edit"!==$routeParams.action?void $entity.get(e,t).then(function(e){t?$scope.item=e.data:($scope.items=e.data,updateTable())}).catch(function(e){inform.add(e.error?e.error:e.data,{ttl:2e3,type:"danger"})}).finally(function(){blockUI.stop(),r()}):(blockUI.stop(),void r()))})}function getLookups(e,t){return e&&e.length?void t(null,e):void $entity.getLookups($routeParams.entity,function(e,r){return e?void t(e):void t(null,r)})}function setEdit(e){e?$scope.item=angular.copy(e):$scope.item="function"==typeof $scope.blank?$scope.blank():{}}function updateTable(){$scope.table.params=new NgTableParams({page:1,count:$scope.items.length,sorting:{nome:"asc"}},{total:1,counts:[],dataset:$scope.items})}function loadFinished(){$controller($routeParams.entity+"Ctrl",{$scope:$scope});var websocket;websocket="undefined"==typeof entityMap[$routeParams.entity].websocket?$routeParams.entity:eval(entityMap[$routeParams.entity].websocket)+"."+$routeParams.entity,mySocket.on(websocket+".remove",onThisEntityRemove),mySocket.on(websocket+".new",onThisEntityAdd),mySocket.on(websocket+".edit",onThisEntityEdit)}function onThisEntityAdd(e){switch($routeParams.action){case"list":$scope.items.unshift(e),updateTable()}}function onThisEntityEdit(e){switch($routeParams.action){case"list":for(var t=0;t<$scope.items.length;t++)if($scope.items[t]._id===e._id){$scope.items[t]=e,updateTable();break}break;case"view":case"edit":$scope.item._id===e._id&&($scope.item=e)}}function onThisEntityRemove(e){switch($routeParams.action){case"list":for(var t=0;t<$scope.items.length;t++)if($scope.items[t]._id===e){$scope.items.splice(t,1),updateTable();break}break;case"view":case"edit":$scope.item._id===e._id&&$location.path("/"+$routeParams.entity+"/list")}}function initialize(e){if($page.setTitle("Onde quer ir?"),$scope.entity=entityMap[$routeParams.entity],$scope.entity)switch($routeParams.action){case"edit":$routeParams.id?($page.setTitle($scope.entity.title+" - Alterar Registo"),get($routeParams.entity,$routeParams.id,e)):($page.setTitle($scope.entity.title+" - Novo Registo"),get($routeParams.entity,null,e));break;case"view":if(!$routeParams.id)return;$page.setTitle($scope.entity.title+" - Visualizar"),get($routeParams.entity,$routeParams.id,e);break;case"list":if($routeParams.id)return;$page.setTitle($scope.entity.title),get($routeParams.entity,null,e);break;default:return}}$scope.table={params:null},$scope.console=null,$scope.entities=entityMap,$scope.entityName=$routeParams.entity,$scope.lookup={},$scope.items=[],$scope.item={},$scope.newFile={},$scope.add=function(e){blockUI.start("A enviar dados..."),$entity.add($routeParams.entity,e).then(function(t){e._id?inform.add($scope.entity.title+" - registo alterado com sucesso!",{ttl:2e3,type:"info"}):inform.add($scope.entity.title+" - novo registo criado com sucesso!",{ttl:2e3,type:"info"})}).catch(function(e){inform.add(e.data,{ttl:2e3,type:"danger"})}).finally(function(){blockUI.stop()})},$scope.remove=function(e){blockUI.start("Averiguando eligibilidade de remoção..."),$entity.remove($routeParams.entity,e).then(function(e){inform.add($scope.entity.title+" - registo apagado com sucesso!",{ttl:2e3,type:"info"})}).catch(function(e){inform.add(e.error?e.error:e.data,{ttl:2e3,type:"danger"})}).finally(function(){blockUI.stop()})},$scope.openEdit=function(e){if(!$scope.entity.modal)return void(e?$location.path($routeParams.entity+"/edit/"+e._id):$location.path($routeParams.entity+"/edit"));setEdit(e);var t=$uibModal.open({animation:!0,templateUrl:"client/entity/entity.modal.html",controller:"entityModalCtrl",size:"lg",backdrop:"static",scope:$scope});t.result.then(function(e){$scope.add(e)},function(){inform.add("Alteração ao registo cancelada",{ttl:2e3,type:"info"}),$scope.item={}})},$scope.validate=function(){if("function"==typeof $scope.getError){var e=$scope.getError($scope.item,$scope.items);if(e.disabled)return $scope.console=e.tooltip,!0}return $scope.console=null,!1},$scope.unflattenArray=function(e){var t=[];return e.forEach(function(e){t.push(unflatten(e))}),t},$scope.flattenArray=function(e){var t,r=[],n=[],i=[];return e.forEach(function(e){var i=flatten(e);for(t in i)n.indexOf(t)===-1&&n.push(t);r.push(i)}),r.forEach(function(e){for(var r={},a=0;a<n.length;a++)t=n[a],"undefined"==typeof e[t]&&(e[t]=""),r[t]=e[t];i.push(r)}),i},initialize(loadFinished)}]),app.controller("entityModalCtrl",["$uibModalInstance","$scope",function(e,t){t.ok=function(){t.$close(t.item)},t.cancel=function(){t.$dismiss("cancel")}}]),app.controller("activityCtrl",["$scope",function(e){}]),app.controller("alertCtrl",function(){}),app.controller("countryCtrl",["$scope",function(e){}]),app.controller("errorCtrl",["$scope",function(e){}]),app.controller("holidayCtrl",["ErrorSvc","$scope","$holiday",function(ErrorSvc,$scope,$holiday){$scope.getError=function(holiday,holidays){if($scope.nextOccurrence=null,!holiday)return ErrorSvc.validationArgs(!0);if(!holiday.name)return ErrorSvc.validationArgs(!0,"Introduza um nome do feriado");if(""===holiday.name.trim())return ErrorSvc.validationArgs(!0,"Introduza um nome do feriado");for(var i=0;i<holidays.length;i++)if(holidays[i].name==holiday.name&&holiday._id!=holidays[i]._id)return ErrorSvc.validationArgs(!0,"Feriado já existente");if(!holiday.date&&!holiday.formula)return ErrorSvc.validationArgs(!0,"Impossivel calcular próxima ocorrência para este feriado");if(holiday.date){var pattern=/^(?:(?:[12][0-9]|0[1-9])\/(02)|(?:30|[12][0-9]|0[1-9])\/(?:(?:0[469]|11))|(?:3[01]|[12][0-9]|0[1-9])\/(?:(?:0[13578]|1[02])))$/;if(!pattern.test(holiday.date))return ErrorSvc.validationArgs(!0,"A data deve ser no formato dd/mm")}else if(holiday.formula)try{var currentYear=(new Date).getFullYear();eval("my_function = "+holiday.formula);var d=my_function(currentYear);if("[object Date]"!==Object.prototype.toString.call(d))return ErrorSvc.validationArgs(!0,"Data inválida");if(isNaN(d.getTime()))return ErrorSvc.validationArgs(!0,"Data inválida")}catch(e){return ErrorSvc.validationArgs(!0,"A formula que introduziu contém um erro: "+e)}return ErrorSvc.validationArgs(!1)},$scope.calculateNextOccurrence=$holiday.calculateNextOccurrence}]),app.controller("messageCtrl",["$scope",function(e){}]),app.controller("roleCtrl",["ErrorSvc","$scope","$role",function(e,t,r){t.permissions={},r.getPermissions().then(function(e){t.permissions=e.data}),t.togglePermissions=function(e){t.item.permissions||(t.item.permissions={});for(var r in t.permissions){t.item.permissions[r]||(t.item.permissions[r]={});for(var n in t.permissions[r])"label"!==n&&(t.item.permissions[r][n]=e)}},t.getError=function(t,r){if(!t)return e.validationArgs(!0);if(!t.name)return e.validationArgs(!0,"Introduza um nome para o perfil de utilizador");if(""===t.name.trim())return e.validationArgs(!0,"Introduza um nome para o perfil de utilizador");for(var n=0;n<r.length;n++)if(r[n].name==t.name&&r[n]._id!=t._id)return e.validationArgs(!0,"Perfil de utilizador já existente");return e.validationArgs(!1)},t.blank=function(){var e={};for(var r in t.permissions){e[r]={};for(var n in t.permissions[r])"label"!==n&&(e[r][n]=!0)}return{name:"",approvalLevel:0,admin:!1,permissions:e}}}]),app.controller("taskCtrl",["$scope","$date","ErrorSvc","$task","mySocket","blockUI",function(e,t,r,n,i,a){e.taskTypes=[],e.getError=function(e,t){return e?e.name?""===e.name.trim()?r.validationArgs(!0,"Indique um nome para a tarefa"):e.type?e.criteria&&e.criteria.month&&e.criteria.monthday&&e.criteria.weekday&&e.criteria.hour&&e.criteria.minute?r.validationArgs(!1):r.validationArgs(!0,"Complete o critério de periodicidade"):r.validationArgs(!0,"Escolha um tipo de tarefa"):r.validationArgs(!0,"Indique um nome para a tarefa"):r.validationArgs(!0)},e.formatDatetime=t.formatDatetime,e.calculateTimespan=t.calculateTimespan,e.toggleState=n.toggleState,e.run=function(e){n.run(e).then(function(e){a.start("A executar...")}).catch(function(e){swal("Ocorreu um erro ao iniciar a tarefa manualmente.",e.data,"error")})},i.on(e.login._id,function(e){swal("Tarefa executada com sucesso.",null,"success"),a.stop()}),n.getTypes(function(t){e.taskTypes=t})}]),app.filter("dateFilter",["moment",function(e){return function(t,r,n){if(!r||!n)return t;r=e(r),n=e(n);for(var i=[],a=0;a<t.length;a++){var o=e(t[a].data_pagamento);o>=r&&o<=n&&i.push(t[a])}return i}}]),app.filter("orderObjectBy",function(){return function(e,t,r){var n=[];return angular.forEach(e,function(e){n.push(e)}),n.sort(function(e,r){return e[t]>r[t]?1:-1}),r&&n.reverse(),n}}),app.directive("zlActivation",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,templateUrl:e+"/directives/activation/activation.html",controller:["$scope","$auth","$location","$routeParams",function(e,t,r,n){e.user=null,t.activateAccount(n.code,function(t,n){return t?r.path("/"):void(e.user=n)}),e.changePassword=function(n,i){t.changePassword(e.user,n,i,function(e){if(!e)return r.path("/")})}}]}}]),app.directive("zlAddress",["zapiPath",function(e){return{restrict:"E",scope:{item:"=",countries:"="},replace:!1,templateUrl:e+"/directives/address/address.html",controller:["$scope","$address","inform",function(e,t,r){e.getAddressPT=function(n){t.getAddressPT(n,function(i,a){return i?(e.item.address="",e.item.city="",e.item.country="",e.item.district="",e.item.county="",e.item.locality="",r.add("Não foi possível completar o arruamento",{ttl:2e3,type:"warning"})):(e.item.address=a.address,e.item.city=a.city,e.item.country=a.country,e.item.district=a.district,e.item.county=a.county,e.item.locality=a.locality,void t.getCoordinates(n,function(t,r){t||(e.item.coords=r)}))})},e.validateZipcode=t.validateZipcode}]}}]),app.directive("console",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,templateUrl:e+"/directives/console/console.html"}}]),app.directive("zlContainer",["zapiPath",function(e){return{restrict:"E",replace:!1,templateUrl:e+"/directives/container/container.html",scope:{entity:"@",item:"=",lookup:"=",label:"@",var:"@",key:"@",isVisible:"&?",isMovable:"@",noInsert:"@",removable:"@",approvalMaxLevel:"@"},controller:["$scope","$rootScope","$controller","$timeout",function(e,t,r,n){function i(r,n){var i,a;if(e.item[e.var]||(e.item[e.var]=[]),e.key){var o={property:null,key:null};if(r[e.key])o.key=r[e.key];else for(a in r)if(r[a][e.key]){o.property=a,o.key=r[a][e.key];break}if(o.key)for(i=0;i<e.item[e.var].length;i++){var c=o.property?e.item[e.var][i][o.property]:e.item[e.var][i];if(c[e.key]===o.key)return n("Registo duplicado em "+e.label)}}else for(i=0;i<e.item[e.var].length;i++)if(e.item[e.var][i]===r)return n("Registo duplicado em "+e.label);e.item[e.var].unshift(r),e.approvalMaxLevel&&e.approvalMaxLevel&&(r.approval={level:t.login.role.approvalLevel,maxLevel:e.approvalMaxLevel}),n()}e.key?e.newContainerItem={}:e.newContainerItem="",e.append=function(t){i(t,function(t){return t?swal("Atenção",t,"warning"):void(e.key?e.newContainerItem={}:e.newContainerItem="")})},e.remove=function(t){var r=e.item[e.var].indexOf(t);r!=-1&&e.item[e.var].splice(r,1)},e.validate=function(t){if(!t)return!0;if(e.key&&0===Object.keys(t).length&&JSON.stringify(t)===JSON.stringify({}))return!0;if("function"==typeof e.getError){var r=e.getError(t,e.item[e.var]);if(r.disabled)return e.console=r.tooltip,!0}return e.console=null,!1},e.pushBack=function(t){var r=e.item[e.var].splice(t,1);e.item[e.var].splice(t-1,0,r[0])},e.pushForward=function(t){var r=e.item[e.var].splice(t,1);e.item[e.var].splice(t+1,0,r[0])},n(function(){r(e.var+"Ctrl",{$scope:e})})}]}}]),app.directive("contenteditable",function(){return{require:"ngModel",link:function(e,t,r,n){function i(){n.$setViewValue(t.html())}n.$render=function(){t.html(n.$viewValue||"")},t.bind("blur keyup change",function(){e.$apply(i)})}}}),app.directive("zlCountry",["zapiPath",function(e){return{restrict:"E",scope:{item:"=",var:"@",label:"@",lookup:"="},replace:!1,templateUrl:e+"/directives/country/country.html"}}]),app.directive("zlFile",["zapiPath",function(e){return{restrict:"A",scope:{item:"=",var:"=",docid:"="},replace:!1,link:function(e,t,r){e.docid&&e.docid._id&&(e.docid=e.docid._id)},templateUrl:e+"/directives/document/file.html"}}]),app.directive("fileModel",["$parse",function(e){return{restrict:"A",replace:!1,link:function(t,r,n){var i=e(n.fileModel),a=i.assign;r.bind("change",function(){t.$apply(function(){a(t,r[0].files[0])})})}}}]),app.directive("zlDynamicField",["zapiPath",function(e){return{restrict:"E",scope:{field:"=",value:"="},replace:!1,template:'<div ng-include src="contentUrl" include-replace></div>',link:function(t,r,n){var i=t.field.type||"Unknown";"ObjectId"===t.field.type&&"undefined"==typeof t.field.ref&&(i="String"),t.contentUrl=e+"/directives/dynamicField/"+i+".html"}}}]),app.directive("entityEdit",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,link:function(t,r,n){var i=t.entity.custom?"client/entity/":e+"/entity/";t.contentUrl=i+t.entityName+"/"+t.entityName+".edit.html"},template:'<div ng-include="contentUrl"></div>'}}]),app.directive("entityList",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,link:function(t,r,n){var i=t.entity.custom?"client/entity/":e+"/entity/";t.contentUrl=i+t.entityName+"/"+t.entityName+".list.html"},template:'<div ng-include src="contentUrl" include-replace></div>'}}]),app.directive("entityView",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,link:function(t,r,n){var i=t.entity.custom?"client/entity/":e+"entity/";t.contentUrl=i+t.entityName+"/"+t.entityName+".view.html"},template:'<div ng-include="contentUrl"></div>'}}]),app.directive("zlGraph",["zapiPath",function(e){return{restrict:"E",scope:{item:"="},replace:!1,templateUrl:e+"/directives/graph/graph.html",controller:["$scope","blockUI","$graph",function(e,t,r){var n=[["bar","doughnut","pie","horizontalBar"],["line","radar"],["bubble","polar-area"]];e.getNext=function(){var t=n[e.item.dimension].indexOf(e.item.type)+1;return n[e.item.dimension][t===n[e.item.dimension].length?0:t]},e.toggle=function(){e.item.type=e.getNext()},e.chart={};var i=t.instances.get("graphBlockUI");i.start("A criar gráfico..."),r.get(e.item.namespace,e.item.collection,e.item.query,e.item.obj,e.item.seriesKey,e.item.dataKey,e.item.labelsKey,function(t){e.chart=t,console.log(t),i.stop()})}]}}]),app.directive("zlLogin",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,templateUrl:e+"/directives/login/login.html",controller:["blockUI","$auth","$location","$scope","$uibModalStack",function(e,t,r,n,i){function a(){n.username="",n.password=""}n.login=function(){n.validateLogin()||t.login(n.username,n.password,function(e){e?a():(r.path("/profile"),i.dismissAll())})},n.validateLogin=function(){return!n.username||!n.password}}]}}]),app.directive("zlNewsletter",["zapiPath","blockUI","inform","$entity",function(e,t,r,n){return{restrict:"E",scope:!0,replace:!1,templateUrl:e+"/directives/newsletter/newsletter.html",controller:["$scope","$newsletter",function(e,t){e.saveEmail=function(r){t.subscribe(r,function(){e.newsItem={}})}}]}}]),app.directive("asDate",function(){return{require:"^ngModel",restrict:"A",link:function(e,t,r,n){n.$formatters.splice(0,n.$formatters.length),n.$parsers.splice(0,n.$parsers.length),n.$formatters.push(function(e){if(e)return new Date(e).toISOString().slice(0,10)}),n.$parsers.push(function(e){return e})}}}),app.directive("dlKeyCode",dlKeyCode),app.directive("asFloat",function(){return{require:"^ngModel",restrict:"A",link:function(e,t,r,n){n.$formatters.splice(0,n.$formatters.length),n.$parsers.splice(0,n.$parsers.length),n.$formatters.push(function(e){if(e)return parseFloat(e)}),n.$parsers.push(function(e){return e})}}}),app.directive("asInteger",function(){return{require:"^ngModel",restrict:"A",link:function(e,t,r,n){n.$formatters.splice(0,n.$formatters.length),n.$parsers.splice(0,n.$parsers.length),n.$formatters.push(function(e){if(e)return parseInt(e)}),n.$parsers.push(function(e){return e})}}}),app.directive("lettersOnly",function(){return{require:"ngModel",link:function(e,t,r,n){function i(e){if(e){var t=e.replace(/[^A-Za-z]/g,"");return t!==e&&(n.$setViewValue(t),n.$render()),t}}"true"===r.lettersOnly&&n.$parsers.push(i)}}}),app.directive("numbersOnly",function(){return{require:"ngModel",link:function(e,t,r,n){function i(e){if(e){var t=e.replace(/[^0-9]/g,"");return t!==e&&(n.$setViewValue(t),n.$render()),t}}"true"===r.numbersOnly&&n.$parsers.push(i)}}}),app.directive("zlQueryBuilder",["zapiPath",function(e){return{restrict:"E",scope:!1,replace:!1,template:e+"/directives/queryBuilder/queryBuilder.html",controller:["$scope",function(e){e.choices=[{key:"$exists",caption:"existe",template:"Boolean.html"},{key:""}]}]}}]),app.directive("zlReset",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,templateUrl:e+"/directives/reset/reset.html",controller:["$scope","$auth","$location","blockUI",function(e,t,r,n){e.reset=function(n){e.validateReset(n)||t.resetPassword(n.email,n.username,function(e){if(!e)return r.path("/")})},e.validateReset=function(e){return!e||(!e.email||!e.username)}}]}}]),app.directive("zlSignup",["zapiPath",function(e){return{restrict:"E",scope:!0,replace:!1,templateUrl:e+"/directives/signup/signup.html",controller:["$scope","blockUI","$entity","$uibModalStack",function(e,t,r,n){e.signup=function(i){e.validateSignup(i)||(t.start("A reservar conta..."),r.add("user",i).then(function(e){swal("Está quase!","Consulte o seu email para ativar a conta de utilizador","success"),n.dismissAll()}).catch(function(e){swal("Erro",e.data,"error")}).finally(function(){t.stop()}))},e.validateSignup=function(e){if(!e)return!0;if(!e.username)return!0;var t=new RegExp("^[a-zA-Z0-9_]*$");return!t.test(e.username)||!e.email}}]}}]),app.service("$address",["$http","blockUI",function(e,t){this.getAddressPT=function(r,n){return this.validateZipcode(r)?n("Código postal inválido"):(t.start("A procurar arruamento..."),void e.get("./api/address/pt/"+r).then(function(e){n(null,e.data)}).catch(function(e){n(e)}).finally(function(){t.stop()}))},this.validateZipcode=function(e){if(!e)return!0;"string"!=typeof e&&(e+="");var t=e.split("-");return t.length<1||t.length>2||(!!isNaN(t[0])||!!(t.length>1&&isNaN(t[1])))},this.getCoordinates=function(e,t){try{var r=new google.maps.Geocoder;r.geocode({address:e},function(e,r){r!==google.maps.GeocoderStatus.OK&&t(r),t(null,{lat:e[0].geometry.location.lat(),lng:e[0].geometry.location.lng()})})}catch(e){t(e)}}}]),app.factory("$auth",["$http","$crypto","blockUI",function(e,t,r){var n={currentUser:null,login:function(i,a,o){return r.start("A autenticar credenciais..."),e.post("/api/session/login/",{username:i,password:t.md5(a)}).then(function(e){n.currentUser=e.data.user,o()}).catch(function(e){swal("Login Falhou",e.data,"error"),o(!0)}).finally(function(){r.stop()})},logout:function(t){e.get("/api/session/logout").then(function(e){n.currentUser=null,t(null,e)}).catch(function(e){t(e)})},requestCurrentUser:function(t){n.isAuthenticated()?t(null,n.currentUser):e.get("/api/session/currentuser").then(function(e){n.currentUser=e.data.user,t(null,n.currentUser)}).catch(function(e){n.currentUser=null,t(e)})},isAuthenticated:function(){return!!n.currentUser},activateAccount:function(t,n){if(!t)return n(!0);var i=t.split("&");return 2!==i.length?n(!0):(r.start("A verificar código de ativação..."),void e.post("/api/user/activate/",{email:i[0],code:i[1]}).then(function(e){n(null,e.data)}).catch(function(e){swal({title:"Conta já ativa!",text:"Consulte o email que recebeu com instruções de acesso",type:"info",confirmButtonText:"OK"}),n(!0)}).finally(function(){r.stop()}))},resetPassword:function(t,n,i){return r.start("A comunicar pedido de recuperação..."),e.post("/api/user/resetpassword/",{email:t,username:n}).then(function(e){swal("Recuperação de Conta","A sua conta foi recuperada! Consulte a sua conta de email.","success"),i()}).catch(function(e){swal("Erro",e.data,"error"),i(!0)}).finally(function(){r.stop()})},changePassword:function(n,i,a,o){if(i){if(i!==a)return swal("Atenção!","As palavras chave têm de ser iguais","error");n.newPassword=t.md5(i),r.start("A atualizar dados..."),e.post("/api/user/changepassword/",n).then(function(e){swal({title:"Parabéns!",text:"Palavra chave alterada com sucesso!",type:"success",confirmButtonText:"Entrar"}),o()}).catch(function(e){swal("Erro","Ocorreu um erro ao criar a sua password, por favor tente novamente mais tarde","error"),o(!0)}).finally(function(){r.stop()})}}};return n}]),app.service("$crypto",function(){function e(e,t){var o=e[0],c=e[1],s=e[2],u=e[3];o=r(o,c,s,u,t[0],7,-680876936),u=r(u,o,c,s,t[1],12,-389564586),s=r(s,u,o,c,t[2],17,606105819),c=r(c,s,u,o,t[3],22,-1044525330),o=r(o,c,s,u,t[4],7,-176418897),u=r(u,o,c,s,t[5],12,1200080426),s=r(s,u,o,c,t[6],17,-1473231341),c=r(c,s,u,o,t[7],22,-45705983),o=r(o,c,s,u,t[8],7,1770035416),u=r(u,o,c,s,t[9],12,-1958414417),s=r(s,u,o,c,t[10],17,-42063),c=r(c,s,u,o,t[11],22,-1990404162),o=r(o,c,s,u,t[12],7,1804603682),u=r(u,o,c,s,t[13],12,-40341101),s=r(s,u,o,c,t[14],17,-1502002290),c=r(c,s,u,o,t[15],22,1236535329),o=n(o,c,s,u,t[1],5,-165796510),u=n(u,o,c,s,t[6],9,-1069501632),s=n(s,u,o,c,t[11],14,643717713),c=n(c,s,u,o,t[0],20,-373897302),o=n(o,c,s,u,t[5],5,-701558691),u=n(u,o,c,s,t[10],9,38016083),s=n(s,u,o,c,t[15],14,-660478335),c=n(c,s,u,o,t[4],20,-405537848),o=n(o,c,s,u,t[9],5,568446438),u=n(u,o,c,s,t[14],9,-1019803690),s=n(s,u,o,c,t[3],14,-187363961),c=n(c,s,u,o,t[8],20,1163531501),o=n(o,c,s,u,t[13],5,-1444681467),u=n(u,o,c,s,t[2],9,-51403784),s=n(s,u,o,c,t[7],14,1735328473),c=n(c,s,u,o,t[12],20,-1926607734),o=i(o,c,s,u,t[5],4,-378558),u=i(u,o,c,s,t[8],11,-2022574463),s=i(s,u,o,c,t[11],16,1839030562),c=i(c,s,u,o,t[14],23,-35309556),o=i(o,c,s,u,t[1],4,-1530992060),u=i(u,o,c,s,t[4],11,1272893353),s=i(s,u,o,c,t[7],16,-155497632),c=i(c,s,u,o,t[10],23,-1094730640),o=i(o,c,s,u,t[13],4,681279174),u=i(u,o,c,s,t[0],11,-358537222),s=i(s,u,o,c,t[3],16,-722521979),c=i(c,s,u,o,t[6],23,76029189),o=i(o,c,s,u,t[9],4,-640364487),u=i(u,o,c,s,t[12],11,-421815835),s=i(s,u,o,c,t[15],16,530742520),c=i(c,s,u,o,t[2],23,-995338651),o=a(o,c,s,u,t[0],6,-198630844),u=a(u,o,c,s,t[7],10,1126891415),s=a(s,u,o,c,t[14],15,-1416354905),c=a(c,s,u,o,t[5],21,-57434055),o=a(o,c,s,u,t[12],6,1700485571),u=a(u,o,c,s,t[3],10,-1894986606),s=a(s,u,o,c,t[10],15,-1051523),c=a(c,s,u,o,t[1],21,-2054922799),o=a(o,c,s,u,t[8],6,1873313359),u=a(u,o,c,s,t[15],10,-30611744),s=a(s,u,o,c,t[6],15,-1560198380),c=a(c,s,u,o,t[13],21,1309151649),o=a(o,c,s,u,t[4],6,-145523070),u=a(u,o,c,s,t[11],10,-1120210379),s=a(s,u,o,c,t[2],15,718787259),c=a(c,s,u,o,t[9],21,-343485551),e[0]=p(o,e[0]),e[1]=p(c,e[1]),e[2]=p(s,e[2]),e[3]=p(u,e[3])}function t(e,t,r,n,i,a){return t=p(p(t,e),p(n,a)),p(t<<i|t>>>32-i,r)}function r(e,r,n,i,a,o,c){return t(r&n|~r&i,e,r,a,o,c)}function n(e,r,n,i,a,o,c){return t(r&i|n&~i,e,r,a,o,c)}function i(e,r,n,i,a,o,c){return t(r^n^i,e,r,a,o,c)}function a(e,r,n,i,a,o,c){return t(n^(r|~i),e,r,a,o,c)}function o(t){txt="";var r,n=t.length,i=[1732584193,-271733879,-1732584194,271733878];for(r=64;r<=t.length;r+=64)e(i,c(t.substring(r-64,r)));t=t.substring(r-64);var a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(r=0;r<t.length;r++)a[r>>2]|=t.charCodeAt(r)<<(r%4<<3);if(a[r>>2]|=128<<(r%4<<3),r>55)for(e(i,a),r=0;r<16;r++)a[r]=0;return a[14]=8*n,e(i,a),i}function c(e){var t,r=[];for(t=0;t<64;t+=4)r[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return r}function s(e){for(var t="",r=0;r<4;r++)t+=l[e>>8*r+4&15]+l[e>>8*r&15];return t}function u(e){for(var t=0;t<e.length;t++)e[t]=s(e[t]);return e.join("")}var l="0123456789abcdef".split("");this.md5=function(e){return u(o(e))};var p=function(e,t){return e+t&4294967295};"5d41402abc4b2a76b9719d911017c592"!=this.md5("hello")&&(p=function(e,t){var r=(65535&e)+(65535&t),n=(e>>16)+(t>>16)+(r>>16);return n<<16|65535&r})}),app.factory("$date",["moment",function(e){var t={};return t.collisionDetection=function(e,r,n){if(e=t.extract(e),r=r?t.extract(r):e,r<e)return null;for(var i=0;i<n.length;i++){var a=t.extract(n[i].dateStart),o=a;if(n[i].dateEnd&&(o=t.extract(n[i].dateEnd)),o>e&&o<=r)return!0;if(a>=e&&a<r)return!0;if(a<=e&&o>=r)return!0;if(a>=e&&o<=r)return!0}return!1},t.extract=function(r){try{return e(r).format("YYYY-MM-DD")}catch(e){return t.extract(new Date(r))}},t.extractMinutes=function(e){try{return t.pad(e.getHours())+":"+t.pad(e.getMinutes())}catch(r){return e=new Date(e),t.pad(e.getHours())+":"+t.pad(e.getMinutes())}},t.formatDatetime=function(e){if(!e)return"-";var r=new Date(e);return r.getFullYear()+"-"+t.pad(r.getMonth()+1)+"-"+t.pad(r.getDate())+" às "+t.pad(r.getHours())+":"+t.pad(r.getMinutes())+":"+t.pad(r.getSeconds())},t.calculateTimespan=function(t,r){var n;n=r?e(r):e();var i=new Date(t),a=e.duration(n.diff(i)),o=a.asMinutes().toFixed(2);return o},t.totalMinutes=function(e){var t=e.split(":");1==t.length&&t.push(0);var r=parseInt(t[0]),n=parseInt(t[1]);return 60*r+n},t.pad=function(e,t){var r=e+"";for(t=t||2;r.length<t;)r="0"+r;return r},t.getTimestamp=function(){var e=new Date,r=t.pad(e.getHours())+":"+t.pad(e.getMinutes());return r},t.getWeekDay=function(e){switch(e-=1){case 0:return"Domingo";case 1:return"Segunda-Feira";case 2:return"Terça-Feira";case 3:return"Quarta-Feira";case 4:return"Quinta-Feira";case 5:return"Sexta-Feira";case 6:return"Sabado";default:return"?"}},t.getTotalMinutes=function(e){var t=e.split(":");if(0===t.length||t.length>2)return null;1==t.length&&t.push(0);var r=parseInt(t[0]);if(r<0||r>23)return null;var n=parseInt(t[1]);return n<0||n>59?null:60*r+n},t.formatDate=function(e){var t=new Date(e),r=""+(t.getMonth()+1),n=""+t.getDate(),i=t.getFullYear();return r.length<2&&(r="0"+r),n.length<2&&(n="0"+n),[i,r,n].join("-")},t}]),app.service("$entity",["$http","$q","blockUI","$auth","inform","entityMap",function(e,t,r,n,i,a){var o=this;this.map=a,this.getByKey=function(t,r,n){return"undefined"==typeof n?e.get("api/"+t+"/fetch",{params:r}):void e.get("api/"+t+"/fetch",{params:r}).then(function(e){n(null,e)}).catch(function(e){n(e)})},this.get=function(t,r){return r?e.get("./api/"+t+"/list/"+r):e.get("./api/"+t+"/list")},this.setFormFiles=function(e,t,r){if(t&&"string"!=typeof t)if(t.length)for(var n=0;n<t.length;n++)o.setFormFiles(e,t[n],r+"["+n+"]");else for(var i in t)if("object"==typeof t[i])if("newFile"===i)for(var a in t[i]){var c=r?r+"."+a:a;e.append(c,t[i][a])}else o.setFormFiles(e,t[i],r?r+"."+i:i)},this.add=function(t,r){var n="./api/"+t+"/add/";r._id&&(n+=r._id);var i=new FormData;return"message"!==t&&o.setFormFiles(i,r),i.append("item",angular.toJson(r)),e.post(n,i,{transformRequest:angular.identity,headers:{"Content-Type":void 0}})},this.getLookups=function(e,r){if(!o.map[e].lookup)return void r();if(0===o.map[e].lookup.length)return void r();for(var n=[],i=0;i<o.map[e].lookup.length;i++){var a=o.map[e].lookup[i];n.push(o.get(a))}t.all(n).then(function(t){for(var n={},i=0;i<t.length;i++)n[o.map[e].lookup[i]]=t[i].data;r(null,n)},function(e){r(e)})},this.getMany=function(e,r){var n=e,i=[];n.forEach(function(e){i.push(o.get(e))});var a={};t.all(i).then(function(e){e.forEach(function(e,t){a[n[t]]=e.data}),r(null,a)},function(e){r(e)})},this.validate=function(e,t,r){return!!o.map[e].service.validate&&o.map[e].service.validate(t,r)},this.remove=function(t,r){var n="./api/"+t+"/remove/"+r._id;return e.get(n)},this.blank=function(e){return o.map[e].service.blank?o.map[e].service.blank():{}}}]),app.service("ErrorSvc",function(){this.validationArgs=function(e,t){return{disabled:e,tooltip:t}}}),app.service("$graph",["$http","inform",function(e,t){this.get=function(r,n,i,a,o,c,s,u){var l={query:i,obj:a,seriesKey:o,dataKey:c,labelsKey:s};e.post("/api/"+r+"/graph/"+n,l).then(function(e){e.data.options={responsive:!0,responsiveAnimationDuration:1500,tooltip:{enabled:!0},elements:{line:{tension:0,stepped:!0}}},u(e.data)}).catch(function(e){var r;r=e.data?e.data.message||e.data:"O servidor excedeu o tempo limite de processamento, por favor tente novamente mais tarde",t.add(r,{ttl:2e3,type:"error"}),u()})}}]),app.service("$holiday",["$date",function($date){function calculateNextOccurrence(){var date,currentYear=(new Date).getFullYear();switch(holiday.format){case"static":var day=holiday.date.split("/")[0],month=holiday.date.split("/")[1];date=new Date(currentYear+"/"+month+"/"+day),new Date>=date&&(date=new Date(currentYear+1+"/"+month+"/"+day));break;case"dynamic":if(eval("my_function = "+holiday.formula),"function"!=typeof my_function)return;date=my_function(currentYear),date<new Date&&(date=my_function(currentYear+1))}return date}this.getDayHolidays=function(e,t){for(var r=[],n=0;n<e.length;n++)this.dayMatch(e[n].holiday,t)&&r.push(e[n].holiday);return r},this.dayMatch=function(e,t){t instanceof Date||(t=new Date(t));var r=t.getDate(),n=t.getMonth()+1,i=calculateNextOccurrence(e);return r===i.getDate()&&n===i.getMonth()+1},this.calculateNextOccurrence=function(e){return $date.formatDate(calculateNextOccurrence(e))}}]),app.service("$measure",["$http",function(e){this.getByType=function(t){return e.get("/api/unit/measure/"+t)}}]),app.service("$newsletter",["$entity","inform","blockUI",function(e,t,r){this.subscribe=function(n){n&&(r.start("A gravar email..."),e.add("newsletter",n).then(function(e){t.add("Email gravado com sucesso",{ttl:1e4,type:"info"})}).catch(function(e){t.add("Ocorreu um erro ao gravar o seu email.",{ttl:2e3,type:"warning"})}).finally(function(){callback(),r.stop()}))}}]),app.factory("$page",["projectTitle",function(e){var t=" - "+e,r="";return{title:function(){return r+t},setTitle:function(e){r=e}}}]),app.service("$reporting",["$http","blockUI",function(e,t){this.getMetadata=function(r){t.start("A obter meta dados..."),e.get("/api/reporting/metadata").then(function(e){r(null,e.data)}).catch(function(e){r(e)}).finally(function(){t.stop()})}}]),app.service("$role",["$http",function(e){this.getPermissions=function(){return e.get("/api/role/permissions")}}]),app.service("$task",["$http","blockUI","inform","$route",function(e,t,r,n){this.toggleState=function(i){t.start("A executar..."),e.get("./api/task/toggle/"+i._id).then(function(e){n.reload()}).catch(function(e){r.add("Ocorreu um erro ao alternar o estado da tarefa. Erro: "+e.data,{ttl:2e3,type:"danger"})}).finally(function(){t.stop()})},this.run=function(t){return e.get("./api/task/run/"+t._id)},this.getTypes=function(n){t.start("A obter dados..."),e.get("./api/task/types").then(function(e){n(e.data)}).catch(function(e){r.add("Não foi possível atualizar a lista de tarefas neste momento. Tente novamente. Erro: "+e.data,{ ttl:2e3,type:"danger"}),n([])}).finally(function(){t.stop()})}}]),app.service("$validate",function(){function e(e){switch(e){case"0":return 0;case"1":return 1;case"2":return 2;case"3":return 3;case"4":return 4;case"5":return 5;case"6":return 6;case"7":return 7;case"8":return 8;case"9":return 9;case"A":return 10;case"B":return 11;case"C":return 12;case"D":return 13;case"E":return 14;case"F":return 15;case"G":return 16;case"H":return 17;case"I":return 18;case"J":return 19;case"K":return 20;case"L":return 21;case"M":return 22;case"N":return 23;case"O":return 24;case"P":return 25;case"Q":return 26;case"R":return 27;case"S":return 28;case"T":return 29;case"U":return 30;case"V":return 31;case"W":return 32;case"X":return 33;case"Y":return 34;case"Z":return 35;default:return-1}}function t(e){return!!e&&("string"==typeof e||e instanceof String)}this.nif=function(e){if(!t(e))return!1;var r=new RegExp("[1,2,5,6,7,8,9]\\d{8}");if(!e.match(r))return!1;var n=0;for(i=0;i<8;i++)n+=parseInt(e[i])*(9-i);var a=11-n%11;return a>=10&&(a=0),a===parseInt(e[8])},this.niss=function(e){if(!t(e))return!1;if(e=e.replace(/\s+/g,""),11!==e.length)return!1;for(var r=[29,23,19,17,13,11,7,5,3,2],n=0,i=0;i<e.length-1;i++)n+=parseInt(e[i]*r[i]);n=9-parseInt(n%10);var a=parseInt(e[e.length-1]);return n===a},this.cc=function(r){if(!t(r))return!1;var n=0,i=!1;if(12!==r.length)return!1;for(var a=r.length-1;a>=0;--a){var o=e(r[a]);if(o===-1)return!1;i&&(o*=2,o>9&&(o-=9)),n+=o,i=!i}return n%10===0},this.nib=function(e){if(!t(e))return!1;var r=new RegExp("^\\d{21}$");if(!e.match(r))return!1;for(var n=0,i=0;i<19;i++)n+=parseInt(e[i]),n*=10,n%=97;return n=98-10*n%97,parseInt(e.substring(19,21))===n}}),app.factory("mySocket",["socketFactory",function(e){return e()}]);