//! moment.js locale configuration //! locale : Portuguese (Brazil) [pt-br] //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment) }(this, (function (moment) { 'use strict'; //! moment.js locale configuration var ptBr = moment.defineLocale('pt-br', { months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( '_' ), monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( '_' ), weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), weekdaysParseExact: true, longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', L: 'DD/MM/YYYY', LL: 'D [de] MMMM [de] YYYY', LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm', }, calendar: { sameDay: '[Hoje às] LT', nextDay: '[Amanhã às] LT', nextWeek: 'dddd [às] LT', lastDay: '[Ontem às] LT', lastWeek: function () { return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday : '[Última] dddd [às] LT'; // Monday - Friday }, sameElse: 'L', }, relativeTime: { future: 'em %s', past: 'há %s', s: 'poucos segundos', ss: '%d segundos', m: 'um minuto', mm: '%d minutos', h: 'uma hora', hh: '%d horas', d: 'um dia', dd: '%d dias', M: 'um mês', MM: '%d meses', y: 'um ano', yy: '%d anos', }, dayOfMonthOrdinalParse: /\d{1,2}º/, ordinal: '%dº', invalidDate: 'Data inválida', }); return ptBr; }))); angular.module('youDoctor') .controller('Main.SelectMedicalCtrl', [ '$scope','dataModal', '$q', '$modalInstance','DomainServices','youDoctor.GraphQL' , function ($scope, dataModal, $q, $modalInstance, DomainServices, GraphQL) { var self = this; var lastSearch = null; this.text = ''; this.index = -1; this.medicalId = null; this.moveToIndex = function(index){ if (this.medicals[index]) { this.medicalId = this.medicals[index].id; } } this.keyDown = function($event){ if ($event.keyCode == 38){ $event.stopPropagation(); if (this.index){ this.moveToIndex(--this.index); } } else if ($event.keyCode == 40){ $event.stopPropagation(); if (this.medicals.length - 1 > this.index) { this.moveToIndex(++this.index); } } else if ($event.keyCode == 13){ $event.stopPropagation(); var doctor = this.medicals[this.index]; this.selectDoctor(doctor); } } this.searchMedicals = function(){ var role = ''; if (lastSearch == this.text){ return; } this.lastSearch = this.text; if (dataModal.role) { role = ', role: ' + dataModal.role } return GraphQL.query('main.select-medical.controller.js#searchMedicals','{\n\ users(text: "' + this.text + '"' + role + ') {\n\ items {\n\ email\n\ name\n\ id\n\ roles\n\ photoUrl\n\ crm\n\ }\n\ rowsSkipped\n\ }\n\ }') .then(function(response){ self.medicals = response.users.items; self.moveToIndex(0); }) } this.selectDoctor = function(doctor){ if (!doctor || !doctor.id) return; $modalInstance.close({ medicalId: doctor.id}); } this.cancel = function(doctor){ $modalInstance.dismiss('cancel'); } this.searchMedicals(); } ]); 'use strict'; angular.module('youDoctor') .service('DomainServices', ['$q','$http', 'API', function Domains($q, $http, API) { this.doctorsBy = function(p){ p.alias= localStorage.getItem('alias') var url = API.concat('domains/doctors'); return $http.get(url + utils.buildQueryString(p)) .then(function(response){ console.log("response", response) return response.data; }); }; this.specialities = function(){ console.log("specialities") var url = API.concat('domains/specialities'); return $http.get(url) .then(function(response){ return response.data; }); }; this.bankByNumber = function(number){ var url = API.concat('domains/bank/byNumber/'+number); return $http.get(url) .then(function(response){ return response.data; }); } this.banks = function(){ console.log("banks") var url = API.concat('domains/bank/all'); return $http.get(url) .then(function(response){ return response.data; }); } this.states = function(){ var deferred = $q.defer(); var states = ['SP','AC','AL','AP','AM','BA','CE','DF','ES','GO','MA','MT','MS','MG','PA','PB','PR','PE','PI','RJ','RN','RS','RO','RR','SC','SE','TO']; deferred.resolve(states); return deferred.promise; }; this.hospitals = function(){ var url = API.concat('hospital/all'); return $http.get(url) .then(function(response){ return response.data; }); }; this.positions = function(){ var url = API.concat('domains/positions/all'); return $http.get(url) .then(function(response){ return response.data; }); }; } ]); 'use strict'; angular.module('youDoctor') .constant('route-to-react-component',function(p){ return { url: p.url, templateUrl: p.templateUrl, views: p.views, resolve: p.resolve, controller: ['$scope', 'CustomStorageService','API','$ornito.Modal','ScheduleManagerServices','youDoctor.GraphQL', function($scope, CustomStorageService, API, $ornitoModal, ScheduleManagerServices, GraphQL){ window.yd = { token: CustomStorageService().getItem('token'), api: API, main: $scope.main, ornitoModal : $ornitoModal, ScheduleManagerServices: ScheduleManagerServices, GraphQL : GraphQL, } } ], }; }); "use strict"; angular.module("youDoctor") .service("CustomStorageService", ["$cookieStore" , function CustomStorageService($cookieStore) { return function(){ if ( isLocalStorageSupported() ) { return new useLocalStorage(); } return new useCookiesStorage(); } function isLocalStorageSupported() { if (window.noLocalStorage === true){ return false; } var testKey = "test"; try { localStorage.setItem(testKey, true); localStorage.removeItem(testKey); return true; } catch(error) { return false; } } function useLocalStorage(){ this.getItem = function(key){ return localStorage.getItem(key); } this.setItem = function(key, value){ localStorage.setItem(key, value); } this.removeItem = function(key){ localStorage.removeItem(key); } } function useCookiesStorage(){ this.getItem = function(key){ return $cookieStore.get(key); } this.setItem = function(key, value){ $cookieStore.put(key, value); } this.removeItem = function(key){ $cookieStore.remove(key); } } } ]); 'use strict'; angular .module('youDoctor') .service('AuthServices', AuthServices) .service('HttpInterceptor', HttpInterceptor) AuthServices.$inject = ['$q', '$http','API', 'CustomStorageService'] function AuthServices($q, $http, API, CustomStorageService) { var customStorage = CustomStorageService(); var clearCache = function(){ customStorage.removeItem('auth'); customStorage.removeItem('alias'); customStorage.removeItem('token'); customStorage.removeItem('me'); delete window.yd; } var clearAlias = function(){ customStorage.removeItem('alias'); delete window.yd; } this.setNotificationRead = function(params){ var url = API.concat('auth/notification/'+params.notificationId+'/read'); return $http.get(url) .then(function(response){ return response.data; }); } this.notificationSummary = function(params){ var url = API.concat('auth/notification-summary'); params = params || {}; url += '/'+(params.lastId || '0') +'/'+(params.firstUnreadId || '0')+'/'+(params.lastUnreadId || '0')+'?rowsToSkip='+(params.rowsToSkip || 0)+'&rowsToReturn='+(params.rowsToReturn || 10); return $http.get(url) .then(function(response){ return response.data; }); }; this.me = function(){ const alias = localStorage.getItem('alias'); console.log(url); // if(alias){ var url = API.concat('auth/me?entity='+ alias); return $http.get(url) .then(function(response){ console.log("auth") return response.data; }); // } // else { return Promise.reject("sem instituição"); } }; this.setToken = function(data){ return $q(function(resolve){ customStorage.setItem('auth', JSON.stringify(data)); customStorage.setItem('token', data.token); resolve(data); }); } this.login = function(email, password){ var url = API.concat('auth/login'); return $http.post(url, {email: email, password: password}) .then(function(response){ var data = response.data; customStorage.setItem('auth', JSON.stringify(data)); customStorage.setItem('token', data.token); }); }; this.logout = function(){ var url = API.concat('auth/logout'); return $http.get(url) .then(function(response){ clearCache(); return response.data; }) .catch(function(ex){ clearCache(); throw ex; }); }; this.changePasswordByHash = function(hash, password) { var url = API.concat('auth/changePassword') , values = { newPassword: password , resetHash: hash } ; return $http.post(url, values) .then(function(response){ return response.data; }); } this.resetPassword = function(email) { var url = API.concat('auth/resetPassword'); return $http.post(url, {email: email}) .then(function(response){ return response.data; }); }; } HttpInterceptor.$inject = ['$location', '$q', 'CustomStorageService', 'API'] function HttpInterceptor($location, $q, CustomStorageService, API) { // AngularJS will instantiate a singleton by calling "new" on this function var customStorage = CustomStorageService(); this.request = function (config) { var token = customStorage.getItem('token'); if (config.url.indexOf(API) == 0 && token){ config.headers.Authentication = token } return config; } this.responseError = function (response) { // do something on error if (response.status == 401){ customStorage.removeItem('auth'); customStorage.removeItem('token'); customStorage.removeItem('me'); } return $q.reject(response); } } 'use strict'; angular.module('youDoctor') .service('UtilServices', ['$q', '$compile', function Util($q, $compile) { var LOADING_TPL = '
' + '
' + '
' + '
' + '
' + '

{{message}}

