newTransaction.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. let newTransaction = {
  2. display: function(){
  3. document.getElementById("sidebarDiv").classList.add("sidebarWide");
  4. document.getElementById("newTransactionDate").valueAsDate = new Date();
  5. let recipeList = document.getElementById("newTransAvailable");
  6. recipeList.children[0].onkeyup = ()=>{this.searchRecipes()};
  7. while(recipeList.children.length > 0){
  8. recipeList.removeChild(recipeList.firstChild);
  9. }
  10. for(let i = 0; i < merchant.recipes.length; i++){
  11. let button = document.createElement("button");
  12. button.classList.add("choosable");
  13. button.innerText = merchant.recipes[i].name;
  14. button.onclick = ()=>{this.add(merchant.recipes[i], button)};
  15. recipeList.appendChild(button);
  16. }
  17. document.getElementById("submitNewTransaction").onclick = ()=>{this.submit()};
  18. },
  19. add: function(recipe, element){
  20. element.style.display = "none";
  21. let template = document.getElementById("createTransaction").content.children[0].cloneNode(true);
  22. template.children[0].children[0].innerText = recipe.name;
  23. template.children[0].children[1].onclick = ()=>{
  24. template.parentElement.removeChild(template);
  25. element.style.display = "flex";
  26. };
  27. template.recipe = recipe;
  28. document.getElementById("newTransactionRecipes").appendChild(template);
  29. },
  30. searchRecipes: function(){
  31. let items = document.getElementById("newTransAvailable").children;
  32. let searchString = items[0].value.toLowerCase();
  33. if(searchString === ""){
  34. for(let i = 1; i < items.length; i++){
  35. items[i].style.display = "flex";
  36. }
  37. }else{
  38. for(let i = 1; i < items.length; i++){
  39. if(items[i].innerText.toLowerCase().includes(searchString)){
  40. items[i].style.display = "flex";
  41. }else{
  42. items[i].style.display = "none";
  43. }
  44. }
  45. }
  46. },
  47. submit: function(){
  48. let recipeDivs = document.getElementById("newTransactionRecipes");
  49. let date = document.getElementById("newTransactionDate").valueAsDate;
  50. date.setHours(0, 0, 0, 0);
  51. let data = {
  52. date: date,
  53. recipes: [],
  54. ingredientUpdates: {}
  55. };
  56. for(let i = 0; i < recipeDivs.children.length; i++){
  57. let quantity = recipeDivs.children[i].children[1].value;
  58. const recipe = recipeDivs.children[i].recipe;
  59. if(quantity !== "" && quantity > 0){
  60. data.recipes.push({
  61. recipe: recipe.id,
  62. quantity: quantity
  63. });
  64. let keys = Object.keys(recipe.ingredientTotals);
  65. for(let j = 0; j < keys.length; j++){
  66. if(data.ingredientUpdates[keys[j]] === undefined){
  67. data.ingredientUpdates[keys[j]] = recipe.ingredientTotals[keys[j]] * quantity;
  68. }else{
  69. data.ingredientUpdates[keys[j]] += recipe.ingredientTotals[keys[j]] * quantity
  70. }
  71. }
  72. }else if(quantity < 0){
  73. controller.createBanner("CANNOT HAVE NEGATIVE VALUES", "error");
  74. return;
  75. }
  76. }
  77. if(data.recipes.length > 0){
  78. let loader = document.getElementById("loaderContainer");
  79. loader.style.display = "flex";
  80. fetch("/transaction/create", {
  81. method: "post",
  82. headers: {
  83. "Content-Type": "application/json;charset=utf-8"
  84. },
  85. body: JSON.stringify(data)
  86. })
  87. .then(response => response.json())
  88. .then((response)=>{
  89. if(typeof(response) === "string"){
  90. controller.createBanner(response, "error");
  91. }else{
  92. let thirtyAgo = new Date();
  93. thirtyAgo.setDate(thirtyAgo.getDate() - 30);
  94. thirtyAgo.setHours(0, 0, 0);
  95. if(
  96. merchant.transactions.length === 0 ||
  97. new Date(response.date) > thirtyAgo
  98. ){
  99. merchant.addTransactions([response], true);
  100. state.updateTransactions();
  101. }
  102. let from = new Date();
  103. from.setDate(from.getDate() - 7);
  104. from.setHours(0, 0, 0, 0);
  105. controller.openStrand("transactions", merchant.getTransactions(from, new Date()));
  106. controller.createBanner("TRANSACTION CREATED", "success");
  107. }
  108. })
  109. .catch((err)=>{
  110. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  111. })
  112. .finally(()=>{
  113. loader.style.display = "none";
  114. });
  115. }
  116. }
  117. }
  118. module.exports = newTransaction;