renderer.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. const ObjectId = require("mongoose").Types.ObjectId;
  2. const Transaction = require("../models/transaction.js");
  3. const helper = require("./helper.js");
  4. module.exports = {
  5. /*
  6. GET - Shows the public landing page
  7. */
  8. landingPage: function(req, res){
  9. return res.render("otherPages/landing", {banner: res.locals.banner});
  10. },
  11. //GET: Renders the login page
  12. loginPage: function(req, res){
  13. if(req.session.owner !== undefined) return res.redirect("/dashboard");
  14. return res.render("otherPages/login", {banner: res.locals.banner});
  15. },
  16. //GET: Renders the registration page
  17. registerPage: function(req, res){
  18. return res.render("otherPages/register", {banner: res.locals.banner});
  19. },
  20. /*
  21. GET - Displays the main inventory page for merchants
  22. Returns = the logged in merchant and his/her data
  23. Renders inventoryPage
  24. */
  25. displayDashboard: function(req, res){
  26. if(res.locals.owner.status.includes("unverified")) {
  27. req.session.error = "PLEASE VERIFY YOUR EMAIL ADDRESS";
  28. return res.redirect(`/verify/email/${res.locals.owner._id}`);
  29. }
  30. res.locals.merchant
  31. .populate("inventory.ingredient")
  32. .populate("recipes")
  33. .execPopulate()
  34. .then((merchant)=>{
  35. let date = new Date();
  36. let firstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1);
  37. return Transaction.aggregate([
  38. {$match: {
  39. merchant: new ObjectId(merchant._id),
  40. date: {$gte: firstDay},
  41. }},
  42. {$sort: {date: -1}},
  43. {$project: {
  44. date: 1,
  45. recipes: 1
  46. }}
  47. ]);
  48. })
  49. .then(async (transactions)=>{
  50. if(res.locals.merchant.pos !== "none"){
  51. let latest = null;
  52. if(transactions.length === 0){
  53. let latestTransaction = await Transaction.find({merchant: res.locals.merchant._id}).sort({date: -1}).limit(1);
  54. if(latestTransaction.length > 0) latest = new Date(latest[0].date);
  55. }else{
  56. latest = new Date(transactions[0].date);
  57. }
  58. if(latest !== null){
  59. latest.setMilliseconds(latest.getMilliseconds() + 1);
  60. let now = new Date();
  61. let postData = {
  62. location_ids: [res.locals.merchant.locationId],
  63. query: {
  64. filter: {
  65. date_time_filter: {
  66. created_at: {
  67. start_at: latest,
  68. end_at: now
  69. }
  70. },
  71. state_filter: {
  72. states: ["COMPLETED"]
  73. }
  74. },
  75. sort: {
  76. sort_field: "CREATED_AT",
  77. sort_order: "DESC"
  78. }
  79. },
  80. limit: 10000
  81. };
  82. do{
  83. let newOrders = await helper.getSquareData(res.locals.owner, res.locals.merchant, postData);
  84. postData.cursor = newOrders.cursor;
  85. for(let i = 0; i < newOrders.length; i++){
  86. for(let j = 0; j < newOrders[i].recipes.length; j++){
  87. newOrders[i].recipes[j].recipe = newOrders[i].recipes[j].recipe._id;
  88. }
  89. }
  90. transactions = newOrders.concat(transactions);
  91. }while(postData.cursor !== undefined);
  92. }
  93. }
  94. res.locals.merchant.owner = undefined;
  95. res.locals.createdAt = undefined;
  96. res.locals.owner.password = undefined;
  97. res.locals.owner.status = undefined;
  98. res.locals.owner.square = undefined;
  99. res.locals.owner.createdAt = undefined;
  100. res.locals.owner.session = undefined;
  101. return res.render("dashboardPage/dashboard", {owner: res.locals.owner, merchant: res.locals.merchant, transactions: transactions});
  102. })
  103. .catch((err)=>{
  104. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA";
  105. return res.redirect("/");
  106. });
  107. },
  108. //GET - Renders the page to reset your password
  109. displayPassReset: function(req, res){
  110. return res.render("passResetPage/passReset");
  111. }
  112. }