' + '
'; this.displayLoading = function(message) { //angular.element('').replaceWith($compile(result.data)(scope)); // var div = document.createElement('div'); // div.innerHTML = LOADING_TPL; // var elements = div.childNodes; // var currentDiv = document.getElementsByClassName('ng-scope')[0]; // document.body.insertBefore(div, currentDiv); // var newDiv = document.createElement("div"); // var newContent = document.createTextNode("Hi there and greetings!"); // newDiv.appendChild(newContent); //add the text node to the newly created div. // // add the newly created element and its content into the DOM // var currentDiv = document.getElementById("div1"); // document.body.insertBefore(newDiv, currentDiv); // loadAndCompile({ // template: LOADING_TPL, // appendTo: $document[0].body // }) // .then(function(loader) { // }); }; this.hideLoading = function(message) { }; function fetchTemplate(url) { return $http.get(url, {cache: $templateCache}) .then(function(response) { return response.data && response.data.trim(); }); } function loadAndCompile(options) { // options = extend({ // template: '', // templateUrl: '', // scope: null, // controller: null, // locals: {}, // appendTo: null // }, options || {}); // return $q(function(resolve) { // //Incase template doesn't have just one root element, do this // var element = jqLite('
').html(template).contents(); // if (options.controller) { // controller = $controller( // options.controller, // extend(options.locals, { // $scope: scope // }) // ); // element.children().data('$ngControllerController', controller); // } // if (options.appendTo) { // jqLite(options.appendTo).append(element); // } // $compile(element)(scope); // }); } } ]); 'use strict'; angular.module('youDoctor').service('DutyHelper', [ '$q', function ($q) { var _hour = 3600 * 1000; this.slpitToShift = function(duty){ /* var date = new Date(duty.startsAt); var zero = new Date(date.getFullYear(), date.getMonth(), date.getDate()); var ends = new Date(duty.endsAt); var results = [0,0]; var begin = date.getTime() - zero.getTime(); var finish = begin + duty.endurance; var shifts = [ {begin: 0, endurance: 7 * _hour, amount: 0}, {begin: 7 * _hour, endurance: 12 * _hour, amount: 0}, {begin: 19 * _hour, endurance: 5 * _hour, amount: 0}, ] .forEach(function(shift){ }); 0--3 3--6 6--10 2 10 round.[begin] = duty.[begin](2) round.[endurance last] = duty.[endurance] loop => shift round.[begin shitf] = round.[begin](2) - [ vvdp.begin](0) => 2 var amount = math.min(round.[endurance last](10), shift.[endurance](3) - round.[begin shitf](2)) => 1 if (amount > 0){ shift.[amount] += amount; round.[endurance last] -= amount; } */ // schedule que começa entre 7 am até 18:59 // startsAt: "2015-05-24T08:00:00.000Z" // endsAt: "2015-05-24T20:00:00.000Z" // endurance: 43200000 } } ]); 'use strict'; angular.module('youDoctor') .service('youDoctor.GraphQL', ['$http', 'API', function GraphQL($http, API) { this.query = function(name, query){ return $http.post(API.concat('graphql'),{ name: name, query: query, }) .then(function(response){ return response.data.data; }) } this.mutation = function(name, mutation, variables){ return $http.post(API.concat('graphql'),{ name: name, query: 'mutation '+ mutation, variables: variables, }) .then(function(response){ if (response.data.errors){ throw new Error(response.data.errors.reduce(function(r, i) { r += ( i.message || i )+ '\n' return r; } ,'')) }; return response.data.data; }) } } ]); 'use strict'; angular.module('youDoctor') .config(['$provide', function($provide) { $provide.decorator('datepickerPopupDirective',['$delegate', function ($delegate) { var directive = $delegate[0]; var link = directive.link; directive.compile = function () { return function (scope, element, attrs) { var _arguments = arguments; link.apply(this, arguments); element.mask("99/99/9999"); element.bind('keyup', function() { if($(this).val().replace(/\D/g, '').length === 8){ element.trigger('change'); } }); }; }; return $delegate; }]); }] ); 'use strict'; angular.module('youDoctor') .directive('dateValidate',['$parse', function($parse) { return { restrict: 'A', require: 'ngModel', link: function(scope,elem,attrs,ngModelCtrl) { var maxDate = $parse(attrs.maxDate), minDate = $parse(attrs.minDate), format = attrs.dateValidate.toUpperCase(); var reset = function() { ngModelCtrl.$setValidity('minDate', true); ngModelCtrl.$setValidity('maxDate', true); }; scope.$watch(maxDate, function(value){ maxDate = value; }); scope.$watch(minDate, function(value){ minDate = value; }); ngModelCtrl.$parsers.unshift(function(value) { reset(); if(typeof value === 'string' && (!format || format === 'DD/MM/YYYY')) { var isValid = /^(0[1-9]|1\d|2\d|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d{2}$/.test(value); ngModelCtrl.$setValidity('date',isValid); if (!isValid) { return undefined; } } var valueMoment; if (value instanceof Date){ valueMoment = moment(value.toISOString()); } else { valueMoment = moment(value, format); } if(maxDate) { var maxMoment = moment(maxDate); var isLess = valueMoment.isBefore(maxMoment); ngModelCtrl.$setValidity('maxDate', isLess); if (!isLess) { return undefined; } } if(minDate) { var minMoment = moment(minDate); var isGreater = valueMoment.isAfter(minMoment); ngModelCtrl.$setValidity('minDate', isGreater); if (!isGreater) { return undefined; } } return value; }); } }; }]); angular.module('youDoctor') .directive('datepickerPopup', ['dateFilter', 'datepickerPopupConfig', function (dateFilter, datepickerPopupConfig) { return { restrict: 'A', priority: 1, require: 'ngModel', link: function(scope, element, attr, ngModel) { var dateFormat = attr.datepickerPopup || datepickerPopupConfig.datepickerPopup; ngModel.$formatters.push(function (value) { return dateFilter(value, dateFormat); }); } }; }]); angular.module('youDoctor') .directive("fileChange", function() { return function($scope, $el, attr) { $el.on('change', $scope[attr.fileChange]); } }); 'use strict'; angular.module('youDoctor') .directive('whenScrollEnds', function() { return { restrict: "A", link: function(scope, element, attrs) { var element1 = angular.element(element.parent()); var visibleHeight = element1.height(); var threshold = element.attr('when-scroll-line-height') || 100; var last = null; element.scroll(function() { var scrollableHeight = element.prop('scrollHeight'); var hiddenContentHeight = scrollableHeight - visibleHeight; var oldLast = last; var current = hiddenContentHeight - element.scrollTop(); last = hiddenContentHeight - element.scrollTop(); // direction donw to up if (oldLast < current){ return; } if (last < threshold) { // Scroll is almost at the bottom. Loading more rows scope.$apply(attrs.whenScrollEnds); } }); } }; }); 'use strict'; angular.module('youDoctor') .directive('uiFadeToggle', function(){ return { link: function(scope, element, attrs) { scope.$watch(attrs.uiFadeToggle, function(val, oldVal) { if(val === oldVal) return; element[val ? 'fadeIn' : 'fadeOut'](250); }); } } }); angular.module('youDoctor') .directive('autoFocus', ['$timeout',function($timeout) { return { restrict: 'AC', link: function(_scope, _element) { $timeout(function(){ _element[0].focus(); }, 0); } }; }]); angular.module('youDoctor') .filter('encodeURIComponent', function() { return window.encodeURIComponent; }); angular.module('youDoctor') .filter('phone', function () { return function (phone) { if (!phone) return ''; var value = phone.toString().trim().replace(/\D/g,""); if (value.length == 10 || value.length == 11){ return value.replace(/^(\d{2})(\d{4,5})(\d{4})/g,"($1) $2-$3"); } return value; }; }); angular.module('youDoctor') .filter('cpf', function () { return function (cpf) { if (!cpf) return ''; var value = cpf.toString().trim().replace(/\D/g,""); return value.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})/g,"$1.$2.$3-$4"); }; }); angular.module('youDoctor') .filter('moment', function() { return function (date, format) { return asMoment(date).format(format); }; }); angular.module('youDoctor') .filter('momentDurationHumanize', function() { return function (ms,a) { return moment.duration(ms).humanize(a == true); }; }); var utils = { buildQueryString: function (p) { var queries = [], url = ''; Object.keys(p).map(function(key){ var value = p[key] + ''; if (p[key] && value.length > 0) { queries.push(key+'='+p[key]); } }); if (queries.length >0){ url +='?' + queries.join('&'); } return url; } , removeFromArray: function(arr, comparer) { if( !Array.isArray(arr) ) { return; } if ( !comparer ) { return; } var i = 0; for (var x in arr) { if ( comparer(arr[x]) ) { i = x; break; } } arr.splice(i, 1); } , isEmpty: function(obj) { if (obj == null) return true; if (obj.length > 0) return false; if (obj.length === 0) return true; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) return false; } return true; } , base64_encode: function(data) { // discuss at: http://phpjs.org/functions/base64_encode/ // original by: Tyler Akins (http://rumkin.com) // improved by: Bayron Guevara // improved by: Thunder.m // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // improved by: Rafał Kukawski (http://kukawski.pl) // bugfixed by: Pellentesque Malesuada // example 1: base64_encode('Kevin van Zonneveld'); // returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' // example 2: base64_encode('a'); // returns 2: 'YQ==' // example 3: base64_encode('✓ à la mode'); // returns 3: '4pyTIMOgIGxhIG1vZGU=' var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = '', tmp_arr = []; if (!data) { return data; } data = unescape(encodeURIComponent(data)); do { // pack three octets into four hexets o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; // use hexets to index into b64, and append result to encoded string tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(''); var r = data.length % 3; return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); } } // Polyfill => Array.find if (!Array.prototype.find) { Array.prototype.find = function(predicate) { if (this === null) { throw new TypeError('Array.prototype.find called on null or undefined'); } if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } var list = Object(this); var length = list.length >>> 0; var thisArg = arguments[1]; var value; for (var i = 0; i < length; i++) { value = list[i]; if (predicate.call(thisArg, value, i, list)) { return value; } } return undefined; }; } 'use strict'; angular .module('youDoctor') .service('$ajax', ajax) ajax.$inject = ['$http', '$q', '$httpParamSerializer'] function ajax($http, $q, $httpParamSerializer) { var service = { post: post, get: get }; return service; function post(url, params, headers, scope, vars, callback) { var result = []; var status = ''; var i; var def = $q.defer(); var req = { method: 'POST', url: url, data: $httpParamSerializer(params), headers: headers } if (typeof (scope) == 'function') callback = scope; $http(req) .then( function (response) { if (vars) { var keyScope = Object.keys(vars); for (i in keyScope) { scope[keyScope[i]] = response.data.results[vars[keyScope[i]]]; } } def.resolve(response.data); }, function errorCallback(err) { console.log(err) //if (err.data.returnCode) $messages.alert(err.data.returnCode, err.data.returnMessage); //else if (err.status == 400) def.resolve(err); //else $messages.alert('Erro', 'Não foi possível interagir com o servidor de dados!'); def.reject(err); } ); return def.promise; } function get(url, params, headers, scope, vars, callback) { var result = []; var status = ''; var i; var def = $q.defer(); var req = { method: 'GET', url: url, data: params, headers: headers }; if (typeof (params) == 'function') callback = params; if (typeof (scope) == 'function') callback = scope; $http(req) .then( function (response) { if (vars) { var keyScope = Object.keys(vars); for (i in keyScope) { scope[keyScope[i]] = response.data[vars[keyScope[i]]]; } } if (typeof (callback) == 'function') callback(response.data); def.resolve(response.data); }, function errorCallback(err) { console.log(err); //if (err.data.returnCode) $messages.alert(err.data.returnCode, err.data.returnMessage); //else $messages.alert('Erro', 'Não foi possível interagir com o servidor de dados!'); def.reject( err); } ); return def.promise; } } angular.module("youDoctor") .constant("notification-frequence", 60000) .constant("API", "https://api.mobisaude.com:3003/") .constant("env", "dev") .constant("build", {"company":{"name":"YouDoctor","logoPos":{"url":"/img-home/0-logo.png","alt":"YouDoctor"},"copyright":"YouDoctor © 2015"},"support":{"email":"suporte@youdoctor.com.br","phone":"(11) 9.8281-1716"},"poweredBy":{"name":"Ornitorrinko.com","img":{"url":"images/ornito-watermark.png","alt":"Ornitorrinko"}},"stylus":{"import":"/app/config/styles/yd"},"features":{"time-line":false,"coordinator-self-promotion":false,"coordinator":{"title":"Coordenador","url":"manager","state":"manager"},"admin-position":false,"signup":{"allowCreateHospital":true,"allowCoordinator":true,"fieldsByStep":{"1":[],"2":[],"3":[]},"fields":{},"userOptions":["medical"]},"allowCreateHospital":false},"customer":"yd"}) .constant("googleMaps", {"key":"AIzaSyA8Wl_WxvljN8tzUh_kapOWOPSZRSGeGv4"}); 'use strict'; angular.module('youDoctor') .controller('MainMenu', MainMenu); MainMenu.$inject = ['$scope','$rootScope','$state','$location','$window','$modal','$q','$timeout']; function MainMenu($scope, $rootScope, $state, $location, $window, $modal, $q, $timeout) { $rootScope.main = $scope.main = {}; $rootScope.$state = $state; $scope.main.gotoHomeLogged = function(){ var pathTo = ''; var newUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port() + pathTo; $window.location.href = newUrl; }; $scope.main.clearLock = function(param){ return $scope.main.lock('.') .then(function(){ return param; }); }; $scope.main.lock = function(message){ $scope.main.message = message; return $q(function (resolve) { $timeout(resolve, 500); }); }; $scope.main.unlock = function(){ $scope.main.message = null; return $q(function (resolve) { $timeout(resolve, 500); }); }; // função privada var alert = function(type, message, title, options){ return $q(function(resolve, reject){ var template; switch(type) { case 'success': template = 'modal-success.html'; break; case 'error': template = 'modal-error.html'; break; case 'message': template = 'modal-default.html'; break; case 'confirmation': template = 'modal-confirmation.html'; break; case 'danger-confirmation': template = 'modal-danger-confirmation.html'; break; default: throw 'não existe modal do tipo ['+type+']'; } $modal.open({ templateUrl: 'views/partials/' + template, controller: ['$scope', '$modalInstance',function($scope, $modalInstance) { $scope.message = message; $scope.title = title; $scope.options = options; $scope.answer = function(option){ $modalInstance.close(option); }; $scope.ok = function () { $modalInstance.close(); }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); }; }], size: '' }) .result .then(resolve, resolve); }); }; $scope.main.showMessageFn = function (msg) { return function () { return $scope.main.showMessage(msg); }; }; $scope.main.askConfirmation = function(params){ if (!params.message || !params.options || !params.title){ throw 'Parametros inválidos para $scope.main.askConfirmation'; } return alert('confirmation', params.message, params.title, params.options); }; $scope.main.askDangerConfirmation = function(params){ if (!params.message || !params.options || !params.title){ throw 'Parametros inválidos para $scope.main.askDangerConfirmation'; } return alert('danger-confirmation', params.message, params.title, params.options); }; $scope.main.showMessage = function(msg){ return alert('message', msg); }; $scope.main.showSuccess = function(msg){ return alert('success', msg); }; $scope.main.showError = function(error){ return alert('error', error.data.message ); }; } 'use strict'; angular .module('youDoctor') .service('DomainServicesMain', DomainServicesMain) .controller('MainEntity', MainEntity); MainEntity.$inject = ['$scope', '$urlRouter', '$rootScope', 'PermPermissionStore', 'DomainServicesMain', 'AuthServices','$interval', '$timeout', 'notification-frequence', '$state', /*'$user', '$ornito.Modal',*/ '$location', '$window']; function MainEntity($scope, $urlRouter, $rootScope, PermPermissionStore, DomainServicesMain, AuthServices, $interval, $timeout, NotificationFrequence, $state, /* $user, $ornitoModal,*/$location, $window) { // Loads the user on $scope.main // $scope.main.user = $rootScope.user; $scope.selectedTab= '0'; $scope.entities = []; $scope.properties = []; const logout = function() { AuthServices.logout() .finally(function() { var newUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port() + '/'; $window.location.href = newUrl; }); }; const changeEntity = function() { localStorage.removeItem('alias'); var newUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port() + '/'; $window.location.href = newUrl; }; $scope.user; // Building menu features: notifications, menu-builder based on permissions, logout const init = function() { DomainServicesMain.getAllProperties() .then(properties => { $scope.properties = properties.sort(x => x.alias !== "public"); DomainServicesMain.getEntityById(properties[0]._id) .then(entities => { Object.keys(entities).forEach(function(item) { if (entities[item].alias.indexOf("admin") < 0) $scope.entities.push(entities[item]) }) }) }) AuthServices.me().then((user) => { if(user) $scope.user = user; }); // DomainServicesMain.getEntities() // .then(entities => { // Object.keys(entities).forEach(function(item) { // if (entities[item].alias.indexOf("admin") < 0) $scope.entities.push(entities[item]) // }) // // $scope.entities = entities // }) $scope.main.logout = logout; $scope.main.changeEntity = changeEntity; var toggleLeftMenu = function() { document.getElementById('menuLeftLabel').classList.toggle( 'active' ); var matches = document.querySelectorAll( '.li-menu-mobile:not(.dropdown)' ); for (var i = matches.length - 1; i >= 0; i--) { matches[i].addEventListener( 'click', function() { toggleLeftMenu(); }); } }; }; $scope.setEntityGroup = function(alias) { let vm = this; localStorage.setItem('alias', alias); AuthServices.me() .then((user) => { if(user && user.permissions.length !== 0){ const data = {userId: user.id, entity: alias} DomainServicesMain.setEntityGroup(data).then((res) =>{ AuthServices.me().then((newUser) => { redirectToMain(newUser, alias); }) }) } else { redirectToMain(user, alias); } // var pathTo = '/medical.html' + ((data || {}).isNew ? '#/profile': ''); }); } var userScope = function (user, alias) { var entityIndex = user.entities.map(function(e) {return e.entity;}).indexOf(alias); if (entityIndex > -1) { // Set permissions according to the user entityGroup $rootScope.user = { photoUrl: user.photoUrl, title: user.name, name: user.name, id: user.id, permissions: user.entities[entityIndex].permissions.filter(x => x), entity: user.entities[entityIndex].entity }; PermPermissionStore.defineManyPermissions($rootScope.user.permissions, (permissionName) => { return $rootScope.user.permissions.includes(permissionName); }); } // Needed for angular-permission to load permissions correctly $urlRouter.sync(); $urlRouter.listen(); } const redirectToMain= function (user, alias) { userScope(user, alias) AuthServices.me().then(function(me){ var newUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port() +'/#/'+ alias +'/dashboard/index'; $scope.main.isLogged = true; $window.location.href = newUrl; }) } $scope.changeTab = (id) =>{ var selected = $scope.properties.filter(x => x._id == id); DomainServicesMain.getEntityById(id) .then(entities => { if(entities){ $scope.entities = []; Object.keys(entities).forEach(function(item) { if (entities[item].alias.indexOf("admin") < 0) { if(selected[0] && selected[0].alias == "private"){ if($scope.user.entities.some(x => x.entity == entities[item].alias)) $scope.entities.push(entities[item]) } else $scope.entities.push(entities[item]) } }) } }) } init(); } DomainServicesMain.$inject = ['$http','API'] function DomainServicesMain($http, API) { this.getEntities = function() { var url = API.concat('entityGroups/all'); return $http.get(url) .then((response) => response.data) .catch("error"); } this.setEntityGroup = (data) => { var url = API.concat('medical/addEntity'); return $http.post(url, data) .then((response) => response.data) .catch("error"); } this.getAllProperties = function() { return $http .get(API.concat('entityProperties/all')) .then((response) => response.data) .catch('error'); }; this.getEntityById = function(propertyId) { return $http .put(API.concat("entityGroups/getByProperty/"+ propertyId), {}) .then((response) => response.data) .catch('error'); }; } 'use strict'; angular .module('youDoctor') .controller('MainMenuLoggedInCtrl', MainMenuLoggedInCtrl); MainMenuLoggedInCtrl.$inject = ['$scope', '$rootScope', 'AuthServices', 'PermPermissionStore', '$interval', '$timeout', 'notification-frequence', '$state', /*'$user' ,*/ '$ornito.Modal', '$location', '$window', 'DomainServices']; function MainMenuLoggedInCtrl($scope, $rootScope, AuthServices, PermPermissionStore, $interval, $timeout, NotificationFrequence, $state, /* $user,*/ $ornitoModal, $location, $window, DomainServices) { // Loads the user on $scope.main $scope.main.user = $rootScope.user; const logout = function() { AuthServices.logout() .finally(function() { var newUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port() + '/'; $window.location.href = newUrl; }); }; const changeEntity = function() { localStorage.removeItem('alias'); var newUrl = $location.protocol() + '://' + $location.host() + ':' + $location.port() + '/'; $window.location.href = newUrl; }; const sendToProfile = function(){ $state.go('main.menu.profile', null, {reload:true}); } // Building menu features: notifications, menu-builder based on permissions, logout const init = function() { $scope.main.notification = { actionByNotificationType: { 'notification-coordinator-inactive-medicals': function() { $state.go('main.menu.module.medicals.inactive', null, {reload:true}); }, }, summary : null, items: [], byId: {}, hasUnread: false, countUnread: null, loadMore: function(qty) { var self = $scope.main.notification; var params = { rowsToSkip: self.items.length, rowsToReturn: qty, }; return AuthServices.notificationSummary(params) .then(function(summary) { self.items = self.items.concat(summary.notifications); }); }, refreshing: false, seen: function() { var open = false; var self = $scope.main.notification; if (open) { self.open = 1; } else { self.open = 0; } if (open && self.hasUnread) { if (self.summary && self.summary.lastUnreadId) { AuthServices.setNotificationRead({notificationId: self.summary.lastUnreadId}); } } else if (open == false) { self.open = 0; if (self.summary && self.summary.lastUnreadId) { AuthServices .setNotificationRead({notificationId: self.summary.lastUnreadId}) .then(self.refresh); } } }, setSummary: function(summary) { var self = this; self.summary = summary; self.hasUnread = summary.countUnread > 0; if (self.hasUnread) { self.countUnread = summary.countUnread; }else{ self.countUnread = null; } if (summary.notifications) { var tmpList = []; summary.notifications.forEach(function(tmp) { if (!self.byId[tmp.id]) { tmpList.push(tmp); } self.byId[tmp.id] = tmp; }); self.items = tmpList.concat(self.items); } }, refresh: function() { var self = $scope.main.notification; if (self.refreshing) return; if (self.open == 1) { self.open++; return; } self.refreshing = true; var params = null; if (self.summary) { params = { lastUnreadId: self.summary.lastUnreadId, firstUnreadId: self.summary.firstUnreadId, lastId: self.summary.lastId, }; } return AuthServices.notificationSummary(params) .then(function(summary) { self.setSummary(summary); }) .finally(function() { self.refreshing = false; }); } }; // Notifications refresher var notificator; if (!angular.isDefined(notificator)) { $scope.main.notification.refresh(); notificator = $interval(function() { $scope.main.notification.refresh(); }, NotificationFrequence); } // Menu builder var menus = [ { label: 'Gerenciar', submenu: [ { state: 'main.menu.schedule.manager.index', label: 'Escala', permission: 'schedule-manager' }, { state: 'main.menu.hospitals.manager.index', label: 'Hospitais', permission: 'hospitals-list-edit' }, { state: 'main.menu.hospitals.list.index', label: 'Lista de Hospitais', permission: 'hospitals-crud' }, { state: 'main.menu.hospitals.groups', label: 'Grupos de instituição', permission: 'entityGroups' }, { state: 'main.menu.medicals.manager', label: 'Médicos', permission: 'medical-manager' }, { state: 'main.menu.medicals.list', label: 'Lista de Médicos', permission: 'medical-list' }, { state: 'main.menu.users', label: 'Usuários', permission: 'users-crud' }, { state: 'main.menu.listUsers', label: 'Lista de Usuários', permission: 'users-list-edit' }, { state: 'main.menu.permissions.main', label: 'Permissões', permission: 'permissions' }, { state: 'main.menu.permissions.groups', label: 'Grupos de permissão', permission: 'permissionGroups' }, { state: 'main.menu.mobileVersions.main', label: 'Versionamento Mobile', permission: 'mobileVersions' }, ] }, { label: 'Relatórios', submenu: [ { state: 'main.menu.reports.medicalsHospital', label: 'Médicos', permission: 'medicals-hospital' }, { state: 'main.menu.reports.dutyExchange', label: 'Troca de plantão', permission: 'dutyExchange' }, { state: 'main.menu.reports.dutyExchangeHospital', label: 'Troca de plantão por Hospital', permission: 'dutyExchange-hospital' }, { state: 'main.menu.reports.checkIn', label: 'Check-In', permission: 'checkIn' }, { state: 'main.menu.reports.checkInHospital', label: 'Check-In por Hospital', permission: 'checkIn-hospital' }, { state: 'main.menu.reports.medicalHours', label: 'Horas consolidadas', permission: 'medicalHours' }, { state: 'main.menu.reports.medicalHoursHospital', label: 'Horas consolidadas por hospital', permission: 'medicalHours-hospital' }, { state: 'main.menu.schedule.hospital.index', label: 'Escala Hospital', permission: 'schedule-hospital' }, ] }, { state: 'main.menu.schedule.daily', label: 'Escala', permission: 'schedule-daily' }, { state: 'main.menu.schedule.daily-all', label: 'Escala Geral', permission: 'schedule-daily-all', params: { 'all': true } }, { state: 'main.menu.schedule.monthly', label: 'Escala Mês', permission: 'schedule-monthly' }, { state: 'main.menu.hospitals.services', label: 'Instituições', permission: 'hospitals-services' } ]; console.log("hit"); if($scope.main.user.permissions.length > 0){ $scope.menus = menus.filter(function(item) { if(item.submenu) { item.submenu = item.submenu.filter(function(subitem) { return $scope.main.user.permissions.indexOf(subitem.permission) >= 0; }); item.state = item.submenu.state; return item.submenu.length > 0; } else { return $scope.main.user.permissions.indexOf(item.permission) >= 0; } }); console.log("state",$state.current.name) if($scope.menus.length > 0) { if($scope.menus[0].state) $state.go($scope.menus[0].state, $scope.menus[0].params) else $state.go($scope.menus[0].submenu[0].state, $scope.menus[0].params) } console.log("state2",$state.current.name) } else{ var params = { templateUrl: 'views/noPermisionModal.html', controller: ['$scope', '$modalInstance','$state' , function($scope, $modalInstance, $state) { $scope.close = function() { $modalInstance.close(); $state.go('main.login.index'); }; }], dataModal: {}, size: 'md' }; $ornitoModal.showCustom(params) } $scope.main.logout = logout; $scope.main.changeEntity = changeEntity; $scope.main.sendToProfile = sendToProfile; var toggleLeftMenu = function() { document.getElementById('menuLeftLabel').classList.toggle( 'active' ); var matches = document.querySelectorAll( '.li-menu-mobile:not(.dropdown)' ); for (var i = matches.length - 1; i >= 0; i--) { matches[i].addEventListener( 'click', function() { toggleLeftMenu(); }); } }; document.querySelector( '.menu-left-label' ) .addEventListener( 'click', function() { toggleLeftMenu(); }); }; init(); } 'use strict'; angular .module('youDoctor') .controller('DutyExchangeReportController', DutyExchangeReportController); DutyExchangeReportController.$inject = ['$rootScope', '$scope', 'API', '$ajax', 'Excel', 'DomainServices','$timeout']; function DutyExchangeReportController($rootScope, $scope, API, $ajax, Excel, DomainServices, $timeout) { const vm = this; vm.medicals = []; vm.endDateFormatted = new Date(); vm.iniDateFormatted = new Date(vm.endDateFormatted.getFullYear(), vm.endDateFormatted.getMonth(), 1); const init = () => { // var params = {entity: $rootScope.main.user.entity}; // $ajax.get(API.concat('coordinator/schedule/reports/duties/?' + serialize(params)), null, null) // .then((res) => { // vm.itens = res.items; // vm.refs = res.refs; // }); }; vm.updateData = (page) => { var params = { entity: $rootScope.main.user.entity, hospitalServiceId: vm.hospitalServiceId||'', hospitalId: vm.hospitalId||'', doctor: vm.doctor || '', }; // getting whole day instead of hour of moment if (vm.from) {params.from = vm.from.utc().startOf('day').toISOString()} if (vm.to) {params.to = vm.to.utc().endOf('day').toISOString()} var strParams = Object.keys(params).map(function(key) { return key + '=' + params[key]; }).join('&'); $ajax.get(API.concat('coordinator/schedule/reports/coodinatorDuties/?' + strParams), null, null) .then( (res) => { vm.itens = res.items.filter(x => x && res.refs.hospitalServiceId[x.hospitalServiceId]).map((item)=>{ return vm.formatDuty(item); }); vm.refs = res.refs; }); }; vm.selectMedical = (doctorSelected) => { vm.doctor = doctorSelected.id; }; vm.searchMedicals = (text) => { var query = {text: text, coordinatorId: $rootScope.main.user.id }; return DomainServices.doctorsBy(query) .then((response) => { vm.medicals = response.items; return response.items.length == 0 ? [] : response.items; }); }; vm.exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'Relatório de Troca de plantões',$rootScope.main.user.name); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Troca-de-plantões.xls'; document.getElementById('dlink').click(); },100) }; vm.formatDuty = (d) => { if(moment(d.startsAt).isAfter(moment("2018-10-21T00:00:00.000Z")) && moment(d.startsAt).isBefore(moment("2018-11-04T00:00:00.000Z")) ){ d.startsAt = moment(d.startsAt).add(1, "hours").format() d.dutyEndsAt = moment(d.dutyEndsAt).add(1, "hours").format() // if(d.checkin && d.checkin.startedAt) d.checkin.startedAt = moment(d.checkin.startedAt).add(1, "hours").format() // if(d.checkin && d.checkin.endedAt) d.checkin.endedAt = moment(d.checkin.endedAt).add(1, "hours").format() } return d; } // init(); } 'use strict'; angular .module('youDoctor') .controller('DutyExchangeReportHospitalController', DutyExchangeReportHospitalController); DutyExchangeReportHospitalController.$inject = ['$rootScope', '$window', '$scope', 'API', '$ajax', 'Excel', 'DomainServices','$timeout', 'CoordinatorMedicalsServices']; function DutyExchangeReportHospitalController($rootScope, $window, $scope, API, $ajax, Excel, DomainServices, $timeout, cordMedcService) { const vm = this; const alias = $window.localStorage['alias']; vm.selectedServiceId= ''; vm.dutylList = []; vm.selectedServiceText; vm.hospitalList = []; vm.medicals = []; vm.endDate = moment.utc().endOf('day'); vm.iniDate = moment.utc().date(1).hours(0).minutes(0).seconds(0); vm.hospitalId = ""; vm.endsAt; vm.startsAt; const init = () => { cordMedcService.listHospitals({ search: "", status : "all", rowsToSkip: 0, entity: alias, }) .then((response) =>{ vm.hospitalList = response.data; }) }; vm.updateData = (page) => { if(vm.hospitalId){ var params = { entity: $rootScope.main.user.entity, hospitalServiceId: vm.selectedServiceId||'', hospitalId: vm.hospitalId, doctor: vm.doctor || '', }; // getting whole day instead of hour of moment if (vm.startsAt) {params.from = vm.startsAt.utc().startOf('day').toISOString()} if (vm.endsAt) {params.to = vm.endsAt.endOf('day').toISOString()} var strParams = Object.keys(params).map(function(key) { return key + '=' + params[key]; }).join('&'); $ajax.get(API.concat('coordinator/schedule/reports/duties/?' + strParams), null, null) .then( (res) => { vm.itens = res.items.filter(x => x && res.refs.hospitalServiceId[x.hospitalServiceId]); vm.refs = res.refs; }); } }; vm.selectMedical = (doctorSelected) => { vm.doctor = doctorSelected.id; }; vm.searchMedicals = (text) => { var query = {text: text, coordinatorId: $rootScope.main.user.id }; return DomainServices.doctorsBy(query) .then((response) => { vm.medicals = response.items; return response.items.length == 0 ? [] : response.items; }); }; vm.exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'Relatório de Troca de plantões',$rootScope.main.user.name); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Troca-de-plantões.xls'; document.getElementById('dlink').click(); },100) }; vm.getServiceText = () => { vm.selectedServiceId = ''; if(!vm.hospitalId) vm.hospitalId = ""; if(vm.hospitalList.items){ vm.hospitalList.items.forEach((hospital) =>{ hospital.services.forEach((service) =>{ if(vm.selectedServiceId == service.id) vm.selectedServiceText = hospital.name +" - "+ service.name; }) }) vm.dutylList = vm.hospitalList.items.find(x=> x.id == vm.hospitalId); } }; init(); } 'use strict'; angular .module('youDoctor') .controller('CheckInReportController', CheckInReportController); CheckInReportController.$inject = ['$rootScope', '$scope', 'API', '$ajax', 'Excel', 'DomainServices', '$timeout'] function CheckInReportController($rootScope, $scope, API, $ajax, Excel, DomainServices, $timeout) { const vm = this; vm.medicals = []; vm.endDateFormatted = new Date(); vm.iniDateFormatted = new Date(vm.endDateFormatted.getFullYear(), vm.endDateFormatted.getMonth(), 1); vm.baseUrl = "https://s3-sa-east-1.amazonaws.com/media.mobisaude.com/" //this is graph options vm.graphOptions = { maintainAspectRatio:false}; vm.graphType = "polarArea"; vm.activeTab = 0; // vm.mycoordHospital vm.myServices =[] vm.checkin = ""; const init = () => { // var params = {entity: $rootScope.main.user.entity, from: vm.iniDateFormatted, to: vm.endDateFormatted}; // $ajax.get(API.concat('coordinator/schedule/reports/checkin/?' + $httpParamSerializer(params)), null, null) // .then((res) => { // vm.itens = res.items; // vm.refs = res.refs; // }); // vm.getCoordInfo() }; vm.getCoordInfo = function() { $ajax.get(API.concat('coordinator/my-services'), null, null) .then((res) => { res.forEach((item)=>{ vm.myServices.push(...item.services.map((x=>{return x.id}))) }) console.log("vm.myServices", vm.myServices) }); }; vm.getProperty = (obj,prop) => { return obj[prop]; }; vm.exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'Relatório de Check in',$rootScope.main.user.name); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Check-in.xls'; document.getElementById('dlink').click(); },100); // trigger download }; vm.convertTime = (init,end)=>{ let pad = number => number <= 9 ? ('0'+number).slice(-2) : number; let time = moment(end).diff(init,'minutes'); let negative = ""; if (time < 0) { time = -time; negative = "-"; } if(time < 60) return negative+"00:"+pad(Math.round(time)) const hours = time / 60; var minutes = (hours - Math.floor(hours)) * 60 return String(negative+pad(Math.floor(hours))+':'+ pad(Math.round(minutes))) } vm.compareDiference =(initX,endX,initY,endY) =>{ let pad = number => number <= 9 ? ('0'+number).slice(-2) : number; const timeX = moment(endX).diff(initX,'minutes'); const timeY = moment(endY).diff(initY,'minutes'); let time = timeX - timeY; let negative = ""; if (time < 0) { time = -time; negative = "-"; } if(time < 60) return negative+"00:"+pad(Math.round(time)) const hours = time / 60; var minutes = (hours - Math.floor(hours)) * 60 return String(negative+pad(Math.floor(hours))+':'+ pad(Math.round(minutes))) } vm.convertMillisecondsToDigitalClock = (ms) => { // function to fill left zero (printing 03 instead of 3) let pad = number => number <= 9999 ? ('0'+number).slice(-2) : number; let negative = false; if (ms < 0) { ms = -ms; negative = true; } let duration = moment.duration(ms); let ret = { clock : pad(duration.hours()) + ':' + pad(duration.minutes()), negative }; return ret; }; vm.getMedicalInfo = function(medicalId,property){ return vm.refs.medicalId.hasOwnProperty(medicalId) && vm.refs.medicalId[medicalId].hasOwnProperty(property) ? vm.refs.medicalId[medicalId][property] : ""; } vm.getSpecialityInfo = function(specialityId,property){ return vm.refs.specialityId.hasOwnProperty(specialityId) && vm.refs.specialityId[specialityId].hasOwnProperty(property) ? vm.refs.specialityId[specialityId][property] : ""; } vm.getHospitalInfo = function(hospitalId,property){ return vm.refs.hospitalId.hasOwnProperty(hospitalId) && vm.refs.hospitalId[hospitalId].hasOwnProperty(property) ? vm.refs.hospitalId[hospitalId][property] : ""; } vm.getHospitalServiceInfo = function(hospitalServiceId,property){ return vm.refs.hospitalServiceId.hasOwnProperty(hospitalServiceId) && vm.refs.hospitalServiceId[hospitalServiceId].hasOwnProperty(property) ? vm.refs.hospitalServiceId[hospitalServiceId][property] : false; } vm.validateCode = function(medicode, hospitalId){ const hospitalName = vm.getHospitalInfo(hospitalId, "name"); if(hospitalName.toLowerCase().indexOf("unimed") > -1) return medicode return "" } vm.updateData = (page) => { var params = { entity: $rootScope.main.user.entity, // hospitalServiceIds: encodeURIComponent(vm.myServices) || '', // hospitalServiceId: vm.hospitalServiceId || "", hospitalId: vm.hospitalId ||'', doctor: vm.doctor ? vm.doctor.id : '', from: vm.from || '', to: vm.to || '', checkin: vm.checkin, }; // getting whole day instead of hour of moment if (vm.from) {params.from = vm.from.utc().startOf('day').toISOString();} if (vm.to) {params.to = vm.to.utc().endOf('day').toISOString();} params.doctor = vm.doctor ? vm.doctor.id : ''; var strParams = Object.keys(params).map(function(key) { return key + '=' + params[key]; }).join('&'); //return this to reports/chekin $ajax.get(API.concat('coordinator/schedule/reports/checkin/?' + strParams), null, null) .then((res) => { vm.itens = res.items.map((item)=>{ return vm.formatDuty(item); }); vm.refs = res.refs; vm.getGraphData(vm.itens); }); }; //delete everythin related to detgraph data vm.getGraphData = (_items) => { var noCheking = 0; var late15 = 0; var late30 = 0; var onTime = 0; _items.forEach(function(i) { if (!i.checkin){ noCheking += 1 } else { const dutyDate = new Date (i.dutyStartsAt); const checkinDate = new Date (i.checkin.startedAt); const diff = checkinDate - dutyDate; //less then 15 min if (diff < 900000){ onTime += 1; } //between 15 min and 30 min if (diff <= 900000 && diff < 1800000 ){ late15 +=1; } //vocer 30 min // if (diff < 1800000) else{ late30 +=1; } } }); console.log ("_items ", _items) console.log ("nocheckin " + noCheking) console.log ("ontime " + onTime) console.log ("late15 " + late15) console.log ("late30 " + late30) vm.graph =[] vm.graph.info = { labels: ["Sem Cheking","No horario", "Atraso 15 min", "Atraso 30 min"], data: [noCheking, onTime, late15, late30], color: 'rgb(255, 99, 132)' } // console.log (vm.graph) } vm.selectMedical = (doctorSelected) => { vm.doctor = doctorSelected; vm.updateData(0); }; vm.searchMedicals = (text) => { var query = {text: text, coordinatorId: $rootScope.main.user.id}; return DomainServices.doctorsBy(query) .then((response) => { vm.medicals = response.items; return response.items.length == 0 ? [] : response.items; }); }; vm.formatDuty = (d) => { if(moment(d.dutyStartsAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.dutyStartsAt).isBefore(moment("2020-02-16T00:00:00.000Z"))) d.dutyStartsAt = moment(d.dutyStartsAt).add(1, "hours").format() if(moment(d.dutyEndsAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.dutyEndsAt).isBefore(moment("2020-02-16T00:00:00.000Z"))) d.dutyEndsAt = moment(d.dutyEndsAt).add(1, "hours").format() // if(d.checkin && moment(d.checkin.startedAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.checkin.startedAt).isBefore(moment("2020-02-16T00:00:00.000Z")) ) d.checkin.startedAt = moment(d.checkin.startedAt).add(1, "hours").format() if(d.checkin && moment(d.checkin.endedAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.checkin.endedAt).isBefore(moment("2020-02-16T00:00:00.000Z"))) d.checkin.endedAt = moment(d.checkin.endedAt).add(1, "hours").format() return d; } vm.typeOfCheckout = (endDate, checkoutDate) => { console.log("endDate", moment(endDate)) if(checkoutDate){ console.log("checkoutDate", moment(checkoutDate)) const result = moment(endDate).diff(moment(checkoutDate)) != 0; if(result) return "Manual" else return "Automático" } else return "Não realizado" } vm.checkDivergence = (checkin)=> { // console.log("diff", moment(checkin.createdAt).diff(moment(checkin.startedAt), "minutes")) if(checkin && checkin.createdAt && checkin.type==="online" && moment(checkin.createdAt).diff(moment(checkin.startedAt), "minutes") >= 15 ) return true return false; } init(); } 'use strict'; angular .module('youDoctor') .controller('CheckInReportHospitalController', CheckInReportHospitalController); CheckInReportHospitalController.$inject = ['$rootScope', '$window', '$scope', 'API', '$ajax', 'Excel', 'DomainServices', '$timeout', 'CoordinatorMedicalsServices'] function CheckInReportHospitalController($rootScope, $window, $scope, API, $ajax, Excel, DomainServices, $timeout, cordMedcService) { const vm = this; const alias = $window.localStorage['alias']; vm.selectedServiceId= ''; vm.dutylList = []; vm.selectedServiceText; vm.hospitalList = []; vm.medicals = []; vm.endDate = moment.utc().endOf('day'); vm.iniDate = moment.utc().date(1).hours(0).minutes(0).seconds(0); vm.hospitalId = ""; vm.checkin = ""; vm.endsAt; vm.startsAt; vm.baseUrl = "https://s3-sa-east-1.amazonaws.com/media.mobisaude.com/" //this is graph options vm.graphOptions = { maintainAspectRatio:false}; vm.graphType = "polarArea"; vm.activeTab = 0; const init = () => { cordMedcService.listHospitals({ search: "", status : "all", rowsToSkip: 0, entity: alias, }) .then((response) =>{ vm.hospitalList = response.data; }) }; vm.getProperty = (obj,prop) => { return obj[prop]; }; vm.exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'Relatório de Check in',$rootScope.main.user.name); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Check-in.xls'; document.getElementById('dlink').click(); },100); // trigger download }; vm.convertMillisecondsToDigitalClock = (ms) => { // function to fill left zero (printing 03 instead of 3) let pad = number => number <= 9999 ? ('0'+number).slice(-2) : number; let negative = false; if (ms < 0) { ms = -ms; negative = true; } let duration = moment.duration(ms); let ret = { clock : pad(duration.hours()) + ':' + pad(duration.minutes()), negative }; return ret; }; vm.formatDuty = (d) => { if(moment(d.dutyStartsAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.dutyStartsAt).isBefore(moment("2020-02-16T00:00:00.000Z"))) d.dutyStartsAt = moment(d.dutyStartsAt).add(1, "hours").format() if(moment(d.dutyEndsAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.dutyEndsAt).isBefore(moment("2020-02-16T00:00:00.000Z"))) d.dutyEndsAt = moment(d.dutyEndsAt).add(1, "hours").format() // if(d.checkin && moment(d.checkin.startedAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.checkin.startedAt).isBefore(moment("2020-02-16T00:00:00.000Z")) ) d.checkin.startedAt = moment(d.checkin.startedAt).add(1, "hours").format() if(d.checkin && moment(d.checkin.endedAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.checkin.endedAt).isBefore(moment("2020-02-16T00:00:00.000Z"))) d.checkin.endedAt = moment(d.checkin.endedAt).add(1, "hours").format() return d; } vm.convertTime = (init,end)=>{ let pad = number => number <= 9 ? ('0'+number).slice(-2) : number; let time = moment(end).diff(init,'minutes'); let negative = ""; if (time < 0) { time = -time; negative = "-"; } if(time < 60) return negative+"00:"+pad(Math.round(time)) const hours = time / 60; var minutes = (hours - Math.floor(hours)) * 60 return String(negative+pad(Math.floor(hours))+':'+ pad(Math.round(minutes))) } vm.compareDiference =(initX,endX,initY,endY) =>{ let pad = number => number <= 9 ? ('0'+number).slice(-2) : number; const timeX = moment(endX).diff(initX,'minutes'); const timeY = moment(endY).diff(initY,'minutes'); let time = timeX - timeY; let negative = ""; if (time < 0) { time = -time; negative = "-"; } if(time < 60) return negative+"00:"+pad(Math.round(time)) const hours = time / 60; var minutes = (hours - Math.floor(hours)) * 60 return String(negative+pad(Math.floor(hours))+':'+ pad(Math.round(minutes))) } vm.getMedicalInfo = function(medicalId,property){ return vm.refs.medicalId.hasOwnProperty(medicalId) && vm.refs.medicalId[medicalId].hasOwnProperty(property) ? vm.refs.medicalId[medicalId][property] : ""; } vm.getHospitalInfo = function(hospitalId,property){ return vm.refs.hospitalId.hasOwnProperty(hospitalId) && vm.refs.hospitalId[hospitalId].hasOwnProperty(property) ? vm.refs.hospitalId[hospitalId][property] : ""; } vm.getSpecialityInfo = function(specialityId,property){ return vm.refs.specialityId.hasOwnProperty(specialityId) && vm.refs.specialityId[specialityId].hasOwnProperty(property) ? vm.refs.specialityId[specialityId][property] : ""; } vm.getHospitalServiceInfo = function(selectedServiceId,property){ return vm.refs.hospitalServiceId.hasOwnProperty(selectedServiceId) && vm.refs.hospitalServiceId[selectedServiceId].hasOwnProperty(property) ? vm.refs.hospitalServiceId[selectedServiceId][property] : false; } vm.validateCode = function(medicode, hospitalId){ const hospitalName = vm.getHospitalInfo(hospitalId, "name"); if(hospitalName.toLowerCase().indexOf("unimed") > -1) return medicode return "" } vm.updateData = (page) => { if(vm.hospitalId){ var params = { entity: $rootScope.main.user.entity, hospitalId: vm.hospitalId, selectedServiceId: vm.selectedServiceId||'', doctor: vm.doctor ? vm.doctor.id : '', checkin: vm.checkin, }; // getting whole day instead of hour of moment if (vm.startsAt) {params.from = vm.startsAt.utc().startOf('day').toISOString();} if (vm.endsAt) {params.to = vm.endsAt.utc().endOf('day').toISOString();} params.doctor = vm.doctor ? vm.doctor.id : ''; var strParams = Object.keys(params).map(function(key) { return key + '=' + params[key]; }).join('&'); //return this to reports/chekin $ajax.get(API.concat('coordinator/schedule/reports/checkinGraph/?' + strParams), null, null) .then((res) => { vm.itens = res.items.filter(x => x && res.refs.hospitalServiceId[x.hospitalServiceId]).map((item)=>{ return vm.formatDuty(item); }); vm.refs = res.refs; vm.getGraphData(vm.itens); }); } }; //delete everythin related to detgraph data vm.getGraphData = (_items) => { var noCheking = 0; var late15 = 0; var late30 = 0; var onTime = 0; _items.forEach(function(i) { if (!i.checkin){ noCheking += 1 } else { const dutyDate = new Date (i.dutyStartsAt); const checkinDate = new Date (i.checkin.startedAt); const diff = checkinDate - dutyDate; //less then 15 min if (diff < 900000){ onTime += 1; } //between 15 min and 30 min if (diff <= 900000 && diff < 1800000 ){ late15 +=1; } //vocer 30 min // if (diff < 1800000) else{ late30 +=1; } } }); console.log ("_items ", _items) console.log ("nocheckin " + noCheking) console.log ("ontime " + onTime) console.log ("late15 " + late15) console.log ("late30 " + late30) vm.graph =[] vm.graph.info = { labels: ["Sem Cheking","No horario", "Atraso 15 min", "Atraso 30 min"], data: [noCheking, onTime, late15, late30], color: 'rgb(255, 99, 132)' } // console.log (vm.graph) } vm.selectMedical = (doctorSelected) => { vm.doctor = doctorSelected; vm.updateData(0); }; vm.searchMedicals = (text) => { var query = {text: text, coordinatorId: $rootScope.main.user.id}; return DomainServices.doctorsBy(query) .then((response) => { vm.medicals = response.items; return response.items.length == 0 ? [] : response.items; }); }; vm.getServiceText = () => { vm.selectedServiceId = ''; if(!vm.hospitalId) vm.hospitalId = ""; if(vm.hospitalList.items){ vm.hospitalList.items.forEach((hospital) =>{ hospital.services.forEach((service) =>{ if(vm.selectedServiceId == service.id) vm.selectedServiceText = hospital.name +" - "+ service.name; }) }) vm.dutylList = vm.hospitalList.items.find(x=> x.id == vm.hospitalId); } }; vm.typeOfCheckout = (endDate, checkoutDate) => { console.log("endDate", moment(endDate)) if(checkoutDate){ console.log("checkoutDate", moment(checkoutDate)) const result = moment(endDate).diff(moment(checkoutDate)) != 0; if(result) return "Manual" else return "Automático" } else return "Não realizado" } vm.checkDivergence = (checkin)=> { // console.log("diff", moment(checkin.createdAt).diff(moment(checkin.startedAt), "minutes")) if(checkin && checkin.createdAt && checkin.type==="online" && moment(checkin.createdAt).diff(moment(checkin.startedAt), "minutes") >= 15 ) return true return false; } init(); } 'use strict'; angular .module('youDoctor') .controller('medicalsHospitalReportHospitalController', medicalsHospitalReportHospitalController); medicalsHospitalReportHospitalController.$inject = ['$rootScope', '$scope', '$window', '$ajax', '$timeout', 'API', 'Excel','CoordinatorMedicalsServices'] function medicalsHospitalReportHospitalController($rootScope, $scope, $window, $ajax, $timeout, API, Excel, cordMedcService) { const vm = this; const alias = $window.localStorage['alias']; vm.hospitalList = []; vm.hospitalId ; vm.itens = []; const init = () => { cordMedcService.listHospitals({ search: "", status : "all", rowsToSkip: 0, entity: alias, }) .then((response) =>{ vm.hospitalList = response.data; }) }; vm.updateData = (page) => { var params = { entity: $rootScope.main.user.entity, hospitalId: vm.hospitalId || '', }; var strParams = Object.keys(params).map(function(key) { return key + '=' + params[key]; }).join('&'); //return this to reports/chekin $ajax.get(API.concat('coordinator/schedule/reports/medicals/?' + strParams), null, null) .then((res) => { // console.log(res.items); vm.itens = res // vm.refs = res.refs; }); }; vm.exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'Relatório de Check in',$rootScope.main.user.name); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Check-in.xls'; document.getElementById('dlink').click(); },100); // trigger download }; init(); } 'use strict'; angular .module('youDoctor') .controller('MedicalHoursReportController', MedicalHoursReportController); MedicalHoursReportController.$inject = ['$rootScope', '$scope', 'ScheduleManagerServices','CoordinatorMedicalsServices','Excel','$timeout', 'DomainServices']; function MedicalHoursReportController($rootScope, $scope, ScheduleManagerServices, CoordinatorMedicalsServices, Excel, $timeout, DomainServices) { const vm = this; vm.medicals = []; vm.hospitals = []; vm.endDateFormatted = new Date(); vm.iniDateFormatted = new Date(vm.endDateFormatted.getFullYear(), vm.endDateFormatted.getMonth(), 1); vm.exportToExcel = function(tableId) { console.log(tableId) $scope.exportHref = Excel.tableToExcel(tableId,'Relatório de Horas consolidadas',$rootScope.main.user.name); $timeout(function() { document.getElementById('dlink').href = $scope.exportHref; document.getElementById('dlink').download = 'Horas consolidadas.xls'; document.getElementById('dlink').click(); },100); // trigger download }; const init = function() { vm.hospitals = []; var params = {entity: $rootScope.main.user.entity}; // CoordinatorMedicalsServices.getMyHospitals(params) // .then(function(hospitals) { // vm.hospitals = hospitals; // }); }; const getFilter = function() { var result = { startsAt: vm.startsAt.utc().startOf('day').toISOString(), endsAt: vm.endsAt.utc().endOf('day').toISOString(), entity: $rootScope.main.user.entity, hospitalId: "", hospitalServiceId: "", medicalId: "" }; if (vm.hospital && vm.hospital.id) { result.hospitalId = vm.hospital.id; } if (vm.doctor) { result.medicalId = vm.doctor; } return result; }; const transformResponseToTable = function(response) { var newArr = []; var refs = response.refs; response.items.forEach(function(line) { var _name = 'SEM MÉDICO', _crm, _position = refs.positionId[line.positionId].name, _service = refs.hospitalServiceId[line.hospitalServiceId]? refs.hospitalServiceId[line.hospitalServiceId].name: "", _daily = line.diurno, _nightly = line.noturno; if(_service){ if (typeof refs.medicalId !== 'undefined' && typeof refs.medicalId[line.medicalId] !== 'undefined') { _name = refs.medicalId[line.medicalId].name; _crm = [ refs.medicalId[line.medicalId].crm, refs.medicalId[line.medicalId].state ].join(' '); } var report = { doctorName: _name, crm: _crm, position: _position, service: _service, nightly: _nightly, daily: _daily, total: _nightly + _daily }; newArr.push(report); } }); return newArr; }; vm.execute = function() { var filter = getFilter(); vm.loading = true; ScheduleManagerServices.getReport(filter) .then(function(report) { console.log("report", report) var hoursDuty = report.items.map(function (row) { row.noturno = 0; row.diurno = 0; row.duties.forEach(function (duty) { vm.dutyToPattern(duty).forEach(function(item){ row.noturno += item.noturno || 0; row.diurno += item.diurno || 0; }); }); return row; }); console.log("hoursDuty", hoursDuty) var friendlyReport = transformResponseToTable(report); vm.report = friendlyReport; }) .finally(function() { vm.loading = false; }); }; vm.dutyToPattern = function (duty) { var startsAt = moment(duty.startsAt).tz(myTimeZone); var endsAt = moment(duty.endsAt).tz(myTimeZone); var result = []; var temp = { diurno: [7,8,9,10,11,12,13,14,15,16,17,18], noturno: [0,1,2,3,4,5,6,19,20,21,22,23], } var i = startsAt.clone(); var hour = 1; while (i < endsAt){ if (temp.diurno.indexOf(i.hours()) >= 0) result.push({diurno: hour}); else result.push({noturno: hour}); i.hours(i.hours() + 1); } return result; } vm.selectHospital = function(hospital) { vm.selected = hospital; vm.service = null; vm.hospital = hospital; }; vm.selectService = function(service) { vm.selected = service; vm.hospital = null; vm.service = service; }; vm.selectMedical = function(doctorSelected) { vm.doctor = doctorSelected.id; }; vm.searchMedicals = function(text) { var query = {text: text, coordinatorId: $rootScope.main.user.id }; return DomainServices.doctorsBy(query) .then(function(response) { vm.medicals = response.items; return response.items.length == 0 ? [] : response.items; }); }; // this.searchMedicals = function(text) { // var query = {text: text}; // CoordinatorMedicalsServices.getMyDoctors(query) // .then(function(response) { // vm.medicals = response.items; // response.items.unshift({name: 'TODOS', id: null}); // return response.items.length == 0 ? [] : response.items; // }) // } init(); } 'use strict'; angular .module('youDoctor') .controller('MedicalHoursReportHospitalController', MedicalHoursReportHospitalController); MedicalHoursReportHospitalController.$inject = ['$rootScope', '$window','$scope', 'ScheduleManagerServices','CoordinatorMedicalsServices','Excel','$timeout', 'CoordinatorMedicalsServices', 'DomainServices']; function MedicalHoursReportHospitalController($rootScope, $window,$scope, ScheduleManagerServices, CoordinatorMedicalsServices, Excel, $timeout, cordMedcService, DomainServices) { const vm = this; const alias = $window.localStorage['alias']; vm.selectedServiceId= ''; vm.dutylList = []; vm.selectedServiceText; vm.hospitalList = []; vm.medicals = []; vm.hospitals = []; vm.endDate = moment.utc().endOf('day'); vm.iniDate = moment.utc().date(1).hours(0).minutes(0).seconds(0); vm.hospitalId = ""; vm.endsAt; vm.startsAt; vm.exportToExcel = function(tableId) { console.log(tableId) $scope.exportHref = Excel.tableToExcel(tableId,'Relatório de Horas consolidadas',$rootScope.main.user.name); $scope.exportHref = Excel.tableToExcel(tableId,'sheet name'); $timeout(function() { document.getElementById('dlink').href = $scope.exportHref; document.getElementById('dlink').download = 'Horas consolidadas.xls'; document.getElementById('dlink').click(); },100); // trigger download }; const init = function() { cordMedcService.listHospitals({ search: "", status : "all", rowsToSkip: 0, entity: alias, }) .then((response) =>{ vm.hospitalList = response.data; }) }; const getFilter = function() { var result = { startsAt: vm.startsAt.utc().startOf('day').toISOString(), endsAt: vm.endsAt.utc().endOf('day').toISOString(), entity: $rootScope.main.user.entity, hospitalId: vm.hospitalId, hospitalServiceId: vm.selectedServiceId, medicalId: "" }; if (vm.hospital && vm.hospital.id) { result.hospitalId = vm.hospital.id; } if (vm.service && vm.service.id) { result.hospitalServiceId = vm.service.id; } return result; }; const transformResponseToTable = function(response) { var newArr = []; var refs = response.refs; response.items.forEach(function(line) { var _name = 'SEM MÉDICO', _crm, _position = refs.positionId[line.positionId].name, _service = refs.hospitalServiceId[line.hospitalServiceId]? refs.hospitalServiceId[line.hospitalServiceId].name: "", _daily = line.diurno, _nightly = line.noturno; if(_service){ if (typeof refs.medicalId !== 'undefined' && typeof refs.medicalId[line.medicalId] !== 'undefined') { _name = refs.medicalId[line.medicalId].name; _crm = [ refs.medicalId[line.medicalId].crm, refs.medicalId[line.medicalId].state ].join(' '); } var report = { doctorName: _name, crm: _crm, position: _position, service: _service, nightly: _nightly, daily: _daily, total: _nightly + _daily }; newArr.push(report); } }); return newArr; }; vm.execute = function() { if(vm.hospitalId){ var filter = getFilter(); vm.loading = true; ScheduleManagerServices.getReport(filter) .then(function(report) { console.log("report", report) var hoursDuty = report.items.map(function (row) { row.noturno = 0; row.diurno = 0; row.duties.forEach(function (duty) { vm.dutyToPattern(duty).forEach(function(item){ row.noturno += item.noturno || 0; row.diurno += item.diurno || 0; }); }); return row; }); console.log("hoursDuty", hoursDuty) var friendlyReport = transformResponseToTable(report); vm.report = friendlyReport; }) .finally(function() { vm.loading = false; }); }else{ alert("Selecione o hospital desejado") } }; vm.dutyToPattern = function (duty) { var startsAt = moment(duty.startsAt).tz(myTimeZone); var endsAt = moment(duty.endsAt).tz(myTimeZone); var result = []; var temp = { diurno: [7,8,9,10,11,12,13,14,15,16,17,18], noturno: [0,1,2,3,4,5,6,19,20,21,22,23], } var i = startsAt.clone(); var hour = 1; while (i < endsAt){ if (temp.diurno.indexOf(i.hours()) >= 0) result.push({diurno: hour}); else result.push({noturno: hour}); i.hours(i.hours() + 1); } return result; } vm.getSelectedHospital = function(hospital) { vm.selected = hospital; vm.hospital = hospital; }; vm.selectService = function(service) { vm.selected = service; vm.hospital = hospital; vm.service = service; }; vm.selectMedical = function(doctorSelected) { vm.doctor = doctorSelected.id; }; vm.searchMedicals = function(text) { var query = {text: text, coordinatorId: $rootScope.main.user.id }; return DomainServices.doctorsBy(query) .then(function(response) { vm.medicals = response.items; return response.items.length == 0 ? [] : response.items; }); }; vm.getServiceText = () => { vm.selectedServiceId = ''; if(!vm.hospitalId) vm.hospitalId = ""; if(vm.hospitalList.items){ vm.hospitalList.items.forEach((hospital) =>{ hospital.services.forEach((service) =>{ if(vm.selectedServiceId == service.id) vm.selectedServiceText = hospital.name +" - "+ service.name; }) }) vm.dutylList = vm.hospitalList.items.find(x=> x.id == vm.hospitalId); } }; // this.searchMedicals = function(text) { // var query = {text: text}; // CoordinatorMedicalsServices.getMyDoctors(query) // .then(function(response) { // vm.medicals = response.items; // response.items.unshift({name: 'TODOS', id: null}); // return response.items.length == 0 ? [] : response.items; // }) // } init(); } 'use strict'; angular .module('youDoctor') .factory('Excel', Excel) Excel.$inject = ['$window'] function Excel($window){ let current_datetime = new Date(); let formatedDate = current_datetime.getDate() + "-" + (current_datetime.getMonth() + 1) + "-" + current_datetime.getFullYear() var uri='data:application/vnd.ms-excel;base64,', base64=function(s){return $window.btoa(unescape(encodeURIComponent(s)));}, format=function(s,c){return s.replace(/{(\w+)}/g,function(m,p){return c[p];})}; return { tableToExcel:function(tableId,worksheetName,reporterName=''){ // var image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAfCAYAAAARB2hWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAyCSURBVHja7Jp5cBvVGcA/0pajdKBcLQUSSEJpSw9oAzMtw6RMGXJ43658xDYJ+NCxKztcLQM0EEn7JJ8hiXNATkKAQiFpC3GsfSvJtnxpJfkIOXzJ2pVtroaZMkMZphQotNs/9slZy8JOGMO0g/94M9r3vn3a/X7vu95b4BUVpmn1vKLqvKL+m1fU8nS/ENPA1jIE9vYR4KMqWJsHgY8kp5sHKo+9BiWHjsHK3zcCEgkgfAbNKwNXFwKECTAuP3A1QSh+JgZ3Pt8N+dvbIWd905nNN0NjPBIgL4GifQqs2tlpXItTZbjaILBVgdN/H9G4r3BPBIqfiQHy0v8yyUynRDuFYW7reUVdKMRTYA0Ngr09MQfkSwTSkAWI0aLaO/b2xFZHV3I+r6hgDc0B+TKAsBkg/s4r6on0tRDTdD6q6XwkucPaPHTWHJAvHgjwilrKK+o4r6jHeUW9lfZdzSvq7kmwIurfeEW9fg7IbAOJJEHoToHQnZrRBfGKeimvqO2GC5uAc9sckFkEInSnoIz0g70tARV9Y6cDBfio6uKj2oS1OCLJJc7uFFQeGYeKvrGJdl/ir1Au91Mg0hyQ0wFS8eo43HWgDwp2dIAQT80MJaqBvWMEbK3Da4WYAcXZnRovl/vPXXOgD+7+y6sTrUzqh+JnYpDz6OEzV9JXFsiRMSg9fBwsG5qhaJ8CQkyDilfHPxOIENPA3pYAa/MgCN2pOj6q6kI8pVtDQztKDh2DUv+JiWZtHYb87e2w4pFDc0DOBEjJoWOQv70d8re3Q+GeLrCGBo2YMo3bckSS4Ixr4OxJ9fIRVRe6U7qzd/Qnzu4UOLtTUNE7CpVHxyGvIWy4rDkgMwK5gVfUVRWvjueWNB67IndzKxTs7ADL481QuCcCzu4UCDHNDOFaXlHzeUVdJcS06/ioBsXPxmD1H3uWCfGULnSndHt4+Iky/wkoDw6AvS0Bd798FBiXf8oDzAGZCuQH5trC0Tly0hocONsaGoTy4ADYWoaAj06yiMUZ9clJIaadVyb3Q6n/OPCK2kXjydtlcv+5JYePgy2cgOL9MVj5SOPnU9JXDEgDH1F1IaoZ6WtM05x9o+DsHQVn3yg4e6a4qyt4Rf0wow5Z6+wx7uEV9be0mtfLg4N3lJF+KA8OAlcThJXrDgPCZD7CpDLzIelL3YQwsc8SkCUIE4ww8SBM7kWYLPx/AXJUiGm6LZyI28KJy4SYdv6Mqa6inkcLwTcolJdNYzekQTl7Ug9XHBmDewbfgIIdHbD8wZcBeWVAmKSQl/gYjwSMyw9sdQCQTwYkkgTCZOOUF/GdApLj8gNXG4TVz3cbGeGTHZ8FJIAw0TPa88YcTdNa1WkDqQtRINKsAnlfiGq6o3Nkm71zBISoBqcBJN0IVf6gqe98XlHfof3700VhOTFqEMZ4+AWM2/8OWxVYump3FxQ/GwOuLvQC4/K3mx7uYoSJE4mSi/XJRZb60NcRJsC4/cBWB+YX7Oy6qHCvArmbW4Fx+9P3XI0wmUd/D1MICxEm1yNMJISJzogSydsShvwn2o3FYTzPzQiTWoRJoRlI8f4oFO7pSgO5ncoUI0zmIVECrjrwc9YnP4REsgZhshJhUo4wuR9hco3pPZYiTOoQJgiJEjBuCYr2ReHOP3QD8pJbGI9UiTC5J23BwCvq+9TFbOZnghHVMuNJE1X8UIZsP+1/hRaPUHn0Ncjf2gbLH3oFqGLL2erAm4VPKZC/ra2AcfvfQiL5GsIEGFG6Ocftb2SrAuu4muDdjEfazHikF5BILkFeAkgkPsbtz8mSJGygLhEQJkmEyScZq7SBESU9d1PL6ryGcHrVHpqwIFHSGY/0NhKlK5BIoHBvBAqe7Lg4x+UfQ6KUaW0XIJE4slihjjDJof8XyehPIJGcb6kLgaU+9B2EycdInDReDEI8dYKPJHU+kuw06o4xQ+mRKRU5ODqT5kJxHq+or9Otk8YMUMcpkCZjS0aFtSdeh7v/fARWPHzIMH/DXJ9k3P4Y45bCOa6mpYaCpHPY6oCfqw39mqsJAlcTBOQlkLuxZR3rk5+jK9qDRLICiSTTldQjTK6iv0cQJp9mALmQ8Ug6WxUIs1UBYDzSLqqI5UiUgK0OXMjVhd5nPNJJtsaID4xITrJVgX+xXnkRneO71B2uMM27ms7zfVOfn3H7dWa9/2b6vguozLEctx9yXP7LM+BtRZjoYGsd2iXEU7qzO6Vbm4duWvNSLzi6kplpLpjPQOhYoSk7e1CIammIZ/GK+hod+1P6fmfvKDg6R4D1yZDj8pt98bilPrQxr6HVgOT2C5a6kCdvc+tE0LTUN0PRXgW4muBOxu2/EmGyFmGyPIufrp0BCCBM3kFe0k9jmY4weYQuBGCrA8DVhRYyHkm3bGhegrzybYzLr+dubLmKq5anS9lz6VxX0uvrkEh0y4bQ6txNLcD6Jlzjr6jcj6ncKSBe+X7GI+lgax36RRqILTwcL34mBrbWYXBmFINCXANrMwUS1S7kFfUtPqrpfFR7766DfZesebEHHJEkCDFtgSkDq5sA0jMKjq4kcNWByQFVJNu4moCDqwum+9YxHqmccTUB65OBruS0Mh5GmNyCMLExHmmZWUE0NtUgTBZMayGipCOv/Bzrky+h7uLWU88ipePHJ4xb4hmP9ADrk//B1QaBqwtSxWYFkk+Ve5UZEFcfWmzZ2GwGcg6VK6VynxqukvyTcfl1S33oIRDiKeAjyc18JKk7e1K6ENei9o6R8zPjiclCrhFi2qhJ6WttrUNgax1KyxaZxkrM+2TlgQGjOHRPWml7GY/Em5R7H8JkfTq4sj4ZuJpAGkgDwuQaJJJKribAcjWnMhy2OjAPeclmhMkV08UQJEp67saW29mqADAuv06tzSzzPRpPbkWYLENeorM++VLWJwPyfmYGlQnkpwgTHXkkbiKtN+69kcotmbAQkcisT96AREnn6kJbzEpv5CNGcShEtY94Rd3CK+pSev6xiI+qdzg6k885Ikl9Ync3ktyS3u+qOPqa4coiyZf4SFIXYpru7Btd6Ow16pN7E29BadNxI4ZMfpmnECa86fpSmhFdz3gk4GqCYKkPAePyOxhX00Ga8QiWx5t3WzaEgHEb0PIawkWsT95vWsHpLGsBwuRH6SwLiRLJ29IGXH0zMB7pAJW50eRCx5BX/iBva1vaOj9AmLyBMDmPypyHMNmJMPmN6ZkL6DzzTZbfxVbJOlcbXEAXzTcRJh8gTMaozGX0eRi2KgBsdaCecUv61I8aoppxGhjJenRrFI/G2Fohbuz2ljQeh5JDx8AWHl4sxFP/EeIp3d6e6CxtOg5l0gkok06ALTwMxfuj6eLQ3PZPKhSNtgxhEmA8Es9WBZaxPnk98spNq3Z1Lsrd1AKMWwLGI21jPNJuGkvWIlEiCJOfzVCHvJB2fzSDAsbt76RjHyNR0pGXfMj65B9y1YF0zbQYYfIelfnINNdtpv/KmwLEADdI3eLHdPxthMnldDwd5FmanLgQJvqUtNbRObLY3jHytBDT3s1ynn5SiGmbbC1Dl9nbE+DsGQVb6zDcdbAP1hzoA2vz0H5nd0qnQErNQOxtw7BqV2c2C/llRnZiBNiqwLVcTfAxxiP5ctY33cfVhr69+sUeozJ/9DDQDKyU8Uh1CJPHkEiuzpj3JoRJNcLEhzB5AGGyyOwGi5+NGUWfUcMwjCi9wPrk31k2NJ/NVgUmJR60ldHC8iGEybeyuLnVCJNvZHFnRQiTFxEmQkb/2QiTNTRrAxroi6YEblt42LzDe8AEoyYdS8qDg2BvSwCvqGBrHYaKvjGoPDKeL8RTusNIoQeEmAYTWzC9o3DP0JtgDQ5AzqOHZ9xgnHBVdSEjoLvpdslzccjf2mYAqQ0CVxs8483KNJCip6NpCznVXx2A3MdbgK2SP98m6Cy0rOcbttZhI9gbWdKkAC3EDGiOzhHgFRXKgwPAR5I38Ir6iUl2eWZR6ewdBXt7ApBXzrb6piqtOjCh8M8EUjPLQKoCYHm8+X8HSJa2yaRkfkrFHkmCLTy8hI9M2mysz3qYFddAiKcgd1MrrFzXOAfkjIBEswJxZJGtNJ+n84r64nTbLhVHxqBge3u2ODIH5HNYiNXUf6v5Gy3a9k03lxDTwNk7Cvlbw7DikTkLmQ0gjfTz0pH0pz/Gx3Kqziuqbaad4TkgswNkW7ZPSdOHWfa24b32tsRFmftec0C+OCAPUggf8Ir6Lq+ow0JMO+joGLFbW4YuKA8MgC08kZHNAZmF9t8BAPQMtFC+2ypWAAAAAElFTkSuQmCC' var image= 'http://youdoctor.com.br/img-home/0-logo.png' var template=''+ '

