Browse Source

Fix update ingredients to working state.
Automtically change fields in update ingredients to keep user changes up to date.

Lee Morgan 5 years ago
parent
commit
d27221ae16

+ 2 - 2
controllers/ingredientData.js

@@ -75,7 +75,7 @@ module.exports = {
     response = Ingredient
     */
     updateIngredient: function(req, res){
-        Ingredient.findOne({_id: req.body.id})
+        Ingredient.findOne({_id: req.body.ingredient.id})
             .then((ingredient)=>{
                 ingredient.name = req.body.ingredient.name;
                 ingredient.category = req.body.ingredient.category;
@@ -84,7 +84,7 @@ module.exports = {
                 
                 //find and update ingredient on merchant
                 for(let i = 0; i < res.locals.merchant.inventory.length; i++){
-                    if(res.locals.merchant.inventory[i].ingredient.toString() === req.body.id){
+                    if(res.locals.merchant.inventory[i].ingredient.toString() === req.body.ingredient.id){
                         res.locals.merchant.inventory[i].quantity = req.body.quantity;                        
                         break;
                     }

+ 4 - 4
views/dashboardPage/ejs/sidebars/editIngredient.ejs

@@ -25,7 +25,7 @@
 
     <div class="lineBorder"></div>
 
-    <h3>MEASUREMENT UNIT</h3>
+    <h3>DEFAULT UNIT</h3>
 
     <div id="unitButtons"></div>
 
@@ -34,7 +34,7 @@
     <h3>CONVERSIONS</h3>
 
     <div id="editIngMass" class="converterBox" stye="display:none">
-        <input type="number" min="0" step="0.01" value="1">
+        <input type="number" min="0" step="0.01">
 
         <h4></h4>
 
@@ -51,7 +51,7 @@
     </div>
 
     <div id="editIngVolume" class="converterBox" stye="display:none">
-        <input type="number" min="0" step="0.01" value="1">
+        <input type="number" min="0" step="0.01">
 
         <h4></h4>
 
@@ -73,7 +73,7 @@
     </div>
 
     <div id="editIngLength" class="converterBox" stye="display:none">
-        <input type="number" min="0" step="0.01" value="1">
+        <input type="number" min="0" step="0.01">
 
         <h4></h4>
 

+ 9 - 9
views/dashboardPage/js/classes/Ingredient.js

@@ -37,7 +37,7 @@ class Ingredient{
         this._id = id;
         this._name = name;
         this._category = category;
-        this._unit = unit;
+        this.unit = unit;
         this._subIngredients = [];
         this._parent = parent;
         this._convert = convert;
@@ -76,14 +76,6 @@ class Ingredient{
         this._category = category;
     }
 
-    get unit(){
-        return this._unit;
-    }
-
-    set unit(unit){
-        this._unit = unit;
-    }
-
     get convert(){
         return this._convert;
     }
@@ -125,6 +117,14 @@ class Ingredient{
 
         return (quantity === 0) ? 0 : totalCost / quantity;
     }
+
+    getPotentialUnits(){
+        switch(controller.getUnitType(this.unit)){
+            case "mass": return ["g", "kg", "oz", "lb"];
+            case "volume": return ["ml", "l", "tsp", "tbsp", "ozfl", "cup", "pt", "qt", "gal"];
+            case "length": return ["mm", "cm", "m", "in", "ft"];
+        }
+    }
 }
 
 module.exports = Ingredient;

+ 1 - 1
views/dashboardPage/js/classes/Merchant.js

@@ -31,7 +31,7 @@ class MerchantIngredient{
                 convertMultiplier = this._ingredient.convert.toLength;
                 break;
         }
-
+        
         return this._quantity * controller.unitMultiplier(controller.getBaseUnit(this._ingredient.unit), this._ingredient.unit) * convertMultiplier;
     }
 

+ 74 - 23
views/dashboardPage/js/sidebars/editIngredient.js

@@ -1,8 +1,8 @@
 let editIngredient = {
+
     display: function(ingredient){
         let buttonList = document.getElementById("unitButtons");
         let quantLabel = document.getElementById("editIngQuantityLabel");
-        let specialLabel = document.getElementById("editSpecialLabel");
 
         document.getElementById("editSubIngredients").onclick = ()=>{controller.openModal("editSubIngredients", ingredient.ingredient)};
 
@@ -19,33 +19,46 @@ let editIngredient = {
         document.getElementById("editIngSubmit").onclick = ()=>{this.submit(ingredient)};
 
         //Populate the unit buttons
-        const units = ingredient.ingredient.getPotentialUnits();
+        let units = ingredient.ingredient.getPotentialUnits();
 
         for(let i = 0; i < units.length; i++){
             let button = document.createElement("button");
             button.classList.add("unitButton");
             button.innerText = units[i].toUpperCase();
-            button.onclick = ()=>{this.changeUnit(button)};
+            button.onclick = ()=>{this.changeUnit(button, ingredient)};
             buttonList.appendChild(button);
             
-            if(units[i] === ingredient.unit) button.classList.add("unitActive");
+            if(units[i] === ingredient.ingredient.unit) button.classList.add("unitActive");
         }
 
         //Offer conversions
         let massDiv = document.getElementById("editIngMass");
         let volumeDiv = document.getElementById("editIngVolume");
         let lengthDiv = document.getElementById("editIngLength");
-
-        massDiv.children[1].innerText = ingredient.unit.toUpperCase();
-        massDiv.children[3].innerText = ingredient.ingredient.convert.toMass;
-
-        volumeDiv.children[1].innerText = ingredient.unit.toUpperCase();
-        volumeDiv.children[3].innerText = ingredient.ingredient.convert.toVolume;
-
-        lengthDiv.children[1].innerText = ingredient.unit.toUpperCase();
-        lengthDiv.children[3].innerText = ingredient.ingredient.convert.toLength;
-
-        switch(controller.getBaseUnit(ingredient.unit)){
+        let multiplier = controller.unitMultiplier(controller.getBaseUnit(ingredient.ingredient.unit), ingredient.ingredient.unit);
+
+        massDiv.children[0].value = 1;
+        massDiv.children[1].innerText = ingredient.ingredient.unit.toUpperCase();
+        massDiv.children[3].value = parseFloat((ingredient.ingredient.convert.toMass / multiplier).toFixed(3));
+        massDiv.children[4].value = "g";
+        massDiv.children[4].previousValue = "g";
+        massDiv.children[4].onchange = ()=>{this.changeConversionSelect(massDiv)};
+
+        volumeDiv.children[0].value = 1;
+        volumeDiv.children[1].innerText = ingredient.ingredient.unit.toUpperCase();
+        volumeDiv.children[3].value = parseFloat((ingredient.ingredient.convert.toVolume / multiplier).toFixed(3));
+        volumeDiv.children[4].value = "l";
+        volumeDiv.children[4].previousValue = "l";
+        volumeDiv.children[4].onchange = ()=>{this.changeConversionSelect(volumeDiv)};
+
+        lengthDiv.children[0].value = 1;
+        lengthDiv.children[1].innerText = ingredient.ingredient.unit.toUpperCase();
+        lengthDiv.children[3].value = parseFloat((ingredient.ingredient.convert.toLength / multiplier).toFixed(3));
+        lengthDiv.children[4].value = "m";
+        lengthDiv.children[4].value = "m";
+        lengthDiv.children[4].onchange = ()=>{this.changeConversionSelect(lengthDiv)};
+
+        switch(controller.getBaseUnit(ingredient.ingredient.unit)){
             case "g": 
                 massDiv.style.display = "none";
                 volumeDiv.style.display = "flex";
@@ -71,7 +84,37 @@ let editIngredient = {
         quantLabel.appendChild(quantInput);
     },
 
-    changeUnit(button){
+    changeUnit: function(button, ingredient){
+        //update current stock quantity
+        let label = document.getElementById("editIngQuantityLabel");
+        label.innerText = `CURRENT STOCK (${button.innerText})`;
+        let input = document.createElement("input");
+        input.id = "editIngQuantity";
+        input.type = "number";
+        input.min = "0";
+        input.step = "0.01";
+        input.value = (ingredient.quantity * controller.unitMultiplier(ingredient.ingredient.unit, button.innerText.toLowerCase())).toFixed(2);
+        label.appendChild(input);
+        
+        //update conversions
+        let massDiv = document.getElementById("editIngMass");
+        let volumeDiv = document.getElementById("editIngVolume");
+        let lengthDiv = document.getElementById("editIngLength");
+        
+        massDiv.children[1].innerText = button.innerText;
+        volumeDiv.children[1].innerText = button.innerText;
+        lengthDiv.children[1].innerText = button.innerText;
+        let multiplier = controller.unitMultiplier(document.querySelector(".unitActive").innerText.toLowerCase(), button.innerText.toLowerCase());
+        
+    
+        massDiv.children[0].value = parseFloat((massDiv.children[0].value * multiplier).toFixed(3));
+        massDiv.children[3].value = parseFloat((massDiv.children[3].value * multiplier).toFixed(3));
+        volumeDiv.children[0].value = parseFloat((volumeDiv.children[0].value * multiplier).toFixed(3));
+        volumeDiv.children[3].value = parseFloat((volumeDiv.children[3].value * multiplier).toFixed(3));
+        lengthDiv.children[0].value = parseFloat((lengthDiv.children[0].value * multiplier).toFixed(3));
+        lengthDiv.children[3].value = parseFloat((lengthDiv.children[3].value *= multiplier).toFixed(3));
+
+        //Update the buttons
         let buttons = document.getElementById("unitButtons");
 
         for(let i = 0; i < buttons.children.length; i++){
@@ -79,13 +122,15 @@ let editIngredient = {
         }
 
         button.classList.add("unitActive");
+    },
 
-        document.getElementById("editIngMass").children[1].innerText = button.innerText;
-        document.getElementById("editIngVolume").children[1].innerText = button.innerText;
-        document.getElementById("editIngLength").children[1].innerText = button.innerText;
+    changeConversionSelect: function(div){
+        let multiplier = controller.unitMultiplier(div.children[4].previousUnit, div.children[4].value);
+        div.children[3].value = parseFloat((div.children[3].value * multiplier).toFixed(3));
+        div.children[4].previousUnit = div.children[4].value;
     },
 
-    submit(ingredient){
+    submit: function(ingredient){
         let quantity = parseFloat(document.getElementById("editIngQuantityLabel").children[0].value);
         let unit = document.getElementById("unitButtons").querySelector(".unitActive").innerText.toLowerCase();
 
@@ -101,8 +146,8 @@ let editIngredient = {
         let rightLength = lengthDiv.children[3].value;
         let leftUnit = massDiv.children[1].innerText.toLowerCase();
         let rightUnitMass = massDiv.children[4].value;
-        let rightUnitVolume = massDiv.children[4].value;
-        let rightUnitLength = massDivchildren[4].value;
+        let rightUnitVolume = volumeDiv.children[4].value;
+        let rightUnitLength = lengthDiv.children[4].value;
         let leftMultiplier = controller.unitMultiplier(leftUnit, controller.getBaseUnit(leftUnit));
 
         leftMass *= leftMultiplier;
@@ -120,13 +165,19 @@ let editIngredient = {
                 unit: unit,
                 convert: {
                     toMass: rightMass / leftMass,
-                    toVolume: rigthVolume / leftVolume,
+                    toVolume: rightVolume / leftVolume,
                     toLength: rightLength / leftLength
                 }
             },
             quantity: quantity * controller.unitMultiplier(unit, controller.getBaseUnit(unit))
         }
 
+        switch(controller.getUnitType(unit)){
+            case "mass": data.ingredient.convert.toMass = 1; break;
+            case "volume": data.ingredient.convert.toVolume = 1; break;
+            case "length": data.ingredient.convert.toLength = 1; break;
+        }
+
         let loader = document.getElementById("loaderContainer");
         loader.style.display = "flex";