renderer.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. let transactions = 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. let merchants = res.locals.owner.populate("merchants", "name").execPopulate();
  49. return Promise.all([transactions, merchants]);
  50. })
  51. .then(async (response)=>{
  52. let transactions = response[0];
  53. if(res.locals.merchant.pos !== "none"){
  54. let latest = null;
  55. if(transactions.length === 0){
  56. let latestTransaction = await Transaction.find({merchant: res.locals.merchant._id}).sort({date: -1}).limit(1);
  57. if(latestTransaction.length > 0) latest = new Date(latestTransaction[0].date);
  58. }else{
  59. latest = new Date(transactions[0].date);
  60. }
  61. if(latest !== null){
  62. latest.setMilliseconds(latest.getMilliseconds() + 1);
  63. let now = new Date();
  64. let postData = {
  65. location_ids: [res.locals.merchant.locationId],
  66. query: {
  67. filter: {
  68. date_time_filter: {
  69. created_at: {
  70. start_at: latest,
  71. end_at: now
  72. }
  73. },
  74. state_filter: {
  75. states: ["COMPLETED"]
  76. }
  77. },
  78. sort: {
  79. sort_field: "CREATED_AT",
  80. sort_order: "DESC"
  81. }
  82. },
  83. limit: 10000
  84. };
  85. do{
  86. let newOrders = await helper.getSquareData(res.locals.owner, res.locals.merchant, postData);
  87. postData.cursor = newOrders.cursor;
  88. for(let i = 0; i < newOrders.length; i++){
  89. for(let j = 0; j < newOrders[i].recipes.length; j++){
  90. newOrders[i].recipes[j].recipe = newOrders[i].recipes[j].recipe._id;
  91. }
  92. }
  93. transactions = newOrders.concat(transactions);
  94. }while(postData.cursor !== undefined);
  95. }
  96. }
  97. res.locals.merchant.owner = undefined;
  98. res.locals.createdAt = undefined;
  99. res.locals.owner.password = undefined;
  100. res.locals.owner.status = undefined;
  101. res.locals.owner.square = undefined;
  102. res.locals.owner.createdAt = undefined;
  103. res.locals.owner.session = undefined;
  104. for(let i = 0; i < res.locals.owner.merchants.length; i++){
  105. if(res.locals.owner.merchants[i]._id.toString() === res.locals.merchant._id.toString()){
  106. res.locals.owner.merchants.splice(i, 1);
  107. break;
  108. }
  109. }
  110. return res.render("dashboardPage/dashboard", {owner: res.locals.owner, merchant: res.locals.merchant, transactions: transactions});
  111. })
  112. .catch((err)=>{
  113. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA";
  114. return res.redirect("/");
  115. });
  116. },
  117. //GET - Renders the page to reset your password
  118. displayPassReset: function(req, res){
  119. return res.render("passResetPage/passReset");
  120. }
  121. }