editIngredient.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. let editIngredient = {
  2. display: function(ingredient){
  3. let buttonList = document.getElementById("unitButtons");
  4. let quantLabel = document.getElementById("editIngQuantityLabel");
  5. document.getElementById("editSubIngredients").onclick = ()=>{controller.openModal("editSubIngredients", ingredient.ingredient)};
  6. //Clear any existing data
  7. while(buttonList.children.length > 0){
  8. buttonList.removeChild(buttonList.firstChild);
  9. }
  10. //Populate basic fields
  11. document.getElementById("editIngTitle").innerText = ingredient.ingredient.name;
  12. document.getElementById("editIngName").value = ingredient.ingredient.name;
  13. document.getElementById("editIngCategory").value = ingredient.ingredient.category;
  14. quantLabel.innerText = `CURRENT STOCK (${ingredient.ingredient.unit.toUpperCase()})`;
  15. document.getElementById("editIngSubmit").onclick = ()=>{this.submit(ingredient)};
  16. //Populate the unit buttons
  17. let units = ingredient.ingredient.getPotentialUnits();
  18. for(let i = 0; i < units.length; i++){
  19. let button = document.createElement("button");
  20. button.classList.add("unitButton");
  21. button.innerText = units[i].toUpperCase();
  22. button.onclick = ()=>{this.changeUnit(button, ingredient)};
  23. buttonList.appendChild(button);
  24. if(units[i] === ingredient.ingredient.unit) button.classList.add("unitActive");
  25. }
  26. //Offer conversions
  27. let massDiv = document.getElementById("editIngMass");
  28. let volumeDiv = document.getElementById("editIngVolume");
  29. let lengthDiv = document.getElementById("editIngLength");
  30. let multiplier = controller.unitMultiplier(controller.getBaseUnit(ingredient.ingredient.unit), ingredient.ingredient.unit);
  31. massDiv.children[0].value = 1;
  32. massDiv.children[1].innerText = ingredient.ingredient.unit.toUpperCase();
  33. massDiv.children[3].value = parseFloat((ingredient.ingredient.convert.toMass / multiplier).toFixed(3));
  34. massDiv.children[4].value = "g";
  35. massDiv.children[4].previousValue = "g";
  36. massDiv.children[4].onchange = ()=>{this.changeConversionSelect(massDiv)};
  37. volumeDiv.children[0].value = 1;
  38. volumeDiv.children[1].innerText = ingredient.ingredient.unit.toUpperCase();
  39. volumeDiv.children[3].value = parseFloat((ingredient.ingredient.convert.toVolume / multiplier).toFixed(3));
  40. volumeDiv.children[4].value = "l";
  41. volumeDiv.children[4].previousValue = "l";
  42. volumeDiv.children[4].onchange = ()=>{this.changeConversionSelect(volumeDiv)};
  43. lengthDiv.children[0].value = 1;
  44. lengthDiv.children[1].innerText = ingredient.ingredient.unit.toUpperCase();
  45. lengthDiv.children[3].value = parseFloat((ingredient.ingredient.convert.toLength / multiplier).toFixed(3));
  46. lengthDiv.children[4].value = "m";
  47. lengthDiv.children[4].value = "m";
  48. lengthDiv.children[4].onchange = ()=>{this.changeConversionSelect(lengthDiv)};
  49. switch(controller.getBaseUnit(ingredient.ingredient.unit)){
  50. case "g":
  51. massDiv.style.display = "none";
  52. volumeDiv.style.display = "flex";
  53. lengthDiv.style.display = "flex";
  54. break;
  55. case "l":
  56. massDiv.style.display = "flex";
  57. volumeDiv.style.display = "none";
  58. lengthDiv.style.display = "flex";
  59. break;
  60. case "m":
  61. massDiv.style.display = "flex";
  62. volumeDiv.style.display = "flex";
  63. lengthDiv.style.display = "none";
  64. }
  65. let quantInput = document.createElement("input");
  66. quantInput.id = "editIngQuantity";
  67. quantInput.type = "number";
  68. quantInput.min = "0";
  69. quantInput.step = "0.01";
  70. quantInput.value = ingredient.quantity.toFixed(2);
  71. quantLabel.appendChild(quantInput);
  72. },
  73. changeUnit: function(button, ingredient){
  74. //update current stock quantity
  75. let label = document.getElementById("editIngQuantityLabel");
  76. label.innerText = `CURRENT STOCK (${button.innerText})`;
  77. let input = document.createElement("input");
  78. input.id = "editIngQuantity";
  79. input.type = "number";
  80. input.min = "0";
  81. input.step = "0.01";
  82. input.value = (ingredient.quantity * controller.unitMultiplier(ingredient.ingredient.unit, button.innerText.toLowerCase())).toFixed(2);
  83. label.appendChild(input);
  84. //update conversions
  85. let massDiv = document.getElementById("editIngMass");
  86. let volumeDiv = document.getElementById("editIngVolume");
  87. let lengthDiv = document.getElementById("editIngLength");
  88. massDiv.children[1].innerText = button.innerText;
  89. volumeDiv.children[1].innerText = button.innerText;
  90. lengthDiv.children[1].innerText = button.innerText;
  91. let multiplier = controller.unitMultiplier(document.querySelector(".unitActive").innerText.toLowerCase(), button.innerText.toLowerCase());
  92. massDiv.children[0].value = parseFloat((massDiv.children[0].value * multiplier).toFixed(3));
  93. massDiv.children[3].value = parseFloat((massDiv.children[3].value * multiplier).toFixed(3));
  94. volumeDiv.children[0].value = parseFloat((volumeDiv.children[0].value * multiplier).toFixed(3));
  95. volumeDiv.children[3].value = parseFloat((volumeDiv.children[3].value * multiplier).toFixed(3));
  96. lengthDiv.children[0].value = parseFloat((lengthDiv.children[0].value * multiplier).toFixed(3));
  97. lengthDiv.children[3].value = parseFloat((lengthDiv.children[3].value *= multiplier).toFixed(3));
  98. //Update the buttons
  99. let buttons = document.getElementById("unitButtons");
  100. for(let i = 0; i < buttons.children.length; i++){
  101. buttons.children[i].classList.remove("unitActive");
  102. }
  103. button.classList.add("unitActive");
  104. },
  105. changeConversionSelect: function(div){
  106. let multiplier = controller.unitMultiplier(div.children[4].previousUnit, div.children[4].value);
  107. div.children[3].value = parseFloat((div.children[3].value * multiplier).toFixed(3));
  108. div.children[4].previousUnit = div.children[4].value;
  109. },
  110. submit: function(ingredient){
  111. let quantity = parseFloat(document.getElementById("editIngQuantityLabel").children[0].value);
  112. let unit = document.getElementById("unitButtons").querySelector(".unitActive").innerText.toLowerCase();
  113. let massDiv = document.getElementById("editIngMass");
  114. let volumeDiv = document.getElementById("editIngVolume");
  115. let lengthDiv = document.getElementById("editIngLength");
  116. let leftMass = massDiv.children[0].value;
  117. let rightMass = massDiv.children[3].value;
  118. let leftVolume = volumeDiv.children[0].value;
  119. let rightVolume = volumeDiv.children[3].value;
  120. let leftLength = lengthDiv.children[0].value;
  121. let rightLength = lengthDiv.children[3].value;
  122. let leftUnit = massDiv.children[1].innerText.toLowerCase();
  123. let rightUnitMass = massDiv.children[4].value;
  124. let rightUnitVolume = volumeDiv.children[4].value;
  125. let rightUnitLength = lengthDiv.children[4].value;
  126. let leftMultiplier = controller.unitMultiplier(leftUnit, controller.getBaseUnit(leftUnit));
  127. leftMass *= leftMultiplier;
  128. leftVolume *= leftMultiplier;
  129. leftLength *= leftMultiplier;
  130. rightMass *= controller.unitMultiplier(rightUnitMass, controller.getBaseUnit(rightUnitMass));
  131. rightVolume *= controller.unitMultiplier(rightUnitVolume, controller.getBaseUnit(rightUnitVolume));
  132. rightLength *= controller.unitMultiplier(rightUnitLength, controller.getBaseUnit(rightUnitLength));
  133. let data = {
  134. ingredient: {
  135. id: ingredient.ingredient.id,
  136. name: document.getElementById("editIngName").value,
  137. category: document.getElementById("editIngCategory").value,
  138. unit: unit,
  139. convert: {
  140. toMass: rightMass / leftMass,
  141. toVolume: rightVolume / leftVolume,
  142. toLength: rightLength / leftLength
  143. }
  144. },
  145. quantity: quantity * controller.unitMultiplier(unit, controller.getBaseUnit(unit))
  146. }
  147. switch(controller.getUnitType(unit)){
  148. case "mass": data.ingredient.convert.toMass = 1; break;
  149. case "volume": data.ingredient.convert.toVolume = 1; break;
  150. case "length": data.ingredient.convert.toLength = 1; break;
  151. }
  152. let loader = document.getElementById("loaderContainer");
  153. loader.style.display = "flex";
  154. fetch("/ingredients/update", {
  155. method: "put",
  156. headers: {
  157. "Content-Type": "application/json;charset=utf-8"
  158. },
  159. body: JSON.stringify(data)
  160. })
  161. .then(response => response.json())
  162. .then((response)=>{
  163. if(typeof(response) === "string"){
  164. controller.createBanner(response, "error");
  165. }else{
  166. merchant.updateIngredients([response]);
  167. state.updateIngredients();
  168. controller.openStrand("ingredients");
  169. controller.createBanner("INGREDIENT UPDATED", "success");
  170. }
  171. })
  172. .catch((err)=>{
  173. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  174. })
  175. .finally(()=>{
  176. loader.style.display = "none";
  177. });
  178. }
  179. }
  180. module.exports = editIngredient;