newOrder.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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[0].innerText = `${ingredient.name} (${ingredient.unit.toUpperCase()})`;
  27. div.children[0].children[1].onclick = ()=>{this.removeIngredient(div, element)};
  28. document.getElementById("selectedIngredientList").appendChild(div);
  29. },
  30. removeIngredient: function(selectedElement, element){
  31. selectedElement.parentElement.removeChild(selectedElement);
  32. element.style.display = "block";
  33. },
  34. submit: function(Order){
  35. let date = document.getElementById("newOrderDate").value;
  36. let time = document.getElementById("newOrderTime").value;
  37. let ingredients = document.getElementById("selectedIngredientList").children;
  38. if(date === ""){
  39. banner.createError("DATE IS REQUIRED FOR ORDERS");
  40. return;
  41. }
  42. if(time !== ""){
  43. date = `${date}T${time}`;
  44. }
  45. let data = {
  46. name: document.getElementById("newOrderName").value,
  47. date: date,
  48. ingredients: []
  49. }
  50. for(let i = 0; i < ingredients.length; i++){
  51. let quantity = ingredients[i].children[1].children[0].value;
  52. let price = ingredients[i].children[1].children[1].value;
  53. if(quantity === "" || price === ""){
  54. banner.createError("MUST PROVIDE QUANTITY AND PRICE PER UNIT FOR ALL INGREDIENTS");
  55. return;
  56. }
  57. if(quantity < 0 || price < 0){
  58. banner.createError("QUANTITY AND PRICE MUST BE NON-NEGATIVE NUMBERS");
  59. }
  60. data.ingredients.push({
  61. ingredient: ingredients[i].ingredient.id,
  62. quantity: controller.convertToMain(ingredients[i].ingredient.unit, quantity),
  63. price: price
  64. });
  65. }
  66. let loader = document.getElementById("loaderContainer");
  67. loader.style.display = "flex";
  68. fetch("/order/create", {
  69. method: "post",
  70. headers: {
  71. "Content-Type": "application/json;charset=utf-8"
  72. },
  73. body: JSON.stringify(data)
  74. })
  75. .then((response)=>response.json())
  76. .then((response)=>{
  77. if(typeof(response) === "string"){
  78. banner.createError(response);
  79. }else{
  80. let order = new Order(
  81. response._id,
  82. response.name,
  83. response.date,
  84. response.ingredients,
  85. merchant
  86. );
  87. merchant.editOrders([order]);
  88. merchant.editIngredients(order.ingredients, false, true);
  89. }
  90. })
  91. .catch((err)=>{
  92. console.log(err);
  93. banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE");
  94. })
  95. .finally(()=>{
  96. loader.style.display = "none";
  97. });
  98. }
  99. }
  100. module.exports = newOrder;