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

Add uploading of spreadsheet to backend.
Spreadsheet is converted into an object.

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

+ 6 - 0
controllers/ingredientData.js

@@ -5,6 +5,7 @@ const InventoryAdjustment = require("../models/inventoryAdjustment.js");
 const Helper = require("./helper.js");
 const Helper = require("./helper.js");
 const Validator = require("./validator.js");
 const Validator = require("./validator.js");
 
 
+const xlsx = require("xlsx");
 module.exports = {
 module.exports = {
     //GET - gets a list of all database ingredients
     //GET - gets a list of all database ingredients
     //Returns:
     //Returns:
@@ -195,4 +196,9 @@ module.exports = {
                 return res.json("ERROR: UNABLE TO RETRIEVE USER DATA");
                 return res.json("ERROR: UNABLE TO RETRIEVE USER DATA");
             });
             });
     },
     },
+
+    createFromSpreadsheet: function(req, res){
+        let workbook = xlsx.readFile(req.file.path);
+        console.log(workbook);
+    }
 }
 }

+ 202 - 11
package-lock.json

@@ -105,6 +105,15 @@
       "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
       "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
       "dev": true
       "dev": true
     },
     },
+    "adler-32": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
+      "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
+      "requires": {
+        "exit-on-epipe": "~1.0.1",
+        "printj": "~1.1.0"
+      }
+    },
     "agent-base": {
     "agent-base": {
       "version": "4.3.0",
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
@@ -141,6 +150,11 @@
         "normalize-path": "^2.1.1"
         "normalize-path": "^2.1.1"
       }
       }
     },
     },
+    "append-field": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+      "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
+    },
     "arr-diff": {
     "arr-diff": {
       "version": "4.0.0",
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -701,8 +715,7 @@
     "buffer-from": {
     "buffer-from": {
       "version": "1.1.1",
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-      "dev": true
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
     },
     },
     "buffer-xor": {
     "buffer-xor": {
       "version": "1.0.3",
       "version": "1.0.3",
@@ -730,6 +743,38 @@
         "through2": "^2.0.0"
         "through2": "^2.0.0"
       }
       }
     },
     },
+    "busboy": {
+      "version": "0.2.14",
+      "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+      "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
+      "requires": {
+        "dicer": "0.2.5",
+        "readable-stream": "1.1.x"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        }
+      }
+    },
     "bytes": {
     "bytes": {
       "version": "3.1.0",
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@@ -769,6 +814,16 @@
         "estraverse": "^4.0.0"
         "estraverse": "^4.0.0"
       }
       }
     },
     },
+    "cfb": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz",
+      "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
+      "requires": {
+        "adler-32": "~1.2.0",
+        "crc-32": "~1.2.0",
+        "printj": "~1.1.2"
+      }
+    },
     "chalk": {
     "chalk": {
       "version": "1.1.3",
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -848,6 +903,22 @@
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
       "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
       "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
     },
     },
+    "codepage": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
+      "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
+      "requires": {
+        "commander": "~2.14.1",
+        "exit-on-epipe": "~1.0.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.14.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
+          "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
+        }
+      }
+    },
     "collection-visit": {
     "collection-visit": {
       "version": "1.0.0",
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -960,7 +1031,6 @@
       "version": "1.6.2",
       "version": "1.6.2",
       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-      "dev": true,
       "requires": {
       "requires": {
         "buffer-from": "^1.0.0",
         "buffer-from": "^1.0.0",
         "inherits": "^2.0.3",
         "inherits": "^2.0.3",
@@ -1052,6 +1122,15 @@
       "integrity": "sha1-4zST+2hgqC9xWdgjeEP7+u/uWWI=",
       "integrity": "sha1-4zST+2hgqC9xWdgjeEP7+u/uWWI=",
       "dev": true
       "dev": true
     },
     },
+    "crc-32": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
+      "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
+      "requires": {
+        "exit-on-epipe": "~1.0.1",
+        "printj": "~1.1.0"
+      }
+    },
     "create-ecdh": {
     "create-ecdh": {
       "version": "4.0.3",
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
@@ -1302,6 +1381,38 @@
         "minimist": "^1.1.1"
         "minimist": "^1.1.1"
       }
       }
     },
     },
+    "dicer": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+      "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
+      "requires": {
+        "readable-stream": "1.1.x",
+        "streamsearch": "0.1.2"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        }
+      }
+    },
     "diffie-hellman": {
     "diffie-hellman": {
       "version": "5.0.3",
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
       "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -1671,6 +1782,11 @@
         "safe-buffer": "^5.1.1"
         "safe-buffer": "^5.1.1"
       }
       }
     },
     },
+    "exit-on-epipe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+      "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
+    },
     "expand-brackets": {
     "expand-brackets": {
       "version": "2.1.4",
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -1969,6 +2085,11 @@
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
       "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
       "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
     },
     },
