otherData.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const bcrypt = require("bcryptjs");
  2. const NonPosTransaction = require("../models/nonPosTransaction");
  3. const Merchant = require("../models/merchant");
  4. module.exports = {
  5. //POST - Update non-pos merchant inventory and create a transaction
  6. //Inputs:
  7. // recipesSold: list of recipes sold and how much (recipe._id and quantity)
  8. //Returns:
  9. // merchant.inventory: entire merchant inventory after being updated
  10. createTransaction: function(req, res){
  11. if(!req.session.user){
  12. res.session.error = "Must be logged in to do that";
  13. return res.redirect("/");
  14. }
  15. let transaction = new NonPosTransaction({
  16. date: Date.now(),
  17. author: "None",
  18. merchant: req.session.user,
  19. recipes: req.body
  20. });
  21. //Calculate all ingredients used, store to list
  22. Merchant.findOne({_id: req.session.user})
  23. .populate("recipes")
  24. .then((merchant)=>{
  25. for(let reqRecipe of req.body){
  26. let merchRecipe = merchant.recipes.find(r => r._id.toString() === reqRecipe.id);
  27. for(let recipeIngredient of merchRecipe.ingredients){
  28. let merchInvIngredient = merchant.inventory.find(i => i.ingredient.toString() === recipeIngredient.ingredient.toString());
  29. merchInvIngredient.quantity -= recipeIngredient.quantity * reqRecipe.quantity;
  30. }
  31. }
  32. merchant.save()
  33. .then((merchant)=>{
  34. res.json(merchant.inventory);
  35. })
  36. .catch((err)=>{
  37. let errorMessage = "There was an error and your transactions could not be saved";
  38. let error = new Error({
  39. code: 547,
  40. displayMessage: errorMessage,
  41. error: err
  42. });
  43. error.save();
  44. return res.json(errorMessage);
  45. });
  46. })
  47. .catch((err)=>{
  48. let errorMessage = "There was an error and your data could not be retrieved";
  49. let error = new Error({
  50. code: 626,
  51. displayMessage: errorMessage,
  52. error: err
  53. });
  54. error.save();
  55. return res.json(errorMessage);
  56. });
  57. transaction.save()
  58. .then((transaction)=>{
  59. return;
  60. })
  61. .catch((err)=>{
  62. let error = new Error({
  63. code: 120,
  64. displayMessage: "none",
  65. error: err
  66. });
  67. error.save();
  68. });
  69. },
  70. //POST - logs the user in
  71. //Inputs:
  72. // req.body.email
  73. // req.body.password
  74. //Redirects to "/inventory" on success
  75. login: function(req, res){
  76. Merchant.findOne({email: req.body.email.toLowerCase()})
  77. .then((merchant)=>{
  78. if(merchant){
  79. bcrypt.compare(req.body.password, merchant.password, (err, result)=>{
  80. if(result){
  81. req.session.user = merchant._id;
  82. return res.redirect("/inventory");
  83. }else{
  84. req.session.error = "Invalid email or password";
  85. return res.redirect("/");
  86. }
  87. });
  88. }else{
  89. req.session.error = "Invalid email or password";
  90. return res.redirect("/");
  91. }
  92. })
  93. .catch((err)=>{
  94. req.session.error = "There was an error and your data could not be retrieved";
  95. let error = new Error({
  96. code: 626,
  97. displayMessage: req.session.error,
  98. error: err
  99. });
  100. error.save();
  101. return res.redirect("/");
  102. });
  103. },
  104. //GET - logs the user out
  105. //Redirects to "/"
  106. logout: function(req, res){
  107. req.session.user = undefined;
  108. return res.redirect("/");
  109. },
  110. }