ingredientDetails.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. module.exports = {
  2. ingredient: {},
  3. display: function(ingredient){
  4. this.ingredient = ingredient;
  5. document.getElementById("editIngBtn").onclick = ()=>{this.edit()};
  6. document.getElementById("removeIngBtn").onclick = ()=>{this.remove(merchant)};
  7. document.querySelector("#ingredientDetails p").innerText = ingredient.ingredient.category;
  8. document.querySelector("#ingredientDetails h1").innerText = ingredient.ingredient.name;
  9. let ingredientStock = document.getElementById("ingredientStock");
  10. ingredientStock.innerText = `${ingredient.ingredient.convert(ingredient.quantity).toFixed(2)} ${ingredient.ingredient.unit.toUpperCase()}`;
  11. ingredientStock.style.display = "block";
  12. let ingredientInput = document.getElementById("ingredientInput");
  13. ingredientInput.value = ingredient.ingredient.convert(ingredient.quantity).toFixed(2);
  14. ingredientInput.style.display = "none";
  15. let quantities = [];
  16. let now = new Date();
  17. for(let i = 1; i < 31; i++){
  18. let endDay = new Date(now.getFullYear(), now.getMonth(), now.getDate() - i)
  19. let startDay = new Date(now.getFullYear(), now.getMonth(), now.getDate() - i - 1);
  20. let indices = merchant.transactionIndices(startDay, endDay);
  21. if(indices === false){
  22. quantities.push(0);
  23. }else{
  24. quantities.push(merchant.singleIngredientSold(indices, ingredient));
  25. }
  26. }
  27. let sum = 0;
  28. for(let quantity of quantities){
  29. sum += quantity;
  30. }
  31. document.querySelector("#dailyUse").innerText = `${(sum/quantities.length).toFixed(2)} ${ingredient.ingredient.unit}`;
  32. let ul = document.querySelector("#ingredientRecipeList");
  33. let recipes = merchant.getRecipesForIngredient(ingredient.ingredient);
  34. while(ul.children.length > 0){
  35. ul.removeChild(ul.firstChild);
  36. }
  37. for(let i = 0; i < recipes.length; i++){
  38. let li = document.createElement("li");
  39. li.innerText = recipes[i].name;
  40. li.onclick = ()=>{
  41. controller.openStrand("recipeBook");
  42. controller.openSidebar("recipeDetails", recipes[i]);
  43. }
  44. ul.appendChild(li);
  45. }
  46. let ingredientButtons = document.getElementById("ingredientButtons");
  47. let units = [];
  48. let unitLabel = document.getElementById("displayUnitLabel");
  49. let defaultButton = document.getElementById("defaultUnit");
  50. if(this.ingredient.ingredient.unitType !== "other"){
  51. units = merchant.units[this.ingredient.ingredient.unitType];
  52. unitLabel.style.display = "block";
  53. defaultButton.style.display = "block";
  54. }else{
  55. unitLabel.style.display = "none";
  56. defaultButton.style.display = "none";
  57. }
  58. while(ingredientButtons.children.length > 0){
  59. ingredientButtons.removeChild(ingredientButtons.firstChild);
  60. }
  61. for(let i = 0; i < units.length; i++){
  62. let button = document.createElement("button");
  63. button.classList.add("unitButton");
  64. button.innerText = units[i].toUpperCase();
  65. button.onclick = ()=>{this.changeUnit(button, units[i])};
  66. ingredientButtons.appendChild(button);
  67. if(units[i] === this.ingredient.ingredient.unit){
  68. button.classList.add("unitActive");
  69. }
  70. }
  71. document.getElementById("defaultUnit").onclick = ()=>{this.changeUnitDefault()};
  72. document.getElementById("editSubmitButton").onclick = ()=>{this.editSubmit()};
  73. },
  74. remove: function(merchant){
  75. for(let i = 0; i < merchant.recipes.length; i++){
  76. for(let j = 0; j < merchant.recipes[i].ingredients.length; j++){
  77. if(this.ingredient.ingredient === merchant.recipes[i].ingredients[j].ingredient){
  78. banner.createError("MUST REMOVE INGREDIENT FROM ALL RECIPES BEFORE REMOVING FROM INVENTORY");
  79. return;
  80. }
  81. }
  82. }
  83. let loader = document.getElementById("loaderContainer");
  84. loader.style.display = "flex";
  85. fetch(`/merchant/ingredients/remove/${this.ingredient.ingredient.id}`, {
  86. method: "DELETE",
  87. })
  88. .then((response) => response.json())
  89. .then((response)=>{
  90. if(typeof(response) === "string"){
  91. banner.createError(response);
  92. }else{
  93. banner.createNotification("INGREDIENT REMOVED");
  94. merchant.editIngredients([this.ingredient], true);
  95. }
  96. })
  97. .catch((err)=>{})
  98. .finally(()=>{
  99. loader.style.display = "none";
  100. });
  101. },
  102. edit: function(){
  103. document.getElementById("ingredientStock").style.display = "none";
  104. document.getElementById("ingredientInput").style.display = "block";
  105. document.getElementById("editSubmitButton").style.display = "block";
  106. },
  107. editSubmit: function(){
  108. this.ingredient.quantity = controller.convertToMain(
  109. this.ingredient.ingredient.unit,
  110. Number(document.getElementById("ingredientInput").value)
  111. );
  112. let data = [{
  113. id: this.ingredient.ingredient.id,
  114. quantity: controller.convertToMain(this.ingredient.ingredient.unit, this.ingredient.quantity)
  115. }];
  116. let loader = document.getElementById("loaderContainer");
  117. loader.style.display = "flex";
  118. fetch("/merchant/ingredients/update", {
  119. method: "PUT",
  120. headers: {
  121. "Content-Type": "application/json;charset=utf-8"
  122. },
  123. body: JSON.stringify(data)
  124. })
  125. .then((response) => response.json())
  126. .then((response)=>{
  127. if(typeof(response) === "string"){
  128. banner.createError(response);
  129. }else{
  130. merchant.editIngredients([this.ingredient]);
  131. banner.createNotification("INGREDIENT UPDATED");
  132. }
  133. })
  134. .catch((err)=>{
  135. banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE");
  136. })
  137. .finally(()=>{
  138. loader.style.display = "none";
  139. });
  140. },
  141. changeUnit: function(newActive, unit){
  142. this.ingredient.ingredient.unit = unit;
  143. let ingredientButtons = document.querySelectorAll(".unitButton");
  144. for(let i = 0; i < ingredientButtons.length; i++){
  145. ingredientButtons[i].classList.remove("unitActive");
  146. }
  147. newActive.classList.add("unitActive");
  148. controller.updateData("unit");
  149. document.getElementById("ingredientStock").innerText = `${this.ingredient.ingredient.convert(this.ingredient.quantity).toFixed(2)} ${this.ingredient.ingredient.unit.toUpperCase()}`;
  150. },
  151. changeUnitDefault: function(){
  152. let loader = document.getElementById("loaderContainer");
  153. loader.style.display = "flex";
  154. let id = this.ingredient.ingredient.id;
  155. let unit = this.ingredient.ingredient.unit;
  156. fetch(`/merchant/ingredients/update/${id}/${unit}`, {
  157. method: "put",
  158. headers: {
  159. "Content-Type": "application/json;charset=utf-8"
  160. },
  161. })
  162. .then((response)=>{
  163. if(typeof(response) === "string"){
  164. banner.createError(response);
  165. }else{
  166. banner.createNotification("INGREDIENT DEFAULT UNIT UPDATED");
  167. }
  168. })
  169. .catch((err)=>{
  170. banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE");
  171. })
  172. .finally(()=>{
  173. loader.style.display = "none";
  174. });
  175. }
  176. }