renderer.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. const ObjectId = require("mongoose").Types.ObjectId;
  2. const Merchant = require("../models/merchant.js");
  3. const Transaction = require("../models/transaction.js");
  4. const Activity = require("../models/activity.js");
  5. const helper = require("./helper.js");
  6. module.exports = {
  7. /*
  8. GET - Shows the public landing page
  9. Return = a single error message (only if there is an error)
  10. Renders landingPage
  11. */
  12. landingPage: function(req, res){
  13. new Activity({
  14. ipAddr: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
  15. merchant: req.session.user,
  16. route: "landing",
  17. date: new Date()
  18. })
  19. .save()
  20. .catch(()=>{});
  21. let error = {};
  22. let isLoggedIn = req.session.isLoggedIn || false;
  23. if(req.session.error){
  24. error = req.session.error;
  25. req.session.error = undefined;
  26. }else{
  27. error = null;
  28. }
  29. if(req.session.success){
  30. success = req.session.success;
  31. req.session.success = undefined;
  32. }else{
  33. success = null;
  34. }
  35. return res.render("landingPage/landing", {error: error, success: success, isLoggedIn: isLoggedIn});
  36. },
  37. /*
  38. GET - Displays the main inventory page for merchants
  39. Returns = the logged in merchant and his/her data
  40. Renders inventoryPage
  41. */
  42. displayDashboard: function(req, res){
  43. if(!req.session.user){
  44. req.session.error = "MUST BE LOGGED IN TO DO THAT";
  45. return res.redirect("/");
  46. }
  47. new Activity({
  48. ipAddr: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
  49. merchant: req.session.user,
  50. route: "dashboard",
  51. date: new Date()
  52. })
  53. .save()
  54. .catch(()=>{});
  55. let merchant2 = {};
  56. Merchant.findOne(
  57. {_id: req.session.user},
  58. {
  59. name: 1,
  60. pos: 1,
  61. posId: 1,
  62. posAccessToken: 1,
  63. lastUpdatedTime: 1,
  64. inventory: 1,
  65. recipes: 1,
  66. squareLocation: 1,
  67. status: 1
  68. }
  69. )
  70. .populate("inventory.ingredient")
  71. .populate("recipes")
  72. .then(async (merchant)=>{
  73. merchant2 = merchant;
  74. if(merchant.status.includes("unverified")){
  75. throw "unverified";
  76. }
  77. if(merchant.pos === "clover"){
  78. await helper.getCloverData(merchant);
  79. }else if(merchant.pos === "square"){
  80. await helper.getSquareData(merchant);
  81. }else{
  82. return;
  83. }
  84. return merchant.save();
  85. })
  86. .then((merchant)=>{
  87. if(merchant){
  88. merchant2 = merchant;
  89. }
  90. let date = new Date();
  91. let firstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1);
  92. return Transaction.aggregate([
  93. {$match: {
  94. merchant: new ObjectId(req.session.user),
  95. date: {$gte: firstDay},
  96. }},
  97. {$sort: {date: -1}},
  98. {$project: {
  99. date: 1,
  100. recipes: 1
  101. }}
  102. ]);
  103. })
  104. .then((transactions)=>{
  105. merchant2._id = undefined;
  106. merchant2.posAccessToken = undefined;
  107. merchant2.lastUpdatedTime = undefined;
  108. merchant2.accountStatus = undefined;
  109. merchant2.status = undefined;
  110. return res.render("dashboardPage/dashboard", {merchant: merchant2, transactions: transactions});
  111. })
  112. .catch((err)=>{
  113. if(err === "unverified"){
  114. return res.redirect(`/verify/email/${merchant2._id}`);
  115. }
  116. req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
  117. return res.redirect("/");
  118. });
  119. },
  120. //GET - Renders the page to reset your password
  121. displayPassReset: function(req, res){
  122. return res.render("passResetPage/passReset");
  123. }
  124. }