newOrder.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. module.exports = {
  2. isPopulated: false,
  3. unused: [],
  4. display: function(){
  5. if(!this.isPopulated){
  6. let categories = merchant.categorizeIngredients();
  7. let categoriesList = document.querySelector("#newOrderCategories");
  8. let template = document.querySelector("#addIngredientsCategory").content.children[0];
  9. let ingredientTemplate = document.querySelector("#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()};
  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(){
  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 date = `${document.getElementById("orderDate").value}T${document.getElementById("orderTime").value}:00`
  92. let data = {
  93. name: document.getElementById("orderName").value,
  94. date: date,
  95. ingredients: ingredients
  96. };
  97. let loader = document.getElementById("loaderContainer");
  98. loader.style.display = "flex";
  99. fetch("/order/create", {
  100. method: "POST",
  101. headers: {
  102. "Content-Type": "application/json;charset=utf-8"
  103. },
  104. body: JSON.stringify(data)
  105. })
  106. .then(response => response.json())
  107. .then((response)=>{
  108. if(typeof(response) === "string"){
  109. banner.createError(response);
  110. }else{
  111. let order = new Order(
  112. response._id,
  113. response.name,
  114. response.date,
  115. response.ingredients,
  116. merchant
  117. )
  118. merchant.editOrders([order]);
  119. merchant.editIngredients(order.ingredients, false, true);
  120. banner.createNotification("ORDER CREATED");
  121. }
  122. })
  123. .catch((err)=>{
  124. banner.createError("SOEMTHING WENT WRONG. PLEASE REFRESH THE PAGE");
  125. })
  126. .finally(()=>{
  127. loader.style.display = "none";
  128. });
  129. },
  130. }