· 5 years ago · Jun 23, 2020, 02:24 PM
1// API HORARIOS (APIHORARIOS.AMPLIMED.COM.BR)
2
3const Horariosapp = require('../../models/horarios');
4const moment = require('moment');
5const mtz = require('moment-timezone');
6const sa = require('superagent');
7var VAR = require('../../VARIABLES');
8
9exports.buscar_horarios_profissional = (req, res, next) => {
10 const Horariosapp = require('../../models/horarios')(req.query.idprofapp);
11 var query = {
12 start: {
13 $gte: new Date(req.query.inicio),
14 $lte: new Date(req.query.fim),
15 },
16 idconvenio: req.query.idconvenio,
17 idprocedimento: req.query.idprocedimento,
18 idprofapp: req.query.idprofapp,
19 idendereco: req.query.idendereco,
20 ativo:true
21 }
22
23 Horariosapp.find(query).exec(function (err, horarios) {
24 if (err) {
25 console.log(`${moment().format()}-ERROR: Falha ao buscar horario profissional`,query, err);
26
27 return res.status(500).json({
28 message: "Falha ao buscar horários",
29 error: err
30 });
31
32 }
33 res.status(200).json(horarios)
34
35 });
36
37}
38
39exports.remove_horarios_before_date = (req, res, next) => {
40 const Horariosapp = require('../../models/horarios')(req.query.idprofapp);
41 var query = {
42 'data': { $lt: moment(req.params.date, 'DD-MM-YYYY') }
43 };
44 Horariosapp.deleteMany(query).then(result => {
45 res.status(200).json({
46 message: 'Todos os horarios menores que ' + req.params.date + ' foram removidos',
47 status: result
48 })
49 }).catch(err => {
50 console.log(`${moment().format()}-ERROR: Falha ao remover horarios dos profissionais`, query, err);
51
52 res.status(500).json({
53 error: err
54 })
55 });
56
57}
58
59//verificar
60exports.remove_horarios_weekday = (req, res, next) => {
61
62 if (req.params.weekday > 7 || req.params.weekday < 1) {
63 res.status(400).json({
64 error: "Weekday invalid"
65 })
66 } else {
67 var query = {
68 'idprofamplimed': parseInt(req.params.idprof),
69 'weekday': parseInt(req.params.weekday)
70 };
71 Horariosapp.collection.deleteMany(query).then(result => {
72 res.status(200).json({
73 message: 'Todos os horarios do id ' + req.params.idprof + ' foram removidos'
74 })
75 }).catch(err => {
76 console.log(`${moment().format()}-ERROR: Falha ao remover horarios do weekday`, query, err);
77 res.status(500).json({
78 error: err
79 })
80 });
81 }
82}
83
84
85exports.remove_horarios_by_profid = (req, res, next) => {
86 const Horariosapp = require('../../models/horarios')(req.params.id);
87 var query = {};
88 Horariosapp(req.params.id).collection.deleteMany(query).then(result => {
89 res.status(200).json({
90 message: 'Todos os horarios do id ' + req.params.id + ' foram removidos'
91 })
92 }).catch(err => {
93 console.log(`${moment().format()}-ERROR: Falha ao remover horarios do profissional`, query, err);
94 res.status(500).json({
95 error: err
96 })
97 });
98}
99
100//verificar
101exports.remove_all_horarios = (req, res, next) => {
102
103 Horariosapp.collection.deleteMany({}).then(result => {
104 res.status(200).json({
105 message: 'Todos os horarios foram removidos'
106 })
107 }).catch(err => {
108 console.log(`${moment().format()}-ERROR: Falha ao remover todos os horarios`, err);
109
110 res.status(500).json({
111 error: err
112 })
113 });
114}
115
116exports.get_horarios_dia_mes_ano_by_amplimed = (req, res, next) => {
117 if(!req.params.idprofapp || req.params.idprofapp < 1){
118 res.status(400).json({
119 msg: 'Função modificada, favor verificar a nova documentação.'
120 });
121 return false;
122 }
123 const Horariosapp = require('../../models/horarios')(req.params.idprofapp);
124 var query = {
125 idprofamplimed: parseInt(req.params.idprofamplimed),
126 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
127 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
128 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY')
129 };
130
131 Horariosapp.find(query).exec(function (err, horarios) {
132 if (err) {
133 console.log(`${moment().format()}-ERROR: Falha buscar horarios para o profissional no dia especifico`, query, err);
134
135 return res.status(500).json({
136 message: "Falha ao buscar horários",
137 error: err
138 });
139 }
140
141 if (horarios.length == 0) {
142 res.status(204).json(horarios)
143 } else {
144 res.status(200).json(horarios)
145 }
146
147
148 });
149}
150
151exports.get_horarios_dia_mes_ano_by_app = (req, res, next) => {
152 const Horariosapp = require('../../models/horarios')(req.params.idprofapp);
153 if (req.params.conv > 0 && req.params.proc > 0) {
154 if (req.params.idendereco > 0) {
155 var query = {
156 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
157 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
158 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY'),
159 ativo: true,
160 idconvenio: req.params.conv,
161 idprocedimento: req.params.proc,
162 idendereco: parseInt(req.params.idendereco)
163 };
164 }else{
165 var query = {
166 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
167 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
168 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY'),
169 ativo: true,
170 idconvenio: req.params.conv,
171 idprocedimento: req.params.proc
172 };
173 }
174 }else if (req.params.conv == 0 && req.params.proc > 0) { //CASO BUSCAR PELO PROCEDIMENTO (RETORNO ONLINE)
175 if (req.params.idendereco > 0) {
176 var query = {
177 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
178 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
179 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY'),
180 ativo: true,
181 idprocedimento: req.params.proc,
182 idendereco: parseInt(req.params.idendereco)
183 };
184 } else {
185 var query = {
186 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
187 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
188 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY'),
189 ativo: true,
190 idprocedimento: req.params.proc
191 };
192 }
193 } else {
194 if (req.params.idendereco > 0) {
195 var query = {
196 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
197 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
198 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY'),
199 ativo: true,
200 idendereco: parseInt(req.params.idendereco)
201 };
202 }else{
203 var query = {
204 dia: mtz(req.params.date, 'DD-MM-YYYY').format('DD'),
205 mes: mtz(req.params.date, 'DD-MM-YYYY').format('MM'),
206 ano: mtz(req.params.date, 'DD-MM-YYYY').format('YYYY'),
207 ativo: true
208 };
209 }
210 }
211
212 Horariosapp.find(query).exec(function (err, horarios) {
213 if (err) {
214 console.log(`${moment().format()}-ERROR: Falha buscar horarios para o profissional no dia especifico`, query, err);
215
216 res.status(500).json({
217 message: "Falha ao buscar horários",
218 error: err
219 });
220 return;
221 }
222 res.status(200).json(horarios)
223
224 });
225}
226
227exports.add_horarios_prof = (req, res, next) => {
228 if(req.body.length < 1) res.status(204).json({
229 message: 'Array de horários vazio.'
230 })
231 const Horariosapp = require('../../models/horarios')(req.body[0].idprofapp);
232 var horarios = [];
233 var horario_valido = false;
234 var enderecos = [];
235
236 if(req.body.length == 0){
237 res.status(200).json({
238 message: "Horarios inseridos com sucesso"
239 })
240 return;
241 }
242 req.body.forEach(horario => {
243 const hr = new Horariosapp({
244 idprofapp: horario.idprofapp,
245 idprofamplimed: horario.idprofamplimed,
246 ativo: horario.ativo,
247 start: horario.start,
248 end: horario.end,
249 data: horario.data,
250 dia: horario.dia,
251 mes: horario.mes,
252 ano: horario.ano,
253 weekday: horario.weekday,
254 valor: horario.valor,
255 duracao: horario.duracao,
256 convenio: horario.convenio,
257 idconvenio: horario.idconvenio,
258 procedimento: horario.procedimento,
259 idprocedimento: horario.idprocedimento,
260 idendereco: horario.id_endereco
261 });
262 if(horario.ativo == true){
263 horario_valido = true;
264 if(enderecos.include(horario.id_endereco) == false){
265 enderecos.push(horario.id_endereco);
266 }
267 }
268 horarios.push(hr);
269 });
270
271 Horariosapp.collection.insertMany(horarios).then(result => {
272
273 res.status(200).json({
274 message: "Horarios inseridos com sucesso"
275 })
276 }).catch(err => {
277 console.log(`${moment().format()}-ERROR: Falha ao inserir horarios do profissional`, err);
278 res.status(500).json({
279 message: "Falha ao criar horário",
280 error: err
281 })
282 });
283}
284
285exports.buscar_horario_by_id = (req, res, next) => {
286 const Horariosapp = require('../../models/horarios')(req.body.idprofapp);
287 var query = {
288 _id:req.params.id,
289 ativo:true
290 }
291 Horariosapp.find(query).exec(function (err, horario) {
292 if (err) {
293 console.log(`${moment().format()}-ERROR: Falha ao inserir horarios do profissional`, err);
294
295 return res.status(500).json({
296 message: "Falha ao buscar horário",
297 error: err
298 });
299
300 }
301 res.status(200).json(horario)
302 });
303}
304
305exports.update_horario_status_by_id = (req, res, next) => {
306 for (var key in req.body) {
307 horario = req.body[key];
308 const Horariosapp = require('../../models/horarios')(horario.idprofapp);
309 Horariosapp.findOneAndUpdate({
310 _id: horario._id
311 }, {
312 $set: {
313 ativo : horario.ativo
314 }
315 }, function (err, horario) {
316 if (err) {
317 res.status(500).json({
318 message: "Falha ao atualizar horário",
319 error: err
320 });
321 return;
322 }
323 });
324 }
325 res.status(200).json(true);
326}
327
328exports.update_horario_by_id = (req, res, next) => {
329 const Horariosapp = require('../../models/horarios')(req.params.idprofapp);
330 Horariosapp.findOneAndUpdate({
331 _id: req.params.id
332 }, {
333 $set: req.body
334 }, function (err, horario) {
335 if (err) {
336 console.log(`${moment().format()}-ERROR: Falha ao atualizar horarios profissional `, err);
337
338 res.status(500).json({
339 message: "Falha ao atualizar horário",
340 error: err
341 });
342 return;
343 }
344 res.status(200).json(horario)
345 });
346
347}
348
349//verificar
350exports.update_horario_status = (req, res, next) => {
351 var query = {
352 start: req.body.start,
353 end: req.body.end,
354 idprofamplimed: req.params.idprofamplimed,
355 idendereco: parseInt(req.params.idendereco)
356
357 };
358 Horariosapp.updateMany(query, { $set: { ativo: req.body.ativo } }, function (err, horario) {
359 if (err) {
360 res.status(500).json({
361 message: "Falha ao atualizar horário",
362 error: err
363 });
364 return;
365 }
366 res.status(200).json(horario)
367 });
368
369}
370
371
372exports.get_horarios_next = (req, res, next) => {
373 const Horariosapp = require('../../models/horarios')(req.params.idprofapp);
374 var id_profapp = req.params.idprofapp;
375 var limit = 0;
376 if (req.params.limit > 0)
377 limit = req.params.limit
378
379 if (parseInt(req.params.idendereco) > 0) {
380 query = {
381 idendereco: parseInt(req.params.idendereco),
382 ativo: true,
383 data: {
384 $gt: moment(req.params.date, 'DD-MM-YYYY').format()
385 }
386 };
387 } else {
388 query = {
389 ativo: true,
390 data: {
391 $gt: moment(req.params.date, 'DD-MM-YYYY').format()
392 }
393 };
394 }
395 Horariosapp.find(query, function (err, allhorarios) {
396 if (err) {
397
398 console.log(`${moment().format()}-ERROR: Falha ao buscar proximo horario profissional `,query, err);
399
400 res.status(500).json({
401 message: "Falha ao buscar proximo horario",
402 error: err
403 });
404 return;
405 }
406 res.status(200).json(allhorarios)
407
408 }).sort({ data: 1 }).limit(1);
409
410}
411
412exports.get_days_by_idprofapp = (req, res) => {
413 const Horariosapp = require('../../models/horarios')(req.params.idprofapp);
414
415 if (req.params.convenio > 0 && req.params.procedimento > 0) {
416 if(req.params.date){
417 date = moment(req.params.date,'DD-MM-YYYY').format()
418 }else{
419 date = mtz().format();
420 }
421 var query = {
422 idendereco: parseInt(req.params.idendereco),
423 ativo: true, idconvenio: req.params.convenio,
424 idprocedimento: req.params.procedimento,
425 data: {
426 $gt: date
427 }
428 };
429 } else if (req.params.convenio == 0 && req.params.procedimento > 0) {
430 if (req.params.date) {
431 date = moment(req.params.date, 'DD-MM-YYYY').format()
432 } else {
433 date = mtz().format();
434 }
435 var query = {
436 idendereco: parseInt(req.params.idendereco),
437 ativo: true,
438 idprocedimento: req.params.procedimento,
439 data: {
440 $gt: date
441 }
442 };
443
444 } else {
445 var query = {
446 idendereco: parseInt(req.params.idendereco),
447 ativo: true,
448 data: {
449 $gt: mtz().format()
450 }
451 };
452 }
453
454
455 var result_days = [];
456
457 Horariosapp.distinct("data", query, function (err, days) {
458 if (err) {
459 console.log(`${moment().format()}-ERROR: Falha ao buscar proximo horario profissional `, query, err);
460 return res.status(500).json({
461 message: "Falha ao buscar dias",
462 error: err
463 });
464 }
465 days.sort(function (a, b) {
466 return new Date(a) - new Date(b);
467 });
468 if (days.length > 0) {
469 days.forEach(day => {
470 var res = {
471 "dia": mtz(day).utc().format("DD"),
472 "mes": mtz(day).utc().format("MM"),
473 "ano": mtz(day).utc().format("YYYY"),
474 "weekday": mtz(day).utc().weekday()
475 }
476 result_days.push(res);
477 });
478 res.status(200).json(result_days);
479 } else {
480 res.status(204).json({
481 message: "Horário não encontrado"
482 });
483 }
484 });
485
486}
487
488exports.get_days_by_idprofapp_intervalo = (req, res, next) => {
489 const Horariosapp = require('../../models/horarios')(req.params.idprofapp);
490 var data = req.params.data;
491 if(req.params.dias > 0){
492 var query = {
493 idendereco: parseInt(req.params.idendereco),
494 ativo: true,
495 data:{
496 $gte: mtz(data, 'DD-MM-YYYY').format(),
497 $lte: mtz(data, 'DD-MM-YYYY').add(req.params.dias,'days').format(),
498 $gt: mtz().format()
499
500 }
501 };
502
503 }else{
504 var query = {
505 idendereco: parseInt(req.params.idendereco),
506 ativo: true,
507 data: {
508 $gte: mtz(data_ini, 'DD-MM-YYYY').format(),
509 $gt: mtz().format()
510
511 }
512 };
513 }
514 if (req.params.idprocedimento > 0) {
515 Object.assign(query, {
516 idprocedimento: req.params.idprocedimento
517 });
518 }
519 var result_days = [];
520
521 Horariosapp.distinct("data", query, function (err, days) {
522 if (err) {
523 console.log(`${moment().format()}-ERROR: Falha ao buscar horario do profissional por intervalo`, query, err);
524 return res.status(500).json({
525 message: "Falha ao buscar dias",
526 error: err
527 });
528 }
529 days.sort(function (a, b) {
530 return new Date(a) - new Date(b);
531 });
532 if (days.length > 0) {
533 days.forEach(day => {
534 var res = {
535 "dia": mtz(day).utc().format("DD"),
536 "mes": mtz(day).utc().format("MM"),
537 "ano": mtz(day).utc().format("YYYY"),
538 "weekday": mtz(day).utc().weekday()
539 }
540 result_days.push(res);
541
542 });
543 res.status(200).json(result_days);
544 } else {
545 res.status(204).json({
546 message: "Horário não encontrado"
547 });
548 }
549 });
550
551}