home.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const axios = require("axios");
  2. const bcrypt = require("bcryptjs");
  3. const Merchant = require("../models/merchant");
  4. const nonPosTransaction = require("../models/nonPosTransaction");
  5. const token = "b48068eb-411a-918e-ea64-52007147e42c";
  6. module.exports = {
  7. createTransaction: function(req, res){
  8. let transaction = new nonPosTransaction({
  9. date: Date.now(),
  10. author: "None",
  11. merchant: req.session.user,
  12. recipes: req.body
  13. });
  14. //Calculate all ingredients used, store to list
  15. Merchant.findOne({_id: req.session.user})
  16. .populate("recipes")
  17. .then((merchant)=>{
  18. for(let reqRecipe of req.body){
  19. let merchRecipe = merchant.recipes.find(r => r._id.toString() === reqRecipe.id);
  20. for(let recipeIngredient of merchRecipe.ingredients){
  21. let merchInvIngredient = merchant.inventory.find(i => i.ingredient.toString() === recipeIngredient.ingredient.toString());
  22. merchInvIngredient.quantity -= recipeIngredient.quantity * reqRecipe.quantity;
  23. }
  24. }
  25. merchant.save()
  26. .then((merchant)=>{
  27. res.json(merchant.inventory);
  28. })
  29. .catch((err)=>{
  30. console.log(err);
  31. return res.render("error");
  32. });
  33. })
  34. .catch((err)=>{
  35. console.log(err);
  36. return res.render("error");
  37. });
  38. transaction.save()
  39. .then((transaction)=>{
  40. return;
  41. })
  42. .catch((err)=>{
  43. console.log(err);
  44. return res.render("error");
  45. });
  46. },
  47. getCloverRecipes: function(req, res){
  48. if(!req.session.user){
  49. return res.render("error");
  50. }
  51. Merchant.findOne({_id: req.session.user})
  52. .then((merchant)=>{
  53. axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${merchant.posId}/items?access_token=${token}`)
  54. .then((recipes)=>{
  55. return res.json(recipes);
  56. })
  57. .catch((err)=>{
  58. return res.json(err);
  59. });
  60. })
  61. .catch((err)=>{
  62. console.log(err);
  63. return res.render("error");
  64. });
  65. },
  66. unregistered: function(req, res){
  67. return res.redirect("/");
  68. },
  69. login: function(req, res){
  70. Merchant.findOne({email: req.body.email.toLowerCase()})
  71. .then((merchant)=>{
  72. if(merchant){
  73. bcrypt.compare(req.body.password, merchant.password, (err, result)=>{
  74. if(result){
  75. req.session.user = merchant._id;
  76. return res.redirect("/inventory");
  77. }
  78. });
  79. }else{
  80. req.session.error = {
  81. type: "login",
  82. message: "Invalid email or password"
  83. }
  84. return res.redirect("/");
  85. }
  86. })
  87. .catch((err)=>{
  88. console.log(err);
  89. return res.redirect("/");
  90. });
  91. },
  92. logout: function(req, res){
  93. req.session.user = undefined;
  94. return res.redirect("/");
  95. }
  96. }