editIngredient.js 7.4 KB

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