Browse Source

Fix all bugs relating to creating new ingredients.
Create getter for merchant/sub ingredient quantities instead of function.

Lee Morgan 5 years ago
parent
commit
1bff564302

+ 4 - 4
controllers/ingredientData.js

@@ -29,14 +29,14 @@ module.exports = {
             name: req.body.ingredient.name,
             category: req.body.ingredient.category,
             unit: req.body.ingredient.unit,
-            convert: req.body.ingredient.category,
+            convert: req.body.ingredient.convert,
             ingredients: []
-        })
+        });
         
         newIngredient.save()
             .then((ingredient)=>{
                 newIngredient = {
-                    ingredient: ingredient._id,
+                    ingredient: ingredient,
                     quantity: req.body.quantity,
                 }
 
@@ -94,7 +94,7 @@ module.exports = {
             .then((response)=>{
                 return res.json({
                     ingredient: response[0],
-                    quantity: req.body.quantity,
+                    quantity: req.body.quantity
                 });
             })
             .catch((err)=>{

+ 20 - 4
views/dashboardPage/js/classes/Ingredient.js

@@ -1,18 +1,34 @@
 class SubIngredient{
-    constructor(id, ingredient, quantity, parent){
+    constructor(id, ingredient, quantity, unit, parent){
         this.id = id;
         this._ingredient = ingredient;
         this.quantity = quantity;
-        this.parent = parent;
+        this._parent = parent;
     }
 
     get ingredient(){
         return merchant.getIngredient(this._ingredient).ingredient;
     }
 
+    get quantity(){
+        let convertMultiplier = 1;
+        switch(controller.getBaseUnit(this._ingredient.unit)){
+            case "g":
+                convertMultiplier = this._ingredient.convert.toMass;
+                break;
+            case "l":
+                convertMultiplier = this._ingredient.convert.toVolume;
+                break;
+            case "m":
+                convertMultiplier = this._ingredient.convert.toLength;
+                break;
+        }
+
+        return this._quantity * controller.unitMultiplier(controller.getBaseUnit(this._ingredient.unit), this._ingredient.unit) * convertMultiplier;
+    }
+
     getDisplayQuantity(){
-        let mult = controller.unitMultiplier(controller.getUnitType(this.parent.unit), this.parent.unit);
-        return `${this.quantity * mult} ${this.unit} / ${this.parent.unit}`;
+        return `${this._quantity} ${this._ingredient.unit} / ${this._parent.quantity} ${this._parent.unit}`;
     }
 }
 

+ 5 - 29
views/dashboardPage/js/classes/Merchant.js

@@ -14,37 +14,13 @@ class MerchantIngredient{
         return this._ingredient;
     }
 
-    get quantity(){
-        switch(this._ingredient.unit){
-            case "g":return this._quantity; 
-            case "kg": return this._quantity / 1000;
-            case "oz": return this._quantity / 28.3495;
-            case "lb": return this._quantity / 453.5924;
-            case "ml": return this._quantity * 1000;
-            case "l": return this._quantity;
-            case "tsp": return this._quantity * 202.8842;
-            case "tbsp": return this._quantity * 67.6278;
-            case "ozfl": return this._quantity * 33.8141;
-            case "cup": return this._quantity * 4.1667;
-            case "pt": return this._quantity * 2.1134;
-            case "qt": return this._quantity * 1.0567;
-            case "gal": return this._quantity / 3.7854;
-            case "mm": return this._quantity * 1000;
-            case "cm": return this._quantity * 100;
-            case "m": return this._quantity;
-            case "in": return this._quantity * 39.3701;
-            case "ft": return this._quantity * 3.2808;
-            default: return this._quantity;
-        }
-    }
-
     set quantity(quantity){
         this._quantity = quantity;
     }
 
-    quantity(unit = this._ingredient.unit){
+    get quantity(){
         let convertMultiplier = 1;
-        switch(controller.getBaseUnit(unit)){
+        switch(controller.getBaseUnit(this._ingredient.unit)){
             case "g":
                 convertMultiplier = this._ingredient.convert.toMass;
                 break;
@@ -56,7 +32,7 @@ class MerchantIngredient{
                 break;
         }
 
-        return this._quantity * controller.unitMultiplier(controller.getBaseUnit(this._ingredient.unit), unit) * convertMultiplier;
+        return this._quantity * controller.unitMultiplier(controller.getBaseUnit(this._ingredient.unit), this._ingredient.unit) * convertMultiplier;
     }
 
     /*
@@ -129,7 +105,7 @@ class Merchant{
                 ingredients[i].ingredient._id,
                 ingredients[i].ingredient.name,
                 ingredients[i].ingredient.category,
-                ingredients[i].unit,
+                ingredients[i].ingredient.unit,
                 ingredients[i].ingredient.ingredients,
                 ingredients[i].ingredient.convert,
                 this
@@ -269,7 +245,7 @@ class Merchant{
         for(let i = 0; i < ingredients.length; i++){
             let ingredient = ingredients[i].ingredient;
             let quantity = ingredients[i].quantity;
-            let unit = ingredients[i].unit;
+            let unit = ingredients[i].ingredient.unit;
 
             const createdIngredient = new Ingredient(
                 ingredient._id,

+ 9 - 0
views/dashboardPage/js/dashboard.js

@@ -514,6 +514,15 @@ controller = {
         }
 
         return multiplier;
+    },
+
+    /*
+    Applies unitMultiplier to a specific quantity and unit
+    quantity = quantity of ingredient
+    unit = unit of ingredient
+    */
+    toBase: function(quantity, unit){
+        return quantity * this.unitMultiplier(unit, this.getBaseUnit(unit));
     }
 }
 

+ 23 - 53
views/dashboardPage/js/sidebars/newIngredient.js

@@ -49,20 +49,20 @@ let newIngredient = {
 
     submit: function(){
         let unitSelector = document.getElementById("unitSelector");
-        let options = document.querySelectorAll("#unitSelector option");
-        const quantityValue = parseFloat(document.getElementById("newIngQuantity").value);
+        let quantityValue = parseFloat(document.getElementById("newIngQuantity").value);
 
         let unit = unitSelector.value;
 
-        let massConvertLeft = document.getElementById("massConvertLeft").value;
-        let massConvertRight = document.getElementById("massConvertRight").value;
-        let massConvertUnit = document.getElementById("massConvertUnitRight").value;
-        let volumeConvertLeft = document.getElementById("volumeConvertLeft").value;
-        let volumeConvertRight = document.getElementById("volumeConvertRight").value;
-        let volumeConvertUnit = document.getElementById("volumeConvertUnitRight").value;
-        let lengthConvertLeft = document.getElementById("lengthConvertLeft").value;
-        let lengthConvertRight = document.getElementById("lengthConvertRight").value;
-        let lengthConvertUnit = document.getElementById("lengthConvertUnitRight").value;
+        let massDiv = document.getElementById("newIngMassConvert");
+        let volumeDiv = document.getElementById("newIngVolumeConvert");
+        let lengthDiv = document.getElementById("newIngLengthConvert");
+
+        let massLeft = controller.toBase(massDiv.children[0].value, unit)
+        let massRight = controller.toBase(massDiv.children[3].value, massDiv.children[4].value);
+        let volumeLeft = controller.toBase(volumeDiv.children[0].value, unit)
+        let volumeRight = controller.toBase(volumeDiv.children[3].value, volumeDiv.children[4].value);
+        let lengthLeft = controller.toBase(lengthDiv.children[0].value, unit)
+        let lengthRight = controller.toBase(lengthDiv.children[3].value, lengthDiv.children[4].value);
 
         let newIngredient = {
             ingredient: {
@@ -70,18 +70,24 @@ let newIngredient = {
                 category: document.getElementById("newIngCategory").value,
                 unit: unit,
                 convert: {
-                    toMass: controller.baseUnit(massConvertRight, massConvertUnit) / controller.baseUnit(massConvertLeft, unit),
-                    toVolume: controller.baseUnit(volumeConvertRight, volumeConvertUnit) / controller.baseUnit(volumeConvertLeft, unit),
-                    toLength: controller.baseUnit(lengthConvertRight, lengthConvertUnit) / controller.baseUnit(lengthConvertLeft, unit)
+                    toMass: massRight / massLeft,
+                    toVolume: volumeRight / volumeLeft,
+                    toLength: lengthRight / lengthLeft
                 }
             },
             quantity: controller.baseUnit(quantityValue, unit)
         }
 
-        if(isNaN(newIngredient.convert.toMass)) newIngredient.convert.toMass = undefined;
-        if(isNaN(newIngredient.convert.toVolume)) newIngredient.convert.toVolume = undefined;
-        if(isNaN(newIngredient.convert.toLength)) newIngredient.convert.toLength = undefined;
+        if(isNaN(newIngredient.ingredient.convert.toMass)) newIngredient.ingredient.convert.toMass = 0;
+        if(isNaN(newIngredient.ingredient.convert.toVolume)) newIngredient.ingredient.convert.toVolume = 0;
+        if(isNaN(newIngredient.ingredient.convert.toLength)) newIngredient.ingredient.convert.toLength = 0;
     
+        switch(controller.getUnitType(unit)){
+            case "mass": newIngredient.ingredient.convert.toMass = 1; break;
+            case "volume": newIngredient.convert.ingredient.toVolume = 1; break;
+            case "length": newIngredient.convert.ingredient.toLength = 1; break;
+        }
+
         let loader = document.getElementById("loaderContainer");
         loader.style.display = "flex";
 
@@ -110,42 +116,6 @@ let newIngredient = {
             .finally(()=>{
                 loader.style.display = "none";
             });
-    },
-
-    submitSpreadsheet: function(){
-        event.preventDefault();
-        controller.closeModal();
-
-        const file = document.getElementById("spreadsheetInput").files[0];
-        let data = new FormData();
-        data.append("ingredients", file);
-
-        let loader = document.getElementById("loaderContainer");
-        loader.style.display = "flex";
-
-        fetch("/ingredients/create/spreadsheet", {
-            method: "post",
-            body: data
-        })
-            .then(response => response.json())
-            .then((response)=>{
-                if(typeof(response) === "string"){
-                    controller.createBanner(response, "error");
-                }else{
-                    merchant.addIngredients(response);
-                    state.updateIngredients();
-
-                    controller.createBanner("INGREDIENTS SUCCESSFULLY ADDED", "success");
-                    controller.openStrand("ingredients");
-                }
-                
-            })
-            .catch((err)=>{
-                controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
-            })
-            .finally(()=>{
-                loader.style.display = "none";
-            });
     }
 }
 

+ 0 - 1
views/dashboardPage/js/strands/ingredients.js

@@ -46,7 +46,6 @@ let ingredients = {
                 };
                 ingredientDiv._name = ingredient.ingredient.name.toLowerCase();
                 ingredientDiv._unit = ingredient.ingredient.unit.toLowerCase();
-                
                 ingredientDiv.children[2].innerText = `${ingredient.quantity.toFixed(2)} ${ingredient.ingredient.unit.toUpperCase()}`;
 
                 categoryDiv.children[1].appendChild(ingredientDiv);