Advertisement
Guest User

Untitled

a guest
Nov 11th, 2017
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.82 KB | None | 0 0
  1. const Receita = require('../models/receita');
  2. const User = require('../models/user');
  3. var nodemailer = require('nodemailer');
  4. const util = require('util');
  5. const fs = require('fs');
  6.  
  7.  
  8. module.exports = {
  9.  
  10.  
  11.  
  12.  
  13.  
  14. // ******** RECEITAS ********
  15.  
  16.  
  17.  
  18.  
  19. //Get all receitas
  20. //router.route('/')
  21. //.get(ReceitasController.index)
  22.  
  23. index: async function(req, res, next){
  24. try{
  25. console.log("router.route('/')");
  26. console.log(".get(ReceitasController.index)");
  27. const receitas = await Receita.find({});
  28. res.status(200).json(receitas);
  29. }
  30. catch(err){
  31. next(err);
  32. }
  33. },
  34.  
  35.  
  36. //Get receita por ID
  37. //router.route('/:ReceitaId')
  38. //.get(ReceitasController.getReceitaById);
  39.  
  40. getReceitaById: async function(req,res,next){
  41. try{
  42. console.log("router.route('/:ReceitaId')");
  43. console.log(".get(ReceitasController.index)");
  44. console.log("req.path",req.path);
  45.  
  46.  
  47. const receitaId = req.params["ReceitaId"];
  48. const receita = await Receita.findById(receitaId);
  49. res.status(200).json(receita);
  50. }
  51. catch(err){
  52. next(err);
  53. }
  54. },
  55.  
  56.  
  57.  
  58. //Post receita
  59. //router.route('/')
  60. //.post(ReceitasController.newReceita);
  61.  
  62. newReceita: async function(req, res, next) {
  63. try
  64. {
  65. console.log("router.route('/')");
  66. console.log(".post(ReceitasController.newReceita)")
  67. console.log('body', req.body["utente"]);
  68. console.log('params', req.params);
  69.  
  70. //Validacoes
  71.  
  72. //receber do body o id do utente
  73. const utenteId = req.body["utente"];
  74. //receber do body o id do medico
  75. const medicoId = req.body["medico"];
  76. //valida se sao o mesmo user
  77. if(utenteId==medicoId){
  78. return res.status(403).json({ error: "O medico e utente nao podem ter o mesmo id"});
  79. }
  80. //procurar em user se existe o utente que é passado no body
  81. const utente = await User.findById(utenteId);
  82. console.log('procura utente', utente);
  83. if(!utente){
  84. return res.status(403).json({ error: "O Utente nao existe"});
  85. }else{
  86. if(!utente["utente"]){
  87. return res.status(403).json({ error: "O Utente nao existe"});
  88. }
  89. }
  90. //procurar em users se existe o medico que é passado no body
  91. const medico = await User.findById(medicoId);
  92. console.log('procura medico', medico);
  93. if(!medico){
  94. return res.status(403).json({ error: "O Medico nao existe"});
  95. }else{
  96. if(!medico["medico"]){
  97. return res.status(403).json({ error: "O Medico nao existe"});
  98. }
  99. }
  100.  
  101.  
  102. //grava receita se utente e medico existirem no documento users
  103. const receita = new Receita(req.body);
  104.  
  105. await receita.save();
  106.  
  107. return res.status(201).json(receita);
  108.  
  109. }
  110. catch(err) {
  111. next(err);
  112. }
  113. },
  114.  
  115.  
  116. //Modifica receita por id
  117. //router.route('/:ReceitaId')
  118. //.put(ReceitasController.replaceReceitaById);
  119.  
  120. replaceReceitaById: async function(req,res,next){
  121. try{
  122.  
  123. console.log("router.route('/:ReceitaId')");
  124. console.log(".put(ReceitasController.replaceReceitaById)");
  125. const receitaId = req.params["ReceitaId"];
  126. const newReceita = req.body;
  127. const result = await Receita.findByIdAndUpdate(receitaId,newReceita);
  128. const receita = await Receita.findById(receitaId);
  129. res.status(200).json(receita);
  130. }
  131. catch(err){
  132. next(err);
  133. }
  134. },
  135.  
  136.  
  137.  
  138.  
  139.  
  140. // ******** PRESCRICOES ********
  141.  
  142.  
  143.  
  144.  
  145.  
  146. //Get todas Prespricoes
  147. //router.route('/Prescricoes')
  148. //.get(ReceitasController.getAllPrescricoes);
  149.  
  150. getAllPrescricoes: async function(req, res, next) {
  151. try{
  152.  
  153.  
  154. console.log("router.route('/Prescricoes')");
  155. console.log(".get(ReceitasController.getAllPrescricoes)");
  156.  
  157. /*
  158. if(req.path !== "/Prescricoes"){
  159. next();
  160. }
  161. */
  162.  
  163. const receitas = await Receita.find({});
  164. var allPrescricoes = new Array();
  165.  
  166. for(var i in receitas) {
  167. const prescricoes=receitas[i]["prescricoes"];
  168. for (var j = 0; j < prescricoes.length; j++) {
  169. allPrescricoes.push(prescricoes[j]);
  170.  
  171. }
  172. }
  173.  
  174. console.log(allPrescricoes);
  175.  
  176. //res.status(200).json(allPrescricoes);
  177.  
  178. }catch(err){
  179. next(err);
  180. }
  181. },
  182.  
  183.  
  184.  
  185. //Get Prespricao por id
  186. //router.route('/Prescricoes/:PrescricaoId')
  187. //.get(ReceitasController.getPrescricaoById);
  188.  
  189. getPrescricaoById: async function(req, res, next) {
  190. try{
  191.  
  192.  
  193. console.log("router.route('/Prescricoes/:PrescricaoId')");
  194. console.log(".get(ReceitasController.getPrescricaoById)");
  195.  
  196. const receitas = await Receita.find({});
  197. const prescricaoId = req.params["PrescricaoId"];
  198.  
  199. var prescricao;
  200.  
  201. for(var i in receitas) {
  202. const prescricoes=receitas[i]["prescricoes"];
  203. for (var j = 0; j < prescricoes.length; j++) {
  204. if(prescricoes[j]._id==prescricaoId){
  205. return res.status(200).json(prescricoes[j]);
  206. }
  207. }
  208. }
  209.  
  210. return res.status(404).json("Não encontrou a prescricao com esse id");
  211.  
  212. //res.status(200).json(allPrescricoes);
  213.  
  214. }catch(err){
  215. next(err);
  216. }
  217. },
  218.  
  219.  
  220.  
  221. //Get Prespricoes de uma receita
  222. //router.route('/:ReceitaId/Prescricao')
  223. //.get(ReceitasController.getPrescricoes);
  224.  
  225. getPrescricoes: async function(req, res, next) {
  226. try{
  227. console.log("router.route('/:ReceitaId/Prescricao')");
  228. console.log(".get(ReceitasController.getPrescricoes)");
  229. //obter o id da receita nos parametros
  230.  
  231. const receitaId = req.params["ReceitaId"];
  232. console.log(receitaId);
  233.  
  234. const newreceita = await Receita.findById(receitaId);
  235. console.log(newreceita);
  236.  
  237. console.log(newreceita["prescricoes"]);
  238.  
  239. res.status(200).json(newreceita["prescricoes"]);
  240.  
  241.  
  242. }
  243. catch(err){
  244. next(err);
  245. }
  246. },
  247.  
  248.  
  249.  
  250. //Adicionar prescrições por receita
  251. //router.route('/:ReceitaId/Prescricao')
  252. //.post(ReceitasController.newPrescricao);
  253.  
  254. newPrescricao: async function(req, res, next) {
  255. try{
  256. console.log("router.route('/:ReceitaId/Prescricao')");
  257. console.log(".post(ReceitasController.newPrescricao)");
  258. //obter o id da receita nos parametros
  259. const receitaId = req.params["ReceitaId"];
  260. //obter a prescricao que esta no body
  261. const prescricaoBody = req.body;
  262. //procurar a receita na bd pelo id
  263. console.log(receitaId);
  264. const newreceita = await Receita.findById(receitaId);
  265. console.log(newreceita);
  266. newreceita.prescricoes.push(prescricaoBody);
  267. const result = await newreceita.save();
  268. res.status(200).json(newreceita);
  269. }
  270. catch(err){
  271. next(err);
  272. }
  273. },
  274.  
  275.  
  276.  
  277. //Modificar uma prescricao por receita
  278. //router.route('/:ReceitaId/Prescricao/:PrescricaoId')
  279. //.put(ReceitasController.replacePrescricao);
  280.  
  281. replacePrescricao: async function(req, res, next) {
  282. try{
  283. console.log("router.route('/:ReceitaId/Prescricao/:PrescricaoId')");
  284. console.log(".put(ReceitasController.replacePrescricao)");
  285. //obter o id da receita nos parametros
  286. const receitaId = req.params["ReceitaId"];
  287. //procurar a receita na bd pelo id
  288. const newReceita = await Receita.findById(receitaId);
  289. //Obter a lista de prescricoes da receita
  290. const prescricoes = newReceita["prescricoes"];
  291. //testar se já houve aviamento (ver se lista de aviamentos vazia)
  292. const aviamentos = prescricoes.aviamentos;
  293.  
  294. if(!(aviamentos && aviamentos.length)){
  295. const prescricaoId = req.params["PrescricaoId"];
  296. //obter a prescricao que esta no body
  297. const prescricaoBody = req.body;
  298.  
  299. index = await prescricoes.findIndex(elem => elem._id==prescricaoId);
  300. prescricoes.splice(index,1);
  301. prescricoes.push(prescricaoBody);
  302. const result = await newReceita.save();
  303. res.status(200).json(prescricoes);
  304. }
  305.  
  306. }
  307. catch(err){
  308. next(err);
  309. }
  310. },
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319. //Delete uma prescricao por receita
  320. //router.route('/:ReceitaId/Prescricao/:PrescricaoId')
  321. //.delete(ReceitasController.delPrescricao);
  322.  
  323. delPrescricao: async function(req, res, next) {
  324. try{
  325. console.log("router.route('/:ReceitaId/Prescricao/:PrescricaoId')");
  326. console.log(".delete(ReceitasController.delPrescricao)");
  327. //obter o id da receita nos parametros
  328. const receitaId = req.params["ReceitaId"];
  329. //procurar a receita na bd pelo id
  330. const newReceita = await Receita.findById(receitaId);
  331. //Obter a lista de prescricoes da receita
  332. const prescricoes = newReceita["prescricoes"];
  333. const prescricaoId = req.params["PrescricaoId"];
  334.  
  335. index = await prescricoes.findIndex(elem => elem._id==prescricaoId);
  336. prescricoes.splice(index,1);
  337. const result = await newReceita.save();
  338. res.status(200).json(prescricoes);
  339.  
  340.  
  341. }
  342. catch(err){
  343. next(err);
  344. }
  345. },
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357. //GET Prescrições por aviar até {data} ou todas (sem data opcional)
  358. //Utente/{id}/prescricao/poraviar/{?data}
  359. //router.route('/Utente/:UtenteId/Prescricao/Poraviar/:data?')
  360. //.get(ReceitasController.prescricoesPorAviar);
  361. prescricoesPorAviar: async function(req,res,next){
  362. try{
  363. console.log("router.route('/Utente/:UtenteId/Prescricao/Poraviar/{?data}')");
  364. console.log(".get(ReceitasController.prescricoesPorAviar)");
  365.  
  366. const dataReceita = new Date(req.params["data"]);
  367. const utenteId = req.params["UtenteId"];
  368. const receitas = await Receita.find({});
  369. var prescricoesUtente = new Array();
  370.  
  371. if(dataReceita instanceof Date && isFinite(dataReceita)){
  372.  
  373. for(var i in receitas) {
  374. const prescricoes=receitas[i]["prescricoes"];
  375. if((utenteId==receitas[i]["utente"]) && (receitas[i]["data"]<dataReceita)){
  376. for (var j = 0; j < prescricoes.length; j++) {
  377. prescricoesUtente.push(prescricoes[j]);
  378. }
  379. }
  380. }
  381.  
  382. }else{
  383. for(var i in receitas) {
  384. const prescricoes=receitas[i]["prescricoes"];
  385. if(utenteId==receitas[i]["utente"]){
  386. for (var j = 0; j < prescricoes.length; j++) {
  387. prescricoesUtente.push(prescricoes[j]);
  388. }
  389. }
  390. }
  391. }
  392.  
  393. //console.log(prescricoesUtente);
  394. res.status(200).json(prescricoesUtente);
  395.  
  396.  
  397. }catch(err){
  398. next(err);
  399. }
  400. },
  401.  
  402.  
  403.  
  404. //router.route('/:ReceitaId')
  405. //.delete(ReceitasController.delReceita)
  406. delReceita: async function(req,res,next){
  407. try{
  408. console.log("router.route('/:ReceitaId')");
  409. console.log(".delete(ReceitasController.delReceita)");
  410. //obter o id da receita nos parametros
  411. const receitaId = req.params["ReceitaId"];
  412. console.log("receitaId",receitaId);
  413. //procurar a receita na bd pelo id
  414. const newReceita = await Receita.findByIdAndRemove(receitaId);
  415. const receitas = await Receita.find();
  416. res.status(200).json(receitas);
  417.  
  418. }catch(err){
  419.  
  420. }
  421. },
  422.  
  423.  
  424. // ******** AVIAMENTOS ********
  425.  
  426.  
  427.  
  428. //POST de um Aviamento
  429. //router.route('/:ReceitaId/Prescricao/:PrescricaoId/Aviamento')
  430. //.post(ReceitasController.newAviamento)
  431.  
  432.  
  433. const hasRoleAsync = util.promisify(hasRole);
  434.  
  435. newAviamento: async function(req, res, next) {
  436. try{
  437.  
  438. console.log("router.route('/:ReceitaId/Prescricao/:PrescricaoId/Aviamento')");
  439. console.log(".post(ReceitasController.newAviamento)");
  440.  
  441.  
  442. const decision = await hasRoleAsync(req.user,'medico');
  443.  
  444. hasRoleAsync(req.user,'medico',function(decision){
  445. if(!decision){
  446. return res.status(403).send(
  447. { auth: false, token: null, message: 'You have no authorization.'});
  448.  
  449. }
  450. else{
  451. //quantidade na prescricao passada no body
  452. const quantidadeBody = req.body.quantidade;
  453. const receitaId = req.params["ReceitaId"];
  454. const prescricaoId = req.params["PrescricaoId"];
  455. const newReceita = await Receita.findById(receitaId);
  456. const prescricoes = newReceita["prescricoes"];
  457. prescricao = await prescricoes.find(elem => elem._id==prescricaoId);
  458. const userId = req.body["farmaceutico"];
  459. console.log("userType",userId);
  460. const user = await User.findById(userId);
  461. console.log("user",user);
  462. console.log("user['farmaceutico']:",user['farmaceutico']);
  463.  
  464. const aviamento = req.body;
  465. dataValidadePrespricao = prescricao["dataValidade"];
  466. var dataAviamento = new Date(aviamento.dataAviamento);
  467.  
  468. console.log("dataValidadePrespricao",dataValidadePrespricao);
  469. console.log("dataAviamento",dataAviamento);
  470.  
  471.  
  472. quantidadePrescricao = prescricao.quantidade;
  473. //console.log(quantidadePrescricao);
  474. if(user['farmaceutico']==true){
  475.  
  476. if(dataValidadePrespricao>=dataAviamento){
  477. if(quantidadePrescricao>=quantidadeBody && quantidadePrescricao>0){
  478. prescricao.quantidade-=quantidadeBody;
  479.  
  480. aviamentos = prescricao.aviamentos;
  481. aviamentos.push(aviamento);
  482.  
  483. const result = await newReceita.save();
  484. res.status(200).json({prescricao});
  485. }else{
  486. res.status(400).json("Erro - A quantidade da prescricao eh inferior a quantidade que deseja aviar");
  487. }
  488. }else{
  489. res.status(400).json("Erro - Data nao valida: superior a data da prescricao");
  490. }
  491.  
  492. }else{
  493. res.status(400).json("Erro - User invalido - Precisa de ser farmaceutico");
  494. }
  495. }
  496. });
  497.  
  498. }
  499. catch(err){
  500. next(err);
  501. }
  502. },
  503.  
  504.  
  505.  
  506. //Get aviamentos de uma prescricao
  507. //router.route('/:ReceitaId/Prescricao/:PrescricaoId/Aviamento')
  508. //.get(ReceitasController.getAviamentos);
  509.  
  510. getAviamentos: async function(req,res,next){
  511. try{
  512. console.log("router.route('/:ReceitaId/Prescricao/:PrescricaoId/Aviamento')");
  513. console.log(".get(ReceitasController.getAviamentos)");
  514. const receitaId = req.params["ReceitaId"];
  515. const prescricaoId = req.params["PrescricaoId"];
  516. const newReceita = await Receita.findById(receitaId);
  517. const prescricoes = newReceita["prescricoes"];
  518. prescricao = await prescricoes.find(elem => elem._id==prescricaoId);
  519. aviamentos = prescricao.aviamentos;
  520. res.status(200).json(aviamentos);
  521.  
  522. }catch(err){
  523. next(err);
  524. }
  525. },
  526.  
  527.  
  528.  
  529. //Get aviamento por id
  530. //router.route('/Aviamentos/:AviamentoId')
  531. //.get(ReceitasController.getAviamentoById);
  532.  
  533. getAviamentoById: async function(req,res,next){
  534. try{
  535. console.log("router.route('/Aviamentos/:AviamentoId')");
  536. console.log(".get(ReceitasController.getAviamentoById)");
  537. //obter todas as receitas
  538. //pesquisar em cada recita a lista das prescicoes e verificar se alguma delas tem o id igual ao passado no parametro
  539. //escrever
  540.  
  541. //todas as receitas
  542. const receitas = await Receita.find({});
  543. const aviamentoId = req.params["AviamentoId"];
  544.  
  545. for(var i in receitas) {
  546. const prescricoes=receitas[i]["prescricoes"];
  547. for (var j = 0; j < prescricoes.length; j++) {
  548. const aviamentos=prescricoes[j].aviamentos;
  549. for (var z = 0; z < aviamentos.length; z++){
  550. if(aviamentoId==aviamentos[z]._id){
  551. return res.status(200).json(aviamentos[z]);
  552. }
  553. }
  554. }
  555. }
  556.  
  557. return res.status(404).json("Aviamento id nao encontrado");
  558.  
  559. }catch(err){
  560. next(err);
  561. }
  562. },
  563.  
  564.  
  565.  
  566. // ******** Outros ********
  567.  
  568.  
  569.  
  570. //Get receitas por medico
  571. //router.route('/Medico/:MedicoId')
  572. //.get(ReceitasController.getReceitasMedico);
  573. getReceitasMedico: async function(req,res,next){
  574. try{
  575. /*
  576. if(req.path !== "/Prescricoes"){
  577. next();
  578. }*/
  579.  
  580. console.log("router.route('/Medico/:MedicoId')");
  581. console.log(".get(ReceitasController.getReceitasMedico)");
  582.  
  583. const medicoId = req.params["MedicoId"];
  584. const receitas = await Receita.find({});
  585. var receitasMedico = new Array();
  586.  
  587. for(var i in receitas) {
  588. console.log("receitas[i]['medico']._id",receitas[i]["medico"]);
  589. if(medicoId==receitas[i]["medico"]){
  590. receitasMedico.push(receitas[i])
  591. }
  592. }
  593.  
  594. console.log(receitasMedico);
  595. return res.status(200).json(receitasMedico);
  596.  
  597.  
  598. }catch(err){
  599.  
  600. }
  601. },
  602.  
  603.  
  604.  
  605. //Get receitas por medico
  606. //router.route('/Medico/:MedicoId')
  607. //.get(ReceitasController.getReceitasMedico);
  608. getReceitasMedico: async function(req,res,next){
  609. try{
  610. /*
  611. if(req.path !== "/Prescricoes"){
  612. next();
  613. }*/
  614.  
  615. console.log("router.route('/Medico/:MedicoId')");
  616. console.log(".get(ReceitasController.getReceitasMedico)");
  617.  
  618. const medicoId = req.params["MedicoId"];
  619. const receitas = await Receita.find({});
  620. var receitasMedico = new Array();
  621.  
  622. for(var i in receitas) {
  623.  
  624. if(medicoId==receitas[i]["medico"]){
  625. receitasMedico.push(receitas[i])
  626. }
  627. }
  628.  
  629. res.status(200).json(receitasMedico);
  630.  
  631.  
  632. }catch(err){
  633.  
  634. }
  635. },
  636.  
  637.  
  638.  
  639. //Get receitas por utente
  640. //router.route('/Utente/:UtenteId')
  641. //.get(ReceitasController.getReceitasUtente);
  642. getReceitasUtente: async function(req,res,next){
  643. try{
  644. /*
  645. if(req.path !== "/Prescricoes"){
  646. next();
  647. }*/
  648.  
  649. console.log("router.route('/Utente/:UtenteId')");
  650. console.log(".get(ReceitasController.getReceitasUtente)");
  651.  
  652. const utenteId = req.params["UtenteId"];
  653. const receitas = await Receita.find({});
  654. var receitasUtente = new Array();
  655.  
  656. for(var i in receitas) {
  657.  
  658. if(utenteId==receitas[i]["utente"]){
  659. receitasUtente.push(receitas[i])
  660. }
  661. }
  662.  
  663. res.status(200).json(receitasUtente);
  664.  
  665. }catch(err){
  666.  
  667. }
  668. },
  669.  
  670.  
  671.  
  672.  
  673. //Emitir receita ... enviar email ao utente
  674. //router.route('/:ReceitaId/Emitir')
  675. //.put(ReceitasController.emitirReceita);
  676.  
  677. emitirReceita: async function(req, res, next) {
  678. try{
  679. console.log("router.route('/:ReceitaId/Emitir')");
  680. console.log(".put(ReceitasController.emitirReceita)");
  681. //obter o id da receita nos parametros
  682. const receitaId = req.params["ReceitaId"];
  683. console.log("receitaId",receitaId);
  684. const newReceita = await Receita.findById(receitaId);
  685. console.log("newReceita",newReceita);
  686. const user = await User.findById(newReceita["utente"]);
  687. console.log(user);
  688.  
  689. var enviado=false;
  690.  
  691. const utenteEmail = user["email"];
  692.  
  693.  
  694. if(newReceita["emitida"]===false){
  695. newReceita["emitida"]=true;
  696.  
  697.  
  698. const user = await User.findOne(newReceita["utente"]);
  699.  
  700.  
  701. var transporter = nodemailer.createTransport({
  702. service: 'Hotmail',
  703. auth: {
  704. user: 'gestor.receitas@hotmail.com', // Your email id
  705. pass: 'GESTOR?receitas' // Your password
  706. }
  707. });
  708.  
  709. var text = 'Receita emitida: \n\n' + newReceita;
  710.  
  711. var mailOptions = {
  712. from: '<gestor.receitas@hotmail.com>', // sender address
  713. to: utenteEmail, // list of receivers
  714. subject: 'Emissao de Receita', // Subject line
  715. text: text //, // plaintext body
  716. };
  717.  
  718.  
  719. transporter.sendMail(mailOptions, function(error, info){
  720. if(error){
  721. console.log(error);
  722. res.json({error});
  723. }else{
  724. enviado=true;
  725. console.log('Message sent: ' + info.response);
  726. res.json({yo: info.response});
  727. };
  728. transporter.close();
  729. });
  730.  
  731.  
  732.  
  733.  
  734. }
  735.  
  736. if(enviado==true){
  737. const result = await newReceita.save();
  738. res.status(200).json(newReceita);
  739. }
  740.  
  741. }
  742. catch(err){
  743. next(err);
  744. }
  745. }
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement