Browse Source

Create the frontend to submit the recipes file.

Lee Morgan 5 năm trước cách đây
mục cha
commit
4395357fc9

+ 23 - 3
controllers/recipeData.js

@@ -5,7 +5,8 @@ const ArchivedRecipe = require("../models/archivedRecipe.js");
 const validator = require("./validator.js");
 
 const axios = require("axios");
-const xlsxUtils = require("xlsx").utils;
+const xlsx = require("xlsx");
+const fs = require("fs");
 
 module.exports = {
     /*
@@ -300,8 +301,27 @@ module.exports = {
             });
     },
 
-    createFromSpreadsheet: function(sheet, user){
-        const array = xlsxUtils.sheet_to_json(sheet, {
+    createFromSpreadsheet: function(req, res){
+        if(!req.session.user){
+            req.session.error = "MUST BE LOGGED IN TO DO THAT";
+            return res.redirect("/");
+        }
+
+        console.log(req.file);
+        //read file, get the correct sheet, create array from sheet
+        let workbook = xlsx.readFile(req.file.path);
+        fs.unlink(req.file.path, ()=>{});
+
+        let sheets = Object.keys(workbook.Sheets);
+        let sheet = {};
+        for(let i = 0; i < sheets.length; i++){
+            let str = sheets[i].toLowerCase();
+            if(str === "recipe" || str === "recipes"){
+                sheet = workbook.Sheets[sheets[i]];
+            }
+        }
+
+        const array = xlsx.utils.sheet_to_json(sheet, {
             header: 1
         });
 

+ 1 - 0
routes.js

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

+ 37 - 4
views/dashboardPage/bundle.js

@@ -1486,12 +1486,14 @@ controller = {
 
     openModal: function(str){
         let modal = document.getElementById("modal");
+        modal.style.display = "flex";
         document.getElementById("modalClose").addEventListener("click", this.closeModal);
 
         switch(str){
             case "recipeSpreadsheet":
-                modal.style.display = "flex";
-                document.getElementById("modalSpreadsheetUpload").style.display = "flex";
+                let form = document.getElementById("modalSpreadsheetUpload");
+                form.style.display = "flex";
+                form.onsubmit = newRecipe.submitSpreadsheet();
                 break;
         }
     },
@@ -2035,14 +2037,14 @@ let newIngredient = {
     submitFile: function(){
         const file = document.getElementById("ingredientFile").files[0];
         let data = new FormData();
-        data.append("spreadsheet", file);
+        data.append("ingredients", file);
 
         let loader = document.getElementById("loaderContainer");
         loader.style.display = "flex";
 
         fetch("/ingredients/create/spreadsheet", {
             method: "post",
-            body: data,
+            body: data
         })
             .then(response => response.json())
             .then((response)=>{
@@ -2362,6 +2364,37 @@ let newRecipe = {
                 loader.style.display = "none";
             });
     },
+
+    submitSpreadsheet: function(){
+        event.preventDefault();
+
+        const file = document.getElementById("spreadsheetInput").files[0];
+        let data = new FormData();
+        data.append("recipes", file);
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/recipes/create/spreadsheet", {
+            method: "post",
+            body: data
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                if(typeof(response) === "String"){
+                    banner.createError(response);
+                }else{
+
+                }
+            })
+            .catch((err)=>{
+                console.log(err);
+                banner.createError("UNABLE TO DISPLAY NEW RECIPES.  PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
+    }
 }
 
 module.exports = newRecipe;

+ 4 - 2
views/dashboardPage/js/dashboard.js

@@ -192,12 +192,14 @@ controller = {
 
     openModal: function(str){
         let modal = document.getElementById("modal");
+        modal.style.display = "flex";
         document.getElementById("modalClose").addEventListener("click", this.closeModal);
 
         switch(str){
             case "recipeSpreadsheet":
-                modal.style.display = "flex";
-                document.getElementById("modalSpreadsheetUpload").style.display = "flex";
+                let form = document.getElementById("modalSpreadsheetUpload");
+                form.style.display = "flex";
+                form.onsubmit = newRecipe.submitSpreadsheet();
                 break;
         }
     },

+ 2 - 2
views/dashboardPage/js/sidebars/newIngredient.js

@@ -81,14 +81,14 @@ let newIngredient = {
     submitFile: function(){
         const file = document.getElementById("ingredientFile").files[0];
         let data = new FormData();
-        data.append("spreadsheet", file);
+        data.append("ingredients", file);
 
         let loader = document.getElementById("loaderContainer");
         loader.style.display = "flex";
 
         fetch("/ingredients/create/spreadsheet", {
             method: "post",
-            body: data,
+            body: data
         })
             .then(response => response.json())
             .then((response)=>{

+ 31 - 0
views/dashboardPage/js/sidebars/newRecipe.js

@@ -128,6 +128,37 @@ let newRecipe = {
                 loader.style.display = "none";
             });
     },
+
+    submitSpreadsheet: function(){
+        event.preventDefault();
+
+        const file = document.getElementById("spreadsheetInput").files[0];
+        let data = new FormData();
+        data.append("recipes", file);
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/recipes/create/spreadsheet", {
+            method: "post",
+            body: data
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                if(typeof(response) === "String"){
+                    banner.createError(response);
+                }else{
+
+                }
+            })
+            .catch((err)=>{
+                console.log(err);
+                banner.createError("UNABLE TO DISPLAY NEW RECIPES.  PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
+    }
 }
 
 module.exports = newRecipe;