renderer.js 5.6 KB

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