transactionFilter.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const Transaction = require("./Transaction");
  2. let transactionFilter = {
  3. display: function(){
  4. //Set default dates
  5. let today = new Date();
  6. let monthAgo = new Date(today);
  7. monthAgo.setMonth(today.getMonth() - 1);
  8. document.getElementById("transFilterDateStart").valueAsDate = monthAgo;
  9. document.getElementById("transFilterDateEnd").valueAsDate = today;
  10. //populate recipes
  11. let recipeList = document.getElementById("transFilterRecipeList");
  12. while(recipeList.children.length > 0){
  13. recipeList.removeChild(recipeList.firstChild);
  14. }
  15. for(let i = 0; i < merchant.recipes.length; i++){
  16. let recipe = document.createElement("div");
  17. recipe.innerText = merchant.recipes[i].name;
  18. recipe.recipe = merchant.recipes[i];
  19. recipe.classList.add("choosable");
  20. recipe.onclick = ()=>{this.toggleActive(recipe)};
  21. recipeList.appendChild(recipe);
  22. }
  23. //Submit button
  24. document.getElementById("transFilterSubmit").onclick = ()=>{this.submit()};
  25. },
  26. toggleActive: function(element){
  27. if(element.classList.contains("active")){
  28. element.classList.remove("active");
  29. }else{
  30. element.classList.add("active");
  31. }
  32. },
  33. submit: function(){
  34. let data = {
  35. startDate: document.getElementById("transFilterDateStart").valueAsDate,
  36. endDate: document.getElementById("transFilterDateEnd").valueAsDate,
  37. recipes: []
  38. }
  39. if(data.startDate >= data.endDate){
  40. banner.createError("START DATE CANNOT BE AFTER END DATE");
  41. return;
  42. }
  43. let recipes = document.getElementById("transFilterRecipeList").children;
  44. for(let i = 0; i < recipes.length; i++){
  45. if(recipes[i].classList.contains("active")){
  46. data.recipes.push(recipes[i].recipe.id);
  47. }
  48. }
  49. if(data.recipes.length === 0){
  50. for(let i = 0; i < merchant.recipes.length; i++){
  51. data.recipes.push(merchant.recipes[i].id);
  52. }
  53. }
  54. let loader = document.getElementById("loaderContainer");
  55. loader.style.display = "flex";
  56. fetch("/transaction", {
  57. method: "post",
  58. headers: {
  59. "Content-Type": "application/json;charset=utf-8"
  60. },
  61. body: JSON.stringify(data)
  62. })
  63. .then(response => response.json())
  64. .then((response)=>{
  65. let transactions = [];
  66. if(typeof(response) === "string"){
  67. banner.createError(response);
  68. }else if(response.length === 0){
  69. banner.createError("NO TRANSACTIONS MATCH YOUR SEARCH");
  70. }else{
  71. for(let i = 0; i < response.length; i++){
  72. transactions.push(new Transaction(
  73. response[i]._id,
  74. response[i].date,
  75. response[i].recipes,
  76. merchant
  77. ));
  78. }
  79. }
  80. controller.openStrand("transactions", transactions);
  81. })
  82. .catch((err)=>{
  83. banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE");
  84. })
  85. .finally(()=>{
  86. loader.style.display = "none";
  87. });
  88. }
  89. }
  90. module.exports = transactionFilter;