renderer.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. return res.render("landingPage/landing", {error: error, isLoggedIn: isLoggedIn});
  30. },
  31. /*
  32. GET - Displays the main inventory page for merchants
  33. Returns = the logged in merchant and his/her data
  34. Renders inventoryPage
  35. */
  36. displayDashboard: function(req, res){
  37. if(!req.session.user){
  38. req.session.error = "MUST BE LOGGED IN TO DO THAT";
  39. return res.redirect("/");
  40. }
  41. new Activity({
  42. ipAddr: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
  43. merchant: req.session.user,
  44. route: "dashboard",
  45. date: new Date()
  46. })
  47. .save()
  48. .catch(()=>{});
  49. let merchant2 = {};
  50. Merchant.findOne(
  51. {_id: req.session.user},
  52. {
  53. name: 1,
  54. pos: 1,
  55. posId: 1,
  56. posAccessToken: 1,
  57. lastUpdatedTime: 1,
  58. inventory: 1,
  59. recipes: 1,
  60. squareLocation: 1,
  61. status: 1
  62. }
  63. )
  64. .populate("inventory.ingredient")
  65. .populate("recipes")
  66. .then(async (merchant)=>{
  67. merchant2 = merchant;
  68. if(merchant.status.includes("unverified")){
  69. throw "unverified";
  70. }
  71. if(merchant.pos === "clover"){
  72. await helper.getCloverData(merchant);
  73. }else if(merchant.pos === "square"){
  74. await helper.getSquareData(merchant);
  75. }else{
  76. return;
  77. }
  78. return merchant.save();
  79. })
  80. .then((merchant)=>{
  81. if(merchant){
  82. merchant2 = merchant;
  83. }
  84. let date = new Date();
  85. let firstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1);
  86. return Transaction.aggregate([
  87. {$match: {
  88. merchant: new ObjectId(req.session.user),
  89. date: {$gte: firstDay},
  90. }},
  91. {$sort: {date: -1}},
  92. {$project: {
  93. date: 1,
  94. recipes: 1
  95. }}
  96. ]);
  97. })
  98. .then((transactions)=>{
  99. merchant2._id = undefined;
  100. merchant2.posAccessToken = undefined;
  101. merchant2.lastUpdatedTime = undefined;
  102. merchant2.accountStatus = undefined;
  103. merchant2.status = undefined;
  104. return res.render("dashboardPage/dashboard", {merchant: merchant2, transactions: transactions});
  105. })
  106. .catch((err)=>{
  107. if(err === "unverified"){
  108. return res.redirect(`/verify/email/${merchant2._id}`);
  109. }
  110. req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
  111. return res.redirect("/");
  112. });
  113. },
  114. //GET - Renders the page to reset your password
  115. displayPassReset: function(req, res){
  116. return res.render("passResetPage/passReset");
  117. }
  118. }