renderer.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. const ObjectId = require("mongoose").Types.ObjectId;
  2. const Transaction = require("../models/transaction.js");
  3. const Activity = require("../models/activity.js");
  4. const helper = require("./helper.js");
  5. module.exports = {
  6. /*
  7. GET - Shows the public landing page
  8. */
  9. landingPage: function(req, res){
  10. return res.render("otherPages/landing", {banner: res.locals.banner});
  11. },
  12. //GET: Renders the login page
  13. loginPage: function(req, res){
  14. if(req.session.user !== undefined) return res.redirect("/dashboard");
  15. return res.render("otherPages/login", {banner: res.locals.banner});
  16. },
  17. //GET: Renders the registration page
  18. registerPage: function(req, res){
  19. return res.render("otherPages/register", {banner: res.locals.banner});
  20. },
  21. /*
  22. GET - Displays the main inventory page for merchants
  23. Returns = the logged in merchant and his/her data
  24. Renders inventoryPage
  25. */
  26. displayDashboard: function(req, res){
  27. new Activity({
  28. ipAddr: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
  29. merchant: res.locals.merchant._id,
  30. route: "dashboard",
  31. date: new Date()
  32. })
  33. .save()
  34. .catch(()=>{});
  35. let merchant2 = {};
  36. res.locals.merchant
  37. .populate("inventory.ingredient")
  38. .populate("recipes")
  39. .execPopulate()
  40. .then(async (merchant)=>{
  41. if(res.locals.merchant.status.includes("unverified")){
  42. throw "unverified";
  43. }
  44. if(res.locals.merchant.pos === "clover"){
  45. await helper.getCloverData(res.locals.merchant);
  46. }else if(res.locals.merchant.pos === "square"){
  47. await helper.getSquareData(res.locals.merchant);
  48. }else{
  49. return;
  50. }
  51. return res.locals.merchant.save();
  52. })
  53. .then((merchant)=>{
  54. let date = new Date();
  55. let firstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1);
  56. return Transaction.aggregate([
  57. {$match: {
  58. merchant: new ObjectId(res.locals.merchant._id),
  59. date: {$gte: firstDay},
  60. }},
  61. {$sort: {date: -1}},
  62. {$project: {
  63. date: 1,
  64. recipes: 1
  65. }}
  66. ]);
  67. })
  68. .then((transactions)=>{
  69. res.locals.merchant._id = undefined;
  70. res.locals.merchant.posAccessToken = undefined;
  71. res.locals.merchant.lastUpdatedTime = undefined;
  72. res.locals.merchant.accountStatus = undefined;
  73. res.locals.merchant.status = undefined;
  74. return res.render("dashboardPage/dashboard", {merchant: res.locals.merchant, transactions: transactions});
  75. })
  76. .catch((err)=>{
  77. //TODO: add banners to the necessary pages
  78. if(err === "unverified"){
  79. req.session.error = "PLEASE VERIFY YOUR EMAIL ADDRESS";
  80. return res.redirect(`/verify/email/${merchant2._id}`);
  81. }
  82. req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
  83. return res.redirect("/");
  84. });
  85. },
  86. //GET - Renders the page to reset your password
  87. displayPassReset: function(req, res){
  88. return res.render("passResetPage/passReset");
  89. }
  90. }