Переглянути джерело

Add creation of orders on front and back end

Lee Morgan 5 роки тому
батько
коміт
5b781485b6

+ 1 - 1
controllers/orderData.js

@@ -96,7 +96,7 @@ module.exports = {
         ingredients: [{
             ingredient: id of the ingredient
             quantity: amount of the ingredient purchased
-            price: price per unit for ingredient
+            price: price for ingredient
         }]
     } 
     */ 

+ 78 - 7
views/dashboardPage/bundle.js

@@ -449,6 +449,8 @@ class Order{
                         quantity: ingredients[i].quantity,
                         price: ingredients[i].price
                     });
+
+                    break;
                 }
             }
         }
@@ -1248,8 +1250,6 @@ let home = {
                     if(typeof(response) === "string"){
                         banner.createError(response);
                     }else{
-                        
-
                         merchant.editIngredients(changes);
                         banner.createNotification("INGREDIENTS UPDATED");
                     }
@@ -1732,17 +1732,16 @@ let newOrder = {
             ingredientList.appendChild(ingredient);
         }
 
-        document.getElementById("submitNewOrder").onclick = ()=>{this.submit()};
+        document.getElementById("submitNewOrder").onclick = ()=>{this.submit(Order)};
     },
 
     addIngredient: function(ingredient, element){
         element.style.display = "none";
 
         let div = document.getElementById("selectedIngredient").content.children[0].cloneNode(true);
+        div.ingredient = ingredient;
         div.children[0].children[0].innerText = `${ingredient.name} (${ingredient.unit.toUpperCase()})`;
         div.children[0].children[1].onclick = ()=>{this.removeIngredient(div, element)};
-        div.children[1].children[0].placeholder = "QUANTITY";
-        div.children[1].children[1].placeholder = "PRICE PER UNIT";
         document.getElementById("selectedIngredientList").appendChild(div);
     },
 
@@ -1751,8 +1750,80 @@ let newOrder = {
         element.style.display = "block";
     },
 
-    submit: function(){
-        console.log("something");
+    submit: function(Order){
+        let date = document.getElementById("newOrderDate").value;
+        let time = document.getElementById("newOrderTime").value;
+        let ingredients = document.getElementById("selectedIngredientList").children;
+
+        if(date === ""){
+            banner.createError("DATE IS REQUIRED FOR ORDERS");
+            return;
+        }
+        
+        if(time !== ""){
+            date = `${date}T${time}`;
+        }
+
+        let data = {
+            name: document.getElementById("newOrderName").value,
+            date: date,
+            ingredients: []
+        }
+
+        for(let i = 0; i < ingredients.length; i++){
+            let quantity = ingredients[i].children[1].children[0].value;
+            let price = ingredients[i].children[1].children[1].value;
+
+            if(quantity === "" || price === ""){
+                banner.createError("MUST PROVIDE QUANTITY AND PRICE PER UNIT FOR ALL INGREDIENTS");
+                return;
+            }
+
+            if(quantity < 0 || price < 0){
+                banner.createError("QUANTITY AND PRICE MUST BE NON-NEGATIVE NUMBERS");
+            }
+
+            data.ingredients.push({
+                ingredient: ingredients[i].ingredient.id,
+                quantity: controller.convertToMain(ingredients[i].ingredient.unit, quantity),
+                price: price
+            });
+        }
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/order/create", {
+            method: "post",
+            headers: {
+                "Content-Type": "application/json;charset=utf-8"
+            },
+            body: JSON.stringify(data)
+        })
+            .then((response)=>response.json())
+            .then((response)=>{
+                if(typeof(response) === "string"){
+                    banner.createError(response);
+                }else{
+                    let order = new Order(
+                        response._id,
+                        response.name,
+                        response.date,
+                        response.ingredients,
+                        merchant
+                    );
+
+                    merchant.editOrders([order]);
+                    merchant.editIngredients(order.ingredients, false, true);
+                }
+            })
+            .catch((err)=>{
+                console.log(err);
+                banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }
 

+ 2 - 0
views/dashboardPage/js/Order.js

@@ -14,6 +14,8 @@ class Order{
                         quantity: ingredients[i].quantity,
                         price: ingredients[i].price
                     });
