ingredientDetails.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. module.exports = {
  2. ingredient: {},
  3. display: function(merchant, 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 = Number(document.getElementById("ingredientInput").value);
  109. let data = [{
  110. id: this.ingredient.ingredient.id,
  111. quantity: this.ingredient.quantity
  112. }];
  113. let loader = document.getElementById("loaderContainer");
  114. loader.style.display = "flex";
  115. if(validator.ingredientQuantity(data[0].quantity)){
  116. fetch("/merchant/ingredients/update", {
  117. method: "PUT",
  118. headers: {
  119. "Content-Type": "application/json;charset=utf-8"
  120. },
  121. body: JSON.stringify(data)
  122. })
  123. .then((response) => response.json())
  124. .then((response)=>{
  125. if(typeof(response) === "string"){
  126. banner.createError(response);
  127. }else{
  128. merchant.editIngredients([this.ingredient]);
  129. banner.createNotification("INGREDIENT UPDATED");
  130. }
  131. })
  132. .catch((err)=>{
  133. banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE");
  134. })
  135. .finally(()=>{
  136. loader.style.display = "none";
  137. });
  138. }
  139. },
  140. changeUnit: function(newActive, unit){
  141. this.ingredient.ingredient.unit = unit;
  142. let ingredientButtons = document.querySelectorAll(".unitButton");
  143. for(let i = 0; i < ingredientButtons.length; i++){
  144. ingredientButtons[i].classList.remove("unitActive");
  145. }
  146. newActive.classList.add("unitActive");
  147. homeStrandObj.isPopulated = false;
  148. ingredientsStrandObj.populateByProperty("category");
  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. }