renderer.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. Merchant.findOne(
  50. {_id: req.session.user},
  51. {
  52. name: 1,
  53. pos: 1,
  54. posId: 1,
  55. posAccessToken: 1,
  56. lastUpdatedTime: 1,
  57. inventory: 1,
  58. recipes: 1,
  59. squareLocation: 1
  60. }
  61. )
  62. .populate("inventory.ingredient")
  63. .populate("recipes")
  64. .then(async (merchant)=>{
  65. if(merchant.pos === "clover"){
  66. await helper.getCloverData(merchant);
  67. }else if(merchant.pos === "square"){
  68. await helper.getSquareData(merchant);
  69. }else{
  70. return;
  71. }
  72. return merchant.save();
  73. })
  74. .then((merchant)=>{
  75. let date = new Date();
  76. let firstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1);
  77. Transaction.aggregate([
  78. {$match: {
  79. merchant: new ObjectId(req.session.user),
  80. date: {$gte: firstDay},
  81. }},
  82. {$sort: {date: -1}},
  83. {$project: {
  84. date: 1,
  85. recipes: 1
  86. }}
  87. ])
  88. .then((transactions)=>{
  89. merchant._id = undefined;
  90. merchant.posAccessToken = undefined;
  91. merchant.lastUpdatedTime = undefined;
  92. merchant.accountStatus = undefined;
  93. return res.render("dashboardPage/dashboard", {merchant: merchant, transactions: transactions});
  94. })
  95. .catch((err)=>{});
  96. })
  97. .catch((err)=>{
  98. req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
  99. return res.redirect("/");
  100. });
  101. },
  102. //GET - Renders the information page
  103. displayLegal: function(req, res){
  104. return res.render("informationPage/information");
  105. },
  106. //GET - Renders the page to reset your password
  107. displayPassReset: function(req, res){
  108. return res.render("passResetPage/passReset");
  109. }
  110. }