transactions.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. let transactions = {
  2. isPopulated: false,
  3. display: function(Transaction){
  4. if(!this.isPopulated){
  5. let transactionsList = document.getElementById("transactionsList");
  6. let dateDropdown = document.getElementById("dateDropdown");
  7. let recipeDropdown = document.getElementById("recipeDropDown");
  8. let template = document.getElementById("transaction").content.children[0];
  9. let now = new Date();
  10. let monthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate());
  11. document.getElementById("transFilDate1").valueAsDate = monthAgo;
  12. document.getElementById("transFilDate2").valueAsDate = now;
  13. dateDropdown.style.display = "none";
  14. recipeDropdown.style.display = "none";
  15. document.getElementById("dateFilterBtn").onclick = ()=>{this.toggleDropdown(dateDropdown)};
  16. document.getElementById("recipeFilterBtn").onclick = ()=>{this.toggleDropdown(recipeDropdown)};
  17. while(recipeDropdown.children.length > 0){
  18. recipeDropdown.removeChild(recipeDropdown.firstChild);
  19. }
  20. for(let i = 0; i < merchant.recipes.length; i++){
  21. let checkbox = document.createElement("input");
  22. checkbox.type = "checkbox";
  23. checkbox.recipe = merchant.recipes[i];
  24. recipeDropdown.appendChild(checkbox);
  25. let label = document.createElement("label");
  26. label.innerText = merchant.recipes[i].name;
  27. label.for = checkbox;
  28. recipeDropdown.appendChild(label);
  29. let brk = document.createElement("br");
  30. recipeDropdown.appendChild(brk);
  31. }
  32. while(transactionsList.children.length > 0){
  33. transactionsList.removeChild(transactionsList.firstChild);
  34. }
  35. let i = 0
  36. const transactions = merchant.getTransactions();
  37. while(i < transactions.length && i < 100){
  38. let transactionDiv = template.cloneNode(true);
  39. let transaction = transactions[i];
  40. transactionDiv.onclick = ()=>{
  41. controller.openSidebar("transactionDetails", transaction);
  42. transactionDiv.classList.add("active");
  43. }
  44. transactionsList.appendChild(transactionDiv);
  45. let totalRecipes = 0;
  46. let totalPrice = 0;
  47. for(let j = 0; j < transactions[i].recipes.length; j++){
  48. totalRecipes += transactions[i].recipes[j].quantity;
  49. totalPrice += transactions[i].recipes[j].recipe.price * transactions[i].recipes[j].quantity;
  50. }
  51. transactionDiv.children[0].innerText = `${transactions[i].date.toLocaleDateString()} ${transactions[i].date.toLocaleTimeString()}`;
  52. transactionDiv.children[1].innerText = `${totalRecipes} recipes sold`;
  53. transactionDiv.children[2].innerText = `$${totalPrice.toFixed(2)}`;
  54. i++;
  55. }
  56. document.getElementById("transFormSubmit").onsubmit = ()=>{this.submitFilter(Transaction)};
  57. this.isPopulated = true;
  58. }
  59. },
  60. submitFilter: function(Transaction){
  61. event.preventDefault();
  62. let data = {
  63. startDate: document.getElementById("transFilDate1").valueAsDate,
  64. endDate: document.getElementById("transFilDate2").valueAsDate,
  65. recipes: []
  66. }
  67. if(data.startDate >= data.endDate){
  68. banner.createError("START DATE CANNOT BE AFTER END DATE");
  69. return;
  70. }
  71. let recipeChoices = document.getElementById("recipeDropDown");
  72. for(let i = 0; i < recipeChoices.children.length; i += 3){
  73. if(recipeChoices.children[i].checked){
  74. data.recipes.push(recipeChoices.children[i].recipe.id);
  75. }
  76. }
  77. if(data.recipes.length === 0){
  78. for(let i = 0; i < merchant.recipes.length; i++){
  79. data.recipes.push(merchant.recipes[i].id);
  80. }
  81. }
  82. let loader = document.getElementById("loaderContainer");
  83. loader.style.display = "flex";
  84. fetch("/transaction", {
  85. method: "POST",
  86. headers: {
  87. "Content-Type": "application/json;charset=utf-8"
  88. },
  89. body: JSON.stringify(data)
  90. })
  91. .then((response) => response.json())
  92. .then((response)=>{
  93. if(typeof(response) === "string"){
  94. banner.createError(response);
  95. }else{
  96. let transactionList = document.getElementById("transactionsList");
  97. let template = document.getElementById("transaction").content.children[0];
  98. while(transactionList.children.length > 0){
  99. transactionList.removeChild(transactionList.firstChild);
  100. }
  101. for(let i = 0; i < response.length; i++){
  102. let transactionDiv = template.cloneNode(true);
  103. let recipeCount = 0;
  104. let cost = 0;
  105. let transaction = new Transaction(
  106. response[i]._id,
  107. response[i].date,
  108. response[i].recipes,
  109. merchant
  110. );
  111. for(let j = 0; j < transaction.recipes.length; j++){
  112. recipeCount += transaction.recipes[j].quantity;
  113. cost += transaction.recipes[j].quantity * transaction.recipes[j].recipe.price;
  114. }
  115. transactionDiv.children[0].innerText = `${transaction.date.toLocaleDateString()} ${transaction.date.toLocaleTimeString()}`;
  116. transactionDiv.children[1].innerText = `${recipeCount} recipes sold`;
  117. transactionDiv.children[2].innerText = `$${(cost / 100).toFixed(2)}`;
  118. transactionDiv.onclick = ()=>{controller.openSidebar("transactionDetails", transaction)};
  119. transactionList.appendChild(transactionDiv);
  120. }
  121. }
  122. })
  123. .catch((err)=>{
  124. banner.createError("UNABLE TO DISPLAY THE TRANSACTIONS");
  125. })
  126. .finally(()=>{
  127. loader.style.display = "none";
  128. });
  129. },
  130. toggleDropdown: function(dropdown){
  131. event.preventDefault();
  132. let polyline = dropdown.parentElement.children[0].children[1].children[0].children[0];
  133. if(dropdown.style.display === "none"){
  134. dropdown.style.display = "block";
  135. polyline.setAttribute("points", "18 15 12 9 6 15");
  136. }else{
  137. dropdown.style.display = "none";
  138. polyline.setAttribute("points", "6 9 12 15 18 9");
  139. }
  140. }
  141. }
  142. module.exports = transactions;