Эх сурвалжийг харах

Update frontend to immediately display uploaded orders.
Bug fix: backend was not converting price to the base unit.
Bug fix: order details strand was not displaying ingredients of type bottle.

Lee Morgan 5 жил өмнө
parent
commit
0ad0f5c82f

+ 24 - 0
controllers/helper.js

@@ -235,6 +235,30 @@ module.exports = {
         }
     },
 
+    convertPrice: function(price, unit){
+        switch(unit){
+            case "g":return price; 
+            case "kg": return price / 1000;
+            case "oz": return price / 28.3495;
+            case "lb": return price / 453.5924;
+            case "ml": return price * 1000;
+            case "l": return price;
+            case "tsp": return price * 202.8842;
+            case "tbsp": return price * 67.6278;
+            case "ozfl": return price * 33.8141;
+            case "cup": return price * 4.1667;
+            case "pt": return price * 2.1134;
+            case "qt": return price * 1.0567;
+            case "gal": return price / 3.7854;
+            case "mm": return price * 1000;
+            case "cm": return price * 100;
+            case "m": return price;
+            case "in": return price * 39.3701;
+            case "ft": return price * 3.2808;
+            default: return price;
+        }
+    },
+
     generateId: function(length){
         let result = "";
         let characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

+ 1 - 3
controllers/orderData.js

@@ -224,7 +224,6 @@ module.exports = {
         }
 
         let merchant = {};
-        let ingredients = [];
         Merchant.findOne({_id: req.session.user})
             .populate("inventory.ingredient")
             .then((response)=>{
@@ -262,7 +261,7 @@ module.exports = {
                             currentOrder.ingredients.push({
                                 ingredient: merchant.inventory[j].ingredient._id,
                                 quantity: baseQuantity,
-                                pricePerUnit: parseInt(array[i][locations.price] * 100)
+                                pricePerUnit: helper.convertPrice(array[i][locations.price] * 100, merchant.inventory[j].defaultUnit)
                             });
 
                             merchant.inventory[j].quantity += baseQuantity;
@@ -283,7 +282,6 @@ module.exports = {
                 return res.json(response[0]);
             })
             .catch((err)=>{
-                console.log(err);
                 if(typeof(err) === "string"){
                     return res.json(err);
                 }

+ 28 - 38
views/dashboardPage/bundle.js

@@ -125,7 +125,8 @@ class Ingredient{
 
 module.exports = Ingredient;
 },{}],2:[function(require,module,exports){
-const Recipe = require("./Recipe");
+const Order = require("./Order.js");
+const Recipe = require("./Recipe.js");
 
 class MerchantIngredient{
     constructor(ingredient, quantity){
@@ -504,7 +505,17 @@ class Merchant{
         return this._orders;
     }
 
-    addOrder(order, isNew = false){
+    addOrder(data, isNew = false){
+        let order = new Order(
+            data._id,
+            data.name,
+            data.date,
+            data.taxes,
+            data.fees,
+            data.ingredients,
+            this
+        );
+
         this._orders.push(order);
 
         if(isNew){
@@ -803,7 +814,7 @@ class Merchant{
 }
 
 module.exports = Merchant;
-},{"./Recipe":4}],3:[function(require,module,exports){
+},{"./Order.js":3,"./Recipe.js":4}],3:[function(require,module,exports){
 class OrderIngredient{
     constructor(ingredient, quantity, pricePerUnit){
         if(quantity < 0){
@@ -927,9 +938,6 @@ parent = the merchant that it belongs to
 */
 class Order{
     constructor(id, name, date, taxes, fees, ingredients, parent){
-        if(!this.isSanitaryString(name)){
-            return false;
-        }
         if(taxes < 0){
             return false;
         }
@@ -1002,18 +1010,6 @@ class Order{
     getTotalCost(){
         return (this.getIngredientCost() + this.taxes + this.fees);
     }
-
-    isSanitaryString(str){
-        let disallowed = ["\\", "<", ">", "$", "{", "}", "(", ")"];
-
-        for(let i = 0; i < disallowed.length; i++){
-            if(str.includes(disallowed[i])){
-                return false;
-            }
-        }
-
-        return true;
-    }
 }
 
 module.exports = Order;
@@ -2194,17 +2190,7 @@ let newOrder = {
                 if(typeof(response) === "string"){
                     banner.createError(response);
                 }else{
-                    let order = new Order(
-                        response._id,
-                        response.name,
-                        response.date,
-                        response.taxes,
-                        response.fees,
-                        response.ingredients,
-                        merchant
-                    );
-
-                    merchant.addOrder(order, true);
+                    merchant.addOrder(response, true);
                     
                     controller.openStrand("orders", merchant.orders);
                     banner.createNotification("NEW ORDER CREATED");
@@ -2265,7 +2251,12 @@ let newOrder = {
                 if(typeof(response) === "string"){
                     banner.createError(response);
                 }else{
+                    for(let i = 0; i < response.length; i++){
+                        merchant.addOrder(response[i], true);
+                    }
 
+                    banner.createNotification("ORDERS CREATED AND INGREDIENTS UPDATE SUCCESSFULLY");
+                    controller.openStrand("orders");
                 }
             })
             .catch((err)=>{
@@ -2580,7 +2571,7 @@ let orderDetails = {
             
             let ingredientDisplay = ingredientDiv.children[1];
             if(ingredient.specialUnit === "bottle"){
-                ingredientDisplay.innerText = `${order.ingredients[i].quantity.toFixed(2)} bottles x $${order.ingredients.pricePerUnit.toFixed(2)}`;
+                ingredientDisplay.innerText = `${order.ingredients[i].quantity.toFixed(2)} bottles x $${order.ingredients[i].pricePerUnit.toFixed(2)}`;
             }else{
                 ingredientDisplay.innerText = `${order.ingredients[i].quantity.toFixed(2)} ${ingredient.unit.toUpperCase()} X $${order.ingredients[i].pricePerUnit.toFixed(2)}`;
             }
@@ -3595,7 +3586,6 @@ let ingredients = {
 module.exports = ingredients;
 },{}],22:[function(require,module,exports){
 let orders = {
-    orders: [],
 
     display: function(){
         document.getElementById("orderFilterBtn").onclick = ()=>{controller.openSidebar("orderFilter")};
@@ -3608,15 +3598,15 @@ let orders = {
             orderList.removeChild(orderList.firstChild);
         }
 
-        for(let i = 0; i < this.orders.length; i++){
+        for(let i = 0; i < merchant.orders.length; i++){
             let orderDiv = template.cloneNode(true);
-            orderDiv.order = this.orders[i];
-            orderDiv.children[0].innerText = this.orders[i].name;
-            orderDiv.children[1].innerText = `${this.orders[i].ingredients.length} ingredients`;
-            orderDiv.children[2].innerText = this.orders[i].date.toLocaleDateString("en-US");
-            orderDiv.children[3].innerText = `$${this.orders[i].getTotalCost().toFixed(2)}`;
+            orderDiv.order = merchant.orders[i];
+            orderDiv.children[0].innerText = merchant.orders[i].name;
+            orderDiv.children[1].innerText = `${merchant.orders[i].ingredients.length} ingredients`;
+            orderDiv.children[2].innerText = merchant.orders[i].date.toLocaleDateString("en-US");
+            orderDiv.children[3].innerText = `$${merchant.orders[i].getTotalCost().toFixed(2)}`;
             orderDiv.onclick = ()=>{
-                controller.openSidebar("orderDetails", this.orders[i]);
+                controller.openSidebar("orderDetails", merchant.orders[i]);
                 orderDiv.classList.add("active");
             }
             orderList.appendChild(orderDiv);

+ 13 - 2
views/dashboardPage/js/classes/Merchant.js

@@ -1,4 +1,5 @@
-const Recipe = require("./Recipe");
+const Order = require("./Order.js");
+const Recipe = require("./Recipe.js");
 
 class MerchantIngredient{
     constructor(ingredient, quantity){
@@ -377,7 +378,17 @@ class Merchant{
         return this._orders;
     }
 
-    addOrder(order, isNew = false){
+    addOrder(data, isNew = false){
+        let order = new Order(
+            data._id,
+            data.name,
+            data.date,
+            data.taxes,
+            data.fees,
+            data.ingredients,
+            this
+        );
+
         this._orders.push(order);
 
         if(isNew){

+ 0 - 15
views/dashboardPage/js/classes/Order.js

@@ -121,9 +121,6 @@ parent = the merchant that it belongs to
 */
 class Order{
     constructor(id, name, date, taxes, fees, ingredients, parent){
-        if(!this.isSanitaryString(name)){
-            return false;
-        }
         if(taxes < 0){
             return false;
         }
@@ -196,18 +193,6 @@ class Order{
     getTotalCost(){
         return (this.getIngredientCost() + this.taxes + this.fees);
     }
-
-    isSanitaryString(str){
-        let disallowed = ["\\", "<", ">", "$", "{", "}", "(", ")"];
-
-        for(let i = 0; i < disallowed.length; i++){
-            if(str.includes(disallowed[i])){
-                return false;
-            }
-        }
-
-        return true;
-    }
 }
 
 module.exports = Order;

+ 6 - 11
views/dashboardPage/js/sidebars/newOrder.js

@@ -109,17 +109,7 @@ let newOrder = {
                 if(typeof(response) === "string"){
                     banner.createError(response);
                 }else{
-                    let order = new Order(
-                        response._id,
-                        response.name,
-                        response.date,
-                        response.taxes,
-                        response.fees,
-                        response.ingredients,
-                        merchant
-                    );
-
-                    merchant.addOrder(order, true);
+                    merchant.addOrder(response, true);
                     
                     controller.openStrand("orders", merchant.orders);
                     banner.createNotification("NEW ORDER CREATED");
@@ -180,7 +170,12 @@ let newOrder = {
                 if(typeof(response) === "string"){
                     banner.createError(response);
                 }else{
+                    for(let i = 0; i < response.length; i++){
+                        merchant.addOrder(response[i], true);
+                    }
 
+                    banner.createNotification("ORDERS CREATED AND INGREDIENTS UPDATE SUCCESSFULLY");
+                    controller.openStrand("orders");
                 }
             })
             .catch((err)=>{

+ 1 - 1
views/dashboardPage/js/sidebars/orderDetails.js

@@ -26,7 +26,7 @@ let orderDetails = {
             
             let ingredientDisplay = ingredientDiv.children[1];
             if(ingredient.specialUnit === "bottle"){
-                ingredientDisplay.innerText = `${order.ingredients[i].quantity.toFixed(2)} bottles x $${order.ingredients.pricePerUnit.toFixed(2)}`;
+                ingredientDisplay.innerText = `${order.ingredients[i].quantity.toFixed(2)} bottles x $${order.ingredients[i].pricePerUnit.toFixed(2)}`;
             }else{
                 ingredientDisplay.innerText = `${order.ingredients[i].quantity.toFixed(2)} ${ingredient.unit.toUpperCase()} X $${order.ingredients[i].pricePerUnit.toFixed(2)}`;
             }

+ 7 - 8
views/dashboardPage/js/strands/orders.js

@@ -1,5 +1,4 @@
 let orders = {
-    orders: [],
 
     display: function(){
         document.getElementById("orderFilterBtn").onclick = ()=>{controller.openSidebar("orderFilter")};
@@ -12,15 +11,15 @@ let orders = {
             orderList.removeChild(orderList.firstChild);
         }
 
-        for(let i = 0; i < this.orders.length; i++){
+        for(let i = 0; i < merchant.orders.length; i++){
             let orderDiv = template.cloneNode(true);
-            orderDiv.order = this.orders[i];
-            orderDiv.children[0].innerText = this.orders[i].name;
-            orderDiv.children[1].innerText = `${this.orders[i].ingredients.length} ingredients`;
-            orderDiv.children[2].innerText = this.orders[i].date.toLocaleDateString("en-US");
-            orderDiv.children[3].innerText = `$${this.orders[i].getTotalCost().toFixed(2)}`;
+            orderDiv.order = merchant.orders[i];
+            orderDiv.children[0].innerText = merchant.orders[i].name;
+            orderDiv.children[1].innerText = `${merchant.orders[i].ingredients.length} ingredients`;
+            orderDiv.children[2].innerText = merchant.orders[i].date.toLocaleDateString("en-US");
+            orderDiv.children[3].innerText = `$${merchant.orders[i].getTotalCost().toFixed(2)}`;
             orderDiv.onclick = ()=>{
-                controller.openSidebar("orderDetails", this.orders[i]);
+                controller.openSidebar("orderDetails", merchant.orders[i]);
                 orderDiv.classList.add("active");
             }
             orderList.appendChild(orderDiv);