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

Add frontend/backend code so that orders are transmitted to the back.
Spreadsheet is turned into an array, but not read after that.

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

+ 30 - 0
controllers/orderData.js

@@ -4,6 +4,9 @@ const Merchant = require("../models/merchant.js");
 const ObjectId = require("mongoose").Types.ObjectId;
 const Validator = require("./validator.js");
 
+const xlsx = require("xlsx");
+const fs = require("fs");
+
 module.exports = {
     /*
     GET - get the 25 most recent orders
@@ -180,5 +183,32 @@ module.exports = {
             .catch((err)=>{
                 return res.json("ERROR: UNABLE TO REMOVE ORDER");
             });
+    },
+
+    createFromSpreadsheet: function(req, res){
+        if(!req.session.user){
+            req.session.error = "MUST BE LOGGED IN TO DO THAT";
+            return res.redirect("/");
+        }
+
+        //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);
+        console.log(sheets);
+        let sheet = {};
+        for(let i = 0; i < sheets.length; i++){
+            let str = sheets[i].toLowerCase();
+            if(str === "order" || str === "orders"){
+                sheet = workbook.Sheets[sheets[i]];
+            }
+        }
+
+        const array = xlsx.utils.sheet_to_json(sheet, {
+            header: 1
+        });
+
+        console.log(array);
     }
 }

+ 0 - 1
controllers/recipeData.js

@@ -8,7 +8,6 @@ const helper = require("./helper.js");
 const axios = require("axios");
 const xlsx = require("xlsx");
 const fs = require("fs");
-const ObjectId = require("mongoose").ObjectId;
 
 module.exports = {
     /*

+ 1 - 0
routes.js

@@ -45,6 +45,7 @@ module.exports = function(app){
     app.post("/order", orderData.orderFilter);
     app.post("/order/create", orderData.createOrder);
     app.delete("/order/:id", orderData.removeOrder);
+    app.post("/orders/create/spreadsheet", upload.single("orders"), orderData.createFromSpreadsheet);
 
     //Transactions
     app.post("/transaction", transactionData.getTransactions);

BIN
uploads/e39597df250cbbfc0424e1d943752349


+ 33 - 1
views/dashboardPage/bundle.js

@@ -1506,7 +1506,7 @@ controller = {
                 content = document.getElementById("modalSpreadsheetUpload");
                 content.style.display = "flex";
                 document.getElementById("modalSpreadsheetTitle").innerText = "orders";
-                form.submit = newOrder.submitSpreadsheet;
+                content.onsubmit = newOrder.submitSpreadsheet;
                 break;
         }
     },
@@ -2243,6 +2243,38 @@ let newOrder = {
             case "in": return price * 39.3701; 
             case "ft": return price * 3.2808; 
         }
+    },
+
+    submitSpreadsheet: function(){
+        event.preventDefault();
+        controller.closeModal();
+
+        const file = document.getElementById("spreadsheetInput").files[0];
+        let data = new FormData();
+        data.append("orders", file);
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/orders/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 ORDERS. PLEASE REFRESH THE PAGE.");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }
 

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

@@ -207,7 +207,7 @@ controller = {
                 content = document.getElementById("modalSpreadsheetUpload");
                 content.style.display = "flex";
                 document.getElementById("modalSpreadsheetTitle").innerText = "orders";
-                form.submit = newOrder.submitSpreadsheet;
+                content.onsubmit = newOrder.submitSpreadsheet;
                 break;
         }
     },

+ 32 - 0
views/dashboardPage/js/sidebars/newOrder.js

@@ -158,6 +158,38 @@ let newOrder = {
             case "in": return price * 39.3701; 
             case "ft": return price * 3.2808; 
         }
+    },
+
+    submitSpreadsheet: function(){
+        event.preventDefault();
+        controller.closeModal();
+
+        const file = document.getElementById("spreadsheetInput").files[0];
+        let data = new FormData();
+        data.append("orders", file);
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/orders/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 ORDERS. PLEASE REFRESH THE PAGE.");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }