Advertisement
Guest User

Untitled

a guest
Nov 11th, 2017
709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var express = require('express');
  2. var jwt = require('jsonwebtoken');
  3. var bcrypt = require('bcryptjs');
  4. var config = require('../../config');
  5. var Receita = require('../models/receita.js');
  6. var rDTO = require('../../DTO/receitaDTO');
  7. var VerifyToken = require('../auth/VerifyToken');
  8. var UserRole = require('../auth/userRoles');
  9. var userRoutes = require('../routes/userRoutes');
  10. var nodemailer = require("nodemailer");
  11. var Client = require('node-rest-client').Client;
  12. var async = require('async');
  13. var client = new Client();
  14. var router = express.Router();
  15.  
  16. router.get('/:id', VerifyToken,function (req, res, next) {
  17.     UserRole.userByEmail(req.user,function(myUser){
  18.         if(UserRole.isMedico(req.user,function(approved){
  19.             if(approved){
  20.                 Receita.findById(req.params.id, function (err, receitas) {
  21.                     if (err) res.send(err);
  22.                     rDTO.id = receita.id;
  23.                     rDTO.medico = receita.medico;
  24.                     rDTO.paciente = receita.paciente;
  25.                     receita.prescricoes.forEach(function (pres) {
  26.                         rDTO.prescricoes.push(pres.id);
  27.                     })
  28.                     res.send(rDTO);
  29.                 });
  30.             }}
  31.         ));
  32.         if(UserRole.isUtente(req.user,function(approved){
  33.             if(approved){
  34.                 Receita.findById(req.params.id, function (err, receitas) {
  35.                     if (err) res.send(err);
  36.                     rDTO.id = receita.id;
  37.                     rDTO.medico = receita.medico;
  38.                     rDTO.paciente = receita.paciente;
  39.                     receita.prescricoes.forEach(function (pres) {
  40.                         rDTO.prescricoes.push(pres.id);
  41.                     })
  42.                     res.send(rDTO);
  43.                 });
  44.             }}
  45.         ));
  46.         if(UserRole.isFarmaceutico(req.user,function(approved){
  47.             if(approved){
  48.                 Receita.findById(req.params.id, function (err, receitas) {
  49.                     if (err) res.send(err);
  50.                     rDTO.id = receita.id;
  51.                     rDTO.medico = receita.medico;
  52.                     rDTO.paciente = receita.paciente;
  53.                     receita.prescricoes.forEach(function (pres) {
  54.                         rDTO.prescricoes.push(pres.id);
  55.                     })
  56.                     res.send(rDTO);
  57.                 });
  58.             }}
  59.         ));
  60.     });
  61. });
  62.  
  63.  
  64. router.get('/', VerifyToken, function (req, res, next) {
  65.     UserRole.userByEmail(req.user,function(myUser){
  66.         if(UserRole.isMedico(req.user,function(approved){
  67.             if(approved){
  68.                 Receita.find({medico: myUser},function (err, receitas) {
  69.                     if (err) res.send(err);
  70.                     rDTO.id = receita.id;
  71.                     rDTO.medico = receita.medico;
  72.                     rDTO.paciente = receita.paciente;
  73.                     receita.prescricoes.forEach(function (pres) {
  74.                         rDTO.prescricoes.push(pres.id);
  75.                     })
  76.                     res.send(rDTO);
  77.                 });
  78.             }}
  79.         ));
  80.         if(UserRole.isUtente(req.user,function(approved){
  81.             if(approved){
  82.                 Receita.find({paciente: myUser},function (err, receitas) {
  83.                     if (err) res.send(err);
  84.                     rDTO.id = receita.id;
  85.                     rDTO.medico = receita.medico;
  86.                     rDTO.paciente = receita.paciente;
  87.                     receita.prescricoes.forEach(function (pres) {
  88.                         rDTO.prescricoes.push(pres.id);
  89.                     })
  90.                     res.send(rDTO);
  91.                 });
  92.             }}
  93.         ));
  94.         if(UserRole.isFarmaceutico(req.user,function(approved){
  95.             if(approved){
  96.                 Receita.find(function (err, receitas) {
  97.                     if (err) res.send(err);
  98.                     rDTO.id = receita.id;
  99.                     rDTO.medico = receita.medico;
  100.                     rDTO.paciente = receita.paciente;
  101.                     receita.prescricoes.forEach(function (pres) {
  102.                         rDTO.prescricoes.push(pres.id);
  103.                     })
  104.                     res.send(rDTO);
  105.                 });
  106.             }}
  107.         ));
  108.     });
  109. });
  110.  
  111. router.post('/', VerifyToken, function (req, res, next) {
  112.     if(UserRole.isMedico(req.user,function(approved){
  113.         if(approved){
  114.             try {
  115.                 var receita = new Receita();
  116.                 receita.medico = req.body.medico;
  117.                 receita.paciente = req.body.paciente;
  118.                 if (new Date(req.body.data) < new Date(Date.now())) {
  119.                     throw 'A data da receita nao deve ser anterior a data atual';
  120.                 } else {
  121.                     receita.data = req.body.data;
  122.                     async.each(req.body.prescricoes, function (prescricao, callback) {
  123.                         validaPrescricao(prescricao, res).then(bol => {
  124.                             if (bol === true) {
  125.                                 getApresentacoes(prescricao.apresentacaoID, req).then(x => {
  126.                                     prescricao.apresentacao = x;
  127.                                     receita.prescricoes.push(prescricao);
  128.                                     callback();
  129.                                 });
  130.                             }
  131.                         });
  132.                     },
  133.                         function (err) {
  134.                             receita.save(function (err) {
  135.                                 console.log("in save");
  136.                                 if (err) return res.status(500).send("" + err);
  137.                                
  138.                                 //necessário get do email do paciente
  139.                                 //var utenteMail = receita.paciente.email;
  140.                                 var utenteMail = "1151117@isep.ipp.pt";
  141.                                 var mainMail = "ze_fsb@hotmail.com";
  142.                                 //manda email de receita criada
  143.                                 //================================
  144.                                 var smtpTransport = nodemailer.createTransport({
  145.                                     host: "mail.smtp2go.com",
  146.                                     port: 587, // 8025, 587 and 25 can also be used.
  147.                                     secure: false, // true for 465, false for other ports
  148.                                     auth: {
  149.                                         user: "mrzebarros02@gmail.com",
  150.                                         pass: "dsK0JBzMAVeo"
  151.                                     }
  152.                                 });
  153.  
  154.                                 smtpTransport.sendMail({
  155.                                     from: mainMail,
  156.                                     to: utenteMail,
  157.                                     subject: "Receita Prescrita",
  158.                                     text: "Foi prescrita uma receita em seu nome"
  159.                                 }, function (error, response) {
  160.                                     if (error) {
  161.                                         console.log(error);
  162.                                     } else {
  163.                                         console.log("Message sent: " + response.message);
  164.                                     }
  165.                                 });
  166.                                 res.json({ message: 'Receita registered' });
  167.                             })
  168.                         });
  169.                 }
  170.             } catch (e) {
  171.                 res.send(e);
  172.             }
  173.         }
  174.     }));
  175. });
  176.  
  177. function getApresentacoes(id, req) {
  178.     return new Promise((resolve, reject) => {
  179.         var url = config.urlApresentacoes + '/' + id;
  180.         var args = {
  181.             headers: {
  182.                 'Authorization': req.headers['authorization']
  183.             }
  184.         }
  185.         client.get(url, args, function (data, response) {
  186.             resolve(JSON.stringify(data));
  187.         })
  188.     });
  189. }
  190.  
  191. function validaPrescricao(prescricao, res) {
  192.     return new Promise((resolve, reject) => {
  193.         if (prescricao.idApresentacao === null) {
  194.             res.send("A prescricao deve ter um ID de apresentacao");
  195.             resolve(false);
  196.         }
  197.         if (prescricao.posologiaID === null) {
  198.             if (prescricao.posologia === null) {
  199.                 res.send("A prescricao deve ter um ID de posologia ou uma posologia");
  200.                 resolve(false);
  201.             }
  202.         }
  203.         if (new Date(prescricao.validade) < new Date(Date.now())) {
  204.             res.send("A data da receita nao deve ser anterior a data atual");
  205.             resolve(false);
  206.         }
  207.         if (prescricao.quantidade <= 0) {
  208.             res.send("A prescricao deve ter uma quantidade superior a 0");
  209.             resolve(false);
  210.         }
  211.         var qtdAviada = 0;
  212.         for (let j = 0; j < prescricao.aviamentos.length; j++) {
  213.             var number = prescricao.aviamentos[j].quantidade;
  214.             qtdAviada += number;
  215.         }
  216.         if (prescricao.quantidade < qtdAviada) {
  217.             res.send("A prescricao deve ter uma quantidade de aviamento inferior a quantidade prescrita");
  218.             resolve(false);
  219.         }
  220.         resolve(true);
  221.     });
  222. }
  223.  
  224. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement