newOrder.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. let newOrder = {
  2. display: function(Order){
  3. document.getElementById("sidebarDiv").classList.add("sidebarWide");
  4. document.getElementById("newOrderIngredientList").style.display = "flex";
  5. let selectedList = document.getElementById("selectedIngredientList");
  6. while(selectedList.children.length > 0){
  7. selectedList.removeChild(selectedList.firstChild);
  8. }
  9. let ingredientList = document.getElementById("newOrderIngredients");
  10. while(ingredientList.children.length > 0){
  11. ingredientList.removeChild(ingredientList.firstChild);
  12. }
  13. for(let i = 0; i < merchant.ingredients.length; i++){
  14. let ingredient = document.createElement("button");
  15. ingredient.classList = "newOrderIngredient";
  16. ingredient.innerText = merchant.ingredients[i].ingredient.name;
  17. ingredient.onclick = ()=>{this.addIngredient(merchant.ingredients[i].ingredient, ingredient)};
  18. ingredientList.appendChild(ingredient);
  19. }
  20. document.getElementById("submitNewOrder").onclick = ()=>{this.submit(Order)};
  21. },
  22. addIngredient: function(ingredient, element){
  23. element.style.display = "none";
  24. let div = document.getElementById("selectedIngredient").content.children[0].cloneNode(true);
  25. div.ingredient = ingredient;
  26. div.children[0].children[1].onclick = ()=>{this.removeIngredient(div, element)};
  27. //Display units depending on the whether it is a special unit
  28. if(ingredient.specialUnit === "bottle"){
  29. div.children[0].children[0].innerText = `${ingredient.name} (BOTTLES)`;
  30. }else{
  31. div.children[0].children[0].innerText = `${ingredient.name} (${ingredient.unit.toUpperCase()})`;
  32. }
  33. document.getElementById("selectedIngredientList").appendChild(div);
  34. },
  35. removeIngredient: function(selectedElement, element){
  36. selectedElement.parentElement.removeChild(selectedElement);
  37. element.style.display = "block";
  38. },
  39. submit: function(Order){
  40. let date = document.getElementById("newOrderDate").value;
  41. let time = document.getElementById("newOrderTime").value;
  42. let ingredients = document.getElementById("selectedIngredientList").children;
  43. if(date === ""){
  44. banner.createError("DATE IS REQUIRED FOR ORDERS");
  45. return;
  46. }
  47. if(time !== ""){
  48. date = `${date}T${time}`;
  49. }
  50. let data = {
  51. name: document.getElementById("newOrderName").value,
  52. date: date,
  53. ingredients: []
  54. }
  55. for(let i = 0; i < ingredients.length; i++){
  56. let quantity = ingredients[i].children[1].children[0].value;
  57. let price = ingredients[i].children[1].children[1].value;
  58. if(quantity === "" || price === ""){
  59. banner.createError("MUST PROVIDE QUANTITY AND PRICE PER UNIT FOR ALL INGREDIENTS");
  60. return;
  61. }
  62. if(quantity < 0 || price < 0){
  63. banner.createError("QUANTITY AND PRICE MUST BE NON-NEGATIVE NUMBERS");
  64. }
  65. if(ingredients[i].ingredient.specialUnit === "bottle"){
  66. const ppu = controller.convertPrice("volume", ingredients[i].ingredient.unit, (price * 100) / (ingredients[i].ingredient.convert(ingredients[i].ingredient.unitSize)));
  67. data.ingredients.push({
  68. ingredient: ingredients[i].ingredient.id,
  69. quantity: quantity * ingredients[i].ingredient.unitSize,
  70. pricePerUnit: ppu,
  71. });
  72. }else{
  73. data.ingredients.push({
  74. ingredient: ingredients[i].ingredient.id,
  75. quantity: controller.convertToMain(ingredients[i].ingredient.unit, quantity),
  76. pricePerUnit: controller.convertPrice(ingredients[i].ingredient.unitType, ingredients[i].ingredient.unit, price * 100)
  77. });
  78. }
  79. }
  80. let loader = document.getElementById("loaderContainer");
  81. loader.style.display = "flex";
  82. fetch("/order/create", {
  83. method: "post",
  84. headers: {
  85. "Content-Type": "application/json;charset=utf-8"
  86. },
  87. body: JSON.stringify(data)
  88. })
  89. .then((response)=>response.json())
  90. .then((response)=>{
  91. if(typeof(response) === "string"){
  92. banner.createError(response);
  93. }else{
  94. let order = new Order(
  95. response._id,
  96. response.name,
  97. response.date,
  98. response.taxes,
  99. response.fees,
  100. response.ingredients,
  101. merchant
  102. );
  103. merchant.editOrders([order]);
  104. merchant.editIngredients(order.ingredients, false, true);
  105. banner.createNotification("NEW ORDER CREATED");
  106. }
  107. })
  108. .catch((err)=>{
  109. banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE");
  110. })
  111. .finally(()=>{
  112. loader.style.display = "none";
  113. });
  114. }
  115. }
  116. module.exports = newOrder;