newTransaction.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. let newTransaction = {
  2. display: function(){
  3. let recipeList = document.getElementById("newTransactionRecipes");
  4. let template = document.getElementById("createTransaction").content.children[0];
  5. document.getElementById("transactionFileUpload").addEventListener("click", ()=>{controller.openModal("transactionSpreadsheet")});
  6. while(recipeList.children.length > 0){
  7. recipeList.removeChild(recipeList.firstChild);
  8. }
  9. for(let i = 0; i < merchant.recipes.length; i++){
  10. let recipeDiv = template.cloneNode(true);
  11. recipeDiv.recipe = merchant.recipes[i];
  12. recipeList.appendChild(recipeDiv);
  13. recipeDiv.children[0].innerText = merchant.recipes[i].name;
  14. }
  15. document.getElementById("submitNewTransaction").onclick = ()=>{this.submit()};
  16. },
  17. submit: function(){
  18. let recipeDivs = document.getElementById("newTransactionRecipes");
  19. let date = document.getElementById("newTransactionDate").valueAsDate;
  20. if(date === null){
  21. controller.createBanner("DATE IS REQUIRED FOR TRANSACTIONS", "error");
  22. return;
  23. }
  24. date.setHours(0, 0, 0, 0);
  25. let data = {
  26. date: date,
  27. recipes: [],
  28. ingredientUpdates: {}
  29. };
  30. for(let i = 0; i < recipeDivs.children.length; i++){
  31. let quantity = recipeDivs.children[i].children[1].value;
  32. const recipe = recipeDivs.children[i].recipe;
  33. if(quantity !== "" && quantity > 0){
  34. data.recipes.push({
  35. recipe: recipe.id,
  36. quantity: quantity
  37. });
  38. for(let j = 0; j < recipe.ingredients.length; j++){
  39. let ingredient = recipe.ingredients[j];
  40. if(data.ingredientUpdates[ingredient.ingredient.id]){
  41. data.ingredientUpdates[ingredient.ingredient.id] += controller.baseUnit(ingredient.quantity, ingredient.ingredient.unit) * quantity;
  42. }else{
  43. data.ingredientUpdates[ingredient.ingredient.id] = controller.baseUnit(ingredient.quantity, ingredient.ingredient.unit) * quantity;
  44. }
  45. }
  46. }else if(quantity < 0){
  47. controller.createBanner("CANNOT HAVE NEGATIVE VALUES", "error");
  48. return;
  49. }
  50. }
  51. if(data.recipes.length > 0){
  52. let loader = document.getElementById("loaderContainer");
  53. loader.style.display = "flex";
  54. fetch("/transaction/create", {
  55. method: "post",
  56. headers: {
  57. "Content-Type": "application/json;charset=utf-8"
  58. },
  59. body: JSON.stringify(data)
  60. })
  61. .then(response => response.json())
  62. .then((response)=>{
  63. if(typeof(response) === "string"){
  64. controller.createBanner(response, "error");
  65. }else{
  66. if(new Date(response.date) > merchant.transactions[merchant.transactions.length-1].date){
  67. merchant.addTransactions([response], true);
  68. state.updateTransactions();
  69. }
  70. controller.openStrand("transactions", merchant.getTransactions());
  71. controller.createBanner("TRANSACTION CREATED", "success");
  72. }
  73. })
  74. .catch((err)=>{
  75. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  76. })
  77. .finally(()=>{
  78. loader.style.display = "none";
  79. });
  80. }
  81. },
  82. submitSpreadsheet: function(){
  83. event.preventDefault();
  84. controller.closeModal();
  85. const file = document.getElementById("spreadsheetInput").files[0];
  86. let data = new FormData();
  87. data.append("transactions", file);
  88. data.append("timeOffset", new Date().getTimezoneOffset());
  89. let loader = document.getElementById("loaderContainer");
  90. loader.style.display = "flex";
  91. fetch("/transactions/create/spreadsheet", {
  92. method: "post",
  93. body: data
  94. })
  95. .then(response => response.json())
  96. .then((response)=>{
  97. if(typeof(response) === "string"){
  98. controller.createBanner(response, "error");
  99. }else{
  100. for(let i = 0; i < response.recipes.length; i++){
  101. response.recipes[i].recipe = response.recipes[i].recipe._id;
  102. }
  103. merchant.addTransactions([response], true);
  104. state.updateTransactions();
  105. controller.openStrand("transactions", merchant.transactions);
  106. controller.createBanner("TRANSACTION SUCCESSFULLY CREATED. INGREDIENTS UPDATED", "success");
  107. }
  108. })
  109. .catch((err)=>{
  110. controller.createBanner("UNABLE TO DISPLAY NEW TRANSACTIONS. PLEASE REFRESH THE PAGE", "error");
  111. })
  112. .finally(()=>{
  113. loader.style.display = "none";
  114. });
  115. }
  116. }
  117. module.exports = newTransaction;