Exportado pelo sistema Youdoctor (www.youdoctor.com.br) - '+formatedDate+'

Exportado por: '+reporterName+'
'+worksheetName+'
'+ '{table}
'; var table=$(tableId), ctx={worksheet:worksheetName,logo:image,table:table.html()}, href=uri+base64(format(template,ctx)); console.log("table",table); return href; } }; } 'use strict'; angular .module('youDoctor') .service('PermissionsServices', PermissionsServices) .controller('PermissionsController', PermissionsController) PermissionsController.$inject = ['$scope', 'PermissionsServices'] function PermissionsController($scope, PermissionsServices) { $scope.newForm = {} $scope.editForm = {} $scope.newPermission = {} $scope.permissions = []; const init = () => { PermissionsServices.getAll() .then(permissions => { $scope.permissions = permissions }) } $scope.delete = (permission) => { PermissionsServices.delete({id: permission._id}) .then((err, done) => { $scope.permissions.splice( $scope.permissions.indexOf(permission) , 1); $scope.main.showSuccess('Permissão removida com sucesso.'); }) } $scope.edit = function(permission){ $scope.editPermission = permission } $scope.submit = function(form, permission){ if (form.$valid) { PermissionsServices.save(permission) .then(function(p){ delete(p.permission.__v) $scope.editPermission = p.permission if(p.isNew) { $scope.permissions.push($scope.editPermission) $scope.main.showSuccess('Permissão cadastrada com sucesso.'); } else { $scope.main.showSuccess('Permissão alterada com sucesso.'); } }) } }; init(); } PermissionsServices.$inject = ['$http','API'] function PermissionsServices($http, API) { this.getAll = function(params) { return $http .get(API.concat('permissions/all')) .then((response) => response.data) .catch("error") }; this.getById = function(params) { return $http .get(API.concat('permissions/' + params.id)) .then((response) => response.data) .catch("error") }; this.save = function(params) { return $http .post(API.concat('permissions/save'), params) .then((response) => response.data) .catch("error") }; this.delete = function(params) { return $http .delete(API.concat('permissions/' + params.id)) .then((response) => response.data) .catch("error") }; } 'use strict'; angular .module('youDoctor') .service('PermissionGroupsServices', PermissionGroupsServices) .controller('PermissionGroupsController', PermissionGroupsController); PermissionGroupsController.$inject = ['$scope', '$filter', 'PermissionGroupsServices', 'PermissionsServices']; function PermissionGroupsController($scope, $filter, PermissionGroupsServices, PermissionsServices) { $scope.newForm = {}; $scope.editForm = {}; $scope.newPermissionGroup = {permissionIds: []}; $scope.permissionGroups = []; const init = () => { PermissionGroupsServices.getAll() .then(permissionGroups => { $scope.permissionGroups = permissionGroups; }); }; $scope.delete = (permissionGroup) => { PermissionGroupsServices.delete({id: permissionGroup._id}) .then((err, done) => { $scope.permissionGroups.splice( $scope.permissionGroups.indexOf(permissionGroup) , 1); $scope.main.showSuccess('Grupo de permissão removida com sucesso.'); }); }; $scope.edit = function(permissionGroup) { $scope.editPermissionGroup = permissionGroup; PermissionsServices.getAll() .then(permissions => { $scope.permissions = permissions; }); }; $scope.submit = function(form, permission) { if (form.$valid) { PermissionGroupsServices.save(permission) .then(function(p) { $scope.editPermissionGroup = p.permissionGroup; if (p.isNew) { $scope.permissionGroups.push($scope.editPermissionGroup); PermissionsServices.getAll() .then(permissions => { $scope.permissions = permissions; }); $scope.main.showSuccess('Grupo de permissão cadastrada com sucesso.'); } else { $scope.main.showSuccess('Grupo de permissão alterada com sucesso.'); } }); } }; // Function to toggle the permissions checkbox $scope.toggleCheck = function (item) { if ($scope.editPermissionGroup.permissionIds.indexOf(item._id) === -1) { $scope.editPermissionGroup.permissionIds.push(item._id); } else { $scope.editPermissionGroup.permissionIds.splice($scope.editPermissionGroup.permissionIds.indexOf(item._id), 1); } }; init(); } PermissionGroupsServices.$inject = ['$http','API']; function PermissionGroupsServices($http, API) { this.getAll = function(/*params*/) { return $http .get(API.concat('permissionGroups/all')) .then((response) => response.data) .catch('error'); }; this.getById = function(params) { return $http .get(API.concat('permissionGroups/' + params.id)) .then((response) => response.data) .catch('error'); }; this.save = function(params) { return $http .post(API.concat('permissionGroups/save'), params) .then((response) => response.data) .catch('error'); }; this.delete = function(params) { return $http .delete(API.concat('permissionGroups/' + params.id)) .then((response) => response.data) .catch('error'); }; } 'use strict'; angular .module('youDoctor') .service('MobileVersionsServices', MobileVersionsServices) .controller('MobileVersionsController', MobileVersionsController); MobileVersionsController.$inject = ['$scope', '$filter', 'MobileVersionsServices']; function MobileVersionsController($scope, $filter, MobileVersionsServices) { $scope.newForm = {}; $scope.editForm = {}; $scope.newMobileApp = {}; $scope.editMobileApp; $scope.mobileApps = []; const init = () => { MobileVersionsServices.getAll() .then(mobileApps => { $scope.mobileApps = mobileApps; }); }; $scope.delete = (mobileApp) => { MobileVersionsServices.delete({id: mobileApp._id}) .then((done) => { if(done) { $scope.mobileApps.splice( $scope.mobileApps.indexOf(mobileApp) , 1); $scope.main.showSuccess('Aplicativo removido com sucesso.'); } }); }; $scope.edit = function(mobileApp) { $scope.editMobileApp = mobileApp; }; $scope.submit = function(form, mobileApp) { if (form.$valid) { MobileVersionsServices.save(mobileApp) .then(function(ma) { $scope.editMobileApp = ma.mobileVersion; if (ma.isNew) { $scope.mobileApps.push(ma.mobileVersion); $scope.main.showSuccess('Aplicativo cadastrado com sucesso.'); } else { $scope.main.showSuccess('Aplicativo alterado com sucesso.'); } }); } }; init(); } MobileVersionsServices.$inject = ['$http','API']; function MobileVersionsServices($http, API) { this.getAll = function(/*params*/) { return $http .get(API.concat('mobileVersions/all')) .then((response) => response.data) .catch('error'); }; this.getById = function(params) { return $http .get(API.concat('mobileVersions/' + params.id)) .then((response) => response.data) .catch('error'); }; this.save = function(params) { return $http .post(API.concat('mobileVersions/save'), params) .then((response) => response.data) .catch('error'); }; this.delete = function(params) { return $http .delete(API.concat('mobileVersions/' + params.id)) .then((response) => response.data) .catch('error'); }; } 'use strict'; angular .module('youDoctor') .controller('HospitalsCtrl', HospitalsCtrl); HospitalsCtrl.$inject = ['$state','$scope','AdminHospitalServices','DomainServices','$modal', '$q','$ornito.Modal']; function HospitalsCtrl ($state, $scope, AdminHospitalServices, DomainServices, $modal, $q, $ornitoModal) { $scope.hospitals = {}; var hospitals = $scope.hospitals; $scope.hospitalPositions = []; hospitals.find = {name:''}; hospitals.all = []; var loadHospitals = function() { return $scope.main.lock('Carregando') .then(AdminHospitalServices.all.bind(AdminHospitalServices)) .then(function(allHospitals) { hospitals.all = allHospitals; }) .catch($scope.main.showError) .finally($scope.main.unlock); }; loadHospitals(); hospitals.reload = loadHospitals; hospitals.edit = function(hospital) { var params = { templateUrl: 'views/hospitals/hospital-edit.html', controller: 'HospitalEditCtrl', dataModal: {hospitalId: hospital.id}, size: 'lg' }; return $ornitoModal .showCustom(params) .then($state.go.bind($state,$state.current,{hospitalId:hospital.id},{reload:true})); }; hospitals.delete = function(hospital) { var params = { message: 'Deseja excluir o hospital ' + hospital.name, title: 'Atenção', options: ['Sim','Não'] }; $scope.main.askConfirmation(params) .then(function(answer) { if (answer == 'Sim') { $scope.main.lock('Excluindo hospital'); AdminHospitalServices.delete({id: hospital.id}) .finally($scope.main.clearLock) .then($state.go.bind($state,'main.menu.hospitals.main')) .then($scope.main.showSuccess.bind($scope.main.showSuccess, 'Hospital excluído com sucesso.')) .then(hospitals.reload) .catch($scope.main.showError) .finally($scope.main.unlock); } }); }; hospitals.onNew = function(newHospitalId) { return loadHospitals() .then($state.go.bind($state, 'main.menu.hospitals.manager.index.select.coordinators', {hospitalId: newHospitalId})); }; } 'use strict'; angular.module('youDoctor') .controller('HospitalEditCtrl', HospitalEditCtrl) HospitalEditCtrl.$inject = ['$scope','AdminHospitalServices','DomainServices','dataModal', '$modalInstance', 'NgMap','googleMaps'] function HospitalEditCtrl($scope, AdminHospitalServices, DomainServices, dataModal, $modalInstance, NgMap, googleMaps) { // googleMaps is a directive created from config file $scope.googleMapsKey = "https://maps.google.com/maps/api/js?key=" + googleMaps.key $scope.selectedLogo = ''; $scope.logoFileName = ''; $scope.photo = ''; $scope.allUnits = [ {id:'month', desc: 'Mese(s)'}, {id:'day', desc: 'Dia(s)'}, ]; $scope.markers = []; $scope.radii = []; var load = function(id) { $scope.waiting = true; return DomainServices.states() .then(function(states){ $scope.states = states; }) .then(function(){ return AdminHospitalServices .getById({id: id}) .then(function(response){ $scope.hospital = response.item; $scope.hospital.selectedUnit = null; for (var i = $scope.allUnits.length - 1; i >= 0; i--) { if ($scope.allUnits[i].id == $scope.hospital.medicalInactive.unit){ $scope.hospital.selectedUnit = $scope.allUnits[i]; break; } } $scope.googleMapsInit() $scope.refs = response.refs; $scope.waiting = false; }) }) .catch($modalInstance.dismiss); }; load(dataModal.hospitalId); $scope.changeLogo = function(evt) { var file = evt.currentTarget.files[0]; var reader = new FileReader(); reader.onload = function (evt) { $scope.$apply(function(){ $scope.selectedLogo = evt.target.result; }); }; reader.readAsDataURL(file); }; $scope.save = function () { $scope.waiting = true; if (!$scope.selectedLogo){ $scope.hospital.photo = ''; } else { $scope.hospital.photo = $scope.photo; } $scope.hospital.medicalInactive.unit = $scope.hospital.selectedUnit.id; console.log($scope.hospital); return AdminHospitalServices .save($scope.hospital) .then($modalInstance.close) .then(resetMap()) .catch(function(ex) { $scope.waiting = false; $scope.main.showError(ex); }) } $scope.cancel = function () { $modalInstance.dismiss('cancel'); resetMap(); }; $scope.geocode = function(){ NgMap.getMap().then(function(map) { var geocoder = new google.maps.Geocoder(); geocodeAddress(geocoder, map); }); } $scope.toggleCheck = () => { $scope.hospital.disableCheckout = !$scope.hospital.disableCheckout } // Geocode function, queries google maps api with address, and if there are any results, returns the lat/lng var geocodeAddress = function(geocoder, map) { var address = $scope.hospital.address, query = address.streetAddress1 + ", " + address.streetNumber + " - " + address.district + " - " + address.zipCode + " / " + address.city + " - " + address.state; geocoder.geocode({'address': query}, function(results, status) { if (status === 'OK') { resetMap(); $scope.hospital.address.location.lat = results[0].geometry.location.lat(); $scope.hospital.address.location.lng = results[0].geometry.location.lng(); $scope.geocodeHint = true; $scope.$apply(); setMarkerAndRadius(results[0].geometry, map); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } $scope.changeRadius = function(){ NgMap.getMap().then(function(map) { $scope.radii[0].setRadius( Number($scope.hospital.checkin.radius) ) $scope.$apply(); }); } $scope.googleMapsInit = function(){ var address = $scope.hospital.address, title = address.streetAddress1 + ", " + address.streetNumber + " - " + address.district + " - " + address.zipCode + " / " + address.city + " - " + address.state; if (address.location.lat && address.location.lng) { NgMap.getMap().then(function(map) { setMarkerAndRadius(address, map) }); } } // setup of Google Maps markers and radius var setMarkerAndRadius = function(address, map){ // Creates a marker for the hospital var marker = new google.maps.Marker({ map: map, position: address.location, draggable: true, animation: google.maps.Animation.DROP, }); // list to changes in marker position google.maps.event.addListener(marker, 'dragend', function (event) { $scope.hospital.address.location.lat = this.getPosition().lat(); $scope.hospital.address.location.lng = this.getPosition().lng(); }); // Creates a circle symbolizing the radius var circle = new google.maps.Circle({ map: map, radius: $scope.hospital.checkin.radius, fillColor: '#AA0000', editable: true }); // binds the circle to the marker circle.bindTo('center', marker, 'position'); // listener for radius size changes google.maps.event.addListener(circle, 'radius_changed', function() { $scope.hospital.checkin.radius = circle.getRadius(); $scope.$apply(); }); // Workaround necessary to prevent Gmaps gray area google.maps.event.trigger(map, "resize"); map.setCenter(address.location); // pushes marker and circle to according arrays. This is crucial, as there is no other way to retrieve this info when reseting the map is necessary $scope.markers.push(marker); $scope.radii.push(circle); } var resetMap = function(){ $scope.markers.forEach( function(marker) { marker.setMap(null); }); $scope.markers = [] $scope.radii.forEach( function(radius) { radius.setMap(null); }); $scope.radii = [] } } 'use strict'; angular.module('youDoctor') .controller('HospitalNewCtrl', HospitalNewCtrl) HospitalNewCtrl.$inject = ['$scope','AdminHospitalServices'] function HospitalNewCtrl($scope, AdminHospitalServices) { $scope.hospitalNew = {}; var hospitalNew = $scope.hospitalNew; var init = function(){ hospitalNew.selectedPhoto = ''; hospitalNew.photo = ''; hospitalNew.name = ''; if ($scope.hospitalNewForm){ $scope.hospitalNewForm.$setPristine(); $scope.hospitalNewForm.$setUntouched(); } } init(); hospitalNew.changePhoto = function(evt) { var file = evt.currentTarget.files[0]; var reader = new FileReader(); reader.onload = function (evt) { $scope.$apply(function(){ hospitalNew.selectedPhoto = evt.target.result; }); }; reader.readAsDataURL(file); }; angular.element(document.querySelector('#hospitalNewPhotoInput')).on('change', hospitalNew.changePhoto); hospitalNew.submit = function(){ if ($scope.hospitalNewForm.$valid) { var hospital = {name : $scope.hospitalNew.name} if (hospitalNew.selectedPhoto != ''){ hospital.photo = hospitalNew.photo; } AdminHospitalServices.save(hospital) .then(function(id){ if ($scope.hospitals && $scope.hospitals.onNew){ init(); $scope.hospitals.onNew(id); } $scope.main.showSuccess('Hospital cadastro com sucesso.'); }) } }; } angular .module('youDoctor') .controller('HospitalSelectedController', HospitalSelectedController); HospitalSelectedController.$inject = ['$state','$stateParams','AdminHospitalServices']; function HospitalSelectedController( $state,$stateParams, AdminHospitalServices) { var self = this; var load = function() { AdminHospitalServices.getById({id: $stateParams.hospitalId}) .then(function(data) { self.hospital = data.item; self.refs = data.refs; $state.go('main.menu.hospitals.manager.index.select.coordinators'); }); }; var removePosition = function(positionId) { AdminHospitalServices.removeHospitalPosition({ hospitalId: self.hospital.id, positionId: positionId, }) .then(self.load.bind(self)); }; var addPosition = function(name) { AdminHospitalServices.addHospitalPosition({ name: name, hospitalId: self.hospital.id, }) .then(self.load.bind(self)); }; this.load = load; this.removePosition = removePosition; this.addPosition = addPosition; load(); } 'use strict'; angular .module('youDoctor') .controller('HospitalCoordinatorController', HospitalCoordinatorController) HospitalCoordinatorController.$inject = ['$state','$stateParams','AdminHospitalServices','$q','$scope','DomainServices','$ornito.Modal'] function HospitalCoordinatorController( $state,$stateParams, AdminHospitalServices, $q, $scope, DomainServices,$ornitoModal) { var self = this; this.medical = {}; this.searchMedicals = function(text){ var query = {text: text}; return DomainServices.doctorsBy(query) .then(function(response){ self.medicals = response.items; }) } this.load = function(){ return AdminHospitalServices.getCoordinators({hospitalId: $stateParams.hospitalId}) .then(function(coordinators){ self.coordinators = coordinators; }) .catch($scope.main.showError); }; this.selectDoctor = function(){ var args = arguments; var params = { templateUrl: 'views/partials/select-medical.html' , controller: 'Main.SelectMedicalCtrl as selMedicalCtrl' , dataModal: {role: 'medical'} , size: 'md' }; return $ornitoModal.showCustom(params) .then(function(selected){ return { result: selected, args:args, } }) } this.addCoordinator = function(params){ return $scope.main.lock('Adicionando coordenador') .then(function(){ return AdminHospitalServices.addCoordinator({ coordinatorId: params.result.medicalId, hospitalId: $stateParams.hospitalId, }) }) .finally($scope.main.clearLock) .catch($scope.main.showError) .then(self.load.bind(this)) .finally($scope.main.unlock); } this.changeCoordinator = function(params){ return $scope.main.lock('Trocando coordenador') .then(function(){ return AdminHospitalServices.replaceCoordinator({ oldCoordinatorId: params.args[0], newCoordinatorId: params.result.medicalId, hospitalId: $stateParams.hospitalId, }) }) .finally($scope.main.clearLock) .catch($scope.main.showError) .then(self.load.bind(this)) .finally($scope.main.unlock); } this.add = function(coordinatorId){ return AdminHospitalServices.addCoordinator({ coordinatorId: coordinatorId, hospitalId: $stateParams.hospitalId }) .catch($scope.main.showError) .then(this.load.bind(this)); } this.delete = function(coordinatorId){ return AdminHospitalServices.deleteCoordinator({ coordinatorId: coordinatorId, hospitalId: $stateParams.hospitalId }) .catch($scope.main.showError) .then(this.load.bind(this)) } this.load(); } 'use strict'; angular .module('youDoctor') .service('AdminHospitalServices', AdminHospitalServices) AdminHospitalServices.$inject = ['$http', 'API'] function AdminHospitalServices($http, API) { this.delete = function(params) { var url = API.concat('hospital/'+params.id); return $http.delete(url); }; this.save = function(params) { var url = API.concat('hospital/save'); var hospital = { name: params.name, subscribeEmailBody: params.subscribeEmailBody, emailToNotifyOnDismiss: params.emailToNotifyOnDismiss, medicalInactive: params.medicalInactive, }; if (params.id) { hospital.id = params.id; } if (params.ipList) { hospital.ipList = params.ipList.replace(/ /g,'').split(","); } if (params.address) { hospital.address = { streetAddress1: params.address.streetAddress1, streetAddress2: params.address.streetAddress2, streetNumber: params.address.streetNumber, district: params.address.district, state: params.address.state, city: params.address.city, zipCode: params.address.zipCode, location: params.address.location } } if(params.disableCheckout){ hospital.disableCheckout = params.disableCheckout; } if(params.checkin){ hospital.checkin = params.checkin; } if (params.photo) { hospital.photo = params.photo; } hospital.serviceRequestExpireHours = params.serviceRequestExpireHours; return $http.post(url, hospital) .then(function(response){ return response.data }); }; this.allActiveHospitalServices = function(){ var url = API.concat('admin/all-active-hospital-services'); return $http.get(url) .then(function(response){ return response.data }); }; this.all = function(params) { var url = API.concat('hospital/all'); return $http.get(url) .then(function(response){ return response.data }); }; this.allByEntity = function(params) { var url = API.concat('hospital/allByEntity'); return $http.post(url, params) .then(function(response){ return response.data }); }; this.getUsersByHospitalId = function(params){ var url = API.concat('coordinator/getUsersByHospitalId'); return $http.post(url, params) .then(function(response){ return response.data }); } this.getById = function(params) { var url = API.concat('hospital/'+params.id); return $http.get(url) .then(function(response){ return response.data; }); }; this.addHospitalPosition = function(params){ var position = { name: params.name }; var url = API.concat('admin/hospital/' + params.hospitalId + '/position'); return $http.post(url, position) .then(function(response){ return response.data; }); }; this.removeHospitalPosition = function(params){ var url = API.concat('admin/hospital/' + params.hospitalId + '/position/' + params.positionId); return $http.delete(url) .then(function(response){ return; }); } // ############################### // coordinators // ############################### this.getCoordinators = function(p){ var url = API.concat('admin/hospital/'+p.hospitalId+'/coordinators'); return $http.get(url) .then(function(response){ return response.data; }); } this.addCoordinator=function(p){ var url = API.concat('admin/hospital/'+p.hospitalId+'/coordinator/add/'+p.coordinatorId); return $http.get(url) .then(function(response){ return response.data; }); } this.deleteCoordinator=function(p){ var url = API.concat('admin/hospital/'+p.hospitalId+'/coordinator/'+p.coordinatorId); return $http.delete(url) .then(function(response){ return response.data; }); } this.replaceCoordinator= function(p){ var url = API.concat('admin/hospital/'+p.hospitalId+'/coordinator/'+p.oldCoordinatorId+'/replace-to/'+p.newCoordinatorId); return $http.get(url) .then(function(response){ return response.data; }); } // ############################### this.getDirectors = function (p) { var url = API.concat('hospital/' + p.hospitalId + '/directors'); return $http.get(url) .then(function (response) { return response.data; }); }; this.addDirector = function (p) { var url = API.concat('admin/hospital/' + p.hospitalId + '/director'); return $http.post(url, p) .then(function (response) { return response.data; }); }; this.removeDirector = function (p) { var url = API.concat('admin/hospital/' + p.hospitalId + '/director/' + p.directorId); return $http.delete(url) .then(function (response) { return response.data; }); }; } 'use strict'; angular .module('youDoctor') .controller('HospitalsEntityCtrl', HospitalsEntityCtrl); HospitalsEntityCtrl.$inject = ['$state', '$window','$scope','AdminHospitalServices','DomainServices','$modal', '$q','$ornito.Modal']; function HospitalsEntityCtrl ($state, $window, $scope, AdminHospitalServices, DomainServices, $modal, $q, $ornitoModal) { $scope.hospitals = {}; var hospitals = $scope.hospitals; $scope.hospitalPositions = []; const alias = $window.localStorage['alias']; hospitals.find = {name:''}; hospitals.all = []; var loadHospitals = function() { return $scope.main.lock('Carregando') .then(() => { AdminHospitalServices.allByEntity({entity: alias}) .then(function(allHospitals) { hospitals.all = allHospitals; }) .catch($scope.main.showError) .finally($scope.main.unlock); }); }; loadHospitals(); hospitals.reload = loadHospitals; hospitals.edit = function(hospital) { var params = { templateUrl: 'views/hospitals/hospital-edit.html', controller: 'HospitalEditCtrl', dataModal: {hospitalId: hospital.id}, size: 'lg' }; return $ornitoModal .showCustom(params) .then($state.go.bind($state,$state.current,{hospitalId:hospital.id},{reload:true})); }; hospitals.delete = function(hospital) { var params = { message: 'Deseja excluir o hospital ' + hospital.name, title: 'Atenção', options: ['Sim','Não'] }; $scope.main.askConfirmation(params) .then(function(answer) { if (answer == 'Sim') { $scope.main.lock('Excluindo hospital'); AdminHospitalServices.delete({id: hospital.id}) .finally($scope.main.clearLock) .then($state.go.bind($state,'main.menu.hospitals.list')) .then($scope.main.showSuccess.bind($scope.main.showSuccess, 'Hospital excluído com sucesso.')) .then(hospitals.reload) .catch($scope.main.showError) .finally($scope.main.unlock); } }); }; hospitals.onNew = function(newHospitalId) { return loadHospitals() .then($state.go.bind($state, 'main.menu.hospitals.list.index.select.coordinators', {hospitalId: newHospitalId})); }; } angular .module('youDoctor') .controller('HospitalsEntitySelectedController', HospitalsEntitySelectedController); HospitalsEntitySelectedController.$inject = ['$state', '$window','$stateParams','AdminHospitalServices', 'Excel', '$timeout']; function HospitalsEntitySelectedController( $state, $window, $stateParams, AdminHospitalServices, Excel, $timeout) { var self = this; var load = function() { AdminHospitalServices.getById({id: $stateParams.hospitalId}) .then(function(data) { self.hospital = data.item; self.refs = data.refs; $state.go('main.menu.hospitals.list.index.select.coordinators'); }); AdminHospitalServices.getUsersByHospitalId({hospitalIds: [$stateParams.hospitalId]}) .then(function(data) { self.infoUsers = data; console.log("infoUsers", self.infoUsers) // self.refs = data.refs; // $state.go('main.menu.hospitals.list.index.select.coordinators'); }); }; var exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'sheet name'); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Usuarios.xls'; document.getElementById('dlink').click(); },100); // trigger download }; var removePosition = function(positionId) { AdminHospitalServices.removeHospitalPosition({ hospitalId: self.hospital.id, positionId: positionId, }) .then(self.load.bind(self)); }; var addPosition = function(name) { AdminHospitalServices.addHospitalPosition({ name: name, hospitalId: self.hospital.id, }) .then(self.load.bind(self)); }; this.load = load; this.removePosition = removePosition; this.addPosition = addPosition; this.exportToExcel = exportToExcel; load(); } 'use strict'; angular .module('youDoctor') .service('EntityGroupsServices', EntityGroupsServices) .service('EntityPropertiesServices', EntityPropertiesServices) .controller('EntityGroupsController', EntityGroupsController); EntityGroupsController.$inject = ['$scope', '$filter', 'EntityGroupsServices', 'EntityPropertiesServices', 'AdminHospitalServices']; function EntityGroupsController($scope, $filter, EntityGroupsServices, EntityPropertiesServices, AdminHospitalServices) { $scope.settings = {} $scope.newForm = {}; $scope.editForm = {}; $scope.newEntityGroup = {hospitalIds: [], alias: '', photo: '', porperties: []}; $scope.entityGroups = []; $scope.entityProperties = []; var settings = $scope.settings; var main = $scope.main; const init = () => { EntityGroupsServices.getAll() .then(entityGroups => { $scope.entityGroups = entityGroups; }); EntityPropertiesServices.getAll() .then(entityProperties => { $scope.entityProperties = entityProperties; }); }; $scope.delete = (entityGroup) => { EntityGroupsServices.delete({id: entityGroup._id}) .then((done) => { console.log(done); if(done) { $scope.entityGroups.splice( $scope.entityGroups.indexOf(entityGroup) , 1); $scope.main.showSuccess('Grupo de instituição removida com sucesso.'); } }).catch(() => { $scope.main.showError('Erro ao remover grupo de instituição'); }); }; $scope.edit = function(entityGroup){ $scope.editEntityGroup = entityGroup; AdminHospitalServices.all() .then(permissions => { $scope.permissions = permissions; }); }; $scope.submit = function(form, permission){ if (form.$valid) { EntityGroupsServices.save(permission) .then(function(p){ $scope.editEntityGroup = p.entityGroup; if (p.isNew) { $scope.entityGroups.push($scope.editEntityGroup); AdminHospitalServices.all() .then(permissions => { $scope.permissions = permissions; }); $scope.main.showSuccess('Grupo de instituição cadastrada com sucesso.'); } else { $scope.main.showSuccess('Grupo de instituição alterada com sucesso.'); } }); } }; // Function to toggle the permissions checkbox $scope.toggleCheck = function (item) { if ($scope.editEntityGroup.hospitalIds.indexOf(item.id) === -1) { $scope.editEntityGroup.hospitalIds.push(item.id); } else { $scope.editEntityGroup.hospitalIds.splice($scope.editEntityGroup.hospitalIds.indexOf(item.id), 1); } }; $scope.togglePropToNew = function (item) { if ($scope.newEntityGroup.properties && $scope.newEntityGroup.properties.indexOf(item._id) === -1) { $scope.newEntityGroup.properties.push(item._id); } else { $scope.newEntityGroup.properties.splice($scope.newEntityGroup.properties.indexOf(item._id), 1); } }; $scope.togglePropToUpdate = function (item) { if ($scope.editEntityGroup.properties.indexOf(item._id) === -1) { $scope.editEntityGroup.properties.push(item._id); } else { $scope.editEntityGroup.properties.splice($scope.editEntityGroup.properties.indexOf(item._id), 1); } }; function profileToScreen(profileServer){ settings.loaded = false; settings.selectedPhoto = ''; settings.selectedPhotoEdit = ''; settings.fileName = ''; settings.fileNameEdit = ''; settings.loaded = true; } function getProfile(msg){ return main.lock(msg || 'Buscando perfil') .finally(main.clearLock) .then(profileToScreen); } settings.changePhoto = function(evt) { var file = evt.currentTarget.files[0]; var reader = new FileReader(); reader.onload = function (evt) { $scope.$apply(function(){ settings.selectedPhoto = evt.target.result; }); }; reader.readAsDataURL(file); }; settings.changePhotoEdit = function(evt) { var file = evt.currentTarget.files[0]; var reader = new FileReader(); reader.onload = function (evt) { $scope.$apply(function(){ settings.selectedPhotoEdit = evt.target.result; }); }; reader.readAsDataURL(file); }; angular.element(document.querySelector('#profilePhotoInput')).on('change', settings.changePhoto); getProfile() .catch(main.showError) .finally(main.unlock); angular.element(document.querySelector('#profilePhotoEdit')).on('change', settings.changePhotoEdit); getProfile() .catch(main.showError) .finally(main.unlock); init(); } EntityGroupsServices.$inject = ['$http','API']; function EntityGroupsServices($http, API) { this.getAll = function() { return $http .get(API.concat('entityGroups/all')) .then((response) => response.data) .catch('error'); }; this.getById = function(params) { return $http .get(API.concat('entityGroups/' + params.id)) .then((response) => response.data) .catch('error'); }; this.save = function(params) { return $http .post(API.concat('entityGroups/save'), params) .then(function(response){ const data = response.data; if (data.entityGroup.photo){ return $http.post(API.concat('entityGroups/setPhoto'), {_id: data.entityGroup._id, photo: data.entityGroup.photo}) .then(function(){ return response; }); } return response; }) .then((response) => response.data) .catch('error'); }; this.delete = function(params) { return $http .delete(API.concat('entityGroups/' + params.id)) .then((response) => response.data) .catch('error'); }; } EntityPropertiesServices.$inject = ['$http','API']; function EntityPropertiesServices($http, API) { this.getAll = function() { return $http .get(API.concat('entityProperties/all')) .then((response) => response.data) .catch('error'); }; } 'use strict'; angular.module('youDoctor') .controller('UsersCtrl', UsersCtrl); UsersCtrl.$inject = ['$scope','UserServices', 'PermissionGroupsServices', 'EntityGroupsServices']; function UsersCtrl($scope, AdminUserServices, PermissionGroupsServices, EntityGroupsServices) { var main = $scope.main; $scope.user = {}; $scope.addUser = function () { return main.lock('Adicionando usuário') .then(function () { return AdminUserServices.addUser($scope.user) .finally(main.clearLock) .then($scope.load) .then(main.showMessageFn('Usuário adicionado.')) .finally(function () { $scope.user = {}; $scope.userForm.$setPristine(); $scope.userForm.$setUntouched(); }) .catch(main.showError); }) .finally(main.unlock); }; $scope.searchUser = ''; $scope.searchStatus = 'Sem filtro, digite pelo menos 3 letras'; $scope.loading = false; $scope.userList = []; $scope.doSearch = function () { $scope.load({ rowsToSkip: 0, text: $scope.searchUser }); }; $scope.loadMore = function () { $scope.load({ rowsToSkip: $scope.userList.length, text: $scope.searchUser }, true); }; $scope.load = function (values) { if ($scope.loading) { return; } values = values || {text: $scope.searchUser}; var params = { text: values.text, rowsToSkip: values.rowsToSkip || '0', rowsToReturn: '6' }; if (params.rowsToSkip === '0') { $scope.userList = []; } $scope.searchStatus = ''; $scope.loading = true; AdminUserServices.getUsers(params) .then(function (users) { users.forEach(function (user) { user.isCoordinator = user.roles.indexOf('coordinator') >= 0; user.isMedical = user.roles.indexOf('medical') >= 0; user.isAdmin = user.roles.indexOf('admin') >= 0; $scope.userList.push(user); }); if ($scope.userList.length === 0) { $scope.searchStatus = 'Nenhum registro foi encontrado'; } }) .finally(function () { $scope.loading = false; }); }; $scope.updatePermissions = function (user) { AdminUserServices .updatePermissions({ userId: user.id, permissionMatrix: user.permissionMatrix, }) .then(main.showMessageFn('Permissões atualizadas')) .catch(main.showError); }; $scope.delete = function (user) { var params = { message: 'Deseja excluir ' + user.name, title: 'Atenção', options: ['Sim', 'Não'] }; main.askConfirmation(params) .then(function (answer) { if (answer !== 'Sim') { return; } return main.lock('Excluíndo usuário') .then(function () { return AdminUserServices .deleteUser({userId: user.id}) .finally(main.clearLock) .then($scope.load) .then(main.showMessageFn('Usuário removido.')) .catch(main.showError); }) .finally(main.unlock); }); }; $scope.updatePwd = function (user) { var params = { message: 'Deseja realmente modificar a senha de ' + user.name, title: 'Atenção', options: ['Sim', 'Não'] }; main.askDangerConfirmation(params) .then(function (answer) { if (answer !== 'Sim') { return; } var newPassword = '123456'; return main.lock('Atualizando senha') .then(function () { return AdminUserServices .updateUserPassword({ userId: user.id, newPassword: newPassword, }) .finally(main.clearLock) .then(main.showMessageFn('A nova senha é: ' + newPassword)) .catch(main.showError); }) .finally(main.unlock); }); }; $scope.selectUser = function(user) { $scope.editUser = user; PermissionGroupsServices.getAll() .then(permissionGroups => { $scope.permissionGroups = permissionGroups; }); EntityGroupsServices.getAll() .then(entityGroups => { $scope.entityGroups = entityGroups; }); }; // Turns permission matrix into an array of the entity groups, and return the index of the eg._id $scope.entityGroupsIsChecked = function(eg) { return $scope.editUser.permissionMatrix.map( function(e){ return e.entityGroup; }).indexOf(eg._id); }; $scope.permissionGroupsIsChecked = function(pg, eg){ var eg_idx = $scope.entityGroupsIsChecked(eg); if (eg_idx > -1) { return $scope.editUser.permissionMatrix[eg_idx].permissionGroups.indexOf(pg._id); } else { return -1; } }; // Function to toggle the permissions checkbox $scope.entityGroupsToggleCheck = function(eg) { var eg_idx = $scope.entityGroupsIsChecked(eg); // Does not have the entityGroup, let's add it if (eg_idx === -1) { $scope.editUser.permissionMatrix.push({entityGroup: eg._id, permissionGroups: []}); } else { // Already has the entityGroup. let's remove it $scope.editUser.permissionMatrix.splice(eg_idx, 1); } }; // Function to toggle the permissions checkbox $scope.permissionGroupsToggleCheck = function(pg, eg) { var eg_idx = $scope.entityGroupsIsChecked(eg); // Does not have the permissionGroups, let's add it if ($scope.editUser.permissionMatrix[eg_idx].permissionGroups.indexOf(pg._id) === -1) { $scope.editUser.permissionMatrix[eg_idx].permissionGroups.push(pg._id); } else {// Already has the entityGroup. let's remove it $scope.editUser.permissionMatrix[eg_idx].permissionGroups.splice($scope.editUser.permissionMatrix[eg_idx].permissionGroups.indexOf(pg._id), 1); } }; $scope.load(); } 'use strict'; angular.module('youDoctor') .controller('ListUsersCtrl', ListUsersCtrl); ListUsersCtrl.$inject = ['$scope', '$window','UserServices', 'PermissionGroupsServices', 'EntityGroupsServices']; function ListUsersCtrl($scope, $window,AdminUserServices, PermissionGroupsServices, EntityGroupsServices) { var main = $scope.main; const alias = $window.localStorage['alias']; $scope.user = {}; $scope.addUser = function () { return main.lock('Adicionando usuário') .then(function () { return AdminUserServices.addUser($scope.user) .finally(main.clearLock) .then($scope.load) .then(main.showMessageFn('Usuário adicionado.')) .finally(function () { $scope.user = {}; $scope.userForm.$setPristine(); $scope.userForm.$setUntouched(); }) .catch(main.showError); }) .finally(main.unlock); }; $scope.searchUser = ''; $scope.searchStatus = 'Sem filtro, digite pelo menos 3 letras'; $scope.loading = false; $scope.userList = []; $scope.doSearch = function () { $scope.load({ rowsToSkip: 0, text: $scope.searchUser }); }; $scope.loadMore = function () { $scope.load({ rowsToSkip: $scope.userList.length, text: $scope.searchUser }, true); }; $scope.load = function (values) { if ($scope.loading) { return; } values = values || {text: $scope.searchUser}; var params = { text: values.text? values.text: "", rowsToSkip: values.rowsToSkip || '0', rowsToReturn: '6', alias: alias }; if (params.rowsToSkip === '0') { $scope.userList = []; } $scope.searchStatus = ''; $scope.loading = true; AdminUserServices.getAllUsersByAlias(params) .then(function (users) { users.forEach(function (user) { user.isCoordinator = user.roles.indexOf('coordinator') >= 0; user.isMedical = user.roles.indexOf('medical') >= 0; user.isAdmin = user.roles.indexOf('admin') >= 0; $scope.userList.push(user); }); if ($scope.userList.length === 0) { $scope.searchStatus = 'Nenhum registro foi encontrado'; } }) .finally(function () { $scope.loading = false; }); }; $scope.updatePermissions = function (user) { AdminUserServices .updatePermissions({ userId: user.id, permissionMatrix: user.permissionMatrix, }) .then(main.showMessageFn('Permissões atualizadas')) .catch(main.showError); }; $scope.delete = function (user) { var params = { message: 'Deseja excluir ' + user.name, title: 'Atenção', options: ['Sim', 'Não'] }; main.askConfirmation(params) .then(function (answer) { if (answer !== 'Sim') { return; } return main.lock('Excluíndo usuário') .then(function () { return AdminUserServices .deleteUser({userId: user.id}) .finally(main.clearLock) .then($scope.load) .then(main.showMessageFn('Usuário removido.')) .catch(main.showError); }) .finally(main.unlock); }); }; $scope.updatePwd = function (user) { var params = { message: 'Deseja realmente modificar a senha de ' + user.name, title: 'Atenção', options: ['Sim', 'Não'] }; main.askDangerConfirmation(params) .then(function (answer) { if (answer !== 'Sim') { return; } var newPassword = '123456'; return main.lock('Atualizando senha') .then(function () { return AdminUserServices .updateUserPassword({ userId: user.id, newPassword: newPassword, }) .finally(main.clearLock) .then(main.showMessageFn('A nova senha é: ' + newPassword)) .catch(main.showError); }) .finally(main.unlock); }); }; $scope.selectUser = function(user) { $scope.editUser = user; PermissionGroupsServices.getAll() .then(permissionGroups => { $scope.permissionGroups = permissionGroups; }); EntityGroupsServices.getAll() .then(entityGroups => { $scope.entityGroups = entityGroups.filter((p)=>{ return p.alias == localStorage.getItem('alias'); }); }); }; // Turns permission matrix into an array of the entity groups, and return the index of the eg._id $scope.entityGroupsIsChecked = function(eg) { return $scope.editUser.permissionMatrix.map( function(e){ return e.entityGroup; }).indexOf(eg._id); }; $scope.permissionGroupsIsChecked = function(pg, eg){ var eg_idx = $scope.entityGroupsIsChecked(eg); if (eg_idx > -1) { return $scope.editUser.permissionMatrix[eg_idx].permissionGroups.indexOf(pg._id); } else { return -1; } }; // Function to toggle the permissions checkbox $scope.entityGroupsToggleCheck = function(eg) { var eg_idx = $scope.entityGroupsIsChecked(eg); // Does not have the entityGroup, let's add it if (eg_idx === -1) { $scope.editUser.permissionMatrix.push({entityGroup: eg._id, permissionGroups: []}); } else { // Already has the entityGroup. let's remove it $scope.editUser.permissionMatrix.splice(eg_idx, 1); } }; // Function to toggle the permissions checkbox $scope.permissionGroupsToggleCheck = function(pg, eg) { var eg_idx = $scope.entityGroupsIsChecked(eg); // Does not have the permissionGroups, let's add it if ($scope.editUser.permissionMatrix[eg_idx].permissionGroups.indexOf(pg._id) === -1) { $scope.editUser.permissionMatrix[eg_idx].permissionGroups.push(pg._id); } else {// Already has the entityGroup. let's remove it $scope.editUser.permissionMatrix[eg_idx].permissionGroups.splice($scope.editUser.permissionMatrix[eg_idx].permissionGroups.indexOf(pg._id), 1); } }; $scope.load(); } 'use strict'; angular .module('youDoctor') .service('UserServices', AdminUserServices); AdminUserServices.$inject = ['$http','API',]; function AdminUserServices($http, API) { this.getUsers = function (params) { var url = API.concat('admin/users'); var values = ['rowsToSkip=' + params.rowsToSkip || '0']; if (params && params.text) { values.push('text=' + params.text); } if (params.rowsToReturn) { values.push('rowsToReturn=' + params.rowsToReturn); } url += '?' + values.join('&'); return $http.get(url) .then(function (response) { return response.data.items; }); }; this.getUsersByAlias = function (params) { var url = API.concat('admin/usersByHospital'); var values = ['rowsToSkip=' + params.rowsToSkip || '0']; values.push('text=' + params.text); if (params.rowsToReturn) { values.push('rowsToReturn=' + params.rowsToReturn); } if (params.alias) { values.push('entity=' + params.alias); } url += '?' + values.join('&'); return $http.get(url) .then(function (response) { return response.data; }); }; this.getAllUsersByAlias = function (params) { var url = API.concat('admin/usersByEntity'); var values = ['rowsToSkip=' + params.rowsToSkip || '0']; values.push('text=' + params.text); if (params.rowsToReturn) { values.push('rowsToReturn=' + params.rowsToReturn); } if (params.alias) { values.push('entity=' + params.alias); } url += '?' + values.join('&'); return $http.get(url) .then(function (response) { return response.data; }); }; this.deleteUser = function (params) { var url = API.concat('admin/user/' + params.userId); return $http.delete(url) .then(function (response) { return response.data; }); }; this.updatePermissions = function (p) { var url = API.concat('admin/user/updatePermissions'); return $http.post(url, p) .then(function (response) { return response.data; }); }; this.updateUserPassword = function (p){ var url = API.concat('admin/user/updatePassword'); return $http.post(url, p) .then(function (response) { return response.data; }); }; this.addUser = function (user) { var url = API.concat('admin/user'); return $http.post(url, user); }; } 'use strict'; angular .module('youDoctor') .controller('MedicalMedicalTabController', MedicalMedicalTabController) MedicalMedicalTabController.$inject = ['$scope', '$rootScope', '$ornito.Modal','CoordinatorMedicalsServices'] function MedicalMedicalTabController($scope, $rootScope, $ornitoModal, CoordinatorMedicalsServices) { $scope.doctorList = []; $scope.doctorNameSearch = ''; $scope.showDoctorDetail = function (doctor) { $scope.viewDetail = doctor.id; if ($scope.mobileScreen) { $ornitoModal.showCustom({ controller: 'coordinator.ModalDoctorDetailCtrl', templateUrl: 'views/coordinator/medicals/modal-doctor-detail.html', size: 'md', dataModal: { doctorId: doctor.id } }); } }; $rootScope.$on('reloadDoctorsList', function () { $scope.doDoctorSearch(); }); $scope.doDoctorSearch = function () { $scope.loadDoctors({ rowsToSkip: 0, text: $scope.doctorNameSearch }); }; $scope.loadMoreDoctors = function () { $scope.loadDoctors({ rowsToSkip: $scope.doctorList.length, text: $scope.doctorNameSearch }, true); }; $scope.loadDoctors = function (values) { console.log("values",values) if ($scope.loading) { return; } values = values || { text: '' }; var params = { text: values.text, rowsToSkip: values.rowsToSkip || 0, rowsToReturn: '8' }; if (params.rowsToSkip === 0) { $scope.doctorList = []; } $scope.searchStatus = ''; $scope.loading = true; CoordinatorMedicalsServices.getMyDoctors(params) .then(function (doctors) { var selectedExists = $scope.selected && params.rowsToSkip !== '0'; doctors.items.forEach(function (doctor) { selectedExists = $scope.selected && (selectedExists || doctor.id === $scope.selected.id); $scope.doctorList.push(doctor); }); if (!selectedExists) { $scope.selected = null; } if ($scope.doctorList.length === 0) { $scope.searchStatus = 'Nenhum registro foi encontrado'; } }) .finally(function () { $scope.loading = false; }); }; $scope.loadDoctors(); } 'use strict'; angular .module('youDoctor') .controller('MedicalMedicalListTabController', MedicalMedicalListTabController) MedicalMedicalListTabController.$inject = ['$scope', '$window', '$rootScope', '$ornito.Modal','CoordinatorMedicalsServices'] function MedicalMedicalListTabController($scope, $window, $rootScope, $ornitoModal, CoordinatorMedicalsServices) { $scope.doctorList = []; $scope.doctorNameSearch = ''; $scope.showDoctorDetail = function (doctor) { $scope.viewDetail = doctor.id; if ($scope.mobileScreen) { $ornitoModal.showCustom({ controller: 'coordinator.ModalDoctorDetailCtrl', templateUrl: 'views/coordinator/medicals/modal-doctor-detail.html', size: 'md', dataModal: { doctorId: doctor.id } }); } }; $rootScope.$on('reloadDoctorsList', function () { $scope.doDoctorSearch(); }); $scope.doDoctorSearch = function () { $scope.loadDoctors({ rowsToSkip: 0, text: $scope.doctorNameSearch }); }; $scope.loadMoreDoctors = function () { console.log("doctorsMore") $scope.loadDoctors({ rowsToSkip: $scope.doctorList.length, text: $scope.doctorNameSearch }, true); }; $scope.loadDoctors = function (values) { console.log("values",values) if ($scope.loading) { return; } values = values || { text: '' }; var params = { text: values.text, entity: $window.localStorage['alias'], rowsToSkip: values.rowsToSkip || 0, rowsToReturn: 50 }; if (params.rowsToSkip === 0) { $scope.doctorList = []; } $scope.searchStatus = ''; $scope.loading = true; CoordinatorMedicalsServices.getMyDoctorsFromGDI(params) .then(function (doctors) { var selectedExists = $scope.selected && params.rowsToSkip !== '0'; doctors.items.forEach(function (doctor) { selectedExists = $scope.selected && (selectedExists || doctor.id === $scope.selected.id); $scope.doctorList.push(doctor); }); if (!selectedExists) { $scope.selected = null; } if ($scope.doctorList.length === 0) { $scope.searchStatus = 'Nenhum registro foi encontrado'; } }) .finally(function () { $scope.loading = false; }); }; $scope.loadDoctors(); } 'use strict'; angular .module('youDoctor') .controller('MedicalMedicalListInactiveController', MedicalMedicalListInactiveController) MedicalMedicalListInactiveController.$inject = ['$scope', '$window', '$rootScope', '$ornito.Modal','CoordinatorMedicalsServices', '$modal','AdminHospitalServices'] function MedicalMedicalListInactiveController($scope, $window, $rootScope, $ornitoModal, CoordinatorMedicalsServices, $modal, AdminHospitalServices) { $scope.hospitalsList = []; $scope.doctorNameSearch = ''; $scope.rowsToSkip = 0; $scope.text= ""; const alias = $window.localStorage['alias']; $scope.init = function (values) { var params = { text: $scope.text, entity: $window.localStorage['alias'], rowsToSkip: $scope.rowsToSkip || 0, rowsToReturn: 8 }; if (params.rowsToSkip === 0) { $scope.hospitalsList = []; } $scope.searchStatus = ''; $scope.loading = true; AdminHospitalServices.allByEntity({entity: alias}) .then(function(allHospitals) { // hospitals.all = allHospitals; params.hospitalId= allHospitals[0].id console.log("hospital",allHospitals) CoordinatorMedicalsServices.loadInactiveDoctors(params) .then(function (entityes) { $scope.hospitalsList = entityes; $scope.hospitalsList.forEach((hospital) => { hospital.inactivityMedicals.map((doctor) =>{ var today = moment(new Date()).tz(myTimeZone); if(doctor.lastActivityWasAt){ doctor.lastActivityFull = ""; var date = moment(new Date(doctor.lastActivityWasAt)).tz(myTimeZone); doctor.lastActivityWasAt = moment(doctor.lastActivityWasAt).format("DD/MM/YYYY"); var diference = moment.duration(today.diff(date)); var years = Math.floor(diference.asYears()); if(years > 0){ doctor.lastActivityFull += years+ " anos, "; diference.subtract(years, "years") } var months = Math.floor(diference.asMonths()); if(months > 0){ doctor.lastActivityFull += months+ " meses e "; diference.subtract(months, "months") } var days = Math.floor(diference.asDays()); doctor.lastActivityFull += days +" dias"; diference.subtract(days, "days") } if(doctor.grantedAt){ doctor.grantedWasAt = ""; var date = moment(new Date(doctor.grantedAt)).tz(myTimeZone); doctor.grantedAt = moment(doctor.grantedAt).format("DD/MM/YYYY"); var diference = moment.duration(today.diff(date)); var years = Math.floor(diference.asYears()); if(years > 0){ doctor.grantedWasAt += years+ " anos"; } } if(doctor.requestedAt){ doctor.requestedWasAt = ""; var date = moment(new Date(doctor.requestedAt)).tz(myTimeZone); doctor.requestedAt = moment(doctor.requestedAt).format("DD/MM/YYYY"); var diference = moment.duration(today.diff(date)); var years = Math.floor(diference.asYears()); if(years > 0){ doctor.requestedWasAt += years+ " anos"; } } }) }) }) .finally(function () { if(hospital.inactivityMedicals.length < 1) alert("Nenhum médico inativo") $scope.loading = false; }); }) }; $scope.modal = function(hospital, doctor){ $modal.open( { templateUrl: 'views/medical/tabs/modal-remove-inactive.html' , controller: ['$scope', '$modalInstance', function($scope, $modalInstance){ $scope.doctor = {"_id": doctor.id, "name": doctor.name} $scope.hospital = {"_id": hospital.id, "name": hospital.name} $scope.close = function(){ $modalInstance.dismiss('cancel'); } $scope.remove = function(){ CoordinatorMedicalsServices.removeDoctorFromEntity({entityId: $scope.hospital._id, medicalId: $scope.doctor._id}) .then(() =>{ $modalInstance.close(); }) } }] }) .result .then(function(){ }); } $scope.init(); } 'use strict'; angular .module('youDoctor') .controller('MedicalBackupTabController', MedicalBackupTabController) MedicalBackupTabController.$inject = ['$scope','$rootScope','$ornito.Modal','youDoctor.GraphQL','CoordinatorMedicalsServices'] function MedicalBackupTabController ($scope, $rootScope, $ornitoModal, GraphQL, CoordinatorMedicalsServices) { var main = $scope.main; $scope.doctorList = []; $scope.searchDoctors = ''; $rootScope.$on('reloadDoctorsList', function () { $scope.loadBackup(0, $scope.searchDoctors); }); $scope.showDoctorDetail = function (doctor) { $scope.viewDetail = doctor.id; if ($scope.mobileScreen) { $ornitoModal.showCustom({ controller: 'coordinator.ModalDoctorDetailCtrl', templateUrl: 'views/coordinator/medicals/modal-doctor-detail.html', size: 'md', dataModal: { doctorId: doctor.id } }); } }; $scope.loadAll = function () { $scope.doctorList = []; return $scope.loadBackup(0, $scope.searchDoctors); }; $scope.loadBackup = function (skip, text) { $scope.searchStatus = ''; if (!skip) { skip = $scope.doctorList.length; } if (!text) { text = ''; } if (!$scope.loading) { $scope.loading = true; return GraphQL.query('coordinator.keptMedicals', '{\ keptMedicals(\ rowsToSkip: ' + skip + '\ rowsToReturn: 8\ text: "' + text + '"\ ) {\ items {\ id\ email\ name\ mobile\ photoUrl\ }\ }\ }') .then(function (res) { $scope.doctorList = $scope.doctorList.concat(res.keptMedicals.items); return $scope.doctorList; }) .finally(function () { $scope.loading = false; if ($scope.doctorList.length === 0) { $scope.searchStatus = text ? 'Nenhum registro foi encontrado' : 'Não há médicos na lista de backup'; } }); } }; $scope.remove = function (doctor) { return $ornitoModal.showCustom({ controller: 'RequestDenyController', templateUrl: 'views/coordinator/medicals/removeKeptMedical.html', size: 'md', dataModal: { main: main, message: 'Deseja remover o médico ' + doctor.name + ' da lista de backup?' } }) .then(function (reason) { return main.lock('Removendo médico da lista de backup') .then(function () { return CoordinatorMedicalsServices .removeKeptMedical({ medicalId: doctor.id }) .finally(main.clearLock) .then(function () { var i = $scope.doctorList .map(function (d) { return d.id; }) .indexOf(doctor.id); return $scope.doctorList.splice(i, 1); }) .finally(function () { $scope.loadBackup(0, $scope.searchDoctors); }) .then(main.showMessageFn('Médico removido da lista de backup.')) .catch(main.showError.bind(main)); }) .finally(main.unlock); }); }; $scope.loadAll(); } //require('./requests-tab.controller.scss'); angular .module('youDoctor') .controller('MedicalRequestsTabController', MedicalRequestsTabController) MedicalRequestsTabController.$inject = ['$scope','$ornito.Modal','$q','CoordinatorMedicalsServices','$interval'] function MedicalRequestsTabController($scope, $ornitoModal, $q, CoordinatorMedicalsServices, $interval) { var main = $scope.main; var loop = null; var stopLoop = function() { if (angular.isDefined(loop)) { $interval.cancel(loop); loop = undefined; } }; $scope.multiSelect = { show: false, selecteds: [] }; $scope.showDoctorDetail = function (doctor) { $scope.viewDetail = doctor.id; if ($scope.mobileScreen) { $ornitoModal.showCustom({ controller: 'ModalDoctorDetailCtrl', templateUrl: 'views/coordinator/medicals/modal-doctor-detail.html', size: 'md', dataModal: { doctorId: doctor.id } }); } }; var refreshCountDown = () => { var shouldReload = false; $scope.doctorList.forEach((doctor) => { Object.keys(doctor.hospitals).forEach((hospitalId) => { const hospital = doctor.hospitals[hospitalId]; hospital.requests.forEach((request) => { if (request.deadLineAt){ var duration = moment.duration(new Date(request.deadLineAt).getTime() - new Date().getTime()); if (duration.asMilliseconds() < -10 * 1000){ shouldReload = true; }; request.expire = duration.humanize(true); } }) }) }); if (shouldReload){ $scope.loadRequests(); } } $scope.$on('$destroy', function() { stopLoop(); }); $scope.loadRequests = function () { $scope.loading = true; var tempList = {}; $scope.multiSelect.selecteds = []; $scope.total = 0; return CoordinatorMedicalsServices.getRequestsWaiting() .then(function (requests) { stopLoop(); requests.forEach(function (req) { var doctor = tempList[req.medical.id]; $scope.total++; if (!doctor) { doctor = tempList[req.medical.id] = angular.copy(req.medical); doctor.hospitals = {}; } var hospital = doctor.hospitals[req.hospitalId]; if (!hospital) { hospital = doctor.hospitals[req.hospitalId] = angular.copy(req.hospital); } if (!hospital.requests) { hospital.requests = []; } $scope.multiSelect.selecteds.push(req.id); req.checked = true; hospital.requests.push(angular.copy(req)); }); }) .finally(function () { $scope.doctorList = Object.keys(tempList).map(function (key) { return tempList[key]; }); $scope.loading = false; loop = $interval(refreshCountDown, 60000); }); }; $scope.toggleSelect = function (req) { req.checked = !req.checked; if (req.checked) { $scope.multiSelect.selecteds.push(req.id); } else { var index = $scope.multiSelect.selecteds.indexOf(req.id); $scope.multiSelect.selecteds.splice(index, 1); } }; $scope.keepAll = function () { var requests = $scope.multiSelect.selecteds; main.askConfirmation({ message: 'Deseja enviar os médicos selecionados para a lista de backup?', title: 'Atenção', options: ['Sim', 'Não'] }) .then(function (reason) { if (!reason || reason != 'Sim') return; var erros = []; var i = 0; return requests.reduce(function (previous, requestId) { return previous .then(main.lock.bind(main, 'Salvando ' + (++i) + '/' + requests.length)) .then(CoordinatorMedicalsServices.denyRequestService .bind(CoordinatorMedicalsServices, { id: requestId, reason: 'Aguardando na lista de backup.', keepMedical: true }) ) .catch(function (ex) { erros.push(ex); }); }, $q.when()) .finally(main.clearLock) .then(function () { if (erros.length == 1) { throw new Error('Não foi possivél reprovar 1 solicitação.'); } if (erros.length > 1) { throw new Error('Não foi possivél reprovar ' + erros.length + ' solicitações.'); } }) .catch(main.showError.bind(main)) .then($scope.loadRequests) .finally(main.unlock); }); }; $scope.denyAll = function () { var requests = $scope.multiSelect.selecteds; return $ornitoModal.showCustom({ controller: 'RequestDenyController', templateUrl: 'views/coordinator/hospital-service-request-deny.html', size: 'md', dataModal: { main: $scope.main, message: 'Você confirma a REPROVAÇÃO das ' + requests.length + ' solicitações?' } }) .then(function (reason) { if (!reason) return; var erros = []; var i = 0; return requests.reduce(function (previous, requestId) { return previous .then(main.lock.bind(main, 'Reprovando ' + (++i) + '/' + requests.length)) .then(CoordinatorMedicalsServices.denyRequestService .bind(CoordinatorMedicalsServices, { id: requestId, reason: reason }) ) .catch(function (ex) { erros.push(ex); }); }, $q.when()) .finally(main.clearLock) .then(function () { if (erros.length == 1) { throw new Error('Não foi possivél reprovar 1 solicitação.'); } if (erros.length > 1) { throw new Error('Não foi possivél reprovar ' + erros.length + ' solicitações.'); } }) .catch(main.showError.bind(main)) .then($scope.loadRequests) .finally(main.unlock); }); }; $scope.grantAll = function () { var requests = $scope.multiSelect.selecteds; main.askConfirmation({ message: 'Você confirma a APROVAÇÃO das ' + requests.length + ' solicitações?', title: 'Atenção', options: ['Sim', 'Não'] }) .then(function (answer) { if (answer != 'Sim') { return; } var erros = []; var i = 0; return requests.reduce(function (previous, requestId) { return previous .then(main.lock.bind(main, 'Aprovando ' + (++i) + '/' + requests.length)) .then(CoordinatorMedicalsServices.grantRequestService .bind(CoordinatorMedicalsServices, { id: requestId }) ) .catch(function (ex) { erros.push(ex); }); }, $q.when()) .finally(main.clearLock) .then(function () { if (erros.length == 1) { throw new Error('Não foi possivél aprovar 1 solicitação.'); } if (erros.length > 1) { throw new Error('Não foi possivél aprovar ' + erros.length + ' solicitações.'); } }) .catch(main.showError.bind(main)) .then($scope.loadRequests) .finally(main.unlock); }); }; $scope.grant = function (request) { return $ornitoModal.showCustom({ controller: 'RequestGrantController', templateUrl: 'views/coordinator/medicals/modal-grant-request.html', size: 'md', dataModal: { main: $scope.main, request: request, } }) .then(function(p) { if (!p || !p.granted){ return; } const {tempDoctors} = p; return main.lock('Aprovando médico') .then(() => CoordinatorMedicalsServices .grantRequestService({ id: request.id, tempDoctors, }) .finally(main.clearLock) .then(() => main.showMessage('Médico APROVADO.')) .then($scope.loadRequests) .catch((ex) =>{ console.log("Erro", ex); main.showError(ex) }) ) .finally(main.unlock); }); }; $scope.keep = function (request) { main.askConfirmation({ message: 'Deseja enviar o médico ' + request.medical.name + ' para a lista de backup?', title: 'Atenção', options: ['Sim', 'Não'] }) .then(function (reason) { if (!reason || reason == 'Não') return; return main.lock('Enviando médico para backup...') .then(function () { return CoordinatorMedicalsServices .denyRequestService({ id: request.id, reason: 'Aguardando na lista de backup.', keepMedical: true }) .finally(main.clearLock) .then(main.showMessageFn('Médico enviado para backup.')) .then($scope.loadRequests) .catch(main.showError.bind(main)); }) .finally(main.unlock); }); }; $scope.deny = function (request) { return $ornitoModal.showCustom({ controller: 'RequestDenyController', templateUrl: 'views/coordinator/hospital-service-request-deny.html', size: 'md', dataModal: { main: $scope.main, message: 'Deseja REPROVAR o médico ' + request.medical.name + '?' } }) .then(function (reason) { if (!reason) return; return main.lock('Reprovando médico') .then(function () { return CoordinatorMedicalsServices .denyRequestService({ id: request.id, reason: reason }) .finally(main.clearLock) .then(main.showMessageFn('Médico REPROVADO.')) .then($scope.loadRequests) .catch(main.showError.bind(main)); }) .finally(main.unlock); }); }; var init = function(){ $scope.loadRequests(); } init(); } angular .module('youDoctor') .controller("RequestGrantController", RequestGrantController) RequestGrantController.$inject = ['$scope','$modalInstance', 'dataModal', 'youDoctor.GraphQL'] function RequestGrantController($scope, $modalInstance, dataModal, GraphQL){ const {main} = $scope; const vogalsRegex = [ "a|à|á|â|ä|ã", "c|ç", "e|è|é|ê|ë", "i|ì|í|î|ï", "o|ò|ó|ô|ö|õ", "u|ù|ú|û|ü", ]; $scope.medical = dataModal.request.medical; $scope.hospital = { id: dataModal.request.hospitalId, name: dataModal.request.hospital.name, photoUrl: dataModal.request.hospital.photoUrl, } $scope.cancel = function(){ $modalInstance.close(); } $scope.grant = function(){ $modalInstance.close({ granted: true, tempDoctors: $scope.tempDoctors.filter(doctor => doctor.checked == true).map(doctor => ({name: doctor.name, positionId: doctor.position.id})), }); } $scope.tempDoctorToReplace = {}; $scope.hospitalService = dataModal.request.hospitalService; $scope.linkToTemp = true; const hospitalServiceId = $scope.hospitalService.id; const init = () => { $scope.waiting = true; GraphQL.query('#grant-request',`{ Coordinator { tempDoctorsBy ( hospitalServiceId: "${hospitalServiceId}", name: "${$scope.medical.name}"){ name nameHighlight position { id name } } } }`) .then((response) => { $scope.waiting = false; const accentuation = vogalsRegex.reduce((r,i) => r + i.replace('|','') ,''); const splitRegex = new RegExp(`[^a-z0-9${accentuation}]` ,'ig'); $scope.tempDoctors = response.Coordinator.tempDoctorsBy.map((doctor) => { doctor.nameHighlight = doctor.nameHighlight.replace(/\{([^}]*)\}/ig,'$1'); return doctor; }); }) .catch(ex => { $scope.waiting = false; return main.showError(ex); }) }; init(); } 'use strict'; angular.module('youDoctor') .controller('RequestDenyController', RequestDenyController) RequestDenyController.$inject = ['$scope','dataModal', '$q', '$modalInstance'] function RequestDenyController($scope, dataModal, $q, $modalInstance) { $scope.hsrd = {}; var meScope = $scope.hsrd; meScope.message = dataModal.message; meScope.options = ['Sim','Não']; meScope.reasons = [ "Melhorar Perfil", "Falta de Indicação", "Sem Vagas no Momento"]; meScope.reason = ''; meScope.cancel = function () { $modalInstance.dismiss(); }; meScope.answer = function(confirm){ if (!confirm) return $modalInstance.dismiss(); $modalInstance.close(meScope.reason) } } 'use strict'; angular .module('youDoctor') .service('CoordinatorMedicalsServices', CoordinatorMedicalsServices); CoordinatorMedicalsServices.$inject = ['$http', 'API', 'youDoctor.GraphQL']; function CoordinatorMedicalsServices($http, API, GraphQL) { this.getDoctorById = function (params) { var url = API.concat('coordinator/medical/by-id/'+params.id); return $http.get(url) .then(function(response) { return response.data; }); }; this.removeKeptMedical = function(p) { var url = API.concat('coordinator/removeKeptMedical/'+p.medicalId); return $http.delete(url) .then(function(response) { return response; }); }; this.removeMedicalFromHospitalService = function(p) { var url = API.concat('coordinator/hospital-service/'+p.hospitalServiceId+'/remove-medical/'+p.medicalId); return $http.get(url); }; this.getRequestsWaiting = function(p) { var url = API.concat('coordinator/service-requests-waiting'); return $http.get(url) .then(function(reponse) { var refs = reponse.data.refs; return reponse.data.items.map(function(request) { refs.medicals[request.medicalId].id = request.medicalId; return { medical: refs.medicals[request.medicalId], hospital: refs.hospitals[request.hospitalId], hospitalId: request.hospitalId, hospitalService: { id: request.hospitalServiceId, name: refs.hospitalServices[request.hospitalServiceId].name, }, id: request.id, deadLineAt: request.deadLineAt, }; }); }); }; this.grantRequestService = function(p) { var url = API.concat('coordinator/hospital-service-request/'+p.id+'/grant'); return $http.post(url,{ tempDoctors: p.tempDoctors, }) .then(function(response) { return response.data; }) }; this.denyRequestService = function(p) { var url = API.concat('coordinator/hospital-service-request/'+p.id+'/deny'); return $http.post(url, { reason: p.reason, keepMedical: p.keepMedical }) .then(function(response) { return response.data; }); }; this.getMyDoctors = function (p) { var url = API.concat('coordinator/my-doctors?text='+ p.text +'&rowsToSkip='+ p.rowsToSkip +'&rowsToReturn='+p.rowsToReturn) return $http.get(url) .then(function(response) { return response.data; }); }; this.removeDoctorFromEntity = ({entityId, medicalId}) => { var url = API.concat(`coordinator/hospital/${entityId}/remove-medical/${medicalId}`); return $http.get(url) .then(function(response) { return response.data; }) .catch( ex => { console.error(ex); }) } this.getMyDoctorsFromGDI = function (p) { var url = API.concat('admin/medicalsByHospital'); return $http.get(url + "?rowsToSkip="+ p.rowsToSkip + "&rowsToReturn="+ p.rowsToReturn + "&entity="+ p.entity + "&text="+ p.text) .then(function(response) { return response.data; }); }; this.getMyHospitals = function (params) { var url = API.concat('coordinator/my-hospitals'); return $http.get(url +"/"+ params.entity) .then(function(response) { response.data.forEach(function(hospital) { hospital.serviceById = {}; hospital.services.forEach(function(service) { hospital.serviceById[service.id] = service; }); }); return response.data; }); }; this.listHospitalSchedule = function (params) { var url = API.concat('coordinator/schedule/hospital-schedule'); return $http.post(url, params) } this.getHospitalsAsManager = function(alias){ return GraphQL.query('getHospitalsAsManager#', `{ hospitals: myHospitals(asCoordinatorOnly: true, entityAlias: "${alias}") { name id services { id name locked positions { id name } } } }`); } this.listHospitals = function (params) { var url = API.concat('entities/search'); return $http.post(url, { search: params.search, status: params.status, rowsToSkip: params.rowsToSkip, entity: params.entity, }) } this.loadInactiveDoctors = function(p){ return GraphQL.query('actions#inactive-doctor#loadInactiveDoctors', `{ Entities{ entities(hospitalId :\"`+p.hospitalId+`\"){ id name photoUrl inactivityMedicals { lastActivityWasAt grantedAt requestedAt medical { id name photoUrl } } } } }`) .then( reponse => { const entities = reponse.Entities.entities.filter(entity => entity.inactivityMedicals && entity.inactivityMedicals.length > 0); return(entities); }) } } angular .module('youDoctor') .controller('ScheduleController', ScheduleController); ScheduleController.$inject = ['$rootScope', '$scope','$stateParams', 'ScheduleServices','$timeout','$q','$ornito.Modal','$state', '$document','$window','$interval', 'CoordinatorMedicalsServices']; function ScheduleController($rootScope, $scope, $stateParams, ScheduleServices, $timeout, $q, $ornitoModal,$state,$document,$window,$interval, cordMedcService) { var main = $rootScope.main; $scope.mdS = { weeks: [], noChangingDay: true, }; var meScope = $scope.mdS; meScope.termChange = function(agreed) { console.log('==>',agreed); }; meScope.showServices = false; meScope.isMobile = !!navigator.userAgent.match(/(Android|webOS|iPhone|iPad|iPod|BlackBerry|WindowsPhone)/i), meScope.refreshFromNow = function() { if (meScope.lastDoctor) { meScope.lastDoctor.showContact = false; meScope.lastDoctor = null; } if (meScope.loading) return; var currentDay = meScope.activeDay; if (!currentDay) return; for(var h in currentDay.byHospitalId) { currentDay.byHospitalId[h].dutyIds.forEach(function(id) { var tmpDuty = meScope.data.refs.dutyId[id]; if (tmpDuty.myDispute) { tmpDuty.myDispute.fromNow = tmpDuty.myDispute.createdAt.fromNow(); } if (tmpDuty.doctor && tmpDuty.doctor.medicalId && !tmpDuty.doctor.mobile) { var tmpDoctor = meScope.data.refs.medicalId[tmpDuty.doctor.medicalId]; tmpDuty.doctor.mobile = tmpDoctor.mobile; tmpDuty.doctor.email = tmpDoctor.email; tmpDuty.doctor.name = tmpDoctor.name; } }); } }; $interval(function() { $scope.mdS.refreshFromNow(); }, 1000 * 60); var loadCalendar = function() { var today = moment(new Date()).tz(myTimeZone); meScope.weeks = []; meScope.allDays = {}; meScope.activeDay = null; var allDays = {}; var firstDay = meScope.firstDay.clone().tz(myTimeZone); var date = firstDay.clone(); var lastWeek = firstDay.day(); var weeks = [new Array(7)]; while(date.month() == firstDay.month()) { if (lastWeek > 6) { weeks.push(new Array(7)); lastWeek = 0; } var day = date.date(); allDays[day] = { day: day, date: date.toDate(), }; if (today.month() == date.month() && today.date() == date.date()) { allDays[day].isToday = true; } weeks[weeks.length-1][lastWeek] = day; /// o moment está se perdendo no fuso horário while (date.date() == day) { date.add(1, 'days'); } lastWeek++; } console.log("weeks", weeks); meScope.weeks = weeks; meScope.allDays = allDays; }; meScope.getDutyById = function(ids) { if (!ids || ids.length == 0 || !meScope.data || !meScope.data.refs || !meScope.data.refs.dutyId) { return null; } return ids.map(function(id) { return meScope.data.refs.dutyId[id]; }); }; meScope.reload = function() { var day = meScope.selectedDay; meScope.activeDay = null; meScope.selectedDay = null; return meScope.load(meScope.firstDay, true) .then(function() { meScope.selectDay(day); }); }; meScope.load = function(dt, reload) { var date = asMoment(dt); if (!reload) { meScope.firstDay = asMoment(date).startOf('month'); meScope.data = null; loadCalendar(); } meScope.loading = true; var params = {firstDay: date, entity: $scope.main.user.entity}; if (meScope.myHospitalSelected && meScope.myHospitalSelected.id != 0) { params.hospitalId = meScope.myHospitalSelected.id; } if (meScope.myServicesSelected && meScope.myServicesSelected.id != 0) { params.serviceId = meScope.myServicesSelected.id; } if(meScope.getAll) params.all = meScope.getAll; return ScheduleServices.get(params) .then(function(result) { convertServiceData(result); }) .catch(function(ex) { if (ex.message && ex.message == 'doctor-has-no-service') { return main.showError({ data: { message: 'Você não candidatou-se ou ainda não foi aprovado em nenhum serviço.'} }) .finally(function() { $state.go('main.menu.hospitals.services'); }); } if(!meScope.getAll) main.showError(ex); }) .finally(function() { meScope.loading = false; }); }; meScope.moveMonths = function(toAdd) { return meScope.selectDay(null) .then(function() { var dt = moment(meScope.firstDay); dt.add(toAdd,'months'); return meScope.load(dt); }); }; meScope.assignDuty = function(duty) { var params ={ message:'Você deseja assumir essa escala?', title: 'Atenção', options: ['Sim','Não'] }; return main.askConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Aguarde') .then(function() { return ScheduleServices .assignDuty({dutyId: duty.id}); }) .then(meScope.reload); }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); }; meScope.offer = function(duty, part) { var params; if (!part) { params = { templateUrl: 'views/medical/duty-offer.html', dataModal: {dutyId: duty.id, main : $scope.main }, controller: 'DutyOfferController', size: 'md', }; return $ornitoModal.showCustom(params) .then(meScope.reload); } else { params = { message:'Você deseja disponibilizar essa escala?', title: 'Atenção', options: ['Sim','Não'] }; return main.askConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Aguarde') .then(function() { return ScheduleServices .offerDuty({ dutyId: duty.id, part: part, }); }) .then(meScope.reload); }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); } }; meScope.takeOffer = function(duty) { var params = { message:'Você deseja assumir essa oferta de escala?', title: 'Atenção', options: ['Sim','Não'] }; return main.askConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Aguarde') .then(function() { return ScheduleServices .takeOfferDuty({dutyId: duty.id}); }) .then(meScope.reload); }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); }; meScope.hasButtonPermisson = function() { return main.user.permissions.indexOf("admin-master-buttons") > -1 }; meScope.todayDate = function() { new Date().getDate(); }; meScope.rollbackBid = function(duty) { var params = { message:'Você deseja remover essa oferta?', title: 'Atenção', options: ['Sim','Não'] }; return main.askConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Aguarde') .then(function() { return ScheduleServices .rollbackBid({dutyId: duty.id}); }) .then(meScope.reload); }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); }; meScope.left = function() { var container = $('#scroll-days-container'); container.animate({'scrollLeft': container.scrollLeft()-60}, 100); }; meScope.right = function() { var container= $('#scroll-days-container'); container.animate({'scrollLeft': container.scrollLeft()+60}, 100); }; meScope.selectDay = function(day, removeDuty) { meScope.noChangingDay = false; return $timeout(function() {}, 250) .then(function() { meScope.selectedDay = day; if (!meScope.data) { return; } meScope.activeDay = meScope.data.days[day]; meScope.noChangingDay = true; if (removeDuty) { delete meScope.dutyIdSelected; } else { meScope.dutyIdSelected = $state.params.dutyId; } if (day) { if(meScope.getAll){ $state.go('main.menu.schedule.daily-all.day', {day:day}); } else $state.go('main.menu.schedule.daily.day', {day:day}); meScope.refreshFromNow(); } }); }; var convertServiceData = function(result) { meScope.data = { refs: result.refs, days: {}, }; meScope.data.refs.dutyId = {}; var byDay = {}; // build struct data result.items.forEach(function(duty) { meScope.data.refs.dutyId[duty.id] = duty; var day = duty.startsAt.date(); var today = moment(new Date()); var item = byDay[day]; if (!item) { item = {}; byDay[day] = item; item.dutyIds = []; item.myDutyIds = []; item.aDutyIds = []; item.uDutyIds = []; item.bDutyIds = []; item.byHospitalId = {}; } var byHospitalId; if (!item.byHospitalId[duty.hospitalId]) { byHospitalId = { dutyIds : [], hospitalId: duty.hospitalId, byServiceId: {} }; item.byHospitalId[duty.hospitalId] = byHospitalId; } else { byHospitalId = item.byHospitalId[duty.hospitalId]; } var byHospitalServiceId; if (!byHospitalId.byServiceId[duty.hospitalServiceId]) { byHospitalServiceId = { dutyIds : [], byTimeSpan: [] }; byHospitalId.byServiceId[duty.hospitalServiceId] = byHospitalServiceId; } else { byHospitalServiceId = byHospitalId.byServiceId[duty.hospitalServiceId]; } var timeSpan = duty.startsAt.format('HH:mm')+ ' - ' + duty.endsAt.format('HH:mm'); duty.timeSpan = timeSpan; var timeSpanAt = duty.startsAt.toDate().getTime(); var endurance = duty.endurance; var byTimeSpan; var byTimeSpanIndex = 0; for (var xx=0;xx < byHospitalServiceId.byTimeSpan.length; xx++) { if (byHospitalServiceId.byTimeSpan[xx].timeSpanAt == timeSpanAt) { if (endurance > byHospitalServiceId.byTimeSpan[xx].endurance) { byTimeSpanIndex++; continue; } if (byHospitalServiceId.byTimeSpan[xx].endurance == endurance) { byTimeSpan = byHospitalServiceId.byTimeSpan[xx]; byTimeSpanIndex = xx; } break; } if (byHospitalServiceId.byTimeSpan[xx].timeSpanAt > timeSpanAt) { break; } else { byTimeSpanIndex++; } } if (!byTimeSpan) { byTimeSpan = { dutyIds: [], timeSpan: timeSpan, endurance: endurance, timeSpanAt: timeSpanAt, }; byHospitalServiceId.byTimeSpan.splice(byTimeSpanIndex, 0, byTimeSpan); } item.dutyIds.push(duty.id); byHospitalId.dutyIds.push(duty.id); byHospitalServiceId.dutyIds.push(duty.id); byTimeSpan.dutyIds.push(duty.id); if (duty.doctor && duty.doctor.medicalId == main.user.id) { item.myDutyIds.push(duty.id); }else{ if (duty.startsAt >= today) { if (duty.status == 'in-bid') { item.bDutyIds.push(duty.id); } else if (duty.status == 'unassigned') { item.uDutyIds.push(duty.id); }else{ item.aDutyIds.push(duty.id); } } } if (duty.startsAt < today) { duty.status = 'overdue'; } }); for(var day in byDay) { var itemDay = { day: day }; itemDay.uDutyIds = byDay[day].uDutyIds; itemDay.bDutyIds = byDay[day].bDutyIds; itemDay.myDutyIds = byDay[day].myDutyIds; itemDay.topDutyIds = byDay[day].myDutyIds.concat(byDay[day].uDutyIds, byDay[day].bDutyIds).reduce( function(hospitais, dutyId) { var duty = meScope.data.refs.dutyId[dutyId]; for(var i = 0; i <= hospitais.length-1; i++) { if (hospitais[i].id == duty.hospitalId) { hospitais[i].duties.push(duty); return hospitais; } } hospitais.push({ id: duty.hospitalId, name: meScope.data.refs.hospitalId[duty.hospitalId].name, photoUrl: meScope.data.refs.hospitalId[duty.hospitalId].photoUrl, duties: [duty], }); return hospitais; },[]); itemDay.byHospitalId = byDay[day].byHospitalId; meScope.data.days[day] = itemDay; } }; $scope.toMobileDay = function(e) { var self = e; var mobileDay = document.getElementById("selected-day-mobile"); if (self.clientY < mobileDay.getBoundingClientRect().top) { $document.scrollTo(mobileDay, 30, 1000); } }; meScope.onHospitalSelected = function() { meScope.data = { refs: { dutyId:{}, }, days: {}, }; meScope.reload(); }; meScope.onHospitalGetService = function() { if(meScope.myHospitalSelected.id != 0){ if(meScope.myHospitalSelected.services.length > 0){ meScope.myServices = [{id: 0, name: 'Selecione serviços'}]; meScope.myServices = meScope.myServices.concat(meScope.myHospitalSelected.services); meScope.myServicesSelected = meScope.myServices[0]; meScope.showServices = true; meScope.onHospitalSelected(); } else { meScope.myServices = [{id: 0, name: 'Não contem serviços'}]; meScope.myServicesSelected = meScope.myServices[0]; meScope.showServices = true; } } else meScope.showServices = false; }; meScope.onServiceSelected = function() { meScope.data = { refs: { dutyId:{}, }, days: {}, }; meScope.reload(); }; $scope.mdS.checkInStatus = function(duty) { var now = moment(); //console.log(now.diff(duty.startsAt,'minutes')) if(now.diff(duty.startsAt,'minutes') >= 0 && !duty.checkin.startedAt) { if(now.diff(duty.startsAt,'minutes') >= 5) { duty.checkInStatus = 'checkInDanger'; } else { duty.checkInStatus = 'checkInWarning'; } } else if(duty.endsAt && now.diff(duty.endsAt,'minutes') >= 0){ duty.checkInStatus = 'checkInStandBy'; } else if(duty.checkin.startedAt) { duty.checkInStatus = 'checkInSuccess'; } else { duty.checkInStatus = 'displayHide'; } return duty.checkInStatus; }; function init() { meScope.getAll = $stateParams.all; meScope.myHospitals = [{id: 0, name: 'Selecione hospital'}]; meScope.myHospitalSelected = meScope.myHospitals[0]; if(meScope.getAll){ ScheduleServices.allHospitals(main.user.entity, true) .then(function(myHospitals) { meScope.myHospitals = meScope.myHospitals.concat(myHospitals); if(meScope.myHospitals.length > 0){ } }); }else{ ScheduleServices.myHospitals(main.user.entity) .then(function(myHospitals) { meScope.myHospitals = meScope.myHospitals.concat(myHospitals); }); } var dt, x; if ($state.params.date) { if (($state.params.date instanceof Date == false) && ($state.params.date instanceof Object)) { x = $state.params.date; dt = moment(moment.tz([x.year(), x.month(), 1], myTimeZone).toDate().getTime()); } else if (typeof $state.params.date == "string") { x = new Date($state.params.date); dt = moment(moment.tz([x.getFullYear(), x.getMonth(), 1], myTimeZone).toDate().getTime()); } else { x = $state.params.date; dt = moment(moment.tz([x.getFullYear(), x.getMonth(), 1], myTimeZone).toDate().getTime()); } } else{ x = new Date(); dt = moment(moment.tz([x.getFullYear(),x.getMonth(),1], myTimeZone).toDate().getTime()); } meScope.load(dt) .then(function() { var aDay; if ($state.params.date) { aDay = new Date($state.params.date).getDate(); } else{ aDay = $state.params.day || new Date().getDate(); } return meScope.selectDay(aDay); }); } init(); } angular.module('youDoctor') .controller('ScheduleDayController', ScheduleDayController); ScheduleDayController.$inject = ['$scope','$state','$stateParams','$ornito.Modal','ScheduleServices','PermPermissionStore', '$modal']; function ScheduleDayController($scope, $state, $stateParams, $ornitoModal, ScheduleServices, PermPermissionStore, $modal) { var self = this; this.reload = function(duty) { $stateParams.date = duty.startsAt; // $stateParams.dutyId = duty.id; return $state.transitionTo($state.current.name, $stateParams, { reload: true, inherit: false, notify: true, }); }; if(PermPermissionStore.getPermissionDefinition('schedule-manager'))this.hasPermission=true; //var permissions = PermPermissionStore.getStore(); //console.log("permissions", permissions) var main = $scope.main; this.dispute = function(duty) { var params = { templateUrl: 'views/medical/duty-dispute.html', dataModal: {dutyId: duty.id, main : main }, controller: 'DutyDisputeController', size: 'md', }; return $ornitoModal .showCustom(params) .then(this.reload.bind(this, duty)); }; this.tell = function(doctor) { $modal.open({ templateUrl: 'views/partials/modal-tell.html' , controller: ['$scope', '$modalInstance', function($scope, $modalInstance){ $scope.tell = doctor.mobile; $scope.close = function(){ $modalInstance.dismiss('cancel'); } }] }) }; this.callEmergency = function(id){ ScheduleServices.callEmergency({ hospitalId : id }).then(function(total) { if(typeof total != "object")alert(total + " médicos foram chamados!") else alert(total.message); }) } this.disputeBlockSwitch = function(duty) { var action = duty.dispute.status == 'open' ? 'BLOQUEAR' : 'LIBERAR'; var params = { message: 'Você deseja '+action+' a função "ALERTA DE TROCA" para essa ESCALA?', title: 'Atenção', options: ['Sim','Não'], }; return main.askDangerConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Aguarde') .then(function() { return ScheduleServices .changeDisputeStatus({ dutyId: duty.id, disputeId: duty.dispute.id, open: duty.dispute.status == 'open' ? false : true, }); }) .then(self.reload.bind(this, duty)); }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); }; this.cancelDisputeBid = function(duty) { var params = { message:'Você deseja CANCELAR o seu "ALERTA DE TROCA" nessa ESCALA?', title: 'Atenção', options: ['Sim','Não'] }; return main.askDangerConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Aguarde') .then(function() { return ScheduleServices .cancelDisputeBid({ dutyId: duty.id, disputeId: duty.myDispute.disputeId, bidId: duty.myDispute.bidId, }); }) .then(self.reload.bind(this, duty)); }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); }; this.disputeChoice = function(duty) { return $ornitoModal .showCustom({ templateUrl: 'views/medical/duty-dispute-choice.html', dataModal: {dutyId: duty.id, main : $scope.main }, controller: 'DutyDisputeChoiceController', size: 'md', }) .then(this.reload.bind(this, duty)); }; } angular.module('youDoctor') .controller('ScheduleGuidedController', ScheduleGuidedController); ScheduleGuidedController.$inject = ['$state','$scope','ScheduleManagerServices']; function ScheduleGuidedController($state, $scope, ScheduleManagerServices) { $scope.createHospitalService = (entityServiveInfo) => { ScheduleManagerServices.createHospitalService({ hospitalId: entityServiveInfo.entityId, name: entityServiveInfo.name, locked: false, subscribe:{ customEmailBody: entityServiveInfo.customEmailBody, }, }) .then(() => { $state.go('main.menu.schedule.manager.index'); }); }; $scope.gotoState = function(state) { $state.go(state); }; $state.go('main.menu.schedule.manager.guided.cmp'); } 'use strict' angular .module('youDoctor') .controller('ScheduleHospitalController', ScheduleHospitalController); ScheduleHospitalController.$inject = ['$scope', '$window', '$ornito.Modal', '$http', 'API', 'Excel', 'CoordinatorMedicalsServices', '$timeout']; function ScheduleHospitalController ($scope, $window, $ornitoModal, $http, API, Excel, cordMedcService, $timeout) { const vm = this; const alias = $window.localStorage['alias']; vm.disablebutton= false; vm.selectedServiceId= ''; vm.selectedServiceText; vm.hospitalList = []; vm.dutylList = []; vm.selectedTab = $scope.activeTab ='0'; vm.schedules; vm.excel; vm.monthNames = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; vm.dayOfWeekName = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"]; vm.endDate = moment.utc().endOf('day'); vm.iniDate = moment.utc().date(1).hours(0).minutes(0).seconds(0); vm.hospitalId = ""; vm.endsAt; vm.startsAt; const init = () => { cordMedcService.listHospitals({ search: "", status : "all", rowsToSkip: 0, entity: alias, }) .then((response) =>{ vm.hospitalList = response.data; // vm.hospitalId = vm.hospitalList.items[0].id // vm.reloadServices(); }) }; vm.formatDuty = (d) => { console.log("dutiesssss",d) if(moment(d.endsAt).isAfter(moment("2019-10-20T00:00:00.000Z")) && moment(d.startsAt).isBefore(moment("2019-10-20T00:00:00.000Z"))) d.endsAt = moment(d.endsAt).add(1, "hours").format() return d; } vm.reloadServices = (isToday= false) => { if(!vm.hospitalId){ alert("Escolha o hospital desejado") } else if(!vm.selectedServiceId){ alert("Escolha o serviço desejado") }else{ if(vm.endsAt && vm.startsAt){ vm.disablebutton = true; const start = isToday? moment().startOf('day').utc().startOf('day'): moment(vm.startsAt).utc().startOf('week'); const end = isToday? moment().startOf('day').utc().endOf('day'): moment(vm.endsAt).utc().endOf('week'); cordMedcService.listHospitalSchedule({ hospitalServiceId: vm.selectedServiceId, hospitalId: vm.hospitalId, startsAt: start, endsAt: end }).then((response) => { console.log("resp", response) vm.disablebutton = false; var data = response.data; var schedules = []; data.items = data.items.map((item)=>{ item.duties = item.duties.map(d=> vm.formatDuty(d)) return item; }) var currentDate = moment(start).utc().format("YYYY/MM/DD hh:mm:ss"); console.log(currentDate); while (moment(currentDate).isBefore(end)){ const date = moment(currentDate).utc().format("YYYY/MM/DD hh:mm:ss"); const monthName = scheduleLabel(date); var indexWeek; var index; if(!schedules || !schedules.find((x) => x.monthName == monthName)){ index = schedules.push({ monthName: monthName, month: moment(currentDate).month(), weeks: []}) - 1; indexWeek = schedules[index].weeks.push({ days: []}) - 1; if(index > 0){ for(var i=0; i < moment(date).day(); i++){ // schedules[index].weeks[indexWeek].days.push({active: false}); const beforeMonthWeeks = schedules[index-1].weeks; const beforeMonthDays = beforeMonthWeeks[beforeMonthWeeks.length - 1].days.filter(x => x.active); const dayIndex = schedules[index].weeks[indexWeek].days.push({ ...beforeMonthDays[i] }); schedules[index].weeks[indexWeek].days[dayIndex-1].active = false; } } } else if(moment(date).day() == 0){ indexWeek = schedules[index].weeks.push({ days: []}) - 1; } console.log("date", date); const indexDay = schedules[index].weeks[indexWeek].days.push({ date: moment(date).format("YYYY/MM/DD"), dayOfmonth: addZero(moment(date).date()), dayOfweek: moment(date).day(), active: moment(currentDate).isBefore(vm.endsAt), doctors: []}) -1; data.items.forEach(hospital => { hospital.duties.forEach(item => { const itemtDate = moment(item.startsAt).utc(); if(moment(itemtDate).format("YYYY/MM/DD") == moment(date).format("YYYY/MM/DD")){ const doctor= item.doctor && data.refs.medicalId? data.refs.medicalId[item.doctor.medicalId]: undefined; const position= data.refs.positionId[item.positionId]; const service= data.refs.hospitalServiceId[hospital.hospitalServiceId]; if(service && service.name){ schedules[index].weeks[indexWeek].days[indexDay].doctors.push( item.doctor? item.doctor.isTemp? { name: item.doctor.name, duty: item, position: position, service: service}: { name: doctor.name, crm: doctor.crm, state: doctor.state, email: doctor.email, mobile: doctor.mobile, duty: item, position: position, service: service}: { inactive: true }); } } }); }); currentDate = moment(currentDate).add(1, 'd').format("YYYY/MM/DD hh:mm:ss"); } schedules.forEach((month, indexMonth )=> { month.weeks.forEach((week) => { week.days.forEach((day) => { if(day.doctors && day.doctors.length > 1) day.doctors.sort((a, b) => { if(a.duty && b.duty){ var firDate = moment(a.duty.startsAt); var secDate = moment(b.duty.startsAt); if(firDate.isAfter(secDate)) return 1; else if(firDate.isBefore(secDate)) return -1; else { if(a.duty.checkin && b.duty.checkin){ var firDate = moment(a.duty.checkin.startedAt); var secDate = moment(b.duty.checkin.startedAt); if(firDate.isAfter(secDate)) return 1; else if(firDate.isBefore(secDate)) return -1; else return 0; } else return 1; } } else return 0; }); }) var count = 0; if(indexMonth > 0) { while(week.days.length != 7) { const afterMonthDays = schedules[indexMonth+1].weeks[0].days.filter(x => x.active || x.dayOfmonth <= 7)[count]; const i = week.days.push({ ...afterMonthDays }); week.days[i-1].active = false; count ++; } } }) }); if(moment(start).month() < moment(vm.startsAt).month()) { schedules = schedules.filter(x => x.month != moment(start).month()) } if(moment(end).month() > moment(vm.endsAt).month()) { schedules =schedules.filter(x => x.month != moment(end).month()) } schedules.forEach((month )=> { month.weeks.forEach((week) => { week["lines"] = vm.getWeekLines(week); }) }); vm.todayTable = schedules.map((month) => { const days = []; month.weeks.forEach((week) => { week.days.forEach(day =>{ if(day.active){ if(day.doctors.length > 0){ day.doctors.forEach(doctor =>{ days.push({ date: day.date, dayOfmonth: day.dayOfmonth, dayOfweek: day.dayOfweek, doctor: doctor, }); }); } } }) }); return { monthName : month.monthName, days: days } }); vm.excel = vm.todayTable; console.log(vm.excel[0].days); vm.schedules = schedules; }); } } } vm.changeTab = (val) => { if(vm.selectedTab != val ){ $scope.activeTab = vm.selectedTab = val; if(vm.schedules){ if(vm.schedules.length > 0) { vm.schedules = []; } if(vm.selectedTab == '0'){ vm.reloadServices(); } else if(vm.selectedTab == '1'){ vm.reloadServices(true); } } } } function scheduleLabel(date){ return (moment(date).format('MMMM') +" de "+ moment(date).year()) } function addZero(date){ return date < 10? "0"+ date: "" + date; } vm.showModal = function(doctor) { var params = { templateUrl: 'views/medical-modal.html', controller: ['$scope', '$modalInstance' ,function($scope, $modalInstance) { $scope.doctor = doctor; console.log(doctor); $scope.close = function() { $modalInstance.close(); }; $scope.setPinColor = function(duty) { return checkInStatus(duty); }; $scope.showHour = function (duty) { return vm.showHour(duty); } $scope.format = function (date, format) { return vm.format(date, format); } }], dataModal: {doctor: doctor}, size: 'md' }; return $ornitoModal.showCustom(params) }; vm.setPinColor = function(duty) { return checkInStatus(duty); }; function checkInStatus(doctor) { var now = moment(); if(doctor && doctor.duty){ if(vm.selectedTab != '1' && !doctor.active) return 'checkInInactive'; if(now.diff(doctor.duty.startsAt,'minutes') >= 0 && (!doctor.duty.checkin || !doctor.duty.checkin.startedAt)) { if(now.diff(doctor.duty.startsAt,'minutes') >= 5) return 'checkInDanger'; else return 'checkInWarning'; } else if(doctor.duty.checkin && doctor.duty.checkin.startedAt) return 'checkInSuccess'; else return 'displayHide'; } } vm.setStatusColor = function(duty) { if(!duty) return 'displayHide'; return "hover-"+ checkInStatus(duty); } vm.exportToExcel = (tableId) => { var exportHref = Excel.tableToExcel(tableId,'sheet name'); $timeout(() => { document.getElementById('dlink').href = exportHref; document.getElementById('dlink').download = 'Escala-hospital.xls'; document.getElementById('dlink').click(); },100); // trigger download }; vm.getServiceText = () => { vm.selectedServiceId = ''; if(!vm.hospitalId) vm.hospitalId = ""; if(vm.hospitalList.items){ vm.hospitalList.items.forEach((hospital) =>{ hospital.services.forEach((service) =>{ if(vm.selectedServiceId == service.id) vm.selectedServiceText = hospital.name +" - "+ service.name; }) }) vm.dutylList = vm.hospitalList.items.find(x=> x.id == vm.hospitalId); } }; vm.getWeekLines = (week= []) => { var result = []; const max = Math.max(...week.days.map(x => x.doctors.length)); for(var i=0; i < max; i++){ const line = week.days.map(x => { if(!x.doctors[i]) return {} return { active: x.active, ...x.doctors[i] } }); result.push(line); } return result } vm.showHour = function (duty) { if(!duty) return ""; const start = moment(duty.startsAt).format("HH:mm"); const end = moment(duty.endsAt).format("HH:mm"); return start +" até "+ end } vm.imprimir = function(){ window.print(); } vm.format =(date, format)=> { return date!="" && date!= null && date!= undefined ? moment(date).format(format): "Não realizado"; } vm.shortName = (name) => { if(!name) return ""; const nameSteps = name.split(' '); if(nameSteps.length > 1) return nameSteps[0] + " " + nameSteps[nameSteps.length -1]; else return nameSteps[0] } init(); } 'use strict'; angular .module('youDoctor') .service('ScheduleServices', ScheduleServices); ScheduleServices.$inject = ['$http', 'API','$q', '$timeout','$ornito.Modal']; function ScheduleServices($http, API, $q, $timeout, $ornitoModal) { var __onHospitalServiceTermError = function(tryAgain) { return function(ex) { if (ex.status != 405 || !ex.data || !ex.data.info || !ex.data.info.hospitalServiceId) { throw ex; } var params = { templateUrl: 'views/partials/modal-hospital-service-agreement.html', dataModal: { hospitalServiceId: ex.data.info.hospitalServiceId, }, size: 'md', controller: ['$scope','dataModal','$modalInstance', function($scope, dataModal, $modalInstance) { $scope.hospitalServiceId = dataModal.hospitalServiceId; $scope.cancel = function() { $modalInstance.dismiss(ex); }; $scope.termChange = function(agreed) { return agreed ? $modalInstance.close() : $modalInstance.dismiss(ex); }; }], }; return $ornitoModal .showCustom(params) .then(tryAgain) .catch(function(ex2) { if (ex2 == 'escape key press') { throw ex; } throw ex2; }); }; }; this.myHospitals = function(p,) { var url = API.concat('graphql'); return $http.post(url,{ name: 'Medical.Schedule.Services.myHospitals', query: `{\ myHospitals(entityAlias: "${p}"){\ id\ name\ }\ }`, }) .then(function(response) { return response.data.data.myHospitals; }); }; this.allHospitals = function(p, flag) { var url = API.concat('graphql'); return $http.post(url,{ name: 'Medical.Schedule.Services.myHospitals', query: `{\ myHospitals(entityAlias: "${p}", getAll: ${flag}){\ id\ name\ services{\ id\ name\ }\ }\ }`, }) .then(function(response) { return response.data.data.myHospitals; }); }; this.get = function(p) { var url = API.concat('medical/schedule'); var firstDay = new Date(p.firstDay.toDate()); var params = {date: firstDay.toUTCString(), entity: p.entity}; if (p.hospitalId) { params.hospitalId = p.hospitalId; } if (p.serviceId) { params.serviceId = p.serviceId; } if(p.all) params.all = p.all; return $http.post(url, params) .then(function(response) { response.data.items.forEach(function(duty) { duty.startsAt = asMoment(duty.startsAt); duty.endsAt = asMoment(duty.endsAt); if (duty.myDispute) { duty.myDispute.createdAt = asMoment(duty.myDispute.createdAt); } }); return response.data; }); }; this.getDutyInfo = function(p) { var _getDutyInfo = function() { return $http.get(API.concat('medical/duty/'+p.dutyId+'/info')) .then(function(response) { return response.data; }); }; return _getDutyInfo() .catch(__onHospitalServiceTermError(_getDutyInfo)); }; this.assignDuty = function(p) { function _assignDuty() { var url = API.concat('medical/duty/'+p.dutyId+'/assign'); return $http.get(url) .then(function(response) { return response.data; }); } return _assignDuty() .catch(__onHospitalServiceTermError(_assignDuty)); }; this.offerDuty = function(p) { function _offerDuty() { var url = API.concat('medical/duty/'+p.dutyId+'/to-bid/'+p.part); return $http.get(url) .then(function(response) { return response.data; }); } return _offerDuty() .catch(__onHospitalServiceTermError(_offerDuty)); }; this.changeDisputeStatus = function(p) { function _changeDisputeStatus() { var url = API.concat('medical/duty/'+p.dutyId+'/dispute/'+p.disputeId+'/open/'+p.open); return $http.get(url) .then(function(response) { return response.data; }); } return _changeDisputeStatus() .catch(__onHospitalServiceTermError(_changeDisputeStatus)); }; this.cancelDisputeBid = function(p) { function _cancelDisputeBid() { var url = API.concat('medical/duty/'+p.dutyId+'/dispute/'+p.disputeId+'/bid/'+p.bidId+'/cancel'); return $http.get(url) .then(function(response) { return response.data; }); } return _cancelDisputeBid() .catch(__onHospitalServiceTermError(_cancelDisputeBid)); }; this.finishDispute = function(p) { function _finishDispute() { var url = API.concat('medical/duty/'+p.dutyId+'/dispute/'+p.disputeId+'/finish/'+p.medicalId); return $http.get(url) .then(function(response) { return response.data; }); } return _finishDispute() .catch(__onHospitalServiceTermError(_finishDispute)); }; this.pokeDuty = function(p) { function _pokeDuty() { var url = API.concat('medical/duty/'+p.dutyId+'/dispute'); return $http.get(url) .then(function(response) { return response.data; }); } return _pokeDuty() .catch(__onHospitalServiceTermError(_pokeDuty)); }; this.rollbackBid = function(p) { function _rollbackBid() { var url = API.concat('medical/duty/'+p.dutyId+'/rollback-bid'); return $http.get(url) .then(function(response) { return response.data; }); } return _rollbackBid() .catch(__onHospitalServiceTermError(_rollbackBid)); }; this.takeOfferDuty = function(p) { function _takeOfferDuty() { var url = API.concat('medical/duty/'+p.dutyId+'/take-offer'); return $http.get(url) .then(function(response) { return response.data; }); } return _takeOfferDuty() .catch(__onHospitalServiceTermError(_takeOfferDuty)); }; this.hasManagedHospitals = function() { return $http.post(API.concat('graphql'), { name: 'medical.schedule.services.js#hasManagedHospitals', query: '{\n\ managedHospitals {\n\ id\n\ }\n\ }' }) .then(function(response) { return !!response.data.data.managedHospitals.length; }); }; this.callEmergency = function(hospitalId){ var url = API.concat('medical/emergency-call'); return $http.post(url,hospitalId) .then(function(response) { return response.data; }) .catch(function(error){ return error.data; }) } } 'use strict'; angular .module('youDoctor') .service('ScheduleManagerServices', ScheduleManagerServices); ScheduleManagerServices.$inject = ['$http','$q','API']; function ScheduleManagerServices($http, $q, API) { this.getDutyInfo = function(p) { var url = API.concat('coordinator/schedule/duty-info/'+p.dutyId); return $http.get(url) .then(function(response) { if (response.data.item && response.data.item.duties) { response.data.item.duties.forEach(function(duty) { if (duty.startsAt instanceof Date == false) { duty.startsAt = new Date(duty.startsAt); } if (duty.endsAt instanceof Date == false) { duty.endsAt = new Date(duty.endsAt); } }); } return response.data; }); }; this.createHospitalService = function(params) { var url = API.concat('coordinator/hospital-service'); return $http.post(url, { hospitalId: params.hospitalId, name: params.name, subscribe: params.subscribe, locked: params.locked, }) .then(function(response) { return response.data; }); }; this.updateHospitalService = function(params) { var url = API.concat('coordinator/hospital-service'); return $http.put(url, { hospitalId: params.hospitalId, hospitalServiceId: params.hospitalServiceId || params.serviceId, serviceName: params.name || params.serviceName, subscribe: params.subscribe, locked: params.locked, keepers: params.keepers, }) .then(function(response) { return response.data; }); }; this.removeHospitalService = function(params) { var url = API.concat('coordinator/hospital-service/' + params.serviceId); return $http.delete(url) .then(function(response) { return response.data; }); }; this.removeDuty = function(p) { var url = API.concat('coordinator/schedule/duty/'+p.dutyId+'/remove'); return $http.get(url) .then(function(response) { return response.data; }); }; this.removeDuties = function(p) { var url = API.concat('coordinator/schedule/duty/remove'); return $http.post(url, {dutyIds: p.dutyIds}) .then(function(response) { return response.data; }); }; this.changeDutyStarts = function(p) { var url = API.concat('coordinator/schedule/change-duties-starts'); return $http.post(url, { dutyPositionId: p.dutyPositionId, millisecondsToApply: p.millisecondsToApply, dutyIds: p.dutyIds, }) .then(function(response) { return response.data; }); }; this.setDutiesToMedical = function(p) { var url = API.concat('coordinator/schedule/assign-duties-to-doctor'); var doctor = {}; if (p.doctor.id) { doctor.medicalId = p.doctor.id; } else { doctor.name = p.doctor.name; doctor.crm = p.doctor.crm; doctor.state = p.doctor.state; doctor.isTemp = true; doctor.email = p.doctor.email; } return $http.post(url, {doctor: doctor, dutyIds:p.dutyIds}) .then(function(response) { return response.data; }); }; this.setDutiesToUnassigned = function(p) { var url = API.concat('coordinator/schedule/unassignDuties'); return $http.post(url, {dutyIds: p.dutyIds}) .then(function(response) { return response.data; }); }; this.getReport = function(p) { var url = API.concat('coordinator/schedule/reports/medicalHours'); return $http.post(url, p) .then(function(response) { return response.data; }); }; this.getReportHospital = function(p) { var url = API.concat('coordinator/schedule/reports/medicalHoursHospital'); return $http.post(url, p) .then(function(response) { return response.data; }); }; this.getPainel = function(p) { var hospitalServiceId = p.hospitalServiceId; delete p.hospitalServiceId; var url = API.concat('coordinator/schedule/'+hospitalServiceId+'/painel'); return $http.post(url, p) .then(function(response) { return response.data; }); }; this.hasManagedHospitals = function() { return $http.post(API.concat('graphql'), { name: 'coordinator.schedule.services.js#HospitalIsDirector', query: '{\n\ managedHospitals {\n\ id\n\ }\n\ }' }) .then(function(response) { return !!response.data.data.managedHospitals.length; }); }; } 'use strict'; angular .module('youDoctor') .controller('MedicalServiceController', MedicalServiceController); MedicalServiceController.$inject = ['$scope','MedicalServiceServices','$rootScope','$interval','$ornito.Modal','AuthServices']; function MedicalServiceController($scope, MedicalServiceServices, $rootScope,$interval,$ornitoModal, AuthServices) { $scope.MedicalService = {}; $scope.MedicalService.hospitals = []; var main = $scope.main; var loop = null; var stopLoop = function() { if (angular.isDefined(loop)) { $interval.cancel(loop); loop = undefined; } }; var refreshCountDown = function() { var shouldReload = false; $scope.MedicalService.hospitals.items.forEach(function(hospital) { hospital.services.forEach(function(service) { if (service.deadLineAt) { var duration = moment.duration(new Date(service.deadLineAt).getTime() - new Date().getTime()); if (duration.asMilliseconds() < -10 * 1000) { shouldReload = true; } service.expire = duration.humanize(true); } }); }); if (shouldReload) { loadServices(); } }; var loadServices = function () { return MedicalServiceServices.get($scope.main.user.entity) .then(function (hospitalsServices) { $scope.MedicalService.hospitals = hospitalsServices; stopLoop(); loop = $interval(refreshCountDown, 10000); cacheHospitals(); }); }; $scope.$on('$destroy', function() { stopLoop(); }); loadServices(); var afterbecomeCoordinator = function(msg) { return function() { var roles = main.user.roles; if (roles.indexOf('coordinator') == -1) { return main.showMessage(msg+' Você será redirecionado para a criar a sua primeira escala.') .then(function() { roles.push('coordinator'); main.gotoHomeLogged(); }); } return main.showMessage(msg+' Acesse \'GERENCIAR ESCALAS\' e crie o seu primeiro serviço.'); }; }; $scope.MedicalService.requestDismiss = function (hospitalServiceId) { var params = { message: 'Você está prestes a mandar uma notificação de DESLIGAMENTO ao coordenador.
Em um prazo de 30 dias, acabaram suas as responsabilidades perante esse serviço.
Você será imediatamente EXCLUÍDO de todos os plantões posteriores a 30 dias.O seu nome também será removido da escala automaticamente ao fim desse prazo.

Essa operação é IRREVERSSÍVEL.
Você tem CERTEZA que desenha continuar?', title: 'Atenção', options: ['Sim','Não'], }; main.askDangerConfirmation(params) .then(function (answer) { if (answer != 'Sim') { return; } return main.lock('Enviando pedido de DESLIGAMENTO...') .then(function () { return MedicalServiceServices .requestDismiss(hospitalServiceId) .finally(main.clearLock) .then(main.showMessageFn('Pedido de DESLIGAMENTO enviado.')) .catch(main.showError) .then(loadServices); }) .finally(main.unlock) .catch(main.showError); }); }; $scope.MedicalService.becomeCoordinator = function(hospitalId) { return main.lock('Aguarde...') .then(function () { return MedicalServiceServices .becomeCoordinator({hospitalId: hospitalId}) .finally(main.clearLock) .then(afterbecomeCoordinator('Parabéns, agora você é coordenador nessa instituição.')) .catch(main.showError) .then(loadServices); }) .finally(main.unlock) .catch(main.showError); }; $scope.MedicalService.leaveCoordinator = function(hospitalId) { return main.lock('Removendo...') .then(function () { return MedicalServiceServices .leaveCoordinator({hospitalId: hospitalId}) .finally(main.clearLock) .then(function() { return AuthServices.me(); }) .then(function(user) { if (user.roles.indexOf('coordinator') == -1) { main.user.roles = user.roles; return main.showMessage('Operação concluída, você não é mais coordenador. Você será redirecionado para a página de médico.') .then(function() { return main.gotoHomeLogged(); }); } return main.showMessage('Operação concluída, você não é mais coordenador nessa instituição.'); }) .catch(main.showError) .then(loadServices); }) .finally(main.unlock) .catch(main.showError); }; $scope.MedicalService.submitToService = function (hospitalServiceId) { return main.lock('Enviando solicitação de acesso ao serviço...') .then(function () { return MedicalServiceServices .submitToService({hospitalServiceId: hospitalServiceId}) .finally(main.clearLock) .then(main.showMessageFn('Solicitação enviada com sucesso.')) .catch(main.showError) .then(loadServices); }) .finally(main.unlock) .catch(main.showError); }; $scope.MedicalService.findBy = function() { var name = $scope.hospitalName.toLowerCase(); if ( !$scope.hospitalName ) { loadServices(); } else { var filtered = $scope.MedicalService._hospitals .filter(function(hospital) { return hospital.name.toLowerCase().indexOf(name) > -1; }); $scope.MedicalService.hospitals.items = filtered; } }; $scope.MedicalService.createEntity = function() { $ornitoModal.showCustom({ controller: ['$scope', '$modalInstance', function($entityScope, $modalInstance) { $entityScope.cancel = function() { $modalInstance.close(); }; $entityScope.entityTypes = [ { value: null, desc: 'SELECIONE O TIPO DE INSTITUIÇÃO', disabled: true, }, { value: 'hospital', desc: 'HOSPITAL', }, { value: 'ambulatorio', desc: 'AMBULATÓRIO', }, { value: 'clinica', desc: 'CLÍNICA', }, { value: 'home-care', desc: 'HOME', }, { value: 'resgate', desc: 'RESGATE', }, ]; $entityScope.isValid = function() { $entityScope.newEntityForm.$setSubmitted(); $entityScope.newEntityForm.$setDirty(); if (!$entityScope.newEntityForm.$valid) {return false;} return true; }; $entityScope.confirm = function() { if (!$entityScope.isValid()) {return;} var newEntityObj = { type: $entityScope.newEntity.entityType.value, name: $entityScope.newEntity.name, shortName: $entityScope.newEntity.sigla, address: $entityScope.newEntity.address, }; $entityScope.waiting = true; return MedicalServiceServices.newEntity(newEntityObj) .finally(function() { $entityScope.waiting = false; }) .then($modalInstance.close.bind($modalInstance)) .then(afterbecomeCoordinator('Parabéns, instituição CRIADA com sucesso.')) .catch(main.showError); }; $entityScope.keypress= function(e) { if (e.keyCode === 8 && /^\d{5}-$/.test(e.target.value)) { $entityScope.newEntity.address.zipCode = e.target.value.replace(/(\d{5}).*/,'$1'); } }; $entityScope.findAddress = function () { var tempZip = ($entityScope.newEntity.address.zipCode || '').replace(/[^\d]/g,''); $entityScope.newEntity.address.zipCode = tempZip.replace(/(\d{5})(\d{0,3})/,'$1-$2'); if (tempZip.length < 8) { $entityScope.newEntityForm.zipCode.$setValidity('cep', false); $entityScope.tmpAddress = ''; return; } $entityScope.newEntity.address.streetAddress1 = ''; $entityScope.newEntity.address.district = ''; $entityScope.newEntity.address.state = ''; MedicalServiceServices.validateCEP(tempZip) .then(function(address) { if (!address.logradouro) { $entityScope.newEntityForm.zipCode.$setValidity('cep', false); $entityScope.tmpAddress = ''; return; } $entityScope.newEntity.address.streetAddress1 = address.logradouro; $entityScope.newEntity.address.district = address.bairro; $entityScope.newEntity.address.state = address.uf; $entityScope.tmpAddress = address.logradouro + ', ' + address.bairro + ', ' + address.uf; $entityScope.newEntityForm.zipCode.$setValidity('cep', true); }) .catch(function() { $entityScope.newEntityForm.zipCode.$setValidity('cep', false); $entityScope.tmpAddress = ''; }); }; }], templateUrl: 'views/medical/new-entity.html', size: 'md', dataModal: { } }); }; $scope.MedicalService.showHospitalInfo = function(hospital) { var params = { templateUrl: 'views/medical/hospital-service-expiration-info.html', controller: ['$scope', '$modalInstance' ,function($scope, $modalInstance) { var duration = moment.duration(hospital.serviceRequestExpire); var hours = duration.asHours(); if (hours > 1) { $scope.timeToExpire = hours + ' horas'; } else { $scope.timeToExpire = duration.asMinutes() + ' minutos'; } $scope.close = function() { $modalInstance.close(); }; }], dataModal: {hospital: hospital}, size: 'sm', }; return }; function cacheHospitals() { $scope.MedicalService._hospitals = $scope.MedicalService.hospitals.items.slice(); } } 'use strict'; angular .module('youDoctor') .service('MedicalServiceServices', MedicalServiceServices); MedicalServiceServices.$inject = ['$http', 'API']; function MedicalServiceServices($http, API) { /* Get all available hospital and their available services */ this.get = function(entity) { var url = API.concat('medical/services?entity=', entity); return $http.get(url) .then(function(response) { response.data.items.forEach(function(item) { item.services = item.services.reduce(function(services, service) { if (response.data.refs.coordinators[service.coordinatorId]) { services.push(service); service.coordinator = response.data.refs.coordinators[service.coordinatorId]; } return services; }, []); }); return response.data; }); }; this.submitToService = function(p) { var url = API.concat('medical/service-submit/' + p.hospitalServiceId); return $http.get(url) .then(function(response) { return response.data; }); }; this.setCode = function(p) { var url = API.concat('medical/set-code/'); return $http.post(url,p) .then(function(response) { return response.data; }); }; this.leaveCoordinator = function(p) { var url = API.concat('coordinator/hospital-coordination/' + p.hospitalId+'/leave'); return $http.post(url,p.newHospital) .then(function(response) { return response.data; }); }; this.becomeCoordinator = function(p) { var url = API.concat('medical/hospital-coordination/' + p.hospitalId+'/request'); return $http.get(url) .then(function(response) { return response.data; }); }; this.newEntity = function(newEntity) { var url = API.concat('medical/new-entity'); return $http.post(url,{newEntity: newEntity}) .then(function(response) { return response.data; }); }; this.requestDismiss = function(hospitalServiceId) { var url = API.concat('medical/request-dismiss/' + hospitalServiceId); return $http.get(url) .then(function(response) { return response.data; }); }; this.validateCEP = function(cep) { var url = ('https://viacep.com.br/ws/' + cep + '/json/unicode/'); return $http.get(url) .then(function(response) { return response.data; }); }; } 'use strict'; angular .module('youDoctor') .controller('MedicalProfileController', MedicalProfileController) MedicalProfileController.$inject = ['$scope','$q','$specialities','$banks', '$states', 'MedicalProfileServices','DomainServices'] function MedicalProfileController($scope, $q, $specialities, $banks, $states, MedicalProfileServices, DomainServices) { //#################################################################################### $scope.settings = {} var settings = $scope.settings; var main = $scope.main; var dtMin = new Date(); dtMin.setFullYear(dtMin.getFullYear() - 21); settings.minBirth = dtMin; settings.maxBirth = new Date(); settings.maxGraduate = new Date(); settings.dateOptions = { showWeeks:'false' }; settings.bankChanged = function(){ delete settings.profile.bank.name; var number = (settings.profile.bank.number || '').toString(); if (number.length >= 3){ DomainServices.bankByNumber(number) .then(function(bank){ if (!bank){ return; } settings.profile.bank.name = bank.name; }) } } $scope.$watch('settings.profile.bank.number', function(newV, oldV){ if (newV){ var t = newV.replace(/([^0-9])/g,""); if (t != settings.profile.bank.number){ settings.profile.bank.number = t; } } }) settings.states = $states; settings.specialities = $specialities; settings.banks = $banks.map(function(bank){ return {number: bank.number, name: bank.name, label: bank.number + ' - ' +bank.name}; }); $scope.settings.genders = [ {value:'male', label:'Masculino'} , {value:'female',label:'Feminino'} ]; //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ //#################################################################################### settings.changePhoto = function(evt) { var file = evt.currentTarget.files[0]; var reader = new FileReader(); reader.onload = function (evt) { $scope.$apply(function(){ settings.selectedPhoto = evt.target.result; }); }; reader.readAsDataURL(file); }; settings.openBirthDialog = function($event){ $event.preventDefault(); $event.stopPropagation(); settings.birthOpened = true; }; settings.submitProfile = function(){ if (!$scope.profileForm.$valid) { var params = { message:'Favor preencher todos os campos obrigatórios!' , title: 'Atenção' , options: ['OK'] }; return main.askDangerConfirmation(params) .then(function (answer) { if (answer == 'OK'){ return; } }) .finally(main.clearLock) .catch(main.showError) .finally(main.unlock); }; return main.lock('Salvando perfil') .then(function () { return screenToProfile(); }) .then(function (profile) { return MedicalProfileServices .save(profile) .finally(main.clearLock) .then(main.showMessageFn('Perfil salvo')) .catch(function(ex){ return main.showError(ex) .finally(function(){ throw ex; }); }) .finally(main.unlock) }) .then(main.gotoHomeLogged); }; //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ //#################################################################################### function screenToProfile(){ var model = settings.profile , profile = {} ; if (settings.selectedPhoto && settings.selectedPhoto.length > 0 && model.photo){ profile.photo = model.photo.toString(); } profile.cnes = model.cnes; profile.name = model.name; profile.email = model.email; profile.phone = model.phone; profile.mobilePhone = model.mobilePhone; profile.birth = model.birth; profile.gender = model.gender.value; profile.cpf = model.cpf; profile.rg = model.rg; profile.graduateYear = model.graduateYear; profile.university = model.university; profile.crm = model.crm; profile.state = model.state; profile.specialityId = model.speciality.id; profile.code = model.code; profile.miniCV = model.miniCV; if (model.account){ profile.account = {}; profile.account.holderName = model.account.holderName; profile.account.holderCPF = model.account.holderCPF; profile.account.bankName = (model.bank || {}).name; profile.account.bankNumber = (model.bank || {}).number; profile.account.branchNumber = model.account.branchNumber; profile.account.number = model.account.number; } return profile; } function profileToScreen(profileServer){ settings.loaded = false; settings.selectedPhoto = ''; settings.fileName = ''; for (var i in settings.specialities){ var speciality = settings.specialities[i]; if (speciality.id == profileServer.specialityId){ profileServer.speciality = { id: speciality.id }; break; } } delete profileServer.specialityId; if (profileServer.account && profileServer.account.bankNumber){ for (var j in settings.banks){ var bank = settings.banks[j]; if (bank.number == profileServer.account.bankNumber){ profileServer.bank = bank; break; } } } if (profileServer.gender){ for (var k in settings.genders){ var gender = settings.genders[k]; if (gender.value == profileServer.gender){ profileServer.gender = gender; break; } } } profileServer.photo = ''; settings.profile = profileServer; settings.profile.photo = ''; settings.loaded = true; } //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ //#################################################################################### function getProfile(msg){ return main.lock(msg || 'Buscando perfil') .finally(main.clearLock) .then(MedicalProfileServices.get) .then(profileToScreen); } //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ angular.element(document.querySelector('#profilePhotoInput')).on('change', settings.changePhoto); getProfile() .catch(main.showError) .finally(main.unlock); } 'use strict'; angular .module('youDoctor') .service('MedicalProfileServices', MedicalProfileServices) MedicalProfileServices.$inject = ['$http', 'API'] function MedicalProfileServices($http, API) { this.info = function(){ var url = API.concat('medical/info'); return $http.get(url) .then(function(response){ return response.data; }); }; this.get = function() { var url = API.concat('medical/profile'); return $http.get(url) .then(function(response){ return response.data; }); }; this.save = function(params) { var url = API.concat('medical/profile'); var profile = {}; profile.name = params.name; profile.email = params.email; profile.phone = params.phone; profile.mobilePhone = params.mobilePhone; profile.birth = params.birth; profile.cnes = params.cnes; profile.gender = params.gender; profile.cpf = params.cpf; profile.rg = params.rg; profile.graduateYear = params.graduateYear; profile.university = params.university; profile.crm = params.crm; profile.state = params.state; profile.specialityId = params.specialityId; profile.code = params.code; profile.miniCV = params.miniCV; if (params.account){ profile.account = {}; profile.account.holderName = params.account.holderName; profile.account.holderCPF = params.account.holderCPF; profile.account.bankName = params.account.bankName; profile.account.bankNumber = params.account.bankNumber; profile.account.branchNumber = params.account.branchNumber; profile.account.number = params.account.number; } return $http.post(url, profile) .then(function(response){ if (params.photo){ return $http.post(API.concat('auth/setPhoto'), {photo: params.photo}) .then(function(){ return response; }); } return response; }) .then(function(response){ return response.data }); }; } angular .module('youDoctor') .controller('DutyOfferController', DutyOfferController) DutyOfferController.$inject = ['$scope','ScheduleServices','dataModal','$modalInstance','$ornito.Modal'] function DutyOfferController ($scope, ScheduleServices, dataModal, $modalInstance, $ornitoModal) { var _twelve = 3600 * 1000 * 12; $scope.message = 'Buscando escala' $scope.submited = false; $scope.duty = {}; $scope.duty.timeSelected = ""; $scope.duty.times = { full: 'full', firstHalf: 'first-half', lastHalf: 'last-half' } $scope.halfEndurance = function(wichHalf){ var fator = ($scope.model.schedule.duty.endurance/3600000)/2; if (wichHalf == 'first-half'){ return moment($scope.model.schedule.duty.endsAt).subtract(fator,'hours')._d; } else if (wichHalf == 'last-half'){ return moment($scope.model.schedule.duty.startsAt).add(fator,'hours')._d; } } $scope.select = function(value){ var selected = $scope.duty.times[value]; if (selected) { $scope.duty.timeSelected = selected; } else{ return dataModal.main.showError('Período de tempo invalido') .then($scope.cancel); } } $scope.cancel = function(){ return $modalInstance.dismiss('cancel'); } $scope.answer = function(opt){ if (opt.toLowerCase() != 'confirmar'){ return $scope.cancel(); } $scope.submited = true; return ScheduleServices .offerDuty({ dutyId: $scope.model.schedule.duty.id, part: ($scope.model.schedule.duty.endurance >= _twelve ? $scope.duty.timeSelected : null ) || 'full', }) .catch(dataModal.main.showError) .then($modalInstance.close.bind($modalInstance)) } function init(){ const cb = function(){ return ScheduleServices .getDutyInfo({dutyId: dataModal.dutyId}); } ScheduleServices .getDutyInfo({dutyId: dataModal.dutyId}) .then(function(data){ $scope.opts = ['Confirmar','Cancelar']; $scope.model = data; $scope.allowSplit = $scope.model.schedule.duty.endurance >= _twelve; }) .catch(function(ex){ return dataModal.main.showError(ex) .then($scope.cancel); }) } init(); } angular.module('youDoctor') .controller('DutyDisputeController', DutyDisputeController) DutyDisputeController.$inject = ['$scope','ScheduleServices','dataModal','$modalInstance'] function DutyDisputeController($scope, ScheduleServices,dataModal,$modalInstance) { $scope.message = 'Buscando escala' $scope.submited = false; ScheduleServices .getDutyInfo({dutyId: dataModal.dutyId}) .then(function(data){ $scope.opts = ['Confirmar','Cancelar']; $scope.model = data; }) .catch(function(ex){ return dataModal.main.showError(ex) .then($scope.cancel); }) $scope.duty = {}; $scope.cancel = function(){ return $modalInstance.dismiss('cancel'); } $scope.answer = function(opt){ if (opt.toLowerCase() != 'confirmar'){ return $scope.cancel(); } $scope.submited = true; return ScheduleServices .pokeDuty({ dutyId: $scope.model.schedule.duty.id, }) .catch(dataModal.main.showError) .then($modalInstance.close.bind($modalInstance)) } } angular.module('youDoctor') .controller('DutyDisputeChoiceController', DutyDisputeChoiceController) DutyDisputeChoiceController.$inject = ['$scope','ScheduleServices','dataModal','$modalInstance'] function DutyDisputeChoiceController($scope, ScheduleServices,dataModal,$modalInstance) { $scope.submited = false; ScheduleServices .getDutyInfo({dutyId: dataModal.dutyId}) .then(function(data){ $scope.model = data; }) .catch(function(ex){ return dataModal.main.showError(ex) .then($scope.cancel); }) $scope.duty = {}; $scope.cancel = function(){ return $modalInstance.dismiss('cancel'); } $scope.answer = function(medicalId){ if (!medicalId) return; $scope.submited = true; try { return ScheduleServices .finishDispute({ dutyId: $scope.model.schedule.duty.id, medicalId: medicalId, disputeId: $scope.model.schedule.duty.dispute.id, }) .then($modalInstance.close.bind($modalInstance)) .catch(dataModal.main.showError) .finally(function(){ $scope.submited = false; }) } catch (ex) { dataModal.main.showError(ex) $scope.submited = false; } } } angular.module('youDoctor') .directive('duty', duty) duty.$inject = ['$timeout'] function duty($timeout) { return { restrict: 'E', transclude: true, scope: { duty: '=', mdS: '=mds', main: '=', dayCtrl: '=dayctrl' // disputeBlockSwitch: '&onDisputeBlockSwitch', // rollbackBid: '&onRollbackBid', // offer: '&onOffer', // dispute: '&onDispute', // cancelDisputeBid: '&onCancelDisputeBid', // dispute: '&onDispute', // disputeChoice: '&onDisputeChoice', // assignDuty: '&onAssignDuty', // takeOffer: '&onTakeOffer', }, templateUrl:'views/partials/duty-detail.html', } } angular .module('youDoctor') .directive('hospitalServiceTerms', hospitalServiceTerms) hospitalServiceTerms.$inject = ['$timeout']; function hospitalServiceTerms($timeout) { return { restrict: 'E', scope:{ hospitalServiceId: '@', medicalId: '@', close: '&onClose', }, templateUrl:'views/medical/medical-hospital-service-terms.html', controller: ['$scope', '$http', 'youDoctor.GraphQL', 'API', function($scope, $http, GraphQL, API) { const getHospitalInfo = function(p){ const hospitalServiceId = $scope.hospitalServiceId; $scope.loading = true; return GraphQL.query('youDoctor.medical#hospitalServiceTerms', '{\ hospitalService: hospitalServiceById(id: "'+hospitalServiceId+'"){\ name\ subscribe{ customEmailBody }\ hospital{ photoUrl name subscribeEmailBody }\ }\ }' ) .then(function(data){ $scope.hospitalService = data.hospitalService; }) .finally(function(){ $scope.loading = false; }) } $scope.iAgree = function(){ $http.get(API.concat('medical/i-agree-terms/hospital-service-id/'+$scope.hospitalServiceId)) .then(function(){ $scope.close({agreed: true}) }) .catch(function(ex){ $scope.close({agreed: false, ex: ex}) }) } $scope.iDontAgree = function(){ return $http.get(API.concat('medical-id/'+$scope.medicalId+'/i-dont-agree/hospital-service-id/'+$scope.hospitalServiceId)) .then(function(){ $scope.close({agreed: false}); }) .catch(function(ex){ $scope.close({agreed: false, ex: ex}) }) } this.init = function() { getHospitalInfo(); } }], link: function(scope, iElement, iAttrs, ctrl) { ctrl.init(); }, } } 'use strict'; angular .module('youDoctor') .directive('doctorDetail', doctorDetail) doctorDetail.$inject = ['$rootScope','$parse','CoordinatorMedicalsServices', 'MedicalServiceServices'] function doctorDetail($rootScope, $parse, CoordinatorMedicalsServices, MedicalServiceServices) { var doctorDetail = { restrict: 'EA', scope: true, templateUrl: 'views/coordinator/medicals/doctor-detail.html' }; doctorDetail.link = function ($scope, element, attrs) { $scope.doctorId = $parse(attrs.doctorId)($scope.$parent); var loadDoctor = function (doctorId) { if (doctorId) { $scope.loading = true; $scope.doctor = null; $scope.doctorId = doctorId; CoordinatorMedicalsServices.getDoctorById({id: doctorId}) .then(function (item) { $scope.doctor = item.medical; $scope.doctor.refs = item.refs; $scope.doctor.hospitals = {}; var services = item.refs.hospitalServiceId; for (var serviceId in services) { if (!$scope.doctor.hospitals[services[serviceId].hospitalId]) { $scope.doctor.hospitals[services[serviceId].hospitalId] = $scope.doctor.refs.hospitalId[services[serviceId].hospitalId]; $scope.doctor.hospitals[services[serviceId].hospitalId].services = []; } var tmpServices = item.medical.hospitalServices.filter(function(tmp){ return tmp.hospitalServiceId == serviceId; }) var svc = {}; if (tmpServices.length > 0){ svc = tmpServices[0]; if (svc.lastActivityWasAt){ svc.lastActivityWasAt = new Date(svc.lastActivityWasAt); svc.lastActivityWasDuration = svc.lastActivityWasAt.getTime() - new Date().getTime(); } if (svc.grantedAt){ svc.grantedAt = new Date(svc.grantedAt); } if (svc.requestedAt){ svc.requestedAt = new Date(svc.requestedAt); } } svc.id = serviceId; svc.hospitalId = services[serviceId].hospitalId; svc.name = services[serviceId].name; $scope.doctor.hospitals[services[serviceId].hospitalId].services.push(svc); } }) .finally(function () { $scope.loading = false; }); } }; $scope.$parent.$watch(attrs.doctorId, loadDoctor); $scope.deleteService = function (medicalId, hospitalServiceId) { $rootScope.main.askDangerConfirmation({ message: 'Deseja remover o médico do serviço?', title: 'Atenção', options: ['Sim', 'Não'] }) .then(function (answer) { if (answer !== 'Sim') { return; } return $rootScope.main.lock('Excluindo médico do serviço') .then(function () { return CoordinatorMedicalsServices .removeMedicalFromHospitalService({ medicalId: medicalId, hospitalServiceId: hospitalServiceId }) .finally(function () { loadDoctor($scope.doctorId); $rootScope.$broadcast('reloadDoctorsList'); }) .finally($rootScope.main.clearLock) .then($rootScope.main.showMessageFn('Médico removido do serviço.')) .catch($rootScope.main.showError.bind($rootScope.main)); }) .finally($rootScope.main.unlock); }); }; $scope.sendCodeInfo = function (medicalId, medicalCode) { return MedicalServiceServices .setCode({ "medicalId": medicalId, "medicalCode": medicalCode }) .finally(function () { loadDoctor($scope.doctorId); $rootScope.$broadcast('reloadDoctorsList'); }) .finally($rootScope.main.clearLock) .then($rootScope.main.showMessageFn('Código alterado.')) .catch($rootScope.main.showError.bind($rootScope.main)); }; }; return doctorDetail; } 'use strict' angular .module('youDoctor') .controller('DashboardController', DashboardController); DashboardController.$inject = ['$scope', '$window', 'DashboardServices']; function DashboardController ($scope, $window, DashboardServices) { const vm = this; const init = () => { // TODO: new API // obtendo todos os indicadores DashboardServices .getIndicators() .then((indicators) => { console.log({indicators}); vm.indicadores = indicators; }); // TODO: new API // obtendo todos os setores DashboardServices .getSectors() .then((sectors) => { console.log({sectors}); vm.setores = sectors; }); }; vm.addChart = addChart; vm.removeChart = removeChart; vm.changeData = changeData; vm.changeSetor = changeSetor; vm.autocomplete = autocomplete; vm.infiniteLoad = infiniteLoad; vm.options = { maintainAspectRatio:true}; vm.activeTab = 0; vm.colors =['','#a32525','#A92728','#DE5D58','#F7D740','#028942','#169C48']; vm.windowHeight = ($window.innerHeight-100); vm.ano = Array.apply(0, Array(10)).map(function(_,i) {return moment().format('YYYY')-i}); vm.mes = Array.apply(0, Array(12)).map(function(_,i) {return {id: moment().month(i).format('M'),text: moment().month(i).format('MMM').toUpperCase()}}); vm.mes.push({id:null,text:'Todos'}); vm.itens = [{ id: '1', type: 0, name: '', info: { labels: [], data: [] }, mes:vm.mes[moment().format('M')-1], ano: moment().format('YYYY') }]; vm.historico = [{ id: '1', type: 0, name: '', info: { labels: [], data: [] }, mes:vm.mes[moment().format('M')-1], ano: moment().format('YYYY')}]; vm.types = ['bar', 'pie', 'line','horizontalBar']; vm.getSectorsValue = function(obj) { console.log(obj); }; function addChart() { vm.itens.push({ id: '1', type: 0, name: '', info: { labels: [], data: [] },mes:vm.mes[moment().format('M')-1], ano: moment().format('YYYY') }); } function removeChart(indice,item) { console.log(indice); item.close = true; vm.itens.splice(indice, 1); if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest') { $scope.$apply(); } } function fakeData(max,range) { var arr =[]; for(var i =0;i { comparativosComMes.items.forEach( chart => { data.push(chart.value); labels.push(chart.label); colors.push(vm.colors[(chart.value)]); }); }); } else { DashboardServices .getComparativeValues({indicatorId: item.indicadores.id, sectorId: item.setores.id, year: Number(item.ano), month: Number(item.mes.id)}) .then((comparativosComMes) => { comparativosComMes.items.forEach( chart => { data.push(chart.value); labels.push(chart.label); colors.push(vm.colors[(chart.value)]); }); }); } item.info = {data, labels}; item.timeUpdate = moment().format('HH:mm:ss DD/MM/YYYY'); item.colors = colors; } function changeData(item, historico) { console.log(item); if(!item.historico) item.historico = historico; createChart(item); clearInterval(item.interval); item.interval = setInterval(function() { createChart(item); console.log('refresh'); if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest') { $scope.$apply(); } },15000); } function changeSetor(item) { DashboardServices.getSectorItems(item.setores.id) .then( sectorItems => { item.token = sectorItems.continueToken; vm.setoresVal = sectorItems.items; }); } function autocomplete(item) { DashboardServices.getSectorItems(item.setores.id, {value : item.setorVal}) .then( sectorItemsFilterded => { item.token = sectorItemsFilterded.continueToken; vm.setoresVal = sectorItemsFilterded.items; }); } function infiniteLoad(item) { //console.log('teste') if (item.token) { DashboardServices.getSectorItems(item.setores.id, {continueToken: item.token}) .then( sectorsItems => { item.token = sectorsItems.continueToken; vm.setoresVal = vm.setoresVal.concat(sectorsItems.items); if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest') { $scope.$apply(); } }); } } init(); } 'use strict'; angular .module('youDoctor') .service('DashboardServices', DashboardServices); DashboardServices.$inject = ['$http','API']; function DashboardServices($http, API) { this.getIndicators = function () { const url = API.concat('dashboard/indicators'); return $http .get(url) .then((response) => response.data); }; this.getSectors = function() { const url = API.concat('dashboard/sectors'); return $http .get(url) .then((response) => response.data); }; this.getSectorItems = function(sectorId, query) { const url = API.concat('dashboard/sectors/' + sectorId + utils.buildQueryString(query)); return $http .get(url) .then((response) => response.data); }; this.getComparativeValues = function({indicatorId, sectorId, year, month}) { const url = API.concat('dashboard/sectors/' + sectorId +'/comparative-data'); const body = Object.assign( { indicatorId, sectorId, year, }, month ? { month} : null ); return $http .post(url, body) .then((response) => response.data); }; this.getHistoricalValues = function({indicatorId, sectorId, year, sectorValue}) { const url = API.concat('dashboard/sectors/' + sectorId + '/historical-data'); const body = { indicatorId, sectorId, year, sectorValue, }; return $http .post(url, body) .then((response) => response.data); }; }