Просмотр исходного кода

Add link to modal for downloading a spreadsheet template.
Create backend for creating a spreadsheet template.
Send the template to the frontend for download.

Lee Morgan 5 лет назад
Родитель
Сommit
11ce59706b

+ 60 - 0
controllers/recipeData.js

@@ -408,5 +408,65 @@ module.exports = {
 
                 return res.json("ERROR: UNABLE TO CREATE YOUR INGREDIENTS");
             });
+    },
+
+    spreadsheetTemplate: function(req, res){
+        if(!req.session.user){
+            req.session.error = "MUST BE LOGGED IN TO DO THAT";
+            return res.redirect("/");
+        }
+
+        Merchant.findOne({_id: req.session.user})
+            .populate({
+                path: "recipes",
+                populate: {
+                    path: "ingredients.ingredient",
+                    model: "Ingredient"
+                }
+            })
+            .then((merchant)=>{
+                let workbook = xlsx.utils.book_new();
+                workbook.SheetNames.push("Recipes");
+                let workbookData = [];
+
+                workbookData.push(["Name", "Price", "Ingredients", "Ingredient Amount", "unit"]);
+
+                for(let i = 0; i < merchant.recipes.length; i++){
+                    for(let j = 0; j < merchant.recipes[i].ingredients.length; j++){
+                        let row = [];
+                        if(j === 0){
+                            row[0] = merchant.recipes[i].name;
+                            row[1] = parseFloat((merchant.recipes[i].price / 100).toFixed(2));
+                        }else{
+                            row[0] = "";
+                            row[1] = "";
+                        }
+                        const ingredient = merchant.recipes[i].ingredients[j];
+                        row[2] = ingredient.ingredient.name;
+                        //using convertPrice because it is the same as converting from the base unit
+                        let quantity = 0;
+                        for(let k = 0; k < merchant.inventory.length; k++){
+                            if(merchant.inventory[k].ingredient.toString() === ingredient.ingredient._id.toString()){
+                                quantity = helper.convertPrice(ingredient.quantity, merchant.inventory[k].defaultUnit);
+                                row[3] = parseFloat(quantity.toFixed(2));
+                                row[4] = merchant.inventory[k].defaultUnit;
+                            }
+                        }
+                        
+                        workbookData.push(row);
+                    }
+                }
+
+                workbook.Sheets.Recipes = xlsx.utils.aoa_to_sheet(workbookData);
+
+                xlsx.writeFile(workbook, "SublineRecipes.xlsx");
+
+                res.download("SublineRecipes.xlsx", (err)=>{
+                    fs.unlink("SublineRecipes.xlsx", ()=>{});
+                });
+            })
+            .catch((err)=>{
+                console.log(err);
+            });
     }
 }

+ 1 - 0
routes.js

@@ -39,6 +39,7 @@ module.exports = function(app){
     app.get("/recipe/update/clover", recipeData.updateRecipesClover);
     app.get("/recipe/update/square", recipeData.updateRecipesSquare);
     app.post("/recipes/create/spreadsheet", upload.single("recipes"), recipeData.createFromSpreadsheet);
+    app.get("/recipes/download/spreadsheet", recipeData.spreadsheetTemplate);
 
     //Orders
     app.get("/order", orderData.getOrders);

+ 1 - 0
views/dashboardPage/bundle.js

@@ -1503,6 +1503,7 @@ controller = {
                 content = document.getElementById("modalSpreadsheetUpload");
                 content.style.display = "flex";
                 document.getElementById("modalSpreadsheetTitle").innerText = "recipes";
+                document.getElementById("spreadsheetDownload").href = "/recipes/download/spreadsheet";
                 content.onsubmit = newRecipe.submitSpreadsheet;
                 break;
             case "orderSpreadsheet":

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

@@ -201,6 +201,7 @@ controller = {
                 content = document.getElementById("modalSpreadsheetUpload");
                 content.style.display = "flex";
                 document.getElementById("modalSpreadsheetTitle").innerText = "recipes";
+                document.getElementById("spreadsheetDownload").href = "/recipes/download/spreadsheet";
                 content.onsubmit = newRecipe.submitSpreadsheet;
                 break;
             case "orderSpreadsheet":

+ 1 - 0
views/dashboardPage/modal.ejs

@@ -11,6 +11,7 @@
                 <input id="spreadsheetInput" class="fileUpload" name="file" type="file">
                 <input type="hidden" name="type">
                 <input class="button" type="submit" value="SUBMIT">
+                <a id="spreadsheetDownload">download template</a>
             </form>
         </div>
     </div>