+    "frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
+    },
     "fragment-cache": {
     "fragment-cache": {
       "version": "0.2.1",
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
       "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -2891,8 +3012,7 @@
     "minimist": {
     "minimist": {
       "version": "1.2.5",
       "version": "1.2.5",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
-      "dev": true
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
     },
     },
     "mixin-deep": {
     "mixin-deep": {
       "version": "1.3.2",
       "version": "1.3.2",
@@ -2915,6 +3035,14 @@
         }
         }
       }
       }
     },
     },
+    "mkdirp": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
     "mkdirp-classic": {
     "mkdirp-classic": {
       "version": "0.5.3",
       "version": "0.5.3",
       "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
       "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
@@ -3024,6 +3152,21 @@
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
     },
+    "multer": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
+      "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
+      "requires": {
+        "append-field": "^1.0.0",
+        "busboy": "^0.2.11",
+        "concat-stream": "^1.5.2",
+        "mkdirp": "^0.5.1",
+        "object-assign": "^4.1.1",
+        "on-finished": "^2.3.0",
+        "type-is": "^1.6.4",
+        "xtend": "^4.0.0"
+      }
+    },
     "multi-stage-sourcemap": {
     "multi-stage-sourcemap": {
       "version": "0.2.1",
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz",
       "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz",
@@ -3122,8 +3265,7 @@
     "object-assign": {
     "object-assign": {
       "version": "4.1.1",
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "dev": true
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
     },
     },
     "object-copy": {
     "object-copy": {
       "version": "0.1.0",
       "version": "0.1.0",
@@ -3426,6 +3568,11 @@
       "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
       "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
       "dev": true
       "dev": true
     },
     },
+    "printj": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
+      "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
+    },
     "process": {
     "process": {
       "version": "0.11.10",
       "version": "0.11.10",
       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -4079,6 +4226,14 @@
         "extend-shallow": "^3.0.0"
         "extend-shallow": "^3.0.0"
       }
       }
     },
     },
+    "ssf": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
+      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+      "requires": {
+        "frac": "~1.1.2"
+      }
+    },
     "static-extend": {
     "static-extend": {
       "version": "0.1.2",
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@@ -4182,6 +4337,11 @@
         "readable-stream": "^2.0.2"
         "readable-stream": "^2.0.2"
       }
       }
     },
     },
