newOrder.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. module.exports = {
  2. isPopulated: false,
  3. unused: [],
  4. display: function(Order){
  5. if(!this.isPopulated){
  6. let categories = merchant.categorizeIngredients();
  7. let categoriesList = document.getElementById("newOrderCategories");
  8. let template = document.getElementById("addIngredientsCategory").content.children[0];
  9. let ingredientTemplate = document.getElementById("addIngredientsIngredient").content.children[0];
  10. for(let i = 0; i < categories.length; i++){
  11. let category = template.cloneNode(true);
  12. category.children[0].children[0].innerText = categories[i].name;
  13. category.children[0].children[1].onclick = ()=>{this.toggleAddIngredient(category)};
  14. category.children[0].children[1].children[1].style.display = "none";
  15. category.children[1].style.display = "none";
  16. categoriesList.appendChild(category);
  17. for(let j = 0; j < categories[i].ingredients.length; j++){
  18. let ingredientDiv = ingredientTemplate.cloneNode(true);
  19. ingredientDiv.children[0].innerText = categories[i].ingredients[j].ingredient.name;
  20. ingredientDiv.children[2].onclick = ()=>{this.addOne(ingredientDiv, category.children[1])};
  21. ingredientDiv.ingredient = categories[i].ingredients[j].ingredient;
  22. this.unused.push(categories[i].ingredients[j]);
  23. category.children[1].appendChild(ingredientDiv);
  24. }
  25. }
  26. document.getElementById("submitNewOrder").onclick = ()=>{this.submit(Order)};
  27. this.isPopulated = true;
  28. }
  29. },
  30. addOne: function(ingredientDiv, container){
  31. for(let i = 0; i < this.unused.length; i++){
  32. if(this.unused[i] === ingredientDiv){
  33. this.unused.splice(i, 1);
  34. break;
  35. }
  36. }
  37. let quantityInput = document.createElement("input");
  38. quantityInput.type = "number";
  39. quantityInput.placeholder = `QUANTITY (${ingredientDiv.ingredient.unit})`;
  40. quantityInput.min = "0";
  41. quantityInput.step = "0.01";
  42. ingredientDiv.insertBefore(quantityInput, ingredientDiv.children[1]);
  43. let priceInput = document.createElement("input");
  44. priceInput.type = "number";
  45. priceInput.placeholder = "Price Per Unit";
  46. priceInput.min = "0";
  47. priceInput.step = "0.01";
  48. ingredientDiv.insertBefore(priceInput, ingredientDiv.children[2]);
  49. ingredientDiv.children[4].innerText = "-";
  50. ingredientDiv.children[4].onclick = ()=>{this.removeOne(ingredientDiv, container)};
  51. container.removeChild(ingredientDiv);
  52. document.getElementById("newOrderAdded").appendChild(ingredientDiv);
  53. },
  54. removeOne: function(ingredientDiv, container){
  55. this.unused.push(ingredientDiv.ingredient);
  56. ingredientDiv.removeChild(ingredientDiv.children[1]);
  57. ingredientDiv.removeChild(ingredientDiv.children[1]);
  58. ingredientDiv.children[1].innerText = "+";
  59. ingredientDiv.children[1].onclick = ()=>{this.addOne(ingredientDiv, container)};
  60. ingredientDiv.parentElement.removeChild(ingredientDiv);
  61. container.appendChild(ingredientDiv);
  62. },
  63. toggleAddIngredient: function(categoryElement){
  64. let button = categoryElement.children[0].children[1];
  65. let ingredientDisplay = categoryElement.children[1];
  66. if(ingredientDisplay.style.display === "none"){
  67. ingredientDisplay.style.display = "flex";
  68. button.children[0].style.display = "none";
  69. button.children[1].style.display = "block";
  70. }else{
  71. ingredientDisplay.style.display = "none";
  72. button.children[0].style.display = "block";
  73. button.children[1].style.display = "none";
  74. }
  75. },
  76. submit: function(Order){
  77. let categoriesList = document.getElementById("newOrderAdded");
  78. let ingredients = [];
  79. for(let i = 0; i < categoriesList.children.length; i++){
  80. let quantity = categoriesList.children[i].children[1].value;
  81. let price = categoriesList.children[i].children[2].value;
  82. let fakeOrder = new Order(undefined, undefined, new Date(), [], undefined);
  83. if(quantity !== "" && price !== ""){
  84. ingredients.push({
  85. ingredient: categoriesList.children[i].ingredient.id,
  86. quantity: controller.convertToMain(categoriesList.children[i].ingredient.unit, parseFloat(quantity)),
  87. price: categoriesList.children[i].ingredient.convert(parseInt(price * 100))
  88. });
  89. }
  90. }
  91. let time = document.getElementById("orderTime").value;
  92. let date = document.getElementById("orderDate").value;
  93. let dateTime = "";
  94. if(time === "" && date === ""){
  95. dateTime = undefined;
  96. }else if(time === "" && date !== ""){
  97. dateTime = date;
  98. }else if(time !== "" && date === ""){
  99. banner.createError("PLEASE ADD A DATE IF YOU WISH TO HAVE A TIME");
  100. }else{
  101. dateTime = `${date}T${time}:00`
  102. }
  103. let data = {
  104. name: document.getElementById("orderName").value,
  105. date: dateTime,
  106. ingredients: ingredients
  107. };
  108. let loader = document.getElementById("loaderContainer");
  109. loader.style.display = "flex";
  110. fetch("/order/create", {
  111. method: "POST",
  112. headers: {
  113. "Content-Type": "application/json;charset=utf-8"
  114. },
  115. body: JSON.stringify(data)
  116. })
  117. .then(response => response.json())
  118. .then((response)=>{
  119. if(typeof(response) === "string"){
  120. banner.createError(response);
  121. }else{
  122. let order = new Order(
  123. response._id,
  124. response.name,
  125. response.date,
  126. response.ingredients,
  127. merchant
  128. )
  129. merchant.editOrders([order]);
  130. merchant.editIngredients(order.ingredients, false, true);
  131. banner.createNotification("ORDER CREATED");
  132. }
  133. })
  134. .catch((err)=>{
  135. banner.createError("SOEMTHING WENT WRONG. PLEASE REFRESH THE PAGE");
  136. })
  137. .finally(()=>{
  138. loader.style.display = "none";
  139. });
  140. },
  141. }