Advertisement
Guest User

Untitled

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