+    "streamsearch": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+      "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+    },
     "string.prototype.trimend": {
     "string.prototype.trimend": {
       "version": "1.0.1",
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
       "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
@@ -4459,8 +4619,7 @@
     "typedarray": {
     "typedarray": {
       "version": "0.0.6",
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
-      "dev": true
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
     },
     "uglifyify": {
     "uglifyify": {
       "version": "5.0.2",
       "version": "5.0.2",
@@ -4693,6 +4852,16 @@
       "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz",
       "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz",
       "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE="
       "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE="
     },
     },
+    "wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
+    },
+    "word": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
+    },
     "word-wrap": {
     "word-wrap": {
       "version": "1.2.3",
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -4710,6 +4879,29 @@
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "dev": true
       "dev": true
     },
     },
+    "xlsx": {
+      "version": "0.16.8",
+      "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.8.tgz",
+      "integrity": "sha512-qWub4YCn0xLEGHI7WWhk6IJ73MDu7sPSJQImxN6/LiI8wsHi0hUhICEDbyqBT+jgFgORZxrii0HvhNSwBNAPoQ==",
+      "requires": {
+        "adler-32": "~1.2.0",
+        "cfb": "^1.1.4",
+        "codepage": "~1.14.0",
+        "commander": "~2.17.1",
+        "crc-32": "~1.2.0",
+        "exit-on-epipe": "~1.0.1",
+        "ssf": "~0.11.2",
+        "wmf": "~1.0.1",
+        "word": "~0.3.0"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+        }
+      }
+    },
     "xregexp": {
     "xregexp": {
       "version": "2.0.0",
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
       "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
@@ -4718,8 +4910,7 @@
     "xtend": {
     "xtend": {
       "version": "4.0.2",
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-      "dev": true
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
     },
     },
     "yallist": {
     "yallist": {
       "version": "3.1.1",
       "version": "3.1.1",

+ 3 - 1
package.json

@@ -28,7 +28,9 @@
     "ejs": "^2.7.4",
     "ejs": "^2.7.4",
     "express": "^4.17.1",
     "express": "^4.17.1",
     "mailgun-js": "^0.22.0",
     "mailgun-js": "^0.22.0",
-    "mongoose": "^5.9.26"
+    "mongoose": "^5.9.26",
+    "multer": "^1.4.2",
+    "xlsx": "^0.16.8"
   },
   },
   "devDependencies": {
   "devDependencies": {
     "browserify": "^16.5.1",
     "browserify": "^16.5.1",

+ 4 - 0
routes.js

@@ -9,6 +9,9 @@ const informationPages = require("./controllers/informationPages.js");
 const emailVerification = require("./controllers/emailVerification.js");
 const emailVerification = require("./controllers/emailVerification.js");
 const passwordReset = require("./controllers/passwordReset.js");
 const passwordReset = require("./controllers/passwordReset.js");
 
 
+const multer = require("multer");
+const upload = multer({dest: "uploads/"});
+
 module.exports = function(app){
 module.exports = function(app){
     //Render page
     //Render page
     app.get("/", renderer.landingPage);
     app.get("/", renderer.landingPage);
@@ -28,6 +31,7 @@ module.exports = function(app){
     app.post("/ingredients/create", ingredientData.createIngredient);  //also adds to merchant
     app.post("/ingredients/create", ingredientData.createIngredient);  //also adds to merchant
     app.put("/ingredients/update", ingredientData.updateIngredient);
     app.put("/ingredients/update", ingredientData.updateIngredient);
     app.delete("/ingredients/remove/:id", ingredientData.removeIngredient);
     app.delete("/ingredients/remove/:id", ingredientData.removeIngredient);
+    app.post("/ingredients/create/spreadsheet", upload.single("spreadsheet"), ingredientData.createFromSpreadsheet);
 
 
     //Recipes
     //Recipes
     app.post("/recipe/create", recipeData.createRecipe);
     app.post("/recipe/create", recipeData.createRecipe);

BIN
uploads/06f156780f80344c4da87d5d12809747


BIN
uploads/145956998a2ad3cc4be533eb41a6b1fc


BIN
uploads/3f2c59738a8c1bcddbcc25265d0e1405


BIN
uploads/584cb3d9fe657898bef727bc73d34e55


BIN
uploads/66d5202b8be4ce949808ddd72c05054b


BIN
uploads/70b610b5c2c581d9945c68a7a2fe8f87


BIN
uploads/7688358ba3d77ef26faac0f37386bac3


BIN
uploads/7ea167d8002e6c8f5ac2760d2d68fcbf


BIN
uploads/9f2902489d674ddf08ff1062802f9ee0


BIN
uploads/b8a94de5f7f385063ff19d6e39da3b0f


BIN
uploads/be2657e6c516f0666a08ff73023d565f


BIN
uploads/c9e487c3ba33eaa15462323ca20a2f8a


BIN
uploads/e42c55e743efe72c0dfcc0679e28bfe6


+ 16 - 0
views/dashboardPage/bundle.js

@@ -1915,6 +1915,7 @@ let newIngredient = {
 
 
         selector.onchange = ()=>{this.unitChange()};
         selector.onchange = ()=>{this.unitChange()};
         document.getElementById("submitNewIng").onclick = ()=>{this.submit(Ingredient)};
         document.getElementById("submitNewIng").onclick = ()=>{this.submit(Ingredient)};
+        document.getElementById("submitFile").addEventListener("click", this.submitFile);
     },
     },
 
 
     unitChange: function(){
     unitChange: function(){
@@ -1994,7 +1995,22 @@ let newIngredient = {
             });
             });
     },
     },
 
 
+    submitFile: function(){
+        const file = document.getElementById("file").files[0];
+        let data = new FormData();
 
 
+        data.append("spreadsheet", file);
+        fetch("/ingredients/create/spreadsheet", {
+            method: "post",
+            body: data,
+        })
+            .then((response)=>{
+                console.log("did things");
+            })
+            .catch((err)=>{
+                console.log(err);
+            });
+    }
 }
 }
 
 
 module.exports = newIngredient;
 module.exports = newIngredient;

+ 16 - 0
views/dashboardPage/js/sidebars/newIngredient.js

@@ -10,6 +10,7 @@ let newIngredient = {
 
 
         selector.onchange = ()=>{this.unitChange()};
         selector.onchange = ()=>{this.unitChange()};
         document.getElementById("submitNewIng").onclick = ()=>{this.submit(Ingredient)};
         document.getElementById("submitNewIng").onclick = ()=>{this.submit(Ingredient)};
+        document.getElementById("submitFile").addEventListener("click", this.submitFile);
     },
     },
 
 
     unitChange: function(){
     unitChange: function(){
@@ -89,7 +90,22 @@ let newIngredient = {
             });
             });
     },
     },
 
 
+    submitFile: function(){
+        const file = document.getElementById("file").files[0];
+        let data = new FormData();
 
 
+        data.append("spreadsheet", file);
+        fetch("/ingredients/create/spreadsheet", {
+            method: "post",
+            body: data,
+        })
+            .then((response)=>{
+                console.log("did things");
+            })
+            .catch((err)=>{
+                console.log(err);
+            });
+    }
 }
 }
 
 
 module.exports = newIngredient;
 module.exports = newIngredient;

+ 4 - 0
views/dashboardPage/sidebars/newIngredient.ejs

@@ -74,4 +74,8 @@
     </label>
     </label>
 
 
     <button id="submitNewIng" class="button">CREATE</button>
     <button id="submitNewIng" class="button">CREATE</button>
+
+    <input id="file" type="file">
+
+    <button id="submitFile" class="button">SUBMIT FILE</button>
 </div>
 </div>