newTransaction.js 5.3 KB

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