+
+                    break;
                 }
             }
         }

+ 0 - 2
views/dashboardPage/js/home.js

@@ -224,8 +224,6 @@ let home = {
                     if(typeof(response) === "string"){
                         banner.createError(response);
                     }else{
-                        
-
                         merchant.editIngredients(changes);
                         banner.createNotification("INGREDIENTS UPDATED");
                     }

+ 76 - 5
views/dashboardPage/js/newOrder.js

@@ -21,17 +21,16 @@ let newOrder = {
             ingredientList.appendChild(ingredient);
         }
 
-        document.getElementById("submitNewOrder").onclick = ()=>{this.submit()};
+        document.getElementById("submitNewOrder").onclick = ()=>{this.submit(Order)};
     },
 
     addIngredient: function(ingredient, element){
         element.style.display = "none";
 
         let div = document.getElementById("selectedIngredient").content.children[0].cloneNode(true);
+        div.ingredient = ingredient;
         div.children[0].children[0].innerText = `${ingredient.name} (${ingredient.unit.toUpperCase()})`;
         div.children[0].children[1].onclick = ()=>{this.removeIngredient(div, element)};
-        div.children[1].children[0].placeholder = "QUANTITY";
-        div.children[1].children[1].placeholder = "PRICE PER UNIT";
         document.getElementById("selectedIngredientList").appendChild(div);
     },
 
@@ -40,8 +39,80 @@ let newOrder = {
         element.style.display = "block";
     },
 
-    submit: function(){
-        console.log("something");
+    submit: function(Order){
+        let date = document.getElementById("newOrderDate").value;
+        let time = document.getElementById("newOrderTime").value;
+        let ingredients = document.getElementById("selectedIngredientList").children;
+
+        if(date === ""){
+            banner.createError("DATE IS REQUIRED FOR ORDERS");
+            return;
+        }
+        
+        if(time !== ""){
+            date = `${date}T${time}`;
+        }
+
+        let data = {
+            name: document.getElementById("newOrderName").value,
+            date: date,
+            ingredients: []
+        }
+
+        for(let i = 0; i < ingredients.length; i++){
+            let quantity = ingredients[i].children[1].children[0].value;
+            let price = ingredients[i].children[1].children[1].value;
+
+            if(quantity === "" || price === ""){
+                banner.createError("MUST PROVIDE QUANTITY AND PRICE PER UNIT FOR ALL INGREDIENTS");
+                return;
+            }
+
+            if(quantity < 0 || price < 0){
+                banner.createError("QUANTITY AND PRICE MUST BE NON-NEGATIVE NUMBERS");
+            }
+
+            data.ingredients.push({
+                ingredient: ingredients[i].ingredient.id,
+                quantity: controller.convertToMain(ingredients[i].ingredient.unit, quantity),
+                price: price
+            });
+        }
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/order/create", {
+            method: "post",
+            headers: {
+                "Content-Type": "application/json;charset=utf-8"
+            },
+            body: JSON.stringify(data)
+        })
+            .then((response)=>response.json())
+            .then((response)=>{
+                if(typeof(response) === "string"){
+                    banner.createError(response);
+                }else{
+                    let order = new Order(
+                        response._id,
+                        response.name,
+                        response.date,
+                        response.ingredients,
+                        merchant
+                    );
+
+                    merchant.editOrders([order]);
+                    merchant.editIngredients(order.ingredients, false, true);
+                }
+            })
+            .catch((err)=>{
+                console.log(err);
+                banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }
 

+ 2 - 2
views/dashboardPage/sidebars/newOrder.ejs

@@ -42,9 +42,9 @@
             
 
             <div>
-                <input type="number" min="0" step="0.01">
+                <input type="number" min="0" step="0.01" placeholder="QUANTITY">
 
-                <input type="number" min="0" step="0.01">
+                <input type="number" min="0" step="0.01" placeholder="TOTAL PRICE">
             </div>
         </div>
     </template>