Sfoglia il codice sorgente

Update frontend to accept spreadsheet for transactions.
Write code to submit a spreadsheet to the backend.
Spreadsheet is not read in the backend yet.

Lee Morgan 5 anni fa
parent
commit
6340dbcdf4

+ 28 - 1
controllers/transactionData.js

@@ -2,8 +2,9 @@ const Transaction = require("../models/transaction");
 const Merchant = require("../models/merchant");
 
 const helper = require("./helper.js");
-
 const ObjectId = require("mongoose").Types.ObjectId;
+const xlsx = require("xlsx");
+const fs = require("fs");
 
 module.exports = {
     /*
@@ -196,6 +197,32 @@ module.exports = {
             });
     },
 
+    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);
+        let sheet = {};
+        for(let i = 0; i < sheets.length; i++){
+            let str = sheets[i].toLowerCase();
+            if(str === "transaction" || str === "transactions"){
+                sheet = workbook.Sheets[sheets[i]];
+            }
+        }
+
+        const array = xlsx.utils.sheet_to_json(sheet, {
+            header: 1
+        });
+
+        console.log(array);
+    },
+
     /*
     GET - Creates 5000 transactions for logged in merchant for testing
     */

+ 1 - 0
routes.js

@@ -52,6 +52,7 @@ module.exports = function(app){
     app.get("/transactions/:from/:to", transactionData.getTransactionsByDate);
     app.post("/transaction/create", transactionData.createTransaction);
     app.delete("/transaction/:id", transactionData.remove);
+    app.post("/transactions/create/spreadsheet", upload.single("transactions"), transactionData.createFromSpreadsheet);
     app.get("/populatesometransactions", transactionData.populate);
 
     //Other

BIN
uploads/5fab6c3092ea20ee989ee97e796327e8


BIN
uploads/e39597df250cbbfc0424e1d943752349


+ 37 - 0
views/dashboardPage/bundle.js

@@ -1504,6 +1504,11 @@ controller = {
                 document.getElementById("modalSpreadsheetTitle").innerText = "orders";
                 content.onsubmit = newOrder.submitSpreadsheet;
                 break;
+            case "transactionSpreadsheet":
+                content = document.getElementById("modalSpreadsheetUpload");
+                content.style.display = "flex";
+                document.getElementById("modalSpreadsheetTitle").innerText = "transactions";
+                content.onsubmit = newTransaction.submitSpreadsheet;
         }
     },
 
@@ -2448,6 +2453,7 @@ let newTransaction = {
     display: function(Transaction){
         let recipeList = document.getElementById("newTransactionRecipes");
         let template = document.getElementById("createTransaction").content.children[0];
+        document.getElementById("transactionFileUpload").addEventListener("click", ()=>{controller.openModal("transactionSpreadsheet")});
 
         while(recipeList.children.length > 0){
             recipeList.removeChild(recipeList.firstChild);
@@ -2538,6 +2544,37 @@ let newTransaction = {
                     loader.style.display = "none";
                 });
         }
+    },
+
+    submitSpreadsheet: function(){
+        event.preventDefault();
+        controller.closeModal();
+
+        const file = document.getElementById("spreadsheetInput").files[0];
+        let data = new FormData();
+        data.append("transactions", file);
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/transactions/create/spreadsheet", {
+            method: "post",
+            body: data
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                if(typeof(response) === "string"){
+                    banner.createError(response);
+                }else{
+
+                }
+            })
+            .catch((err)=>{
+                banner.createError("UNABLE TO DISPLAY NEW TRANSACTIONS.  PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }
 

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

@@ -209,6 +209,11 @@ controller = {
                 document.getElementById("modalSpreadsheetTitle").innerText = "orders";
                 content.onsubmit = newOrder.submitSpreadsheet;
                 break;
+            case "transactionSpreadsheet":
+                content = document.getElementById("modalSpreadsheetUpload");
+                content.style.display = "flex";
+                document.getElementById("modalSpreadsheetTitle").innerText = "transactions";
+                content.onsubmit = newTransaction.submitSpreadsheet;
         }
     },
 

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

@@ -2,6 +2,7 @@ let newTransaction = {
     display: function(Transaction){
         let recipeList = document.getElementById("newTransactionRecipes");
         let template = document.getElementById("createTransaction").content.children[0];
+        document.getElementById("transactionFileUpload").addEventListener("click", ()=>{controller.openModal("transactionSpreadsheet")});
 
         while(recipeList.children.length > 0){
             recipeList.removeChild(recipeList.firstChild);
@@ -92,6 +93,37 @@ let newTransaction = {
                     loader.style.display = "none";
                 });
         }
+    },
+
+    submitSpreadsheet: function(){
+        event.preventDefault();
+        controller.closeModal();
+
+        const file = document.getElementById("spreadsheetInput").files[0];
+        let data = new FormData();
+        data.append("transactions", file);
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/transactions/create/spreadsheet", {
+            method: "post",
+            body: data
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                if(typeof(response) === "string"){
+                    banner.createError(response);
+                }else{
+
+                }
+            })
+            .catch((err)=>{
+                banner.createError("UNABLE TO DISPLAY NEW TRANSACTIONS.  PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }
 

+ 2 - 0
views/dashboardPage/sidebars/newTransaction.ejs

@@ -16,6 +16,8 @@
 
     <button id="submitNewTransaction" class="button">Create</button>
 
+    <button id="transactionFileUpload" class="linkButton">Or, upload a spreadsheet</button>
+
     <template id="createTransaction">
         <div class="newTransactionRecipe">
             <p></p>

+ 1 - 0
views/shared/shared.css

@@ -159,6 +159,7 @@ form{
     font-size: 20px;
     font-weight: bold;
     min-width: 100px;
+    margin: 5px;
 } 
 
     .buttonWithBorder {