//! 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 =
'
').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+' | |
'+
'
';
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);
};
}