\n ),\n threshold: 10240,\n minRatio: 0.8\n })\n )\n}\n\nif (config.build.bundleAnalyzerReport) {\n const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin\n webpackConfig.plugins.push(new BundleAnalyzerPlugin())\n}\n\nmodule.exports = webpackConfig\n","id":"mod_9JCrPuBQqVGRXPdDGKDG8h","is_binary":false,"title":"webpack.prod.conf.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"SJOgJtndAa7","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"'use strict'\nconst merge = require('webpack-merge')\nconst prodEnv = require('.\u002Fprod.env')\n\nmodule.exports = merge(prodEnv, {\n NODE_ENV: '\"development\"'\n})\n","id":"mod_R2zUwGkKE5NCCxwMKCpe92","is_binary":false,"title":"dev.env.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HJtlkthu06Q","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"r1WyF3_067"},{"code":"\u003Ctemplate\u003E\n \u003Cv-container\u003E\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-card\u003E\n \u003Cv-card-text\u003E\n \u003Cv-container\u003E\n \u003Ch2 class=\"mb-2\"\u003EEdit User\u003C\u002Fh2\u003E\n \u003Cform @submit.prevent=\"onEditUser\"\u003E\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"name\"\n label=\"Name\"\n id=\"name\"\n type=\"text\"\n v-model=\"user.name\"\n disabled\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"email\"\n label=\"Email\"\n id=\"email\"\n type=\"email\"\n v-model=\"user.email\"\n disabled\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"authLevel\"\n label=\"Auth Level\"\n id=\"authLevel\"\n type=\"text\"\n v-model=\"user.authLevel\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-btn small class=\"primary\" type=\"submit\"\n \u003ESave changes\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn\n small\n class=\"secondary\"\n @click=\"$router.push('\u002Fusers');\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fv-container\u003E\n \u003C\u002Fv-card-text\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fv-container\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nexport default {\n props: [\"user\"],\n data() {\n return {\n name: \"\",\n email: \"\",\n authLevel: \"\"\n };\n },\n methods: {\n onEditUser() {\n const editedUser = {\n name: this.user.name,\n authLevel: document.getElementById(\"authLevel\").value,\n email: this.user.email,\n userId: this.user.userId\n };\n this.$store.state.loc = \"\u002Fusers\";\n this.$store.dispatch(\"editUser\", editedUser);\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\u003C\u002Fstyle\u003E\n","id":"mod_RwU359Scr2gEk13zUMnxYa","is_binary":false,"title":"editUser.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"Sk2bJYn_0am","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cv-alert :color=\"type\" icon=\"info\" dismissible @input=\"onClose\" :value=\"true\"\u003E\n {{ msg }}\n \u003C\u002Fv-alert\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nexport default {\n props: [\"msg\", \"type\"],\n methods: {\n onClose() {\n this.$emit(\"dismissed\");\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\u003C\u002Fstyle\u003E\n","id":"mod_WuTC4xgFRgvoRd8Tvb5KE3","is_binary":false,"title":"Alert.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HyaZJF2_RpQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"SyryY3d0TX"},{"code":"import * as getters from \".\u002Fgetters\";\nimport * as actions from \".\u002Factions\";\nimport * as mutations from \".\u002Fmutations\";\n\nconst state = {\n events: [{ eventA: \"a\" }]\n};\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations\n};\n","id":"mod_E7xunkEUvFbwrKd5VvuNLh","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"jJ21Y","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"O7PGN"},{"code":"const computed = {\n computed: {\n pages() {\n if (\n this.pagination.rowsPerPage == null ||\n this.pagination.totalItems == null\n )\n return 0;\n\n return Math.ceil(\n this.pagination.totalItems \u002F this.pagination.rowsPerPage\n );\n },\n printable() {\n return this.$store.state.hideNav;\n }\n }\n};\n\nexport default computed;\n","id":"mod_QCr9kDTY6gEFSdGuyPGZa5","is_binary":false,"title":"computed.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ry1fkY3uC6Q","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"By8JFhd06Q"},{"code":"\n\n\u003Cthead\u003E\n \u003Ctr\u003E\n \u003Cth\u003EProduct\u003C\u002Fth\u003E\n \u003Cth\u003EPacking\u003C\u002Fth\u003E\n \u003Cth\u003Emarket Price\u003C\u002Fth\u003E\n \u003Cth\u003EAverage Buying Price\u003C\u002Fth\u003E\n \u003Cth\u003EProfit Margin\u003C\u002Fth\u003E\n \u003Cth\u003EQuantity\u003C\u002Fth\u003E\n \u003Cth\u003ETotal Value\u003C\u002Fth\u003E\n \u003Cth\u003EStore Location\u003C\u002Fth\u003E\n \u003Cth\u003EStore Section\u003C\u002Fth\u003E\n \u003C\u002Ftr\u003E\n\u003C\u002Fthead\u003E\n\n \u003Ctbody\u003E\n \u003Ctr v-for=\"row in rows\"\u003E\n \u003Ctd\u003E\n \u003C!-- Product --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.productName }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Packing --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.packing }} \u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Market Price --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.marketPrice }} \u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Buying Price --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.buyingPrice }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Profit Margin --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.margin }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Quantity --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.quantity }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.totalValue }} \u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n\n \u003Ctd\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.storeLocation }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003C!-- Store Section --\u003E\n \u003Ctd\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.storeSection }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Ftbody\u003E\n\n\n\n\n\n\u003Csection class=\"content\" id=\"evaluate\" style=\"background-color:#fff; padding-bottom:50px;\" v-cloak\u003E\n \u003Cform action=\"{{ url('\u002Ftest') }}\" method=\"post\"\u003E\n \u003Cdiv class=\"subjects-content\"\u003E\n \u003Ch3 class=\"subjects-trimester-title\"\u003ESelf Evaluation Page\u003C\u002Fh3\u003E\n\n \u003Cdiv class=\"self-evaluation-rows\"\u003E\n Number of Rows:  \n \u003Cinput v-model=\"number\" type=\"number\" min=\"1\" max=\"10\" name=\"rows\" class=\"rows-textbox\" number\u003E\n \u003Cdiv class=\"btn btn-blueviolet btn-inline-block btn-create\" @click=\"addRow(number)\" v-show=\"rows.length \u003C 10\" \u003EAdd Row\u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\n \u003Cdiv class=\"box-body box-self-evaluation\"\u003E\n \u003Ctable id=\"example2\" class=\"table table-hover table-striped sortable\"\u003E\n \u003Cthead\u003E\n \u003Ctr\u003E\n \u003Cth\u003ESubject Area\u003C\u002Fth\u003E\n \u003Cth\u003ESection\u003C\u002Fth\u003E\n \u003Cth\u003EGrade\u003C\u002Fth\u003E\n \u003Cth\u003ECourse Title\u003C\u002Fth\u003E\n \u003Cth\u003ERemove\u003C\u002Fth\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Fthead\u003E\n\n \u003Ctbody\u003E\n \u003Ctr v-for=\"row in rows\"\u003E\n \u003Ctd\u003E\n \u003Cselect v-model=\"row.subject\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\u003E\u003Cbr\u003E\n \u003Coption value=\"ENGLISH\"\u003EENGLISH\u003C\u002Foption\u003E\n \u003Coption value=\"MATH\"\u003EMATH\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cselect v-model=\"row.section\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\u003E\u003Cbr\u003E\n \u003Coption value=\"IP\"\u003EIP\u003C\u002Foption\u003E\n \u003Coption value=\"IQ\"\u003EIQ\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cselect name=\"NAME THIS BASED ON THE SUBJECT CODE SELECTED VALUE\" v-model=\"row.grade\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\u003E\u003Cbr\u003E\n \u003Coption value=\"A+\"\u003EA+\u003C\u002Foption\u003E\n \u003Coption value=\"A\"\u003EA\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\u003Cspan\u003E \u003C\u002Fspan\u003E\u003C\u002Ftd\u003E\n \u003Ctd\u003E\u003C\u002Ftd\u003E\n \u003C\u002Ftr\u003E \n \u003C\u002Ftbody\u003E\n \u003C\u002Ftable\u003E \n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"confirmation-buttons-self-evaluation\"\u003E\n\n \u003Cpre\u003E{{ saveData }}\u003C\u002Fpre\u003E\n \u003Cinput type=\"hidden\" value=\"{{ Session::token() }}\" name=\"_token\"\u003E\n \u003C\u002Fform\u003E\n\n \u003C\u002Fdiv\u003E \n\n\u003C\u002Fsection\u003E\n\n\n\n\u003C!---table with add row----\u003E\n \u003Ctemplate\u003E\n \u003Cdiv id=\"BulkInput\" class=\"subjects-content\"\u003E\n \u003Ch3 class=\"subjects-trimester-title\"\u003EInventory Management System\u003C\u002Fh3\u003E\n\n \u003Cdiv class=\"self-evaluation-rows\"\u003E\n Number of Rows:  \n \u003Cinput\n v-model.number=\"rownum\"\n type=\"number\"\n min=\"1\"\n max=\"10\"\n name=\"rows\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003Cdiv\n class=\"btn btn-blueviolet btn-inline-block btn-create\"\n @click=\"addRow(rownum);\"\n v-show=\"rows.length \u003C 10\"\n \u003E\n Add Row\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\n \u003Cdiv class=\"box-body box-self-evaluation\"\u003E\n \u003Ctable id=\"example2\" class=\"table table-hover table-striped sortable\"\u003E\n \u003Cthead\u003E\n \u003Ctr\u003E\n \u003Cth\u003ESubject Area\u003C\u002Fth\u003E\n \u003Cth\u003ESection\u003C\u002Fth\u003E\n \u003Cth\u003EGrade\u003C\u002Fth\u003E\n \u003Cth\u003ECourse Title\u003C\u002Fth\u003E\n \u003Cth\u003ERemove\u003C\u002Fth\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Fthead\u003E\n\n \u003Ctbody\u003E\n \u003Ctr v-for=\"row in rows\"\u003E\n \u003Ctd\u003E\n \u003Cselect v-model=\"row.subject\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"ENGLISH\"\u003EENGLISH\u003C\u002Foption\u003E\n \u003Coption value=\"MATH\"\u003EMATH\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cselect v-model=\"row.section\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"IP\"\u003EIP\u003C\u002Foption\u003E\n \u003Coption value=\"IQ\"\u003EIQ\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cselect\n name=\"NAME THIS BASED ON THE SUBJECT CODE SELECTED VALUE\"\n v-model=\"row.grade\"\n \u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"A+\"\u003EA+\u003C\u002Foption\u003E\n \u003Coption value=\"A\"\u003EA\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\u003Cspan\u003E \u003C\u002Fspan\u003E\u003C\u002Ftd\u003E\n \u003Ctd\u003E\u003C\u002Ftd\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Ftbody\u003E\n \u003C\u002Ftable\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n \u003Cscript\u003E\n export default {\n name: \"BulkInput\",\n data() {\n return {rows: [], saveData: null, rownum: 1 };\n },\n methods: {\n addRow: function(count) {\n var numRows = this.rows.length;\n \n if (numRows \u003E= 10) return;\n \n for (var i = 1; i \u003C= count; i++) {\n this.rows.push({});\n if (++numRows == 10) break;\n }\n },\n removeRow: function(row) {\n \u002F\u002Fconsole.log(row);\n this.rows.$remove(row);\n }\n }\n };\n\u003C\u002Fscript\u003E\n","id":"mod_VxeY1CrfC3KpSu7vGUyubd","is_binary":false,"title":"DumpScript","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-01-19T05:51:33","upload_id":null,"shortid":"gPylr","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"import * as firebase from \"firebase\";\nimport Parse from \"parse\";\nimport router from \"..\u002Frouter\u002Findex\";\n\nexport const signIn = ({ commit, dispatch }, user) =\u003E {\n console.log(\"action: signIn\");\n commit(\"setLoading\", true);\n Parse.User.logIn(user.email, user.password)\n .then(user =\u003E {\n commit(\"clearError\");\n\n console.log(\n \"User logged in successful with username: \" +\n user.get(\"username\") +\n \" and email: \" +\n user.get(\"email\")\n );\n dispatch(\"getUserInfo\", user.uid);\n })\n .catch(error =\u003E {\n console.log(\"login error\");\n commit(\"setLoading\", false);\n commit(\"setError\", error.message);\n });\n};\n\nexport const getUserInfo = ({ commit, dispatch }, userId) =\u003E {\n console.log(\"get user info\");\n firebase\n .database()\n .ref(\"users\")\n .child(userId)\n .once(\"value\")\n .then(data =\u003E {\n const objUser = data.val();\n commit(\"setUser\", objUser);\n if (objUser.authLevel === \"1\") {\n dispatch(\"loadUsers\");\n }\n dispatch(\"loadProducts\");\n });\n};\n\nexport const loadUsers = ({ commit }) =\u003E {\n console.log(\"load user from db\");\n firebase\n .database()\n .ref(\"users\")\n .once(\"value\")\n .then(data =\u003E {\n const users = [];\n const obj = data.val();\n for (let key in obj) {\n users.push({\n userId: obj[key].userId,\n name: obj[key].name,\n email: obj[key].email,\n authLevel: obj[key].authLevel\n });\n }\n commit(\"loadUsers\", users);\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const loadProducts = ({ commit, state }) =\u003E {\n console.log(\"load products\");\n firebase\n .database()\n .ref(\"products\")\n .once(\"value\")\n .then(data =\u003E {\n const objProducts = data.val();\n const items = [];\n let reorderDate = \"\";\n let lastEditDate = \"\";\n let sbd = \"\";\n let tempSellByDate = \"\";\n let creatorId = \"\";\n let editedBy = \"\";\n let onReorderList = \"\";\n\n if (state.user.authLevel === \"1\") {\n \u002F\u002F 10 years in the future, created for sorting purposes\n tempSellByDate = state.defaultSellByDate;\n } else {\n tempSellByDate = \"\";\n }\n\n \u002F\u002F standardize each item with elements of the legacy db\n\n Object.keys(objProducts).forEach(key =\u003E {\n objProducts[key].reorderDate === undefined\n ? (reorderDate = \"\")\n : (reorderDate = objProducts[key].reorderDate);\n objProducts[key].onReorderList === undefined\n ? (onReorderList = false)\n : (onReorderList = objProducts[key].onReorderList);\n objProducts[key].lastEditDate === undefined\n ? (lastEditDate = \"\")\n : (lastEditDate = objProducts[key].lastEditDate);\n\n \u002F\u002F fill all blank sellBy dates for date sorting...these will still show as blank on products pages\n objProducts[key].SellbyDate === \"\"\n ? (sbd = tempSellByDate)\n : (sbd = objProducts[key].SellbyDate);\n\n objProducts[key].creatorId === undefined\n ? (creatorId = \"\")\n : (creatorId = objProducts[key].creatorId);\n objProducts[key].editedBy === undefined\n ? (editedBy = \"\")\n : (editedBy = objProducts[key].editedBy);\n\n items.push({\n id: key,\n brandName: objProducts[key].Brand,\n receiptAlias: objProducts[key].ReceiptAlias,\n scancode: objProducts[key].Scancode,\n SellbyDate: sbd,\n creatorId: creatorId,\n editedBy: editedBy,\n lastEditDate: lastEditDate,\n reorderDate: reorderDate,\n onReorderList: onReorderList\n });\n });\n\n commit(\"loadProducts\", items);\n commit(\"setLoading\", false);\n if (state.loc !== \"\u002FaddNewItem\") {\n router.push(state.loc);\n }\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const signUp = ({ commit, dispatch }, newUser) =\u003E {\n console.log(\"action: signup\");\n commit(\"setLoading\", true);\n firebase\n .auth()\n .createUserWithEmailAndPassword(newUser.email, newUser.password)\n .then(user =\u003E {\n commit(\"setLoading\", false);\n commit(\"clearError\");\n const currUser = {\n userId: user.uid,\n name: newUser.name,\n email: user.email,\n authLevel: \"3\"\n };\n dispatch(\"addNewUser\", currUser);\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const addNewUser = ({ commit, dispatch }, currUser) =\u003E {\n console.log(\"action: addnewuser\");\n firebase\n .database()\n .ref(\"users\")\n .child(currUser.userId)\n .update(currUser)\n .then(data =\u003E {\n commit(\"clearAll\");\n dispatch(\"getUserInfo\", currUser.userId);\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const editUser = ({ commit }, user) =\u003E {\n console.log(\"action: edit user\");\n firebase\n .database()\n .ref(\"users\")\n .child(user.userId)\n .update(user)\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n console.log(error);\n });\n router.replace(\"\u002Fusers\");\n};\n\nexport const addNewItem = ({ commit, dispatch }, newItem) =\u003E {\n firebase\n .database()\n .ref(\"products\")\n .push(newItem)\n .then(data =\u003E {\n dispatch(\"loadProducts\");\n commit(\"setScancodeStatus\", false);\n commit(\"clearMessage\");\n commit(\"setMessageSuccess\", \"Item sucessfully added!\");\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n });\n};\n\nexport const editItem = ({ commit, dispatch }, item) =\u003E {\n console.log(\"action: edit item\");\n firebase\n .database()\n .ref(\"products\")\n .child(item.id)\n .update(item)\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n console.log(error);\n });\n dispatch(\"loadProducts\");\n};\n\nexport const reorderItem = ({ commit, dispatch }, reorderedItem) =\u003E {\n console.log(\"action: reorder Item\");\n firebase\n .database()\n .ref(\"products\")\n .child(reorderedItem.id)\n .update(reorderedItem)\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n console.log(error);\n });\n dispatch(\"loadProducts\");\n};\n\nexport const setLoadedScancode = ({ commit, state }, objItem) =\u003E {\n console.log(\"action: setLoadedScancode\");\n if (objItem.scancodeFound) {\n commit(\"setMessage\", \"Item found. Enter new Sell By date.\");\n let product = state.products.find(el =\u003E el.scancode === objItem.sc);\n commit(\"setScancodeStatus\", true);\n commit(\"loadProduct\", product);\n } else {\n commit(\"setMessage\", \"Product not found. Add item.\");\n commit(\"setAddItem\", true);\n commit(\"setLoadedScancode\", objItem.sc);\n }\n};\n\nexport const addOrder = ({ commit, state, dispatch }, objItem) =\u003E {\n console.log(\"action: addOrder\");\n if (objItem.scancodeFound) {\n let product = state.products.find(el =\u003E el.scancode === objItem.sc);\n let objItemRestock = { itemId: product.id, action: \"add\" };\n dispatch(\"setRestockStatus\", objItemRestock);\n router.push(\"\u002Freorders\");\n commit(\"setMessageSuccess\", \"Item added to list.\");\n } else {\n commit(\"setMessage\", \"Product not found!\");\n setTimeout(() =\u003E {\n commit(\"clearMessage\");\n }, 3500);\n }\n};\n\nexport const setRestockStatus = ({ commit, dispatch }, objItemRestock) =\u003E {\n console.log(\"action: setRestockStatus\");\n commit(\"setLoading\", true);\n let entryRef = firebase\n .database()\n .ref(\"products\")\n .child(objItemRestock.itemId);\n let restockStatus = true;\n objItemRestock.action === \"remove\" ? (restockStatus = false) : \"\";\n return entryRef\n .update({ onReorderList: restockStatus })\n .then(() =\u003E {\n console.log(\"Document successfully updated!\");\n dispatch(\"loadProducts\");\n })\n .catch(error =\u003E {\n console.error(\"Error updating document: \", error);\n });\n};\n\nexport const clearRestockList = ({ commit, dispatch, getters }) =\u003E {\n console.log(\"action: clearREstocklist\");\n commit(\"setLoading\", true);\n getters.reorderedItems.forEach(el =\u003E {\n let itemId = el.id;\n let entryRef = firebase\n .database()\n .ref(\"products\")\n .child(itemId);\n return entryRef.update({\n onReorderList: false\n });\n });\n dispatch(\"loadProducts\");\n};\n","id":"mod_FgMNH3f77FWUkB6ZwtN1Gk","is_binary":false,"title":"actions.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ByMMkYh_06Q","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"E0r2k"},{"code":"import * as getters from \".\u002Fgetters\";\nimport * as actions from \".\u002Factions\";\nimport * as mutations from \".\u002Fmutations\";\n\nconst state = {\n products: [{ productA: \"a\" }]\n};\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations\n};\n","id":"mod_Qk35HNEXvDB3wrvJDZn4ka","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"lkVLl","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"E0r2k"},{"code":"","id":"mod_MfjG9L2Y7Xk7J3Lmj7JosE","is_binary":false,"title":"mutations.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"22Wrz","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"O7PGN"},{"code":"","id":"mod_KrfLCwQmuGSwxEr9MZrjeZ","is_binary":false,"title":"getters.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"mwW99","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"O7PGN"},{"code":"","id":"mod_AuuFfENyFQBUZbWmwbEkcx","is_binary":false,"title":"actions.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"MxJ5m","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"O7PGN"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv class=\"toggle\" :class=\"[this.state_class]\" @click.self=\"onClick\"\u003E\n \u003Cdiv class=\"draggable\" @mousedown.prevent=\"dragStart\" :style=\"style\"\u003E\u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\u003Cscript\u003E\nexport default {\n name: \"toggle\",\n props: {\n value: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n width: 100,\n state: false,\n pressed: 0,\n position: 0\n };\n },\n mounted() {\n this.toggle(this.value);\n },\n computed: {\n style() {\n return {\n transform: `translateX(${this.pos_percentage})`\n };\n },\n pos_percentage() {\n return `${(this.position \u002F this.width) * 100}%`;\n },\n state_class() {\n if (this.state) {\n return \"active\";\n }\n }\n },\n watch: {\n position() {\n this.state = this.position \u003E= 50;\n }\n },\n methods: {\n onClick() {\n this.toggle(!this.state);\n this.emit();\n },\n toggle(state) {\n this.state = state;\n this.position = !state ? 0 : 100;\n },\n dragging(e) {\n const pos = e.clientX - this.$el.offsetLeft;\n const percent = (pos \u002F this.width) * 100;\n this.position = percent \u003C= 0 ? 0 : percent \u003E= 100 ? 100 : percent;\n },\n dragStart(e) {\n this.startTimer();\n window.addEventListener(\"mousemove\", this.dragging);\n window.addEventListener(\"mouseup\", this.dragStop);\n },\n dragStop() {\n window.removeEventListener(\"mousemove\", this.dragging);\n window.removeEventListener(\"mouseup\", this.dragStop);\n this.resolvePosition();\n clearInterval(this.$options.interval);\n if (this.pressed \u003C 30) {\n this.toggle(!this.state);\n }\n this.pressed = 0;\n this.emit();\n },\n startTimer() {\n this.$options.interval = setInterval(() =\u003E {\n this.pressed++;\n }, 1);\n },\n resolvePosition() {\n this.position = this.state ? 100 : 0;\n },\n emit() {\n this.$emit(\"input\", this.state);\n }\n }\n};\n\u003C\u002Fscript\u003E\n\u003Cstyle\u003E\n.toggle {\n width: $width;\n height: $button-size;\n background: $background;\n border: 2px solid $border-color;\n border-radius: 200px;\n padding: 2px;\n transition: background 0.6s;\n\n .draggable {\n width: $button-size;\n height: $button-size;\n background: $button-color;\n border-radius: 100%;\n box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.6);\n transform: translateX(0%);\n transition: transform 0.05s ease-in-out;\n }\n\n &.active {\n background: $background-active;\n transition: background 0.6s;\n }\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_WDdKYpi5ZDPX5LHv6SZHP8","is_binary":false,"title":"toggleButton.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"NR4Zv","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u002F\u002F https:\u002F\u002Feslint.org\u002Fdocs\u002Fuser-guide\u002Fconfiguring\n\nmodule.exports = {\n root: true,\n parserOptions: {\n parser: 'babel-eslint'\n },\n env: {\n browser: true,\n },\n \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Feslint-plugin-vue#priority-a-essential-error-prevention\n \u002F\u002F consider switching to `plugin:vue\u002Fstrongly-recommended` or `plugin:vue\u002Frecommended` for stricter rules.\n extends: ['plugin:vue\u002Fessential', 'airbnb-base'],\n \u002F\u002F required to lint *.vue files\n plugins: [\n 'vue'\n ],\n \u002F\u002F check if imports actually resolve\n settings: {\n 'import\u002Fresolver': {\n webpack: {\n config: 'build\u002Fwebpack.base.conf.js'\n }\n }\n },\n \u002F\u002F add your custom rules here\n rules: {\n \u002F\u002F don't require .vue extension when importing\n 'import\u002Fextensions': ['error', 'always', {\n js: 'never',\n vue: 'never'\n }],\n \u002F\u002F disallow reassignment of function parameters\n \u002F\u002F disallow parameter object manipulation except for specific exclusions\n 'no-param-reassign': ['error', {\n props: true,\n ignorePropertyModificationsFor: [\n 'state', \u002F\u002F for vuex state\n 'acc', \u002F\u002F for reduce accumulators\n 'e' \u002F\u002F for e.returnvalue\n ]\n }],\n \u002F\u002F allow optionalDependencies\n 'import\u002Fno-extraneous-dependencies': ['error', {\n optionalDependencies: ['test\u002Funit\u002Findex.js']\n }],\n \u002F\u002F allow debugger during development\n 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'\n }\n}\n","id":"mod_SYPReZtPqBJ7q2MN2RDmem","is_binary":false,"title":".eslintrc.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"B1T1FnuCaQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"\u003Ctemplate\u003E\n \u003Cdiv id=\"login\"\u003E\n \u003Ch1\u003ELogin\u003C\u002Fh1\u003E\n \u003Cinput\n type=\"text\"\n name=\"username\"\n v-model=\"input.username\"\n placeholder=\"Username\"\n \u002F\u003E\n \u003Cinput\n type=\"password\"\n name=\"password\"\n v-model=\"input.password\"\n placeholder=\"Password\"\n \u002F\u003E\n \u003Cbutton type=\"button\" v-on:click=\"login();\"\u003ELogin\u003C\u002Fbutton\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nexport default {\n name: \"Login\",\n data() {\n return {\n input: {\n username: \"\",\n password: \"\"\n }\n };\n },\n methods: {\n login() {\n if (this.input.username != \"\" && this.input.password != \"\") {\n if (\n this.input.username == this.$parent.mockAccount.username &&\n this.input.password == this.$parent.mockAccount.password\n ) {\n this.$emit(\"authenticated\", true);\n this.$router.replace({ name: \"secure\" });\n } else {\n console.log(\"The username and \u002F or password is incorrect\");\n }\n } else {\n console.log(\"A username and password must be present\");\n }\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n#login {\n width: 500px;\n border: 1px solid #cccccc;\n background-color: #ffffff;\n margin: auto;\n margin-top: 200px;\n padding: 20px;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_312aP72ePShs3AirLPUyUM","is_binary":false,"title":"SignIn.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ryuZ1t2O067","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"# test-project\n\n\u003E This project is a work-in-progress project at its beginning stage.\n\u003E It is not intended to be used on any environment at this stage.\n\n## Build Setup\n\n```bash\n# install dependencies\nnpm install\n\n# serve with hot reload at localhost:8080\nnpm run dev\n\n# build for production with minification\nnpm run build\n\n# build for production and view the bundle analyzer report\nnpm run build --report\n\n# run unit tests\nnpm run unit\n\n# run all tests\nnpm test\n```\n\nFor a detailed explanation on how things work, check out the [guide](http:\u002F\u002Fvuejs-templates.github.io\u002Fwebpack\u002F) and [docs for vue-loader](http:\u002F\u002Fvuejs.github.io\u002Fvue-loader).\n","id":"mod_C9qvAjdFshMz2D12zcY3sp","is_binary":false,"title":"README.md","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"SyglyF2OApX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"","id":"mod_P3TWYejP2TbnEmGvRZJtwp","is_binary":false,"title":".keep","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HkKyF2O06m","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"BkJt3_Cam"},{"code":"{\n \"presets\": [\n [\"env\", {\n \"modules\": false,\n \"targets\": {\n \"browsers\": [\"\u003E 1%\", \"last 2 versions\", \"not ie \u003C= 8\"]\n }\n }],\n \"stage-2\"\n ],\n \"plugins\": [\"transform-vue-jsx\", \"transform-runtime\"],\n \"env\": {\n \"test\": {\n \"presets\": [\"env\", \"stage-2\"],\n \"plugins\": [\"transform-vue-jsx\", \"transform-es2015-modules-commonjs\", \"dynamic-import-node\"]\n }\n }\n}\n","id":"mod_3WnEiMWVYaU7Zpj8mE9sHD","is_binary":false,"title":".babelrc","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"B1c1t2uApX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n","id":"mod_BM2hMuHoQJfMFuqefg6tc2","is_binary":false,"title":".editorconfig","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"Bko1F2_R6Q","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"\u002Fbuild\u002F\n\u002Fconfig\u002F\n\u002Fdist\u002F\n\u002F*.js\n\u002Ftest\u002Funit\u002Fcoverage\u002F\n","id":"mod_7jwQ8oqFfPcoJkicucw4tK","is_binary":false,"title":".eslintignore","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"B1hyYnd0am","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"'use strict'\nrequire('.\u002Fcheck-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nconst ora = require('ora')\nconst rm = require('rimraf')\nconst path = require('path')\nconst chalk = require('chalk')\nconst webpack = require('webpack')\nconst config = require('..\u002Fconfig')\nconst webpackConfig = require('.\u002Fwebpack.prod.conf')\n\nconst spinner = ora('building for production...')\nspinner.start()\n\nrm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err =\u003E {\n if (err) throw err\n webpack(webpackConfig, (err, stats) =\u003E {\n spinner.stop()\n if (err) throw err\n process.stdout.write(stats.toString({\n colors: true,\n modules: false,\n children: false, \u002F\u002F If you are using ts-loader, setting this to true will make TypeScript errors show up during build.\n chunks: false,\n chunkModules: false\n }) + '\\n\\n')\n\n if (stats.hasErrors()) {\n console.log(chalk.red(' Build failed with errors.\\n'))\n process.exit(1)\n }\n\n console.log(chalk.cyan(' Build complete.\\n'))\n console.log(chalk.yellow(\n ' Tip: built files are meant to be served over an HTTP server.\\n' +\n ' Opening index.html over file:\u002F\u002F won\\'t work.\\n'\n ))\n })\n})\n","id":"mod_BJYxpo7GUyfiNDUPTUkEfm","is_binary":false,"title":"build.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ByWekF2O0TQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"'use strict'\nconst chalk = require('chalk')\nconst semver = require('semver')\nconst packageConfig = require('..\u002Fpackage.json')\nconst shell = require('shelljs')\n\nfunction exec (cmd) {\n return require('child_process').execSync(cmd).toString().trim()\n}\n\nconst versionRequirements = [\n {\n name: 'node',\n currentVersion: semver.clean(process.version),\n versionRequirement: packageConfig.engines.node\n }\n]\n\nif (shell.which('npm')) {\n versionRequirements.push({\n name: 'npm',\n currentVersion: exec('npm --version'),\n versionRequirement: packageConfig.engines.npm\n })\n}\n\nmodule.exports = function () {\n const warnings = []\n\n for (let i = 0; i \u003C versionRequirements.length; i++) {\n const mod = versionRequirements[i]\n\n if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {\n warnings.push(mod.name + ': ' +\n chalk.red(mod.currentVersion) + ' should be ' +\n chalk.green(mod.versionRequirement)\n )\n }\n }\n\n if (warnings.length) {\n console.log('')\n console.log(chalk.yellow('To use this template, you must update following to modules:'))\n console.log()\n\n for (let i = 0; i \u003C warnings.length; i++) {\n const warning = warnings[i]\n console.log(' ' + warning)\n }\n\n console.log()\n process.exit(1)\n }\n}\n","id":"mod_M4oo85b8RQsh9RFUnVXjJ3","is_binary":false,"title":"check-versions.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"Hyze1Yn_Ra7","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"https:\u002F\u002Frawcdn.githack.com\u002Fcliffyllok\u002Finventory-management\u002Fd1b12586765d431aa8849f483c66d32254274252\u002Fbuild\u002Flogo.png","id":"mod_2wgaiewgeYSruvUv9zi3h1","is_binary":true,"title":"logo.png","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HJmgJF2_0T7","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"'use strict'\nconst path = require('path')\nconst config = require('..\u002Fconfig')\nconst ExtractTextPlugin = require('extract-text-webpack-plugin')\nconst packageConfig = require('..\u002Fpackage.json')\n\nexports.assetsPath = function (_path) {\n const assetsSubDirectory = process.env.NODE_ENV === 'production'\n ? config.build.assetsSubDirectory\n : config.dev.assetsSubDirectory\n\n return path.posix.join(assetsSubDirectory, _path)\n}\n\nexports.cssLoaders = function (options) {\n options = options || {}\n\n const cssLoader = {\n loader: 'css-loader',\n options: {\n sourceMap: options.sourceMap\n }\n }\n\n const postcssLoader = {\n loader: 'postcss-loader',\n options: {\n sourceMap: options.sourceMap\n }\n }\n\n \u002F\u002F generate loader string to be used with extract text plugin\n function generateLoaders (loader, loaderOptions) {\n const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]\n\n if (loader) {\n loaders.push({\n loader: loader + '-loader',\n options: Object.assign({}, loaderOptions, {\n sourceMap: options.sourceMap\n })\n })\n }\n\n \u002F\u002F Extract CSS when that option is specified\n \u002F\u002F (which is the case during production build)\n if (options.extract) {\n return ExtractTextPlugin.extract({\n use: loaders,\n fallback: 'vue-style-loader'\n })\n } else {\n return ['vue-style-loader'].concat(loaders)\n }\n }\n\n \u002F\u002F https:\u002F\u002Fvue-loader.vuejs.org\u002Fen\u002Fconfigurations\u002Fextract-css.html\n return {\n css: generateLoaders(),\n postcss: generateLoaders(),\n less: generateLoaders('less'),\n sass: generateLoaders('sass', { indentedSyntax: true }),\n scss: generateLoaders('sass'),\n stylus: generateLoaders('stylus'),\n styl: generateLoaders('stylus')\n }\n}\n\n\u002F\u002F Generate loaders for standalone style files (outside of .vue)\nexports.styleLoaders = function (options) {\n const output = []\n const loaders = exports.cssLoaders(options)\n\n for (const extension in loaders) {\n const loader = loaders[extension]\n output.push({\n test: new RegExp('\\\\.' + extension + '
),\n use: loader\n })\n }\n\n return output\n}\n\nexports.createNotifierCallback = () =\u003E {\n const notifier = require('node-notifier')\n\n return (severity, errors) =\u003E {\n if (severity !== 'error') return\n\n const error = errors[0]\n const filename = error.file && error.file.split('!').pop()\n\n notifier.notify({\n title: packageConfig.name,\n message: severity + ': ' + error.name,\n subtitle: filename || '',\n icon: path.join(__dirname, 'logo.png')\n })\n }\n}\n","id":"mod_U9FCrevPqCfeyAFjjWrf6Z","is_binary":false,"title":"utils.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HJ4gkYhuApm","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"'use strict'\nconst utils = require('.\u002Futils')\nconst config = require('..\u002Fconfig')\nconst isProduction = process.env.NODE_ENV === 'production'\nconst sourceMapEnabled = isProduction\n ? config.build.productionSourceMap\n : config.dev.cssSourceMap\n\nmodule.exports = {\n loaders: utils.cssLoaders({\n sourceMap: sourceMapEnabled,\n extract: isProduction\n }),\n cssSourceMap: sourceMapEnabled,\n cacheBusting: config.dev.cacheBusting,\n transformToRequire: {\n video: ['src', 'poster'],\n source: 'src',\n img: 'src',\n image: 'xlink:href'\n }\n}\n","id":"mod_FbHkncybnus8PUELr7Yyf5","is_binary":false,"title":"vue-loader.conf.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"SyBgJK2_Apm","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"'use strict'\nconst path = require('path')\nconst utils = require('.\u002Futils')\nconst config = require('..\u002Fconfig')\nconst vueLoaderConfig = require('.\u002Fvue-loader.conf')\n\nfunction resolve (dir) {\n return path.join(__dirname, '..', dir)\n}\n\nconst createLintingRule = () =\u003E ({\n test: \u002F\\.(js|vue)$\u002F,\n loader: 'eslint-loader',\n enforce: 'pre',\n include: [resolve('src'), resolve('test')],\n options: {\n formatter: require('eslint-friendly-formatter'),\n emitWarning: !config.dev.showEslintErrorsInOverlay\n }\n})\n\nmodule.exports = {\n context: path.resolve(__dirname, '..\u002F'),\n entry: {\n app: '.\u002Fsrc\u002Fmain.js'\n },\n output: {\n path: config.build.assetsRoot,\n filename: '[name].js',\n publicPath: process.env.NODE_ENV === 'production'\n ? config.build.assetsPublicPath\n : config.dev.assetsPublicPath\n },\n resolve: {\n extensions: ['.js', '.vue', '.json'],\n alias: {\n 'vue
: 'vue\u002Fdist\u002Fvue.esm.js',\n '@': resolve('src'),\n }\n },\n module: {\n rules: [\n ...(config.dev.useEslint ? [createLintingRule()] : []),\n {\n test: \u002F\\.vue$\u002F,\n loader: 'vue-loader',\n options: vueLoaderConfig\n },\n {\n test: \u002F\\.js$\u002F,\n loader: 'babel-loader',\n include: [resolve('src'), resolve('test'), resolve('node_modules\u002Fwebpack-dev-server\u002Fclient')]\n },\n {\n test: \u002F\\.(png|jpe?g|gif|svg)(\\?.*)?$\u002F,\n loader: 'url-loader',\n options: {\n limit: 10000,\n name: utils.assetsPath('img\u002F[name].[hash:7].[ext]')\n }\n },\n {\n test: \u002F\\.(mp4|webm|ogg|mp3|wav|flac|aac)(\\?.*)?$\u002F,\n loader: 'url-loader',\n options: {\n limit: 10000,\n name: utils.assetsPath('media\u002F[name].[hash:7].[ext]')\n }\n },\n {\n test: \u002F\\.(woff2?|eot|ttf|otf)(\\?.*)?$\u002F,\n loader: 'url-loader',\n options: {\n limit: 10000,\n name: utils.assetsPath('fonts\u002F[name].[hash:7].[ext]')\n }\n }\n ]\n },\n node: {\n \u002F\u002F prevent webpack from injecting useless setImmediate polyfill because Vue\n \u002F\u002F source contains it (although only uses it if it's native).\n setImmediate: false,\n \u002F\u002F prevent webpack from injecting mocks to Node native modules\n \u002F\u002F that does not make sense for the client\n dgram: 'empty',\n fs: 'empty',\n net: 'empty',\n tls: 'empty',\n child_process: 'empty'\n }\n}\n","id":"mod_MjHrjLx89B9PiAnSCtrofP","is_binary":false,"title":"webpack.base.conf.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HJ8lkYhuRTQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"\u003Ctemplate\u003E\n \u003Cv-layout\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-card\u003E\n \u003Cv-layout row class=\"primary\" wrap\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Ch3 class=\"mt-2 mb-2 white--text\"\u003EDuplicate item\u003C\u002Fh3\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003Cv-divider class=\"mb-3\"\u003E\u003C\u002Fv-divider\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-text-field\n v-model=\"this.item.Brand\"\n name=\"brandName\"\n label=\"Brand Name\"\n id=\"brandName\"\n disabled\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12\u003E\n \u003Cform @submit.prevent=\"addItem\"\u003E\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-text-field\n v-model=\"item.ReceiptAlias\"\n name=\"receiptAlias\"\n label=\"Receipt Alias\"\n id=\"receiptAlias\"\n disabled\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-text-field\n v-model=\"item.Scancode\"\n name=\"scancode\"\n label=\"Scancode\"\n id=\"scancode\"\n disabled\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row class=\"mb-2\"\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-dialog persistent lazy full-width width=\"290px\"\u003E\n \u003Cv-text-field\n slot=\"activator\"\n label=\"SellBy date\"\n v-model=\"sellByDate\"\n id=\"sellByDate\"\n readonly\n v-focus\n \u003E\u003C\u002Fv-text-field\u003E\n \u003Cv-date-picker\n v-model=\"sellByDate\"\n scrollable\n actions\n required\n \u003E\n \u003Ctemplate slot-scope=\"{ save, cancel }\"\u003E\n \u003Cv-card-actions\u003E\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-btn flat color=\"primary\" @click=\"cancel\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn flat color=\"primary\" @click=\"save\"\u003EOK\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-card-actions\u003E\n \u003C\u002Ftemplate\u003E\n \u003C\u002Fv-date-picker\u003E\n \u003C\u002Fv-dialog\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3 mb-3\u003E\n \u003Cv-btn small class=\"primary\" type=\"submit\"\u003ESave\u003C\u002Fv-btn\u003E\n \u003Cv-btn small class=\"secondary\" @click=\"cancel\"\u003ECancel\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport format from \"date-fns\u002Fformat\";\nexport default {\n computed: {\n item() {\n return this.$store.state.loadedProduct;\n },\n sellByDate: {\n get() {\n return this.$store.state.loadedProduct.SellbyDate;\n },\n set(value) {\n this.$store.commit(\"updateLoadedProduct\", value);\n }\n }\n },\n methods: {\n addItem() {\n const today = new Date();\n const newItem = {\n Scancode: this.item.Scancode,\n ReceiptAlias: this.item.ReceiptAlias,\n Brand: this.item.Brand,\n SellbyDate: this.sellByDate,\n creatorId: this.item.creatorId,\n editedBy: this.$store.state.user.userId,\n lastEditDate: format(today, \"MMM Do YYYY h:mm A\"),\n reorderDate: this.item.reorderDate\n };\n\n if (this.sellByDate === \"\") {\n alert(\"Please enter a SellBy date!\");\n } else {\n this.$store.state.loc = \"\u002Fproducts\";\n this.$store.dispatch(\"addNewItem\", newItem);\n }\n },\n format(val) {\n return format(val, \"MM-DD-YYYY\");\n },\n cancel() {\n this.$store.commit(\"clearLoadedProduct\");\n this.$router.replace(\"\u002Fproducts\");\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\u003C\u002Fstyle\u003E\n","id":"mod_PDcypW6zNe1FhauH6XcfgK","is_binary":false,"title":"DuplicateItem.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HyGbkt3_R67","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"'use strict'\nconst utils = require('.\u002Futils')\nconst webpack = require('webpack')\nconst config = require('..\u002Fconfig')\nconst merge = require('webpack-merge')\nconst path = require('path')\nconst baseWebpackConfig = require('.\u002Fwebpack.base.conf')\nconst CopyWebpackPlugin = require('copy-webpack-plugin')\nconst HtmlWebpackPlugin = require('html-webpack-plugin')\nconst FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')\nconst portfinder = require('portfinder')\n\nconst HOST = process.env.HOST\nconst PORT = process.env.PORT && Number(process.env.PORT)\n\nconst devWebpackConfig = merge(baseWebpackConfig, {\n module: {\n rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })\n },\n \u002F\u002F cheap-module-eval-source-map is faster for development\n devtool: config.dev.devtool,\n\n \u002F\u002F these devServer options should be customized in \u002Fconfig\u002Findex.js\n devServer: {\n clientLogLevel: 'warning',\n historyApiFallback: {\n rewrites: [\n { from: \u002F.*\u002F, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },\n ],\n },\n hot: true,\n contentBase: false, \u002F\u002F since we use CopyWebpackPlugin.\n compress: true,\n host: HOST || config.dev.host,\n port: PORT || config.dev.port,\n open: config.dev.autoOpenBrowser,\n overlay: config.dev.errorOverlay\n ? { warnings: false, errors: true }\n : false,\n publicPath: config.dev.assetsPublicPath,\n proxy: config.dev.proxyTable,\n quiet: true, \u002F\u002F necessary for FriendlyErrorsPlugin\n watchOptions: {\n poll: config.dev.poll,\n }\n },\n plugins: [\n new webpack.DefinePlugin({\n 'process.env': require('..\u002Fconfig\u002Fdev.env')\n }),\n new webpack.HotModuleReplacementPlugin(),\n new webpack.NamedModulesPlugin(), \u002F\u002F HMR shows correct file names in console on update.\n new webpack.NoEmitOnErrorsPlugin(),\n \u002F\u002F https:\u002F\u002Fgithub.com\u002Fampedandwired\u002Fhtml-webpack-plugin\n new HtmlWebpackPlugin({\n filename: 'index.html',\n template: 'index.html',\n inject: true\n }),\n \u002F\u002F copy custom static assets\n new CopyWebpackPlugin([\n {\n from: path.resolve(__dirname, '..\u002Fstatic'),\n to: config.dev.assetsSubDirectory,\n ignore: ['.*']\n }\n ])\n ]\n})\n\nmodule.exports = new Promise((resolve, reject) =\u003E {\n portfinder.basePort = process.env.PORT || config.dev.port\n portfinder.getPort((err, port) =\u003E {\n if (err) {\n reject(err)\n } else {\n \u002F\u002F publish the new Port, necessary for e2e tests\n process.env.PORT = port\n \u002F\u002F add port to devServer config\n devWebpackConfig.devServer.port = port\n\n \u002F\u002F Add FriendlyErrorsPlugin\n devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({\n compilationSuccessInfo: {\n messages: [`Your application is running here: http:\u002F\u002F${devWebpackConfig.devServer.host}:${port}`],\n },\n onErrors: config.dev.notifyOnErrors\n ? utils.createNotifierCallback()\n : undefined\n }))\n\n resolve(devWebpackConfig)\n }\n })\n})\n","id":"mod_9ze5LWWkWjMUvWLpNqULFt","is_binary":false,"title":"webpack.dev.conf.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"r1vgyK2_CTm","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Syx1F2_ATQ"},{"code":"'use strict'\n\u002F\u002F Template version: 1.3.1\n\u002F\u002F see http:\u002F\u002Fvuejs-templates.github.io\u002Fwebpack for documentation.\n\nconst path = require('path')\n\nmodule.exports = {\n dev: {\n\n \u002F\u002F Paths\n assetsSubDirectory: 'static',\n assetsPublicPath: '\u002F',\n proxyTable: {},\n\n \u002F\u002F Various Dev Server settings\n host: 'localhost', \u002F\u002F can be overwritten by process.env.HOST\n port: 8080, \u002F\u002F can be overwritten by process.env.PORT, if port is in use, a free one will be determined\n autoOpenBrowser: false,\n errorOverlay: true,\n notifyOnErrors: true,\n poll: false, \u002F\u002F https:\u002F\u002Fwebpack.js.org\u002Fconfiguration\u002Fdev-server\u002F#devserver-watchoptions-\n\n \u002F\u002F Use Eslint Loader?\n \u002F\u002F If true, your code will be linted during bundling and\n \u002F\u002F linting errors and warnings will be shown in the console.\n useEslint: true,\n \u002F\u002F If true, eslint errors and warnings will also be shown in the error overlay\n \u002F\u002F in the browser.\n showEslintErrorsInOverlay: false,\n\n \u002F**\n * Source Maps\n *\u002F\n\n \u002F\u002F https:\u002F\u002Fwebpack.js.org\u002Fconfiguration\u002Fdevtool\u002F#development\n devtool: 'cheap-module-eval-source-map',\n\n \u002F\u002F If you have problems debugging vue-files in devtools,\n \u002F\u002F set this to false - it *may* help\n \u002F\u002F https:\u002F\u002Fvue-loader.vuejs.org\u002Fen\u002Foptions.html#cachebusting\n cacheBusting: true,\n\n cssSourceMap: true\n },\n\n build: {\n \u002F\u002F Template for index.html\n index: path.resolve(__dirname, '..\u002Fdist\u002Findex.html'),\n\n \u002F\u002F Paths\n assetsRoot: path.resolve(__dirname, '..\u002Fdist'),\n assetsSubDirectory: 'static',\n assetsPublicPath: '\u002F',\n\n \u002F**\n * Source Maps\n *\u002F\n\n productionSourceMap: true,\n \u002F\u002F https:\u002F\u002Fwebpack.js.org\u002Fconfiguration\u002Fdevtool\u002F#production\n devtool: '#source-map',\n\n \u002F\u002F Gzip off by default as many popular static hosts such as\n \u002F\u002F Surge or Netlify already gzip all static assets for you.\n \u002F\u002F Before setting to `true`, make sure to:\n \u002F\u002F npm install --save-dev compression-webpack-plugin\n productionGzip: false,\n productionGzipExtensions: ['js', 'css'],\n\n \u002F\u002F Run the build command with an extra argument to\n \u002F\u002F View the bundle analyzer report after build finishes:\n \u002F\u002F `npm run build --report`\n \u002F\u002F Set to `true` or `false` to always turn it on or off\n bundleAnalyzerReport: process.env.npm_config_report\n }\n}\n","id":"mod_9QPM6cvtvsw1jwwLjMFBJQ","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"Hy5eJth_AaX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"r1WyF3_067"},{"code":"'use strict'\nmodule.exports = {\n NODE_ENV: '\"production\"'\n}\n","id":"mod_bvkUwMxZZFvxGWi1D7PeR","is_binary":false,"title":"prod.env.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"H1oeyYn_ApX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"r1WyF3_067"},{"code":"'use strict'\nconst merge = require('webpack-merge')\nconst devEnv = require('.\u002Fdev.env')\n\nmodule.exports = merge(devEnv, {\n NODE_ENV: '\"testing\"'\n})\n","id":"mod_6XRgz62gwAASCJN49SPxTr","is_binary":false,"title":"test.env.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"B12g1th_Aam","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"r1WyF3_067"},{"code":"\u003C!DOCTYPE html\u003E\n\u003Chtml lang=\"en\"\u003E\n \u003Chead\u003E\n \u003Ctitle\u003EInventory Management App\u003C\u002Ftitle\u003E\n \u003Cmeta charset=\"utf-8\" \u002F\u003E\n \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F\u003E\n \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F\u003E\n \u003Clink\n href=\"https:\u002F\u002Ffonts.googleapis.com\u002Fcss?family=Roboto:300,400,500,700|Material+Icons\"\n rel=\"stylesheet\"\n type=\"text\u002Fcss\"\n \u002F\u003E\n \u003Clink\n href=\"https:\u002F\u002Fnetdna.bootstrapcdn.com\u002Fbootstrap\u002F3.0.0\u002Fcss\u002Fbootstrap.min.css\"\n rel=\"stylesheet\"\n type=\"text\u002Fcss\"\n \u002F\u003E\n \u003Clink\n rel=\"icon\"\n type=\"image\u002Fpng\"\n href=\"public\u002Ffavicon-32x32.png\"\n sizes=\"32x32\"\n \u002F\u003E\n \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Fjspdf@latest\u002Fdist\u002Fjspdf.min.js\"\u003E\u003C\u002Fscript\u003E\n \u003Cscript src=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fjspdf-autotable\u002F2.3.4\u002Fjspdf.plugin.autotable.js\"\u003E\u003C\u002Fscript\u003E\n \u003C\u002Fhead\u003E\n\n \u003Cbody\u003E\n \u003Cdiv id=\"app\"\u003E\u003C\u002Fdiv\u003E\n \u003Cscript src=\".\u002Fdist\u002Fbuild.js\"\u003E\u003C\u002Fscript\u003E\n \u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E\n","id":"mod_Gb5aFJ2KBwUsa7KoDEWveV","is_binary":false,"title":"index.html","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-01-26T16:01:02","upload_id":null,"shortid":"BJpekF3OR6Q","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"https:\u002F\u002Frawcdn.githack.com\u002Fcliffyllok\u002Finventory-management\u002Fd1b12586765d431aa8849f483c66d32254274252\u002Fsrc\u002Fassets\u002Flogo.png","id":"mod_8azwNaDbVgRbkXqiwLpEXU","is_binary":true,"title":"logo.png","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"r1xZ1KhdRp7","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"HJ7JKhuR67"},{"code":"\u003Ctemplate\u003E\n \u003Cv-layout\u003E\n \u003Cv-flex xs10 offset-xs1\u003E\n \u003Cv-card\u003E\n \u003Cv-layout row class=\"primary mt-2\"\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Ch2 class=\"mt-2 mb-2 white--text\"\u003EAdd New Item\u003C\u002Fh2\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003Cv-layout row mt-2\u003E\n \u003Cv-flex\u003E\n \u003Cform\u003E\n \u003Cv-layout row\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Cv-text-field\n v-model=\"scancode\"\n v-focus\n name=\"scancode\"\n label=\"Scancode\"\n id=\"scancode\"\n :disabled=\"this.$store.state.addItem\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Cp\u003E{{ messageSuccess }}\u003C\u002Fp\u003E\n \u003Cv-text-field\n v-model=\"brandName\"\n name=\"brandName\"\n label=\"Brand name\"\n id=\"brandName\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Cv-text-field\n v-model=\"receiptAlias\"\n name=\"receiptAlias\"\n label=\"Receipt Alias\"\n id=\"receiptAlias\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row class=\"mb-2\"\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Cv-dialog persistent lazy full-width width=\"290px\"\u003E\n \u003Cv-text-field\n slot=\"activator\"\n label=\"SellBy Date\"\n v-model=\"sellByDate\"\n readonly\n \u003E\u003C\u002Fv-text-field\u003E\n \u003Cv-date-picker v-model=\"sellByDate\" scrollable actions\u003E\n \u003Ctemplate slot-scope=\"{ save, cancel }\"\u003E\n \u003Cv-card-actions\u003E\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-btn flat color=\"primary\" @click=\"cancel\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn flat color=\"secondary\" @click=\"save\"\u003EOK\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-card-actions\u003E\n \u003C\u002Ftemplate\u003E\n \u003C\u002Fv-date-picker\u003E\n \u003C\u002Fv-dialog\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs8 offset-xs2 mb-3\u003E\n \u003Cv-btn\n small\n class=\"primary mr-2\"\n :disabled=\"!formIsValid\"\n @click=\"addItem('\u002Fproducts');\"\n \u003ESave\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn\n small\n class=\"primary mr-2\"\n :disabled=\"!formIsValid\"\n @click=\"addItem('\u002FaddNewItem');\"\n \u003ESave + add another\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn small class=\"info mr-2\" @click=\"clear\"\u003EClear\u003C\u002Fv-btn\u003E\n \u003Cv-btn small class=\"secondary\" @click=\"cancel\"\u003Ecancel\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport format from \"date-fns\u002Fformat\";\nexport default {\n data() {\n return {\n brandName: \"\",\n receiptAlias: \"\",\n scancode: \"\",\n sellByDate: \"\"\n };\n },\n created() {\n if (!this.$store.state.addItem) {\n this.$store.commit(\"clearLoadedScancode\");\n } else {\n this.scancode = this.$store.state.loadedScancode;\n }\n },\n computed: {\n formIsValid() {\n return (\n this.loadedScancode !== \"\" &&\n this.receiptAlias !== \"\" &&\n this.brandName !== \"\"\n );\n },\n messageSuccess() {\n return this.$store.state.messageSuccess;\n }\n },\n methods: {\n addItem(dest) {\n const today = new Date();\n const newItem = {\n Brand: this.brandName,\n ReceiptAlias: this.receiptAlias,\n Scancode: this.scancode,\n SellbyDate: this.sellByDate,\n creatorId: this.$store.state.user.userId,\n editedBy: \"\",\n lastEditDate: \"\",\n reorderDate: \"\"\n };\n this.$store.commit(\"setLoc\", dest);\n this.$store.dispatch(\"addNewItem\", newItem);\n this.$store.commit(\"setAddItem\", false);\n this.scancode = \"\";\n this.brandName = \"\";\n this.receiptAlias = \"\";\n this.sellByDate = \"\";\n if (dest == \"\u002FaddNewItem\") {\n document.getElementById(\"scancode\").focus();\n }\n },\n clear() {\n this.scancode = \"\";\n this.$store.commit(\"setLoadedScancode\", \"\");\n this.$store.commit(\"setAddItem\", false);\n this.brandName = \"\";\n this.receiptAlias = \"\";\n this.sellByDate = \"\";\n },\n cancel() {\n this.$router.go(-1);\n this.$store.commit(\"setAddItem\", false);\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\u003C\u002Fstyle\u003E\n","id":"mod_GEvwVdFbeZvRCjuUhMGsNh","is_binary":false,"title":"AddNewItem.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ByZZkF3_Apm","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cv-layout\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-layout v-if=\"user.authLevel === '1'\" row class=\"mt-2 mb-5\"\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Ch3 class=\"mb-2 text-md-center\"\u003E{{ today | formatDateFull }}\u003C\u002Fh3\u003E\n \u003Crouter-link to=\"\u002FproductsSellBy\"\u003E\n \u003Ch4 class=\"text-md-center\"\u003E\n There are {{ productsDue.length }} items with upcoming SellBy\n dates.\n \u003C\u002Fh4\u003E\n \u003C\u002Frouter-link\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout v-else row class=\"mt-3 mb-5\"\u003E\n \u003Cv-flex xs8 offset-xs2\u003E\n \u003Ch3\u003E{{ today | formatDateFull }}\u003C\u002Fh3\u003E\n \u003Ch2\u003EHello my friend\u003C\u002Fh2\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003Cv-card\u003E\n \u003Cv-layout row class=\"primary mt-2 white--text text-md-center\"\u003E\n \u003Cv-flex fluid\u003E\n \u003Ch2 class=\"mt-2 mb-0\"\u003EItem Check In\u003C\u002Fh2\u003E\n \u003Cbr \u002F\u003E\n \u003Cp class=\"demo\"\u003E\n To demo, click on Products and copy a scancode from any item\n missing a sell by date. \u003Cbr \u002F\u003EClick on Check in, and enter copied\n scancode in this field. \u003Cbr \u002F\u003EOr enter a random scancode and add\n as a new Item.\n \u003C\u002Fp\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12\u003E\n \u003Cform\u003E\n \u003Cv-layout row class=\"mt-2\"\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cp class=\"mb-3\"\u003E{{ messageSuccess }}{{ message }}\u003C\u002Fp\u003E\n\n \u003Cv-layout row v-if=\"scancodeExists\" class=\"mb-2\"\u003E\n \u003Cp\u003E{{ item.receiptAlias }}\u003C\u002Fp\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-text-field\n v-model.trim=\"scancode\"\n v-focus\n name=\"scancode\"\n label=\"Enter scancode\"\n id=\"scancode\"\n required\n :onchange=\"getInput(this)\"\n \u003E\n \u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row v-if=\"!scancodeExists\"\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row class=\"mb-4\" v-show=\"scancodeExists\"\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-dialog persistent lazy full-width width=\"290px\"\u003E\n \u003Cv-text-field\n slot=\"activator\"\n label=\"Sell By date\"\n v-model.trim=\"SellbyDate\"\n readonly\n \u003E\u003C\u002Fv-text-field\u003E\n \u003Cv-date-picker v-model.trim=\"SellbyDate\" scrollable actions\u003E\n \u003Ctemplate slot-scope=\"{ save, cancel }\"\u003E\n \u003Cv-card-actions\u003E\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-btn flat color=\"primary\" @click=\"cancel\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn flat color=\"secondary\" @click=\"save\"\u003EOK\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-card-actions\u003E\n \u003C\u002Ftemplate\u003E\n \u003C\u002Fv-date-picker\u003E\n \u003C\u002Fv-dialog\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row no-wrap\u003E\n \u003Cv-flex xs12 sm6 offset-sm3 mb-4 wrap class=\"buttons\"\u003E\n \u003Cv-btn\n class=\"primary\"\n :disabled=\"!formIsValid\"\n @click=\"addItem('\u002FitemCheckIn');\"\n \u003ESave\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn class=\"secondary ml-2\" @click=\"clear\"\u003EClear\u003C\u002Fv-btn\u003E\n \u003Cv-btn\n v-show=\"addNewItem\"\n class=\"info ml-2\"\n @click=\"$router.push('addNewItem');\"\n \u003EAdd Item\u003C\u002Fv-btn\n \u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport format from \"date-fns\u002Fformat\";\nexport default {\n created() {\n setTimeout(() =\u003E {\n this.$store.commit(\"clearAll\");\n this.$store.commit(\"setError\", \"Your session has expired!\");\n }, 3600000);\n },\n data() {\n return {\n scancode: \"\",\n SellbyDate: \"\",\n today: new Date()\n };\n },\n computed: {\n formIsValid() {\n return this.SellbyDate !== \"\";\n },\n user() {\n return this.$store.state.user;\n },\n scancodeExists() {\n return this.$store.state.scancodeFound;\n },\n messageSuccess() {\n return this.$store.state.messageSuccess;\n },\n item() {\n return this.$store.state.loadedProduct;\n },\n productsDue() {\n return this.$store.getters.getSellBySoon;\n },\n message() {\n return this.$store.state.message;\n },\n addNewItem() {\n return this.$store.getters.addItem;\n }\n },\n methods: {\n addItem(dest) {\n const today = new Date();\n const checkedInItem = {\n id: this.item.id,\n Brand: this.item.brandName,\n ReceiptAlias: this.item.receiptAlias,\n Scancode: this.scancode,\n SellbyDate: this.SellbyDate,\n creatorId: this.$store.state.user.userId,\n editedBy: \"\",\n lastEditDate: format(today, \"MMM Do YYYY h:mm A\"),\n reorderDate: \"\"\n };\n\n this.$store.commit(\"setLoc\", \"\u002FitemCheckIn\");\n this.$store.dispatch(\"addNewItem\", checkedInItem);\n document.getElementById(\"scancode\").value = \"\";\n this.scancode = \"\";\n this.SellbyDate = \"\";\n document.getElementById(\"scancode\").focus();\n },\n logOut() {\n this.$store.commit(\"clearAll\");\n },\n getInput() {\n if (this.scancode !== \"\") {\n let scancodeFound = this.$store.state.products.find(\n el =\u003E el.scancode === this.scancode\n );\n let objItem = { sc: this.scancode, scancodeFound };\n this.$store.dispatch(\"setLoadedScancode\", objItem);\n }\n },\n clear() {\n this.scancode = \"\";\n this.$store.commit(\"setScancodeStatus\", false);\n this.$store.commit(\"clearMessage\");\n this.$store.commit(\"setAddItem\", false);\n this.$store.commit(\"clearLoadedScancode\");\n document.getElementById(\"scancode\").value = \"\";\n this.SellbyDate = \"\";\n document.getElementById(\"scancode\").focus();\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n.demo {\n margin-top: 0;\n color: white;\n \u002F* font-style: italic; *\u002F\n font-size: 13px;\n}\n\n.buttons {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.msg {\n color: slategray;\n font-size: 13px;\n margin-bottom: 10px;\n}\n\np {\n font-size: 14px;\n margin-bottom: 10px;\n color: darkslategray;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_AuuDFmnYtkg5kh2xv2Udgj","is_binary":false,"title":"ItemCheckIn.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"rJ7Z1F3uATQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv class=\"hello\"\u003E\n \u003Ch1\u003E{{ msg }}\u003C\u002Fh1\u003E\n \u003Ch2\u003EEssential Links\u003C\u002Fh2\u003E\n \u003Cul\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"https:\u002F\u002Fvuejs.org\"\n target=\"_blank\"\n \u003E\n Core Docs\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"https:\u002F\u002Fforum.vuejs.org\"\n target=\"_blank\"\n \u003E\n Forum\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"https:\u002F\u002Fchat.vuejs.org\"\n target=\"_blank\"\n \u003E\n Community Chat\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"https:\u002F\u002Ftwitter.com\u002Fvuejs\"\n target=\"_blank\"\n \u003E\n Twitter\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cbr\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"http:\u002F\u002Fvuejs-templates.github.io\u002Fwebpack\u002F\"\n target=\"_blank\"\n \u003E\n Docs for This Template\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003Ch2\u003EEcosystem\u003C\u002Fh2\u003E\n \u003Cul\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"http:\u002F\u002Frouter.vuejs.org\u002F\"\n target=\"_blank\"\n \u003E\n vue-router\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"http:\u002F\u002Fvuex.vuejs.org\u002F\"\n target=\"_blank\"\n \u003E\n vuex\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"http:\u002F\u002Fvue-loader.vuejs.org\u002F\"\n target=\"_blank\"\n \u003E\n vue-loader\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003Cli\u003E\n \u003Ca\n href=\"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fawesome-vue\"\n target=\"_blank\"\n \u003E\n awesome-vue\n \u003C\u002Fa\u003E\n \u003C\u002Fli\u003E\n \u003C\u002Ful\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nexport default {\n name: \"HelloWorld\",\n data() {\n return {\n msg: \"Welcome to Your Vue.js App\"\n };\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003C!-- Add \"scoped\" attribute to limit CSS to this component only --\u003E\n\u003Cstyle scoped\u003E\nh1,\nh2 {\n font-weight: normal;\n}\nul {\n list-style-type: none;\n padding: 0;\n}\nli {\n display: inline-block;\n margin: 0 10px;\n}\na {\n color: #42b983;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_EC1DRziA4nECm7bU7XxDiE","is_binary":false,"title":"MainPage.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ryVZyYhOAaQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cv-card\u003E\n \u003Cv-card-title\u003E\n \u003Ch3\u003EProducts\u003C\u002Fh3\u003E\n     (click on any item icons to demo)\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-text-field\n append-icon=\"search\"\n label=\"Scan\u002FSearch\"\n single-line\n id=\"search\"\n hide-details\n v-model=\"search\"\n v-focus\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-card-title\u003E\n \u003Cv-data-table\n :headers=\"headers\"\n :items=\"products\"\n :search=\"search\"\n :pagination.sync=\"pagination\"\n :rows-per-page-items=\"rppi\"\n \u003E\n \u003Ctemplate slot=\"items\" slot-scope=\"props\"\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.brandName }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.receiptAlias }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.scancode }}\u003C\u002Ftd\u003E\n \u003Ctd\n v-if=\"props.item.sellByDate !== tmpSellByDate\"\n class=\"text-xs-left\"\n \u003E\n {{ props.item.sellByDate | formatDateShort }}\n \u003C\u002Ftd\u003E\n \u003Ctd v-else class=\"text-xs-left\"\u003E\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E\n \u003Crouter-link\n :to=\"{\n name: 'editItem',\n params: { item: props.item, from: '\u002Fproducts' }\n }\"\n tag=\"span\"\n \u003E\n \u003Cv-icon class=\"mr-3\"\u003Eedit\u003C\u002Fv-icon\u003E\n \u003C\u002Frouter-link\u003E\n \u003Cv-icon\n v-show=\"props.item.sellByDate !== tmpSellByDate\"\n @click=\"returnItem(props.item);\"\n class=\"mr-0\"\n \u003Eupdate\u003C\u002Fv-icon\n \u003E\n \u003Cv-icon\n v-show=\"!props.item.onReorderList\"\n @click=\"reorder(props.item);\"\n class=\"ml-3\"\n \u003Eadd_shopping_cart\u003C\u002Fv-icon\n \u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftemplate\u003E\n \u003Cv-alert slot=\"no-results\" :value=\"true\" color=\"error\" icon=\"warning\"\u003E\n Your search for \"{{ search }}\" found no results.\n \u003C\u002Fv-alert\u003E\n \u003C\u002Fv-data-table\u003E\n \u003Cdiv class=\"text-xs-center pt-2\"\u003E\n \u003Cv-pagination v-model=\"pagination.page\" :length=\"pages\"\u003E\u003C\u002Fv-pagination\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport { store } from \"..\u002Fstore\u002Findex\";\nimport format from \"date-fns\u002Fformat\";\nimport addWeeks from \"date-fns\u002Fadd_weeks\";\nimport computed from \"..\u002Fmixins\u002Fcomputed\";\nexport default {\n mixins: [computed],\n data() {\n return {\n search: \"\",\n \u002F\u002F tmpSellByDate: format(addWeeks(new Date(), 520), \"YYYY-MM-DD\"),\n selected: [],\n pagination: {},\n rppi: [\n \"25\",\n \"50\",\n \"75\",\n \"100\",\n {\n text: \"All\",\n value: -1\n }\n ],\n headers: [\n {\n text: \"Brand name\",\n align: \"left\",\n sortable: false,\n value: \"brandName\"\n },\n {\n text: \"Product name\",\n align: \"left\",\n sortable: false,\n value: \"receiptAlias\"\n },\n { text: \"Scancode\", value: \"scancode\", align: \"left\", sortable: false },\n {\n text: \"Sell By Date\",\n value: \"sellByDate\",\n sortable: false,\n align: \"left\"\n }\n ]\n };\n },\n computed: {\n products() {\n if (this.user.authLevel !== \"1\") {\n return this.$store.getters.productsMissingSellBy;\n } else {\n return this.$store.getters.products.sort(\n (a, b) =\u003E new Date(a.sellByDate) - new Date(b.sellByDate)\n );\n }\n },\n user() {\n return this.$store.state.user;\n },\n tmpSellByDate() {\n return this.$store.state.defaultSellByDate;\n }\n },\n methods: {\n returnItem(item) {\n const today = new Date();\n let creatorId = \"\";\n\n if (item.creatorId === \"\") {\n creatorId = this.$store.state.user.userId;\n } else {\n creatorId = item.creatorId;\n }\n\n const editedItem = {\n id: item.id,\n brd_name: item.brandName,\n inv_receiptalias: item.receiptAlias,\n inv_scancode: item.scancode,\n SellbyDate: \"\",\n creatorId: creatorId,\n editedBy: item.editedBy,\n lastEditDate: today\n };\n const str =\n '\u003Cb style=\"color:\"green;\"\u003EDelete sell by date and return ' +\n item.receiptAlias +\n \" to the database ?\u003C\u002Fb\u003E\";\n this.$dialog.confirm(str).then(() =\u003E {\n this.$store.state.loc = \"\u002Fproducts\";\n this.$store.dispatch(\"editItem\", editedItem);\n this.search = \"\";\n });\n },\n reorder(item) {\n const today = new Date();\n let creatorId = \"\";\n\n if (item.creatorId === \"\") {\n creatorId = this.$store.state.user.userId;\n } else {\n creatorId = item.creatorId;\n }\n\n const reorderedItem = {\n id: item.id,\n brd_name: item.brandName,\n inv_receiptalias: item.receiptAlias,\n inv_scancode: item.scancode,\n SellbyDate: \"\",\n onReorderList: true,\n creatorId: creatorId,\n editedBy: item.editedBy,\n lastEditDate: today\n };\n\n const str =\n '\u003Cb style=\"color:\"green;\"\u003EPlace ' +\n item.receiptAlias +\n \" on restock list?\u003C\u002Fb\u003E\";\n this.$dialog.confirm(str).then(() =\u003E {\n this.$store.state.loc = \"\u002Freorders\";\n this.$store.dispatch(\"reorderItem\", reorderedItem);\n });\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n.icon {\n margin-left: 0px;\n margin-right: 15px;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_FZDyKw2pG1do7DeLZdyAFj","is_binary":false,"title":"Products.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HyS-1t2dCTm","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cv-card\u003E\n \u003Cv-card-title\u003E\n \u003Ch4\u003EUpcoming Sell By dates\u003C\u002Fh4\u003E\n \u003Cspan\n v-show=\"!$store.state.hideNav\"\n class=\"printable\"\n @click=\"changeView\"\n \u003E{{ txtView }}\u003C\u002Fspan\n \u003E\n \u003C!--\n \u003Cspan class=\"printable\" @click=\"makePrintable\"\u003E{{ txtPrintable }}\u003C\u002Fspan\u003E\n --\u003E\n \u003Cspan class=\"printable\" @click=\"exportPdf\"\u003EPrint to pdf\u003C\u002Fspan\u003E\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-text-field\n v-show=\"!printable\"\n append-icon=\"search\"\n label=\"Search\"\n single-line\n id=\"search\"\n hide-details\n v-focus\n v-model=\"search\"\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-card-title\u003E\n\n \u003Cv-data-table\n :headers=\"headers\"\n :items=\"productsDue\"\n :search=\"search\"\n :pagination.sync=\"pagination\"\n :rows-per-page-items=\"rppi\"\n \u003E\n \u003Ctemplate slot=\"items\" slot-scope=\"props\"\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.brandName }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.receiptAlias }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.scancode }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E\n {{ props.item.SellbyDate | formatDateShort }}\n \u003C\u002Ftd\u003E\n \u003Ctd\n v-show=\"user.authLevel === '1' && !printable\"\n class=\"text-xs-left\"\n \u003E\n \u003Crouter-link\n :to=\"{\n name: 'editItem',\n params: { item: props.item, from: '\u002FproductsSellBy' }\n }\"\n tag=\"span\"\n \u003E\n \u003Cv-icon class=\"mr-3\"\u003Eedit\u003C\u002Fv-icon\u003E\n \u003C\u002Frouter-link\u003E\n \u003Cv-icon @click=\"returnItem(props.item);\" class=\"mr-0\"\n \u003Eupdate\u003C\u002Fv-icon\n \u003E\n \u003Cv-icon\n v-show=\"!props.item.onReorderList\"\n @click=\"reorder(props.item);\"\n class=\"ml-3\"\n \u003Eadd_shopping_cart\u003C\u002Fv-icon\n \u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftemplate\u003E\n \u003Cv-alert slot=\"no-results\" :value=\"true\" color=\"error\" icon=\"warning\"\u003E\n Your search for \"{{ search }}\" found no results.\n \u003C\u002Fv-alert\u003E\n \u003C\u002Fv-data-table\u003E\n\n \u003Cdiv v-show=\"!printable\" class=\"text-xs-center pt-2\"\u003E\n \u003Cv-pagination v-model=\"pagination.page\" :length=\"pages\"\u003E\u003C\u002Fv-pagination\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport { store } from \"..\u002Fstore\u002Findex\";\nimport format from \"date-fns\u002Fformat\";\nimport computed from \"..\u002Fmixins\u002Fcomputed\";\nimport methods from \"..\u002Fmixins\u002FprintUtils\";\nexport default {\n mixins: [computed, methods],\n created() {\n this.txtView = \"Month view\";\n this.$store.state.showMonth = false;\n },\n data() {\n return {\n today: new Date(),\n txtPrintable: \"Printable version\",\n txtView: \"Month view\",\n search: \"\",\n selected: [],\n pagination: {},\n items: this.$store.getters.getSellBySoon,\n rppi: [\n \"300\",\n {\n text: \"All\",\n value: -1\n }\n ],\n headers: [\n {\n text: \"Brand name\",\n align: \"left\",\n sortable: false,\n value: \"brandName\"\n },\n {\n text: \"Product name\",\n align: \"left\",\n sortable: false,\n value: \"receiptAlias\"\n },\n { text: \"Scancode\", value: \"scancode\", align: \"left\", sortable: false },\n {\n text: \"Sell By Date\",\n value: \"SellbyDate\",\n sortable: false,\n align: \"left\"\n }\n ]\n };\n },\n computed: {\n showMonth() {\n return this.$store.state.showMonth;\n },\n user() {\n return this.$store.state.user;\n },\n productsDue() {\n if (!this.showMonth) {\n return this.$store.getters.getSellBySoon.sort(\n (a, b) =\u003E new Date(a.SellbyDate) - new Date(b.SellbyDate)\n );\n } else {\n return this.$store.getters.getSellBySoonMonth.sort(\n (a, b) =\u003E new Date(a.SellbyDate) - new Date(b.SellbyDate)\n );\n }\n }\n },\n methods: {\n getData() {\n let arrItems = [];\n this.productsDue.forEach(el =\u003E {\n arrItems.push({\n BrandName: el.brandName,\n ProductName: el.receiptAlias,\n Scancode: el.scancode,\n SellbyDate: el.SellbyDate\n });\n });\n return arrItems;\n },\n getColumns() {\n return [\n { title: \"Brand Name\", dataKey: \"BrandName\" },\n { title: \"Product name\", dataKey: \"ProductName\" },\n { title: \"Scancode\", dataKey: \"Scancode\" },\n { title: \"Sell By Date\", dataKey: \"SellbyDate\" }\n ];\n },\n exportPdf() {\n let doc = new jsPDF(\"p\", \"pt\");\n doc.autoTable(this.getColumns(), this.getData());\n doc.save(\"SellByDue.pdf\");\n },\n returnItem(item) {\n const today = new Date();\n let creatorId = \"\";\n\n if (item.creatorId === \"\") {\n creatorId = this.$store.state.user.userId;\n } else {\n creatorId = item.creatorId;\n }\n\n const editedItem = {\n id: item.id,\n brd_name: item.brandName,\n inv_receiptalias: item.receiptAlias,\n inv_scancode: item.scancode,\n SellbyDate: \"\",\n creatorId: creatorId,\n editedBy: item.editedBy,\n lastEditDate: today\n };\n\n const str =\n '\u003Cb style=\"color:\"green;\"\u003EDelete sell by date and return ' +\n item.receiptAlias +\n \" to the database ?\u003C\u002Fb\u003E\";\n this.$dialog.confirm(str).then(() =\u003E {\n this.$store.state.loc = \"\u002FproductsSellBy\";\n this.$store.dispatch(\"editItem\", editedItem);\n });\n },\n reorder(item) {\n const today = new Date();\n let creatorId = \"\";\n\n if (item.creatorId === \"\") {\n creatorId = this.$store.state.user.userId;\n } else {\n creatorId = item.creatorId;\n }\n\n const reorderedItem = {\n id: item.id,\n brd_name: item.brandName,\n inv_receiptalias: item.receiptAlias,\n inv_scancode: item.scancode,\n SellbyDate: \"\",\n onReorderList: true,\n creatorId: creatorId,\n editedBy: item.editedBy,\n lastEditDate: today\n };\n\n const str =\n '\u003Cb style=\"color:\"green;\"\u003EPlace ' +\n item.receiptAlias +\n \" on restock list?\u003C\u002Fb\u003E\";\n this.$dialog.confirm(str).then(() =\u003E {\n this.$store.state.loc = \"\u002Freorders\";\n this.$store.dispatch(\"reorderItem\", reorderedItem);\n });\n },\n changeView() {\n this.$store.commit(\"changeView\");\n this.txtView === \"Month view\"\n ? (this.txtView = \"10 day view\")\n : (this.txtView = \"Month view\");\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n.icon {\n margin-left: 0px;\n margin-right: 15px;\n}\n\n.printable {\n font-size: 13px;\n margin-left: 20px;\n text-decoration: underline;\n cursor: pointer;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_VDi6vBnxZVmarS8PyAhwQz","is_binary":false,"title":"ProductsSellBy.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"HJU-JY2dAaQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cv-card\u003E\n \u003Cv-card-title\u003E\n \u003Ch3\u003ERestock list -- {{ new Date() | formatDate }}\u003C\u002Fh3\u003E\n \u003Cspan class=\"printable mr-3\" @click=\"exportPdf\"\u003EPrint to pdf\u003C\u002Fspan\u003E\n \u003Cv-text-field\n v-model.trim=\"scancode\"\n v-focus\n name=\"scancode\"\n label=\"Enter scancode\"\n id=\"scancode\"\n \u003E\n \u003C\u002Fv-text-field\u003E\n \u003Cspan class=\"msg\"\u003E {{ message }}{{ messageSuccess }} \u003C\u002Fspan\u003E\n\n \u003Cspan v-show=\"!printable\"\u003E\n \u003Cv-btn\n small\n class=\"primary ml-3 mr-3\"\n :disabled=\"!formIsValid\"\n @click=\"getInput\"\n \u003ESave\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn\n v-show=\"reorders.length !== 0\"\n small\n class=\"clear\"\n @click=\"removeAll\"\n :disabled=\"loading\"\n :loading=\"loading\"\n \u003EClear list\u003C\u002Fv-btn\n \u003E\n \u003C\u002Fspan\u003E\n \u003C\u002Fv-card-title\u003E\n \u003Cv-data-table\n :headers=\"headers\"\n :items=\"reorders\"\n :pagination.sync=\"pagination\"\n :rows-per-page-items=\"rppi\"\n \u003E\n \u003Ctemplate slot=\"items\" slot-scope=\"props\"\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.brandName }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.receiptAlias }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.scancode }}\u003C\u002Ftd\u003E\n \u003Ctd v-show=\"!printable\" class=\"text-xs-left\"\u003E\n \u003Cv-icon\n @click=\"remove(props.item);\"\n class=\"ml-3\"\n :disabled=\"loading\"\n :loading=\"loading\"\n \u003Eremove_shopping_cart\u003C\u002Fv-icon\n \u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftemplate\u003E\n \u003Cspan v-show=\"loading\" slot=\"loader\" class=\"custom-loader\"\u003E\n \u003Cv-icon light\u003Ecached\u003C\u002Fv-icon\u003E\n \u003C\u002Fspan\u003E\n \u003C\u002Fv-data-table\u003E\n \u003Cdiv v-show=\"!printable\" class=\"text-xs-center pt-2\"\u003E\n \u003Cv-pagination v-model=\"pagination.page\" :length=\"pages\"\u003E\u003C\u002Fv-pagination\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport { store } from \"..\u002Fstore\u002Findex\";\nimport computed from \"..\u002Fmixins\u002Fcomputed\";\nimport methods from \"..\u002Fmixins\u002FprintUtils\";\nimport * as firebase from \"firebase\";\nexport default {\n mixins: [computed, methods],\n data() {\n return {\n pagination: {},\n scancode: \"\",\n txtPrintable: \"Printable version\",\n rppi: [\"50\", { text: \"All\", value: -1 }],\n headers: [\n {\n text: \"Brand name\",\n align: \"left\",\n sortable: false,\n value: \"brandName\"\n },\n {\n text: \"Product name\",\n align: \"left\",\n sortable: false,\n value: \"receiptAlias\"\n },\n { text: \"Scancode\", value: \"scancode\", align: \"left\", sortable: false }\n ]\n };\n },\n mounted() {\n this.$store.commit(\"setMessageSuccess\", \"\");\n this.$store.commit(\"setMessage\", \"\");\n this.$store.commit(\"setLoading\", false);\n },\n computed: {\n reorders() {\n return this.$store.getters.reorderedItems;\n },\n message() {\n return this.$store.state.message;\n },\n messageSuccess() {\n return this.$store.state.messageSuccess;\n },\n formIsValid() {\n return this.scancode !== \"\";\n },\n loading() {\n return this.$store.state.loading;\n }\n },\n methods: {\n getInput() {\n let scancodeFound = this.$store.state.products.find(\n el =\u003E el.scancode === this.scancode\n );\n let obj = { sc: this.scancode, scancodeFound };\n this.$store.commit(\"clearMessage\");\n this.$store.state.loc = \"\u002Freorders\";\n this.$store.dispatch(\"addOrder\", obj);\n this.scancode = \"\";\n document.getElementById(\"scancode\").focus();\n },\n remove(item) {\n const str =\n '\u003Cb style=\"color:\"green;\"\u003ERemove ' +\n item.receiptAlias +\n \" from restock list ?\u003C\u002Fb\u003E\";\n this.$dialog.confirm(str).then(() =\u003E {\n this.scancode = \"\";\n document.getElementById(\"scancode\").value = \"\";\n let objItem = { itemId: item.id, action: \"remove\" };\n this.$store.commit(\"setLoc\", \"\u002Freorders\");\n this.$store.dispatch(\"setRestockStatus\", objItem);\n });\n },\n removeAll() {\n const str = '\u003Cb style=\"color:\"green;\"\u003EClear the restock list ?\u003C\u002Fb\u003E';\n this.$dialog.confirm(str).then(() =\u003E {\n this.scancode = \"\";\n document.getElementById(\"scancode\").value = \"\";\n this.$store.commit(\"setLoc\", \"\u002Freorders\");\n this.$store.dispatch(\"clearRestockList\");\n });\n },\n clear() {\n this.scancode = \"\";\n document.getElementById(\"scancode\").focus();\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n.printable {\n font-size: 13px;\n margin-left: 20px;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.msg {\n font-size: 13px;\n font-weight: 500;\n font-style: italic;\n margin-top: 0;\n}\n\n.custom-loader {\n animation: loader 1s infinite;\n display: flex;\n}\n@-moz-keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n@-o-keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_MXyUWdhRsc1PAyiQ7W1w2b","is_binary":false,"title":"Reorders.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"rJvb1F3OApQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cv-container\u003E\n \u003Cv-layout row v-show=\"errorMessage\"\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Capp-alert @dismissed=\"onDismissed\" :msg=\"errorMessage\" type=\"error\" \u002F\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-card\u003E\n \u003Cv-card-text\u003E\n \u003Cv-container\u003E\n \u003Ch2 class=\"mb-3\"\u003EAdd new user\u003C\u002Fh2\u003E\n \u003Cp class=\"disabled\"\u003E(Disabled on demo)\u003C\u002Fp\u003E\n \u003Cform @submit.prevent=\"onSignUp\"\u003E\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"fname\"\n label=\"First name\"\n id=\"fname\"\n type=\"text\"\n v-model=\"fname\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"lname\"\n label=\"Last name\"\n id=\"lname\"\n type=\"text\"\n v-model=\"lname\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"email\"\n label=\"Email\"\n id=\"email\"\n type=\"email\"\n v-model=\"email\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"password\"\n label=\"Password\"\n id=\"pwd\"\n type=\"password\"\n v-model=\"pwd\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row wrap class=\"mb-3\"\u003E\n \u003Cv-flex xs12\u003E\n \u003Cv-text-field\n name=\"confirmPassword\"\n label=\"Confirm Password\"\n id=\"cpwd\"\n type=\"password\"\n v-model=\"cpwd\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row no-wrap\u003E\n \u003Cv-flex xs12\u003E\n \u003C!--\n \u003Cv-btn small type=\"submit\" :disabled=\"loading\" :loading=\"loading\"\u003EAdd user\n --\u003E\n \u003Cv-btn small type=\"submit\" disabled\n \u003EAdd user\n \u003Cspan slot=\"loader\" class=\"custom-loader\"\u003E\n \u003Cv-icon light\u003Ecached\u003C\u002Fv-icon\u003E\n \u003C\u002Fspan\u003E\n \u003C\u002Fv-btn\u003E\n \u003Cv-btn\n small\n :disabled=\"loading\"\n :loading=\"loading\"\n @click=\"$router.replace('\u002Fusers');\"\n \u003ECancel\n \u003Cspan slot=\"loader\" class=\"custom-loader\"\u003E\n \u003Cv-icon light\u003Ecached\u003C\u002Fv-icon\u003E\n \u003C\u002Fspan\u003E\n \u003C\u002Fv-btn\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fv-container\u003E\n \u003C\u002Fv-card-text\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fv-container\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nexport default {\n data() {\n return {\n fname: \"\",\n lname: \"\",\n email: \"\",\n pwd: \"\",\n cpwd: \"\"\n };\n },\n computed: {\n comparePasswords() {\n return this.pwd !== this.cpwd;\n },\n errorMessage() {\n return this.$store.state.fbError;\n },\n user() {\n return this.$store.state.user;\n },\n loading() {\n return this.$store.getters.loading;\n }\n },\n watch: {\n user(value) {\n if (value !== null && value !== undefined) {\n this.$router.replace(\"\u002F\");\n }\n }\n },\n methods: {\n onSignUp() {\n let fullName = this.fname.trim() + \" \" + this.lname.trim();\n const newUser = {\n email: this.email,\n password: this.pwd,\n name: fullName,\n authLevel: \"3\"\n };\n if (this.comparePasswords) {\n alert(\"Passwords don't match!\");\n } else {\n this.$store.state.loc = \"\u002F\";\n this.$store.dispatch(\"signUp\", newUser);\n }\n },\n onDismissed() {\n this.$store.commit(\"clearError\");\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n.disabled {\n font-style: italic;\n margin-bottom: 0;\n}\n.custom-loader {\n animation: loader 1s infinite;\n display: flex;\n}\n@-moz-keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n@-o-keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes loader {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_XiLWEW5MHvMMekSjpcRKVB","is_binary":false,"title":"SignUp.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"rktWJt3dRpX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cv-card\u003E\n \u003Cv-card-title\u003E\n Users\u003Crouter-link to=\"\u002Fsignup\" class=\"addUser\"\n \u003EAdd new user\u003C\u002Frouter-link\n \u003E\n \u003C\u002Fv-card-title\u003E\n \u003Cv-data-table\n :headers=\"headers\"\n :items=\"users\"\n :pagination.sync=\"pagination\"\n :rows-per-page-items=\"rppi\"\n \u003E\n \u003Ctemplate slot=\"items\" slot-scope=\"props\"\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.name }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-left\"\u003E{{ props.item.email }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-center\"\u003E{{ props.item.authLevel }}\u003C\u002Ftd\u003E\n \u003Ctd class=\"text-xs-right\"\u003E\n \u003C!--\n \u003Crouter-link :to=\"{name: 'editUser',\n params: { user: props.item } }\"\n tag=\"span\"\u003E\n --\u003E\n \u003Cv-btn flat small class=\"mr-0\"\u003E\u003Cv-icon\u003Eedit\u003C\u002Fv-icon\u003E\u003C\u002Fv-btn\u003E\n \u003C!-- \u003C\u002Frouter-link\u003E --\u003E\n \u003Cv-icon @click=\"deleteItem\"\u003Edelete\u003C\u002Fv-icon\u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftemplate\u003E\n \u003C\u002Fv-data-table\u003E\n \u003Cdiv class=\"text-xs-center pt-2\"\u003E\n \u003Cv-pagination v-model=\"pagination.page\" :length=\"pages\"\u003E\u003C\u002Fv-pagination\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport { store } from \"..\u002Fstore\u002Findex\";\nimport computed from \"..\u002Fmixins\u002Fcomputed\";\n\nexport default {\n mixins: [computed],\n data() {\n return {\n delete: false,\n pagination: {},\n rppi: [\n \"20\",\n {\n text: \"All\",\n value: -1\n }\n ],\n headers: [\n {\n text: \"Name\",\n align: \"left\",\n sortable: false,\n value: \"name\"\n },\n { text: \"Email\", value: \"email\", align: \"left\", sortable: false },\n {\n text: \"Auth level\",\n value: \"authLevel\",\n align: \"center\",\n sortable: false\n }\n ]\n };\n },\n computed: {\n users() {\n return this.$store.state.loadedUsers;\n }\n },\n methods: {\n deleteItem() {\n \u002F\u002F const str = \"You can delete users from the Firebase Console!\"\n const str = \"Disabled for demo!\";\n this.$dialog.confirm(str).then(() =\u003E \"\");\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\n.addUser {\n margin-left: 50px;\n font-size: 13px;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_4mm4b3sistL2DToz95vB8z","is_binary":false,"title":"Users.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"S19bkKhuRaX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"\u003Ctemplate\u003E\n \u003Cv-layout\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-card\u003E\n \u003Cv-layout row class=\"primary\" wrap\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Ch3 class=\"mt-2 mb-2 white--text\"\u003EEdit item\u003C\u002Fh3\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003Cv-divider class=\"mb-3\"\u003E\u003C\u002Fv-divider\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-text-field\n v-model=\"item.brandName\"\n name=\"brandName\"\n label=\"Brand Name\"\n id=\"brandName\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12\u003E\n \u003Cform @submit.prevent=\"editItem\"\u003E\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-text-field\n v-model=\"item.receiptAlias\"\n name=\"receiptAlias\"\n label=\"Receipt Alias\"\n id=\"receiptAlias\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-text-field\n v-model=\"item.scancode\"\n name=\"scancode\"\n label=\"Scancode\"\n id=\"scancode\"\n required\n \u003E\u003C\u002Fv-text-field\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003C!--\n compare data()'tmpSellByDate' (created when app loads products)\n to 'item.sellByDate' to display existing sellBy date\n --\u003E\n\n \u003Cv-layout row class=\"mb-2\"\u003E\n \u003Cv-flex xs12 sm6 offset-sm3\u003E\n \u003Cv-dialog\n v-if=\"item.sellByDate !== tmpSellByDate\"\n persistent\n lazy\n full-width\n width=\"290px\"\n \u003E\n \u003Cv-text-field\n slot=\"activator\"\n :label=\"\n 'SellBy date: ' + format(itemSellByDate, 'MM-DD-YYYY')\n \"\n v-model=\"itemSellByDate\"\n id=\"sellByDate\"\n readonly\n \u003E\u003C\u002Fv-text-field\u003E\n \u003Cv-date-picker v-model=\"itemSellByDate\" scrollable actions\u003E\n \u003Ctemplate slot-scope=\"{ save, cancel }\"\u003E\n \u003Cv-card-actions\u003E\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-btn flat color=\"primary\" @click=\"cancel\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn flat color=\"primary\" @click=\"save\"\u003EOK\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-card-actions\u003E\n \u003C\u002Ftemplate\u003E\n \u003C\u002Fv-date-picker\u003E\n \u003C\u002Fv-dialog\u003E\n\n \u003C!-- display defaults and bind to data() 'sellByDate' --\u003E\n\n \u003Cv-dialog v-else persistent lazy full-width width=\"290px\"\u003E\n \u003Cv-text-field\n slot=\"activator\"\n label=\"SellBy Date\"\n v-model=\"sellByDate\"\n id=\"sellByDate\"\n readonly\n \u003E\u003C\u002Fv-text-field\u003E\n \u003Cv-date-picker v-model=\"sellByDate\" scrollable actions\u003E\n \u003Ctemplate slot-scope=\"{ save, cancel }\"\u003E\n \u003Cv-card-actions\u003E\n \u003Cv-spacer\u003E\u003C\u002Fv-spacer\u003E\n \u003Cv-btn flat color=\"primary\" @click=\"cancel\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn flat color=\"primary\" @click=\"save\"\u003EOK\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-card-actions\u003E\n \u003C\u002Ftemplate\u003E\n \u003C\u002Fv-date-picker\u003E\n \u003C\u002Fv-dialog\u003E\n \u003C!--\n \u003Cp v-show=\"item.lastEditDate !== ''\"\u003E\u003Cem\u003ELast edited: {{item.lastEditDate | formatDateShort}}\u003C\u002Fem\u003E\u003C\u002Fp\u003E\n --\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\n \u003Cv-layout row\u003E\n \u003Cv-flex xs12 sm6 offset-sm3 mb-3\u003E\n \u003Cv-btn small class=\"primary mr-4\" type=\"submit\"\u003ESave\u003C\u002Fv-btn\u003E\n \u003Cv-btn small class=\"secondary\" @click=\"$router.go(-1);\"\n \u003ECancel\u003C\u002Fv-btn\n \u003E\n \u003Cv-btn small flat class=\"info mt-3\" @click=\"duplicate\"\n \u003EDuplicate\u003C\u002Fv-btn\n \u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fform\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n \u003C\u002Fv-card\u003E\n \u003C\u002Fv-flex\u003E\n \u003C\u002Fv-layout\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport format from \"date-fns\u002Fformat\";\nimport addWeeks from \"date-fns\u002Fadd_weeks\";\nexport default {\n props: [\"item\", \"from\"],\n data() {\n return {\n sellByDate: \"\",\n itemSellByDate: format(this.item.sellByDate, \"YYYY-MM-DD\"),\n tmpSellByDate: format(addWeeks(new Date(), 520), \"YYYY-MM-DD\")\n };\n },\n methods: {\n editItem() {\n const today = new Date();\n const editedItem = {\n id: this.item.id,\n Scancode: document.getElementById(\"scancode\").value,\n ReceiptAlias: document.getElementById(\"receiptAlias\").value,\n Brand: document.getElementById(\"brandName\").value,\n SellbyDate: document.getElementById(\"sellByDate\").value,\n creatorId: this.item.creatorId,\n editedBy: this.$store.state.user.userId,\n lastEditDate: format(today, \"MMM Do YYYY h:mm A\")\n };\n this.$store.state.loc = this.from;\n this.$store.dispatch(\"editItem\", editedItem);\n },\n duplicate() {\n const today = new Date();\n const duplicateItem = {\n Scancode: document.getElementById(\"scancode\").value,\n ReceiptAlias: document.getElementById(\"receiptAlias\").value,\n Brand: document.getElementById(\"brandName\").value,\n SellbyDate: \"\",\n creatorId: this.item.creatorId,\n editedBy: this.$store.state.user.userId,\n lastEditDate: format(today, \"MMM Do YYYY h:mm A\"),\n reorderDate: \"\"\n };\n this.$store.commit(\"clearLoadedProduct\");\n this.$store.commit(\"loadProduct\", duplicateItem);\n this.$router.push(\"\u002FduplicateItem\");\n },\n format(val) {\n return format(val, \"MM-DD-YYYY\");\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\u003C\u002Fstyle\u003E\n","id":"mod_EuQ9Qbcovq6uBLSXeyeurr","is_binary":false,"title":"editItem.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"ryj-JK2OR6X","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rkN1F3_AaX"},{"code":"const methods = {\n methods: {\n makePrintable() {\n if (!this.printable) {\n this.$store.commit(\"makePrintable\");\n this.txtPrintable = \"\u003C\u003C\u003C\";\n } else {\n this.$store.commit(\"showNavbar\");\n this.txtPrintable = \"Printable version\";\n }\n },\n getData() {\n let arrItems = [];\n if (this.productsDue) {\n this.productsDue.forEach(el =\u003E {\n arrItems.push({\n BrandName: el.brandName,\n ProductName: el.receiptAlias,\n Scancode: el.scancode,\n SellbyDate: el.SellbyDate\n });\n });\n } else {\n this.reorders.forEach(el =\u003E {\n arrItems.push({\n BrandName: el.brandName,\n ProductName: el.receiptAlias,\n Scancode: el.scancode\n });\n });\n }\n\n return arrItems;\n },\n getColumns() {\n return [\n {\n title: \"Brand Name\",\n dataKey: \"BrandName\"\n },\n {\n title: \"Product name\",\n dataKey: \"ProductName\"\n },\n {\n title: \"Scancode\",\n dataKey: \"Scancode\"\n },\n {\n title: \"Sell By Date\",\n dataKey: \"SellbyDate\"\n }\n ];\n },\n exportPdf() {\n let doc = new jsPDF(\"p\", \"pt\");\n doc.autoTable(this.getColumns(), this.getData());\n doc.save(\"SellByDue.pdf\");\n }\n }\n};\n\nexport default methods;\n","id":"mod_RqwDWhFRMYvL5KTNyi9CPr","is_binary":false,"title":"printUtils.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T01:44:04","upload_id":null,"shortid":"B1gGyF2dRTX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"By8JFhd06Q"},{"code":"import isWithinRange from \"date-fns\u002Fis_within_range\";\nimport { addDays, addMonths } from \"date-fns\";\n\nexport const products = state =\u003E {\n console.log(\"getter products\");\n let arrProducts = state.products.filter(el =\u003E {\n return el.reorderDate === \"\";\n });\n return arrProducts;\n};\n\nexport const reorderedItems = state =\u003E {\n console.log(\"getter reordered\");\n let arrReorders = state.products.filter(el =\u003E {\n return el.onReorderList === true;\n });\n return arrReorders;\n};\n\nexport const loadedProduct = state =\u003E {\n console.log(\"getter loaded product\");\n return state.loadedProduct;\n};\n\nexport const addItem = state =\u003E {\n console.log(\"getters additem\");\n return state.addItem;\n};\n","id":"mod_AL1pNQAYgYML9Aa9Ak5EFy","is_binary":false,"title":"getters.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2018-12-14T10:13:34","upload_id":null,"shortid":"Sy7GyYnuCT7","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"E0r2k"},{"code":"","id":"mod_T1mTY49mUnsT6o4bG8PQfq","is_binary":false,"title":"getters.js","sha":null,"inserted_at":"2018-12-14T10:17:28","updated_at":"2018-12-14T10:17:28","upload_id":null,"shortid":"2gQlM","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"677vN"},{"code":"","id":"mod_7NhadRwjJ6zLW5NXKqBCMN","is_binary":false,"title":"actions.js","sha":null,"inserted_at":"2018-12-14T10:17:36","updated_at":"2018-12-14T10:17:36","upload_id":null,"shortid":"DQlkA","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"677vN"},{"code":"","id":"mod_CTKMuMe49X1DKL4PhY6wJS","is_binary":false,"title":"mutations.js","sha":null,"inserted_at":"2018-12-14T10:17:45","updated_at":"2018-12-14T10:17:45","upload_id":null,"shortid":"yP1oR","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"677vN"},{"code":"import * as getters from \".\u002Fgetters\";\nimport * as actions from \".\u002Factions\";\nimport * as mutations from \".\u002Fmutations\";\n\nconst state = {\n session: [{ user: \"a\" }]\n};\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations\n};\n","id":"mod_XXNGMaCwsB867KuwcHTP7k","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2018-12-14T10:16:49","updated_at":"2018-12-14T10:17:17","upload_id":null,"shortid":"Zz6LQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"677vN"},{"code":"import * as firebase from \"firebase\";\n\nimport { parseOp } from \"..\u002Fservices\u002FparseOp\";\nimport router from \"..\u002Frouter\u002Findex\";\nimport { StockMove } from \"..\u002Fmodels\u002FstockMovements\";\nimport { STOCKMOVEMENTS } from \"..\u002Fmodels\u002FstockMovementColMapping\";\nimport { STOCK } from \"..\u002Fmodels\u002FstockColMapping\";\nimport { STORELOCA } from \"..\u002Fmodels\u002FstoreLocationColMapping\";\n\n\u002F* utility functions for actions *\u002F\nfunction moveObjToModel(moves) {\n const items = [];\n let objectId = \"\";\n let moveId = \"\";\n let eventDate = new Date();\n let productName = \"\";\n let inOut = false;\n let marketPrice = 0;\n let buyingPrice = 0;\n let packing = \"\";\n let remarks = \"\";\n let quantity = 0;\n let source = null;\n let destination = null;\n \u002F\u002F standardize each item with elements of the legacy db\n\n Object.keys(moves).forEach(key =\u003E {\n moves[key].id === undefined\n ? (objectId = null)\n : (objectId = moves[key].id);\n\n moves[key].moveId === undefined\n ? (moveId = null)\n : (moveId = moves[key].moveId);\n\n moves[key].get(STOCKMOVEMENTS.EventDate) === undefined\n ? (eventDate = new Date())\n : (eventDate = moves[key].get(STOCKMOVEMENTS.EventDate));\n console.log(\"-------------------------\");\n console.log(eventDate);\n moves[key].get(STOCKMOVEMENTS.ProductName) === undefined\n ? (productName = \"\")\n : (productName = moves[key].get(STOCKMOVEMENTS.ProductName));\n moves[key].get(STOCKMOVEMENTS.InOut) === undefined\n ? (inOut = true)\n : (inOut = moves[key].get(STOCKMOVEMENTS.InOut));\n\n \u002F\u002F fill all blank sellBy dates for date sorting...these will still show as blank on products pages\n moves[key].get(STOCKMOVEMENTS.MarketPrice) === undefined\n ? (marketPrice = 0)\n : (marketPrice = moves[key].get(STOCKMOVEMENTS.MarketPrice));\n\n moves[key].get(STOCKMOVEMENTS.BuyingPrice) === undefined\n ? (buyingPrice = 0)\n : (buyingPrice = moves[key].get(STOCKMOVEMENTS.BuyingPrice));\n moves[key].get(STOCKMOVEMENTS.Packing) === undefined\n ? (packing = \"\")\n : (packing = moves[key].get(STOCKMOVEMENTS.Packing));\n moves[key].get(STOCKMOVEMENTS.Remarks) === undefined\n ? (remarks = \"\")\n : (remarks = moves[key].get(STOCKMOVEMENTS.Remarks));\n moves[key].get(STOCKMOVEMENTS.Quantity) === undefined\n ? (quantity = 0)\n : (quantity = moves[key].get(STOCKMOVEMENTS.Quantity));\n\n moves[key].get(STOCKMOVEMENTS.source) === undefined\n ? (source = null)\n : (source = moves[key].get(STOCKMOVEMENTS.source).toJSON());\n moves[key].get(STOCKMOVEMENTS.destination) === undefined\n ? (destination = null)\n : (destination = moves[key].get(STOCKMOVEMENTS.destination).toJSON());\n\n \u002F\u002Fconsole.log(JSON.stringify(destination.get(\"storageType\")));\n items.push({\n objectId: objectId,\n moveId: moveId,\n productName: productName,\n eventDate: eventDate,\n inOut: inOut,\n packing: packing,\n marketPrice: marketPrice,\n buyingPrice: buyingPrice,\n remarks: remarks,\n quantity: quantity,\n source: source,\n destination: destination\n });\n });\n return items;\n}\nfunction storeLocationToModel(storeLoca) {\n const items = [];\n let objectId = \"\";\n let sectionCode = \"\";\n let sectionName = \"\";\n let location = \"\";\n let name = \"\";\n let locationCode = \"\";\n let sectionId = 0;\n let storageType = \"\";\n \u002F\u002F standardize each item with elements of the legacy db\n\n Object.keys(storeLoca).forEach(key =\u003E {\n storeLoca[key].id === undefined\n ? (objectId = \"\")\n : (objectId = storeLoca[key].id);\n\n storeLoca[key].get(STORELOCA.sectionId) === undefined\n ? (sectionId = \"\")\n : (sectionId = storeLoca[key].get(STORELOCA.sectionId));\n\n storeLoca[key].get(STORELOCA.sectionCode) === undefined\n ? (sectionCode = new Date())\n : (sectionCode = storeLoca[key].get(STORELOCA.sectionCode));\n\n storeLoca[key].get(STORELOCA.sectionName) === undefined\n ? (sectionName = \"\")\n : (sectionName = storeLoca[key].get(STORELOCA.sectionName));\n storeLoca[key].get(STORELOCA.location) === undefined\n ? (location = \"\")\n : (location = storeLoca[key].get(STORELOCA.location));\n\n storeLoca[key].get(STORELOCA.name) === undefined\n ? (name = \"\")\n : (name = storeLoca[key].get(STORELOCA.name));\n\n storeLoca[key].get(STORELOCA.locationCode) === undefined\n ? (locationCode = 0)\n : (locationCode = storeLoca[key].get(STORELOCA.locationCode));\n\n storeLoca[key].get(STORELOCA.storageType)\n ? (storageType = storeLoca[key].get(STORELOCA.storageType))\n : (storageType = \"\");\n\n items.push({\n objectId: objectId,\n sectionId: sectionId,\n sectionName: sectionName,\n sectionCode: sectionCode,\n location: location,\n locationCode: locationCode,\n name: name,\n storageType: storageType\n });\n });\n return items;\n}\nfunction stockObjToModel(stock) {\n const items = [];\n let objectId = \"\";\n let stockId = \"\";\n let asOfDate = new Date();\n let product = \"\";\n let marketPrice = 0;\n let averageBuyingPrice = 0;\n let packing = \"\";\n let quantity = 0;\n let storeLocation = \"\";\n let section = \"\";\n let buyingPrice = 0;\n let totalValue = 0;\n \u002F\u002F standardize each item with elements of the legacy db\n\n Object.keys(stock).forEach(key =\u003E {\n stock[key].id === undefined\n ? (objectId = null)\n : (objectId = stock[key].id);\n\n stock[key].stockId === undefined\n ? (stockId = null)\n : (stockId = stock[key].stockId);\n\n stock[key].get(STOCK.product) === undefined\n ? (product = \"\")\n : (product = stock[key].get(STOCK.product));\n\n stock[key].get(STOCK.asOfDate) === undefined\n ? (asOfDate = new Date())\n : (asOfDate = stock[key].get(STOCK.asOfDate));\n\n \u002F\u002F fill all blank sellBy dates for date sorting...these will still show as blank on products pages\n stock[key].get(STOCK.marketPrice) === undefined\n ? (marketPrice = 0)\n : (marketPrice = stock[key].get(STOCK.marketPrice));\n\n stock[key].get(STOCK.averageBuyingPrice) === undefined\n ? (averageBuyingPrice = 0)\n : (averageBuyingPrice = stock[key].get(STOCK.averageBuyingPrice));\n stock[key].get(STOCK.packing) === undefined\n ? (packing = \"\")\n : (packing = stock[key].get(STOCK.packing));\n stock[key].get(STOCK.quantity) === undefined\n ? (quantity = 0)\n : (quantity = stock[key].get(STOCK.quantity));\n stock[key].get(STOCK.storeLocation) === undefined\n ? (storeLocation = \"\")\n : (storeLocation = stock[key].get(STOCK.storeLocation));\n stock[key].get(STOCK.section) === undefined\n ? (section = 0)\n : (section = stock[key].get(STOCK.section));\n\n stock[key].get(STOCK.totalValue)\n ? (totalValue = stock[key].get(STOCK.totalValue))\n : (totalValue = 0);\n\n stock[key].get(STOCK.buyingPrice)\n ? (buyingPrice = stock[key].get(STOCK.buyingPrice))\n : (buyingPrice = 0);\n\n items.push({\n objectId: objectId,\n stockId: stockId,\n product: product,\n asOfDate: asOfDate,\n packing: packing,\n marketPrice: marketPrice,\n averageBuyingPrice: averageBuyingPrice,\n totalValue: totalValue,\n quantity: quantity,\n storeLocation: storeLocation,\n section: section,\n buyingPrice: buyingPrice\n });\n console.log(\"items\");\n });\n return items;\n}\nasync function getAllCurrentStock() {\n let stock = await parseOp.getAllUpdatedStock();\n console.log(\"get all stock\");\n let items = stockObjToModel(stock);\n return items;\n}\nasync function getAllStoreLocations() {\n let storeLoca = await parseOp.getAllStoreLocations();\n\n let items = storeLocationToModel(storeLoca);\n console.log(\"returned storeloca\");\n return items;\n}\nasync function getAllCurrentMove() {\n console.log(\"action load all stock move\");\n\n let moves = await parseOp.getAllCurrentMove();\n console.log(\"all stock move returned\");\n console.log(moves);\n\n let items = moveObjToModel(moves);\n return items;\n}\nasync function getAllMoves() {\n console.log(\"action load all moves\");\n\n let moves = await parseOp.getAllMoves();\n console.log(\"all move returned\");\n console.log(moves);\n\n let items = moveObjToModel(moves);\n return items;\n}\nfunction processMove(base, move, natureOfMove) {\n let targetProduct = base.find(obj =\u003E {\n return obj.product === move.productName && obj.packing === move.packing;\n });\n if (targetProduct) {\n let totalQuantity = targetProduct.quantity + move.quantity * natureOfMove;\n let agTotalPrice =\n targetProduct.marketPrice * targetProduct.quantity +\n move.marketPrice * move.quantity * natureOfMove;\n let agAvgMarketPrice = agTotalPrice \u002F totalQuantity;\n\n let agTotalBuyingPrice =\n targetProduct.buyingPrice * targetProduct.quantity +\n move.buyingPrice * move.quantity * natureOfMove;\n let agAvgBuyingPrice = agTotalBuyingPrice \u002F totalQuantity;\n\n targetProduct.quantity = totalQuantity;\n targetProduct.marketPrice = agAvgMarketPrice;\n targetProduct.buyingPrice = agAvgBuyingPrice;\n\n let totalValue = targetProduct.quantity * targetProduct.marketPrice;\n let totalCost = targetProduct.quantity * targetProduct.buyingPrice;\n targetProduct.totalCost = totalCost;\n targetProduct.totalValue = totalValue;\n targetProduct.margin = (totalValue - totalCost) \u002F targetProduct.quantity;\n } else {\n \u002F\u002FAdd new move to aggretation\n console.log(\"moves added\");\n\n let totalValue = move.quantity * move.marketPrice;\n let totalCost = move.quantity * move.buyingPrice;\n \u002F* Create new agMove item *\u002F\n let newAgMove = {\n product: move.productName,\n packing: move.packing,\n quantity: move.quantity * natureOfMove,\n marketPrice: move.marketPrice,\n buyingPrice: move.buyingPrice,\n totalValue: totalValue,\n totalCost: totalCost,\n margin:\n move.quantity * natureOfMove !== 0\n ? ((totalValue - totalCost) \u002F move.quantity) * natureOfMove\n : 0\n };\n console.log(\"moves buying price:\" + move.buyingPrice);\n base.push(newAgMove);\n }\n console.log(base[0].buyingPrice);\n console.log(base);\n return base;\n}\n\u002F* Calculate the most up-to-date stock based on unprocessed movements and latest snapshot\n * param: move, a move object in the following form\n * {\n * objectId: '',\n * source: Object,\n * destination: Object,\n *\n * }\n * return: 0 for moves that do not add any additional stock\n * 1 for moves that add additional stock form external source (marked in StoragePoint class as SRCE)\n * -1 for moves that reduces stock by selling or dumping to external destinations\n *\u002F\nfunction isMoveAddOrMinus(move) {\n \u002F\u002Fmove.source is a ParseObject, so need to use .get() here\n \u002F\u002F move.source.fetch().then(obj =\u003E {\n \u002F\u002F console.log(\"fetch source\");\n \u002F\u002F console.log(obj.storeType);\n \u002F\u002F });\n if (move) {\n if (\n move.source.storageType === \"SRCE\" &&\n move.destination.storageType === \"STCK\"\n ) {\n return 1;\n }\n if (\n move.source.storageType === \"STCK\" &&\n move.destination.storageType === \"DEST\"\n ) {\n return -1;\n }\n return 0;\n }\n}\n\nfunction convertSnapshotToMove(snapshot, product, packing) {\n let snapshotProduct = {\n objectId: null,\n moveId: null,\n productName: \"\",\n eventDate: null,\n inOut: true,\n packing: null,\n marketPrice: 0,\n buyingPrice: 0,\n remarks: null,\n quantity: 0,\n source: \"SRCE\",\n destination: \"STCK\"\n };\n\n if (snapshot) {\n snapshotProduct.productName = snapshot.product;\n snapshotProduct.packing = snapshot.packing;\n snapshotProduct.marketPrice = snapshot.marketPrice;\n snapshotProduct.buyingPrice = snapshot.buyingPrice;\n snapshotProduct.quantity = snapshot.quantity;\n }\n return snapshotProduct;\n}\n\u002F\u002FAssume all moves are of different product type\n\u002F\u002Foutput an array of move object\nfunction aggregateMoves(moves) {\n let agMovesByProduct = [];\n let product = null;\n let packing = null;\n Object.keys(moves).forEach(key =\u003E {\n console.log(\"aggregatMove\");\n let natureOfMove = isMoveAddOrMinus(moves[key]);\n agMovesByProduct = processMove(agMovesByProduct, moves[key], natureOfMove);\n });\n return agMovesByProduct;\n}\nfunction calMostUpdatedStock(snapshot, moves) {\n console.log(\"calMostUpdatedStock\");\n let agMoves = aggregateMoves(moves);\n let newSnapshot = null;\n console.log(\"aggregate move returned\");\n Object.keys(snapshot).forEach(key =\u003E {\n console.log(\"loop snapshot for product\");\n\n \u002F\u002Fsince all snapshot product will be adding to stock\n let natureOfMove = 1;\n \u002F\u002Fsince processMove only accept move object, has to convert first\n newSnapshot = processMove(\n agMoves,\n convertSnapshotToMove(snapshot[key]),\n natureOfMove\n );\n });\n console.log(\"after calStock\");\n return newSnapshot;\n}\n\u002F* End of utility functions for actions *\u002F\n\n\u002F* all functions in action *\u002F\nexport const actions = {\n \u002F\u002F\u002F\u002F\u002F\u002F\u002FStart StockMovements \u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\n ADD_STOCKMOVES: async ({ commit, state }) =\u003E {\n console.log(\"Add moves\");\n let newMove = new StockMove();\n\n console.log(\"new move created\");\n \u002F\u002Fcalling mutations\n commit(\"ADD_STOCK_MOVEMENT\", newMove);\n return newMove;\n },\n UPDATE_STOCKMOVES: async ({ commit, state }, value) =\u003E {\n console.log(\"Update moves\");\n let updatedItem = await parseOp.updateRow(\"StockMovements\", value);\n console.log(\"update moves return from parseOp\");\n console.log(updatedItem);\n value.objectId = updatedItem.id;\n\n await commit(\"UPDATE_SINGLE_STOCK_MOVEMENT\", value);\n },\n DELETE_STOCKMOVES: async ({ commit, state }, value) =\u003E {\n console.log(\"Delete move\");\n parseOp.deleteRow(\"StockMovements\", value);\n\n await commit(\"DELETE_STOCK_MOVEMENT\", value);\n },\n LOAD_ALL_STORE_LOCATION: async ({ commit, state }) =\u003E {\n console.log(\"load store locations\");\n\n const items = await getAllStoreLocations();\n await commit(\"UPDATE_STORE_LOCATION\", items);\n },\n\n LOAD_ALL_CURSTOCKMOVES: async ({ commit, state }) =\u003E {\n console.log(\"action load all current movements\");\n\n \u002F\u002F let moves = await parseOp.getAll(\"StockMovements\");\n \u002F\u002F console.log(\"get all returning\");\n\n const items = await getAllCurrentMove();\n console.log(\"items\");\n\n await commit(\"UPDATE_STOCK_MOVEMENT\", items);\n \u002F\u002F if (state.loc !== \"\u002F\") {\n \u002F\u002F router.push(state.loc);\n \u002F\u002F }\n },\n LOAD_ALL_STOCKMOVES: async ({ commit, state }) =\u003E {\n console.log(\"action load all movements\");\n\n \u002F\u002F let moves = await parseOp.getAll(\"StockMovements\");\n \u002F\u002F console.log(\"get all returning\");\n\n const items = await getAllMoves();\n console.log(\"items\");\n\n await commit(\"UPDATE_ALL_MOVES\", items);\n \u002F\u002F if (state.loc !== \"\u002F\") {\n \u002F\u002F router.push(state.loc);\n \u002F\u002F }\n },\n \u002F\u002F\u002F\u002F\u002F\u002F\u002FEnd StockMovements \u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\n \u002F\u002F\u002F\u002F\u002F\u002F\u002FStart StockList \u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\n LOAD_ALL_STOCK: async ({ commit, state }) =\u003E {\n let unprocessedMoves = await getAllCurrentMove();\n console.log(\"Load all stock\");\n console.log(unprocessedMoves);\n let lastStockSnapshot = await getAllCurrentStock();\n console.log(\"latest stock snapshot returned\");\n console.log(lastStockSnapshot);\n let mostUpdatedStock = calMostUpdatedStock(\n lastStockSnapshot,\n unprocessedMoves\n );\n console.log(\"calculated stock returned\");\n console.log(mostUpdatedStock);\n\n await commit(\"UPDATE_STOCK\", mostUpdatedStock);\n \u002F\u002F if (state.loc !== \"\u002F\") {\n \u002F\u002F router.push(state.loc);\n \u002F\u002F }\n }\n};\n\n\u002F*************** End of all functions in action *************\u002F\n\nexport const signIn = ({ commit, dispatch }, user) =\u003E {\n console.log(\"action: signIn\");\n commit(\"setLoading\", true);\n Parse.User.logIn(user.email, user.password)\n .then(user =\u003E {\n commit(\"clearError\");\n\n console.log(\n \"User logged in successful with username: \" +\n user.get(\"username\") +\n \" and email: \" +\n user.get(\"email\")\n );\n dispatch(\"getUserInfo\", user.uid);\n })\n .catch(error =\u003E {\n console.log(\"login error\");\n commit(\"setLoading\", false);\n commit(\"setError\", error.message);\n });\n};\n\nexport const getUserInfo = ({ commit, dispatch }, userId) =\u003E {\n console.log(\"get user info\");\n firebase\n .database()\n .ref(\"users\")\n .child(userId)\n .once(\"value\")\n .then(data =\u003E {\n const objUser = data.val();\n commit(\"setUser\", objUser);\n if (objUser.authLevel === \"1\") {\n dispatch(\"loadUsers\");\n }\n dispatch(\"loadProducts\");\n });\n};\n\nexport const loadUsers = ({ commit }) =\u003E {\n console.log(\"load user from db\");\n firebase\n .database()\n .ref(\"users\")\n .once(\"value\")\n .then(data =\u003E {\n const users = [];\n const obj = data.val();\n for (let key in obj) {\n users.push({\n userId: obj[key].userId,\n name: obj[key].name,\n email: obj[key].email,\n authLevel: obj[key].authLevel\n });\n }\n commit(\"loadUsers\", users);\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const loadProducts = ({ commit, state }) =\u003E {\n console.log(\"load products\");\n firebase\n .database()\n .ref(\"products\")\n .once(\"value\")\n .then(data =\u003E {\n const objProducts = data.val();\n const items = [];\n let reorderDate = \"\";\n let lastEditDate = \"\";\n let sbd = \"\";\n let tempSellByDate = \"\";\n let creatorId = \"\";\n let editedBy = \"\";\n let onReorderList = \"\";\n\n if (state.user.authLevel === \"1\") {\n \u002F\u002F 10 years in the future, created for sorting purposes\n tempSellByDate = state.defaultSellByDate;\n } else {\n tempSellByDate = \"\";\n }\n\n \u002F\u002F standardize each item with elements of the legacy db\n\n Object.keys(objProducts).forEach(key =\u003E {\n objProducts[key].reorderDate === undefined\n ? (reorderDate = \"\")\n : (reorderDate = objProducts[key].reorderDate);\n objProducts[key].onReorderList === undefined\n ? (onReorderList = false)\n : (onReorderList = objProducts[key].onReorderList);\n objProducts[key].lastEditDate === undefined\n ? (lastEditDate = \"\")\n : (lastEditDate = objProducts[key].lastEditDate);\n\n \u002F\u002F fill all blank sellBy dates for date sorting...these will still show as blank on products pages\n objProducts[key].SellbyDate === \"\"\n ? (sbd = tempSellByDate)\n : (sbd = objProducts[key].SellbyDate);\n\n objProducts[key].creatorId === undefined\n ? (creatorId = \"\")\n : (creatorId = objProducts[key].creatorId);\n objProducts[key].editedBy === undefined\n ? (editedBy = \"\")\n : (editedBy = objProducts[key].editedBy);\n\n items.push({\n id: key,\n brandName: objProducts[key].Brand,\n receiptAlias: objProducts[key].ReceiptAlias,\n scancode: objProducts[key].Scancode,\n SellbyDate: sbd,\n creatorId: creatorId,\n editedBy: editedBy,\n lastEditDate: lastEditDate,\n reorderDate: reorderDate,\n onReorderList: onReorderList\n });\n });\n\n commit(\"loadProducts\", items);\n commit(\"setLoading\", false);\n if (state.loc !== \"\u002FaddNewItem\") {\n router.push(state.loc);\n }\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const signUp = ({ commit, dispatch }, newUser) =\u003E {\n console.log(\"action: signup\");\n commit(\"setLoading\", true);\n firebase\n .auth()\n .createUserWithEmailAndPassword(newUser.email, newUser.password)\n .then(user =\u003E {\n commit(\"setLoading\", false);\n commit(\"clearError\");\n const currUser = {\n userId: user.uid,\n name: newUser.name,\n email: user.email,\n authLevel: \"3\"\n };\n dispatch(\"addNewUser\", currUser);\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const addNewUser = ({ commit, dispatch }, currUser) =\u003E {\n console.log(\"action: addnewuser\");\n firebase\n .database()\n .ref(\"users\")\n .child(currUser.userId)\n .update(currUser)\n .then(data =\u003E {\n commit(\"clearAll\");\n dispatch(\"getUserInfo\", currUser.userId);\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n commit(\"setLoading\", false);\n });\n};\n\nexport const editUser = ({ commit }, user) =\u003E {\n console.log(\"action: edit user\");\n firebase\n .database()\n .ref(\"users\")\n .child(user.userId)\n .update(user)\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n console.log(error);\n });\n router.replace(\"\u002Fusers\");\n};\n\nexport const addNewItem = ({ commit, dispatch }, newItem) =\u003E {\n firebase\n .database()\n .ref(\"products\")\n .push(newItem)\n .then(data =\u003E {\n dispatch(\"loadProducts\");\n commit(\"setScancodeStatus\", false);\n commit(\"clearMessage\");\n commit(\"setMessageSuccess\", \"Item sucessfully added!\");\n })\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n });\n};\n\nexport const editItem = ({ commit, dispatch }, item) =\u003E {\n console.log(\"action: edit item\");\n firebase\n .database()\n .ref(\"products\")\n .child(item.id)\n .update(item)\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n console.log(error);\n });\n dispatch(\"loadProducts\");\n};\n\nexport const reorderItem = ({ commit, dispatch }, reorderedItem) =\u003E {\n console.log(\"action: reorder Item\");\n firebase\n .database()\n .ref(\"products\")\n .child(reorderedItem.id)\n .update(reorderedItem)\n .catch(error =\u003E {\n commit(\"setError\", error.message);\n console.log(error);\n });\n dispatch(\"loadProducts\");\n};\n\nexport const setLoadedScancode = ({ commit, state }, objItem) =\u003E {\n console.log(\"action: setLoadedScancode\");\n if (objItem.scancodeFound) {\n commit(\"setMessage\", \"Item found. Enter new Sell By date.\");\n let product = state.products.find(el =\u003E el.scancode === objItem.sc);\n commit(\"setScancodeStatus\", true);\n commit(\"loadProduct\", product);\n } else {\n commit(\"setMessage\", \"Product not found. Add item.\");\n commit(\"setAddItem\", true);\n commit(\"setLoadedScancode\", objItem.sc);\n }\n};\n\nexport const addOrder = ({ commit, state, dispatch }, objItem) =\u003E {\n console.log(\"action: addOrder\");\n if (objItem.scancodeFound) {\n let product = state.products.find(el =\u003E el.scancode === objItem.sc);\n let objItemRestock = { itemId: product.id, action: \"add\" };\n dispatch(\"setRestockStatus\", objItemRestock);\n router.push(\"\u002Freorders\");\n commit(\"setMessageSuccess\", \"Item added to list.\");\n } else {\n commit(\"setMessage\", \"Product not found!\");\n setTimeout(() =\u003E {\n commit(\"clearMessage\");\n }, 3500);\n }\n};\n\nexport const setRestockStatus = ({ commit, dispatch }, objItemRestock) =\u003E {\n console.log(\"action: setRestockStatus\");\n commit(\"setLoading\", true);\n let entryRef = firebase\n .database()\n .ref(\"products\")\n .child(objItemRestock.itemId);\n let restockStatus = true;\n objItemRestock.action === \"remove\" ? (restockStatus = false) : \"\";\n return entryRef\n .update({ onReorderList: restockStatus })\n .then(() =\u003E {\n console.log(\"Document successfully updated!\");\n dispatch(\"loadProducts\");\n })\n .catch(error =\u003E {\n console.error(\"Error updating document: \", error);\n });\n};\n\nexport const clearRestockList = ({ commit, dispatch, getters }) =\u003E {\n console.log(\"action: clearREstocklist\");\n commit(\"setLoading\", true);\n getters.reorderedItems.forEach(el =\u003E {\n let itemId = el.id;\n let entryRef = firebase\n .database()\n .ref(\"products\")\n .child(itemId);\n return entryRef.update({\n onReorderList: false\n });\n });\n dispatch(\"loadProducts\");\n};\n","id":"mod_Xep5KtKW3mLWHSk8Pq8Yzb","is_binary":false,"title":"actions.js","sha":null,"inserted_at":"2018-12-14T10:18:06","updated_at":"2019-01-24T15:03:25","upload_id":null,"shortid":"vlYqn","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rJdkFhdCpX"},{"code":"import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport format from \"date-fns\u002Fformat\";\nimport addWeeks from \"date-fns\u002Fadd_weeks\";\n\u002F\u002F import inventory from \".\u002Fmodule\u002FInventory\u002Findex\";\n\u002F\u002F import stockMovements from \".\u002Fmodule\u002FStockMovements\u002Findex\";\n\u002F\u002F import login from \".\u002Fmodule\u002FLogin\u002Findex\";\nimport { mutations } from \".\u002Fmutations\";\nimport { actions } from \".\u002Factions\";\nimport { getters } from \".\u002Fgetters\";\n\nVue.use(Vuex);\n\nexport const store = new Vuex.Store({\n \u002F\u002F modules: {\n \u002F\u002F login: login,\n \u002F\u002F stockMove: stockMovements,\n \u002F\u002F stock: inventory\n \u002F\u002F },\n state: {\n loading: false,\n user: null,\n stockMovements: null,\n allMoves: null,\n stockList: null,\n storeLoca: null,\n loadedProducts: null,\n loadedUsers: [],\n fbError: \"\",\n hideNav: false,\n loc: \"\",\n showMonth: false,\n scancodeFound: false,\n loadedScancode: \"\",\n message: \"\",\n messageSuccess: \"\",\n addItem: false,\n defaultSellByDate: format(addWeeks(new Date(), 520), \"YYYY-MM-DD\")\n },\n mutations,\n actions,\n getters\n});\n","id":"mod_Dpg5Fr8i3GJTzUU3rqHJtU","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-01-23T11:53:17","upload_id":null,"shortid":"B14MyK2_Rpm","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"rJdkFhdCpX"},{"code":"\u003Cscript\u003E\nimport Datepicker from \"vuejs-datepicker\";\nimport ModalPopup from \"..\u002Fshared\u002FPopup\";\nimport vselect from \"vue-select\";\nexport default {\n name: \"MoveManager\",\n components: {\n datepicker: Datepicker,\n modalpopup: ModalPopup,\n \"v-select\": vselect\n },\n data() {\n console.log(\"getting data\");\n console.log(\"this is move list data\");\n console.log(this);\n return {\n saveData: null,\n rownum: 1,\n showModal: false,\n isContinue: false\n };\n },\n computed: {\n rows: {\n get() {\n console.log(\"getting rows\");\n if (!this.$store.state.stockMovements) {\n console.log(\"stockeMovements is undefined\");\n this.initData();\n }\n if (!this.$store.state.stockMovements) {\n return [];\n }\n console.log(JSON.stringify(this.$store.state.stockMovements));\n \u002F\u002Fconsole.log(this.$store.state.stockMovements[0].source);\n \u002F\u002Fconsole.log(JSON.stringify(this.$store.state.stockMovements[0].source));\n \u002F\u002Fconsole.log(this.$store.state.stockMovements[0].source.toJSON());\n return this.$store.state.stockMovements;\n },\n set(value) {\n this.updateData();\n }\n },\n storeLocations: {\n get() {\n if (!this.$store.state.storeLoca) {\n console.log(\"store location not defined\");\n this.initData();\n }\n console.log(\"getting store location options\");\n console.log(JSON.stringify(this.$store.state.storeLoca));\n return this.$store.state.storeLoca;\n }\n }\n },\n props: {\n myOptions: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n getObj: function() {\n console.log(JSON.stringify(this.$store.state.stockMovements));\n return this.$store.state.stockMovements;\n },\n updateRow: function(value) {\n this.$store.dispatch(\"UPDATE_STOCKMOVES\", value);\n },\n initData: async function() {\n console.log(\"initData\");\n\n let storeLoca = await this.$store.dispatch(\"LOAD_ALL_STORE_LOCATION\");\n let result = await this.$store.dispatch(\"LOAD_ALL_CURSTOCKMOVES\");\n \u002F\u002F .then(data =\u003E {\n \u002F\u002F console.log(data);\n \u002F\u002F })\n \u002F\u002F .catch(err =\u003E {\n \u002F\u002F console.log(\"error\");\n \u002F\u002F console.log(err);\n \u002F\u002F });\n console.log(\"movelist storeloca\");\n\n console.log(JSON.stringify(this.$store.state.stockMovements));\n },\n updateData: async function() {\n console.log(\"updateData\");\n this.rows = this.$store.state.stockMovememnts;\n },\n addRow: async function(count) {\n var numRows = this.rows.length;\n\n if (numRows \u003E= 10) return;\n\n for (var i = 1; i \u003C= count; i++) {\n await this.$store.dispatch(\"ADD_STOCKMOVES\");\n this.rows.push();\n if (++numRows === 10) break;\n }\n\n console.log(\"return from add\");\n console.log(this.$store.state.stockMovements);\n \u002F\u002F this.$router.push(\"\u002FbulkInput\");\n },\n removeRow: function(row) {\n \u002F\u002F \u002F\u002Fconsole.log(row);\n \u002F\u002F this.showModal = true;\n \u002F\u002F console.log(\"try to delete row\" + this.showModal);\n \u002F\u002F \u002F\u002Fwait for modal dialog to close\n \u002F\u002F while (this.showModal) {\n \u002F\u002F this.showModal = false;\n \u002F\u002F }\n \u002F\u002F if (this.isContinue) {\n \u002F\u002F this.$store.dispatch(\"DELETE_STOCKMOVES\", row);\n \u002F\u002F this.isContinue = false;\n \u002F\u002F }\n let isContinue = confirm(\"Are you sure you want to delete this row?\");\n if (isContinue) {\n this.$store.dispatch(\"DELETE_STOCKMOVES\", row);\n }\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Ctemplate\u003E\n \u003Cdiv id=\"MoveList\" class=\"subjects-content\"\u003E\n \u003Ch3 class=\"subjects-trimester-title\"\u003E{{ $t(\"appName\") }}\u003C\u002Fh3\u003E\n \u003Ch4 class=\"subjects-trimester-title\"\u003E{{ $t(\"movements\") }}\u003C\u002Fh4\u003E\n \u003Cdiv class=\"list-op-row\"\u003E\n \u003Cdiv class=\"list-op-pane\"\u003E\n {{ $t(\"addRowsLabel\") }}:  \n \u003Cinput\n v-model.number=\"rownum\"\n type=\"number\"\n min=\"1\"\n max=\"10\"\n name=\"rows\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003Cdiv\n class=\"btn btn-blueviolet btn-inline-block btn-create\"\n @click=\"addRow(rownum);\"\n v-show=\"rows.length \u003C 10\"\n \u003E\n \u003Ci class=\"material-icons icons-in-table icons-update\"\u003Eadd_circle\u003C\u002Fi\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv id=\"stock-move-list\" class=\"stock-move-list\"\u003E\n \u003Ctable id=\"StockTable\" class=\"table table-hover table-striped sortable\"\u003E\n \u003Cthead\u003E\n \u003Ctr\u003E\n \u003Cth\u003E{{ $t(\"eventDate\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"productName\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"packing\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"marketPrice\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"buyingPrice\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"quantity\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"inout\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"expireby\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"usedby\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"source\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"destination\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"storeLocation\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"storeSection\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"specialRequirements\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"remarks\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E\u003C\u002Fth\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Fthead\u003E\n\n \u003Ctbody\u003E\n \u003Ctr v-for=\"row in rows\"\u003E\n \u003C!-- Event Date --\u003E\n \u003Ctd\u003E\u003Cdatepicker :value=\"row.eventDate\"\u003E\u003C\u002Fdatepicker\u003E\u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Product Name --\u003E\n \u003Cinput type=\"text\" name=\"product\" v-model=\"row.productName\" \u002F\u003E\n\n \u003C!-- product Name --\u003E\n \u003C!--\n \u003Cselect v-model=\"row.productName\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"CHICKEN\"\u003EChicken\u003C\u002Foption\u003E\n \u003Coption value=\"BEEF\"\u003EBeef\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n --\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Packing --\u003E\n \u003C!--\n \u003Cselect v-model=\"row.packing\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"20\"\u003E20kg per pack\u003C\u002Foption\u003E\n \u003Coption value=\"10\"\u003E10 kg per pack\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n --\u003E\n\n \u003C!-- Packing --\u003E\n \u003Cinput type=\"text\" name=\"packing\" v-model=\"row.packing\" \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Market Price --\u003E\n \u003Cinput\n v-model.number=\"row.marketPrice\"\n type=\"number\"\n min=\"0\"\n max=\"999999999\"\n name=\"price\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Buying Price --\u003E\n \u003Cinput\n v-model.number=\"row.buyingPrice\"\n type=\"number\"\n min=\"0\"\n max=\"999999999\"\n name=\"buyprice\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Quantity --\u003E\n \u003Cinput\n v-model.number=\"row.quantity\"\n type=\"number\"\n min=\"0\"\n max=\"999999999\"\n name=\"quantity\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- In\u002FOut Toggle --\u003E\n \u003Cdiv class=\"switches\"\u003E\n \u003Ctoggle-button\n :value=\"row.inOut\"\n :labels=\"{ checked: 'IN', unchecked: 'OUT' }\"\n \u002F\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Ftd\u003E\n \u003C!-- Expired by --\u003E\n \u003Ctd\u003E\u003Cdatepicker :value=\"row.expiredby\"\u003E\u003C\u002Fdatepicker\u003E\u003C\u002Ftd\u003E\n \u003C!-- Used by --\u003E\n \u003Ctd\u003E\u003Cdatepicker :value=\"row.usedby\"\u003E\u003C\u002Fdatepicker\u003E\u003C\u002Ftd\u003E\n \u003C!-- Source --\u003E\n \u003Ctd style=\"min-width: 300px\"\u003E\n \u003Cv-select\n label=\"name\"\n :options=\"storeLocations\"\n v-model=\"row.source\"\n \u003E\u003C\u002Fv-select\u003E\n \u003C!-- Destination --\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd style=\"min-width: 300px\"\u003E\n \u003Cv-select\n label=\"name\"\n :options=\"storeLocations\"\n v-model=\"row.destination\"\n \u003E\u003C\u002Fv-select\u003E\n \u003C\u002Ftd\u003E\n \u003C!-- Store location --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.storelocation\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003C!-- Store Section --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.storesection\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003C!-- Special requirements --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.specialrequirements\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003C!-- Remarks --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.remarks\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cdiv class=\"btn-pane\"\u003E\n \u003Cdiv\n class=\"btn btn-inline-block btn-in-table\"\n @click=\"updateRow(row);\"\n \u003E\n \u003Ci class=\"material-icons icons-in-table icons-update\"\n \u003Echeck_circle\u003C\u002Fi\n \u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv\n class=\"btn btn-inline-block btn-in-table\"\n @click=\"removeRow(row);\"\n \u003E\n \u003Ci class=\"material-icons icons-in-table icons-delete\"\n \u003Eremove_circle\u003C\u002Fi\n \u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Ftbody\u003E\n \u003C\u002Ftable\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"modal-dialog-pane\"\u003E\n \u003Cmodalpopup\n v-if=\"showModal\"\n @continue=\"\n showModal = false;\n isContinue = true;\n \"\n @cancel=\"\n showModal = false;\n isContinue = false;\n \"\n \u003E\n \u003C!--\n you can use custom content here to overwrite\n default content\n --\u003E\n \u003C\u002Fmodalpopup\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\u003Cstyle\u003E\n.textboxCT {\n text-align: center;\n}\n\nth {\n color: white;\n}\nthead tr:first-child {\n background-color: #256d7b;\n}\ntbody tr:nth-child(even) {\n background-color: white;\n}\ntbody tr:nth-child(odd) {\n background-color: #b8ccd1;\n}\n.btn {\n padding: 8px;\n cursor: pointer;\n}\ndiv.btn-in-table {\n display: contents;\n float: left;\n width: 30%;\n}\ndiv.btn-pane {\n width: 60px;\n}\ni.icons-in-table {\n font-size: 22px;\n}\n.btn-create {\n color: orange;\n}\ni.icons-update {\n color: green;\n}\ni.icons-delete {\n color: #990000;\n}\n.list-op-pane {\n float: right;\n}\n.list-op-row {\n display: block;\n width: 100%;\n}\ndiv#stock-move-list {\n width: 100%;\n display: inline-block;\n overflow: auto;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_61w9XdrKSNy5eqp6yEJBdj","is_binary":false,"title":"MoveList.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-03-03T07:17:49","upload_id":null,"shortid":"49RO1","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Br0KN"},{"code":null,"id":"mod_TqQbUxVJkKRStMNYRfhaCv","is_binary":false,"title":"product.js","sha":null,"inserted_at":"2018-12-25T03:37:57","updated_at":"2018-12-25T05:15:01","upload_id":null,"shortid":"p8PQp","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"ZppPw"},{"code":"export class StockMove {\n objectId = null;\n moveId = new Date().getTime();\n eventDate = new Date();\n productName = \"\";\n inOut = true;\n marketPrice = 0;\n buyingPrice = 0;\n quantity = 0;\n packing = \"\";\n remarks = \"\";\n hasProcessed = false;\n isLocked = false;\n\n construct(data) {\n console.log(\"creating new stockMove\");\n this.objectId = !data || !data.objectId ? null : data.objectId;\n if (!data || !data.moveId) {\n this.moveId = new Date().getTime();\n } else {\n this.moveId = data.moveId;\n }\n if (!data || !data.EventDate) {\n this.eventDate = new Date();\n } else {\n this.eventDate = data.EventDate;\n }\n\n if (!data || !data.ProductName) {\n this.productName = \"UNKNOWN\";\n } else {\n this.productName = data.ProductName;\n }\n if (!data || !data.InOut) {\n this.inOut = true;\n } else {\n this.inOut = data.InOut;\n }\n if (!data || !data.MarketPrice) {\n this.marketPrice = 0;\n } else {\n this.marketPrice = data.MarketPrice;\n }\n if (!data || !data.BuyingPrice) {\n this.buyingPrice = 0;\n } else {\n this.buyingPrice = data.BuyingPrice;\n }\n if (!data || !data.quantity) {\n this.quantity = 0;\n } else {\n this.quantity = data.quantity;\n }\n this.packing = !data || !data.Packing ? null : data.Packing;\n this.remarks = !data || !data.Remarks ? \"\" : data.Remarks;\n this.hasProcessed = false;\n this.isLocked = false;\n }\n\n \u002F\u002F and so on, put other methods here\n}\n\u002F\u002F export const STOCKMOVEMENTS = {\n\u002F\u002F ObjectId: \"id\",\n\u002F\u002F ObjectKey: \"itemkey\",\n\u002F\u002F EventDate: \"EventDate\",\n\u002F\u002F ProductName: \"ProductName\",\n\u002F\u002F InOut: \"InOut\",\n\u002F\u002F MarketPrice: \"MarketPrice\",\n\u002F\u002F BuyingPrice: \"BuyingPrice\",\n\u002F\u002F Quantity: \"quantity\",\n\u002F\u002F Packing: \"Packaging\",\n\u002F\u002F Remarks: \"Remarks\"\n\u002F\u002F };\n","id":"mod_DESxS4G9vBBqP3VVifmPmm","is_binary":false,"title":"stockMovements.js","sha":null,"inserted_at":"2018-12-16T06:04:39","updated_at":"2019-01-13T09:39:34","upload_id":null,"shortid":"RDqDO","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"ZppPw"},{"code":"import Parse from \"parse\";\n\nParse.initialize(\n \"H9GTkRqXLAyYb3gnl8Af2ewdnqbYTEKEKqO8spXd\",\n \"4VQwbh5CtlUPOaXWKxN3KuzrSNefvChZToz91GQJ\"\n); \u002F\u002FPASTE YOUR Back4App APPLICATION ID\nParse.serverURL = \"https:\u002F\u002Fparseapi.back4app.com\u002F\";\n\nasync function update(objToUpdate, updateSource) {\n if (objToUpdate === null) {\n const StockMovements = Parse.Object.extend(\"StockMovements\");\n console.log(\"create new stockmovement\");\n \u002F\u002FobjToUpdate = Object.create(StockMovements);\n objToUpdate = new StockMovements();\n console.log(objToUpdate);\n }\n console.log(updateSource[\"source\"]);\n console.log(\"update field \" + updateSource[\"productName\"]);\n objToUpdate.set(\"EventDate\", updateSource[\"eventDate\"]);\n objToUpdate.set(\"ProductName\", updateSource[\"productName\"]);\n objToUpdate.set(\"InOut\", updateSource[\"inOut\"]);\n objToUpdate.set(\"MarketPrice\", updateSource[\"marketPrice\"]);\n objToUpdate.set(\"BuyingPrice\", updateSource[\"buyingPrice\"]);\n\n let srcLoca = new Parse.Object(\"StoragePoint\");\n srcLoca.id = updateSource[\"source\"] ? updateSource[\"source\"].objectId : null;\n console.log(updateSource[\"source\"]);\n console.log(updateSource[\"source\"].storageType);\n console.log(srcLoca.id);\n\n objToUpdate.set(\"source\", srcLoca);\n\n let destLoca = new Parse.Object(\"StoragePoint\");\n console.log(\"updating destination\");\n console.log(updateSource[\"destination\"]);\n console.log(updateSource[\"destination\"].storageType);\n destLoca.id = updateSource[\"destination\"]\n ? updateSource[\"destination\"].objectId\n : null;\n \u002F\u002F destLoca.id = \"eKSa4JJtC6\";\n console.log(destLoca);\n\n objToUpdate.set(\"destination\", destLoca);\n objToUpdate.set(\"quantity\", updateSource[\"quantity\"]);\n objToUpdate.set(\"Packaging\", updateSource[\"packing\"]);\n objToUpdate.set(\"Remarks\", updateSource[\"remarks\"]);\n\n objToUpdate.set(\"moveId\", updateSource[\"moveId\"]);\n objToUpdate.set(\"hasProcessed\", updateSource[\"hasProcessed\"]);\n objToUpdate.set(\"isLocked\", updateSource[\"isLocked\"]);\n\n console.log(\"updateing object\");\n console.log(objToUpdate);\n return await objToUpdate.save(null, {\n success: function(obj) {\n console.log(\"Object updated successfully\");\n return obj;\n },\n error: function(response, error) {\n console.log(\"Error: \" + error.message);\n return null;\n }\n });\n}\nfunction deleteMove(foundMove) {\n foundMove.destroy({\n success: function(response) {\n console.log(\"Pet \" + foundMove.get(\"name\") + \" erased successfully\");\n },\n error: function(response, error) {\n console.log(\"Error: \" + error.message);\n }\n });\n}\nexport const StockMovements = Parse.Object.extend(\"StockMovements\");\nexport const parseOp = {\n getAll: async (objName, colName, matchValue) =\u003E {\n let query = new Parse.Query(objName);\n let ret = null;\n if (colName) {\n query.equalTo(colName, matchValue);\n\n ret = await query.find();\n } else {\n console.log(\"Find all obj\");\n ret = await query.find();\n \u002F\u002F success: function(obj) {\n \u002F\u002F if (obj) {\n \u002F\u002F console.log(\n \u002F\u002F \"Obj found successful with name: \" +\n \u002F\u002F obj.get(\"ProductName\") +\n \u002F\u002F \" and quantity: \" +\n \u002F\u002F obj.get(\"quantity\")\n \u002F\u002F );\n \u002F\u002F } else {\n \u002F\u002F console.log(\"Nothing found, please try again\");\n \u002F\u002F }\n \u002F\u002F return obj;\n \u002F\u002F },\n \u002F\u002F error: function(error) {\n \u002F\u002F console.log(\"Error: \" + error.code + \" \" + error.message);\n \u002F\u002F return null;\n \u002F\u002F }\n \u002F\u002F });\n }\n console.log(\"returned obj\");\n console.log(ret);\n\n return ret;\n },\n deleteRow: async (objName, objToDelete) =\u003E {\n let query = new Parse.Query(objName);\n console.log(query);\n console.log(\"delete row - parseOp\" + objName);\n console.log(objToDelete[\"objectId\"]);\n query.equalTo(\"objectId\", objToDelete[\"objectId\"]);\n\n query\n .find()\n .then(results =\u003E {\n console.log(\"found object to be deleted\");\n console.log(objToDelete);\n if (results && results[0]) {\n results[0].destroy({\n success: function(response) {\n console.log(\n \"Move \" + results[0].get(\"objectId\") + \" erased successfully\"\n );\n },\n error: function(response, error) {\n console.log(\"Error: \" + error.message);\n }\n });\n } else {\n console.log(\"error in finding move\");\n }\n })\n .catch(error =\u003E {\n console.log(\"error\");\n console.log(\"Error: \" + error.code + \" \" + error.message);\n });\n },\n getAllCurrentMove: async () =\u003E {\n let objName = \"StockMovements\";\n let ret = null;\n\n let lockQuery = new Parse.Query(objName);\n lockQuery.equalTo(\"isLocked\", false);\n let processQuery = new Parse.Query(objName);\n processQuery.equalTo(\"hasProcessed\", false);\n\n let validQuery = Parse.Query.and(lockQuery, processQuery);\n validQuery.include(\"source\");\n validQuery.include(\"destination\");\n ret = await validQuery.find();\n\n console.log(JSON.stringify(ret));\n\n console.log(\"getting valid and current stockmovements\");\n console.log(ret);\n return ret;\n },\n getAllMoves: async () =\u003E {\n let objName = \"StockMovements\";\n let ret = null;\n\n let getAllQuery = new Parse.Query(objName);\n\n getAllQuery.include(\"source\");\n getAllQuery.include(\"destination\");\n ret = await getAllQuery.find();\n\n console.log(JSON.stringify(ret));\n\n console.log(\"getting all stockmovements\");\n console.log(ret);\n return ret;\n },\n getAllUpdatedStock: async () =\u003E {\n let objName = \"Stock\";\n let ret = null;\n\n let isCurQuery = new Parse.Query(objName);\n isCurQuery.equalTo(\"isCurrent\", true);\n\n ret = await isCurQuery.find();\n console.log(\"getting valid and current stockmovements\");\n return ret;\n },\n getAllStoreLocations: async () =\u003E {\n let objName = \"StoragePoint\";\n let ret = null;\n\n let isCurQuery = new Parse.Query(objName);\n\n ret = await isCurQuery.find();\n console.log(\"get all storagepoint\");\n console.log(JSON.stringify(ret));\n return ret;\n },\n getAllVisibleStock: async () =\u003E {\n let objName = \"Stock\";\n let ret = null;\n\n let isCurQuery = new Parse.Query(objName);\n isCurQuery.equalTo(\"isCurrent\", true);\n let isVisibleQuery = new Parse.Query(objName);\n isVisibleQuery.equalTo(\"isVisible\", true);\n\n let validQuery = Parse.Query.and(isCurQuery, isVisibleQuery);\n ret = await validQuery.find();\n console.log(\"getting valid and current stock\");\n return ret;\n },\n updateRow: async (objName, updatedObj) =\u003E {\n let query = new Parse.Query(objName);\n console.log(query);\n console.log(\"update row - parseOp\" + objName);\n console.log(updatedObj[\"objectId\"]);\n query.equalTo(\"objectId\", updatedObj[\"objectId\"]);\n \u002F\u002F query\n \u002F\u002F .find()\n \u002F\u002F .then(results =\u003E {\n \u002F\u002F console.log(\"Done\");\n \u002F\u002F console.log(results[0]);\n \u002F\u002F return results[0];\n \u002F\u002F })\n \u002F\u002F .catch(err =\u003E {\n \u002F\u002F console.log(\"Error occur\");\n \u002F\u002F console.log(err);\n \u002F\u002F });\n return await query\n .find()\n .then(async results =\u003E {\n let ret = null;\n console.log(\"found object to be updated\");\n console.log(updatedObj);\n if (results && results[0]) {\n console.log(\"getting inot update function\");\n ret = await update(results[0], updatedObj);\n } else {\n console.log(\"Nothing found, please try again\");\n ret = await update(null, updatedObj);\n }\n console.log(\"return from parse update function\");\n console.log(ret);\n return ret;\n })\n .catch(error =\u003E {\n console.log(\"error\");\n console.log(\"Error: \" + error.code + \" \" + error.message);\n return null;\n });\n },\n cloneObject: obj =\u003E {\n var clone = {};\n for (var i in obj) {\n if (obj[i] != null && typeof obj[i] === \"object\")\n clone[i] = this.cloneObject(obj[i]);\n else clone[i] = obj[i];\n }\n return clone;\n },\n addRow: async (objName, value) =\u003E {\n \u002F\u002F let obj = Parse.Object.extend(objName);\n \u002F\u002F let newobj = Object.create(obj.prototype);\n console.log(\"adding row\");\n console.log(value);\n let newobj = this.cloneObject(value);\n console.log(newobj);\n newobj.save(null, {\n success: function(pet) {\n console.log(\"object saved\");\n console.log(newobj);\n },\n error: function(response, error) {\n console.log(\"Error: \" + error.message);\n }\n });\n }\n};\n","id":"mod_V6MrBvLWV6ygeQPNP2KSSj","is_binary":false,"title":"parseOp.js","sha":null,"inserted_at":"2018-12-15T06:03:33","updated_at":"2019-01-14T15:43:49","upload_id":null,"shortid":"L0Y2p","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Go83r"},{"code":"export const STOCKMOVEMENTS = {\n ObjectId: \"objectId\",\n moveId: \"moveId\",\n EventDate: \"EventDate\",\n ProductName: \"ProductName\",\n InOut: \"InOut\",\n MarketPrice: \"MarketPrice\",\n BuyingPrice: \"BuyingPrice\",\n Quantity: \"quantity\",\n Packing: \"Packaging\",\n Remarks: \"Remarks\",\n source: \"source\",\n destination: \"destination\"\n};\n","id":"mod_FrooKBQa9WjMS7kwAMPgrR","is_binary":false,"title":"stockMovementColMapping.js","sha":null,"inserted_at":"2018-12-25T06:57:30","updated_at":"2019-01-04T15:52:42","upload_id":null,"shortid":"oj7BX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"ZppPw"},{"code":"\u003Cscript\u003E\nimport Datepicker from \"vuejs-datepicker\";\nimport ModalPopup from \"..\u002Fshared\u002FPopup\";\nimport vselect from \"vue-select\";\nexport default {\n name: \"ProductManager\",\n components: {\n datepicker: Datepicker,\n modalpopup: ModalPopup,\n \"v-select\": vselect\n },\n data() {\n console.log(\"getting data\");\n return {\n saveData: null,\n rownum: 1,\n showModal: false,\n isContinue: false\n };\n },\n computed: {\n rows: {\n get() {\n console.log(\"getting rows\");\n if (!this.$store.state.stockMovements) {\n console.log(\"stockeMovements is undefined\");\n this.initData();\n }\n if (!this.$store.state.stockMovements) {\n return [];\n }\n console.log(JSON.stringify(this.$store.state.stockMovements));\n \u002F\u002Fconsole.log(this.$store.state.stockMovements[0].source);\n \u002F\u002Fconsole.log(JSON.stringify(this.$store.state.stockMovements[0].source));\n \u002F\u002Fconsole.log(this.$store.state.stockMovements[0].source.toJSON());\n return this.$store.state.stockMovements;\n },\n set(value) {\n this.updateData();\n }\n },\n storeLocations: {\n get() {\n if (!this.$store.state.storeLoca) {\n console.log(\"store location not defined\");\n this.initData();\n }\n console.log(\"getting store location options\");\n console.log(JSON.stringify(this.$store.state.storeLoca));\n return this.$store.state.storeLoca;\n }\n }\n },\n props: {\n myOptions: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n getObj: function() {\n console.log(JSON.stringify(this.$store.state.stockMovements));\n return this.$store.state.stockMovements;\n },\n updateRow: function(value) {\n this.$store.dispatch(\"UPDATE_STOCKMOVES\", value);\n },\n initData: async function() {\n console.log(\"initData\");\n\n let storeLoca = await this.$store.dispatch(\"LOAD_ALL_STORE_LOCATION\");\n let result = await this.$store.dispatch(\"LOAD_ALL_CURSTOCKMOVES\");\n \u002F\u002F .then(data =\u003E {\n \u002F\u002F console.log(data);\n \u002F\u002F })\n \u002F\u002F .catch(err =\u003E {\n \u002F\u002F console.log(\"error\");\n \u002F\u002F console.log(err);\n \u002F\u002F });\n console.log(\"movelist storeloca\");\n\n console.log(JSON.stringify(this.$store.state.stockMovements));\n },\n updateData: async function() {\n console.log(\"updateData\");\n this.rows = this.$store.state.stockMovememnts;\n },\n addRow: async function(count) {\n var numRows = this.rows.length;\n\n if (numRows \u003E= 10) return;\n\n for (var i = 1; i \u003C= count; i++) {\n await this.$store.dispatch(\"ADD_STOCKMOVES\");\n this.rows.push();\n if (++numRows === 10) break;\n }\n\n console.log(\"return from add\");\n console.log(this.$store.state.stockMovements);\n \u002F\u002F this.$router.push(\"\u002FbulkInput\");\n },\n removeRow: function(row) {\n \u002F\u002F \u002F\u002Fconsole.log(row);\n \u002F\u002F this.showModal = true;\n \u002F\u002F console.log(\"try to delete row\" + this.showModal);\n \u002F\u002F \u002F\u002Fwait for modal dialog to close\n \u002F\u002F while (this.showModal) {\n \u002F\u002F this.showModal = false;\n \u002F\u002F }\n \u002F\u002F if (this.isContinue) {\n \u002F\u002F this.$store.dispatch(\"DELETE_STOCKMOVES\", row);\n \u002F\u002F this.isContinue = false;\n \u002F\u002F }\n let isContinue = confirm(\"Are you sure you want to delete this row?\");\n if (isContinue) {\n this.$store.dispatch(\"DELETE_STOCKMOVES\", row);\n }\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Ctemplate\u003E\n \u003Cdiv id=\"MoveList\" class=\"subjects-content\"\u003E\n \u003Ch3 class=\"subjects-trimester-title\"\u003EInventory Management System\u003C\u002Fh3\u003E\n \u003Ch4 class=\"subjects-trimester-title\"\u003EMovements\u003C\u002Fh4\u003E\n \u003Cdiv class=\"list-op-row\"\u003E\n \u003Cdiv class=\"list-op-pane\"\u003E\n Number of Rows:  \n \u003Cinput\n v-model.number=\"rownum\"\n type=\"number\"\n min=\"1\"\n max=\"10\"\n name=\"rows\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003Cdiv\n class=\"btn btn-blueviolet btn-inline-block btn-create\"\n @click=\"addRow(rownum);\"\n v-show=\"rows.length \u003C 10\"\n \u003E\n \u003Ci class=\"material-icons icons-in-table icons-update\"\u003Eadd_circle\u003C\u002Fi\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv id=\"stock-move-list\" class=\"stock-move-list\"\u003E\n \u003Ctable id=\"StockTable\" class=\"table table-hover table-striped sortable\"\u003E\n \u003Cthead\u003E\n \u003Ctr\u003E\n \u003Cth\u003EEvent Date\u003C\u002Fth\u003E\n \u003Cth\u003EProduct Name\u003C\u002Fth\u003E\n \u003Cth\u003EPacking\u003C\u002Fth\u003E\n \u003Cth\u003EMarket Price\u003C\u002Fth\u003E\n \u003Cth\u003EBuying Price\u003C\u002Fth\u003E\n \u003Cth\u003EQuantity\u003C\u002Fth\u003E\n \u003Cth\u003EIn\u002FOut\u003C\u002Fth\u003E\n \u003Cth\u003EExpired By\u003C\u002Fth\u003E\n \u003Cth\u003EUsed By\u003C\u002Fth\u003E\n \u003Cth\u003ESource\u003C\u002Fth\u003E\n \u003Cth\u003EDestination\u003C\u002Fth\u003E\n \u003Cth\u003EStore Location\u003C\u002Fth\u003E\n \u003Cth\u003EStore Section\u003C\u002Fth\u003E\n \u003Cth\u003ESpecial Requirements\u003C\u002Fth\u003E\n \u003Cth\u003ERemarks\u003C\u002Fth\u003E\n \u003Cth\u003E\u003C\u002Fth\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Fthead\u003E\n\n \u003Ctbody\u003E\n \u003Ctr v-for=\"row in rows\"\u003E\n \u003C!-- Event Date --\u003E\n \u003Ctd\u003E\u003Cdatepicker :value=\"row.eventDate\"\u003E\u003C\u002Fdatepicker\u003E\u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Product Name --\u003E\n \u003Cinput type=\"text\" name=\"product\" v-model=\"row.productName\" \u002F\u003E\n\n \u003C!-- product Name --\u003E\n \u003C!--\n \u003Cselect v-model=\"row.productName\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"CHICKEN\"\u003EChicken\u003C\u002Foption\u003E\n \u003Coption value=\"BEEF\"\u003EBeef\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n --\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Packing --\u003E\n \u003C!--\n \u003Cselect v-model=\"row.packing\"\u003E\n \u003Coption\u003E- - - -\u003C\u002Foption\n \u003E\u003Cbr \u002F\u003E\n \u003Coption value=\"20\"\u003E20kg per pack\u003C\u002Foption\u003E\n \u003Coption value=\"10\"\u003E10 kg per pack\u003C\u002Foption\u003E\n \u003C\u002Fselect\u003E\n --\u003E\n\n \u003C!-- Packing --\u003E\n \u003Cinput type=\"text\" name=\"packing\" v-model=\"row.packing\" \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Market Price --\u003E\n \u003Cinput\n v-model.number=\"row.marketPrice\"\n type=\"number\"\n min=\"0\"\n max=\"999999999\"\n name=\"price\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Buying Price --\u003E\n \u003Cinput\n v-model.number=\"row.buyingPrice\"\n type=\"number\"\n min=\"0\"\n max=\"999999999\"\n name=\"buyprice\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Quantity --\u003E\n \u003Cinput\n v-model.number=\"row.quantity\"\n type=\"number\"\n min=\"0\"\n max=\"999999999\"\n name=\"quantity\"\n class=\"rows-textbox\"\n \u002F\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- In\u002FOut Toggle --\u003E\n \u003Cdiv class=\"switches\"\u003E\n \u003Ctoggle-button\n :value=\"row.inOut\"\n :labels=\"{ checked: 'IN', unchecked: 'OUT' }\"\n \u002F\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Ftd\u003E\n \u003C!-- Expired by --\u003E\n \u003Ctd\u003E\u003Cdatepicker :value=\"row.expiredby\"\u003E\u003C\u002Fdatepicker\u003E\u003C\u002Ftd\u003E\n \u003C!-- Used by --\u003E\n \u003Ctd\u003E\u003Cdatepicker :value=\"row.usedby\"\u003E\u003C\u002Fdatepicker\u003E\u003C\u002Ftd\u003E\n \u003C!-- Source --\u003E\n \u003Ctd style=\"min-width: 300px\"\u003E\n \u003Cv-select\n label=\"name\"\n :options=\"storeLocations\"\n v-model=\"row.source\"\n \u003E\u003C\u002Fv-select\u003E\n \u003C!-- Destination --\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd style=\"min-width: 300px\"\u003E\n \u003Cv-select\n label=\"name\"\n :options=\"storeLocations\"\n v-model=\"row.destination\"\n \u003E\u003C\u002Fv-select\u003E\n \u003C\u002Ftd\u003E\n \u003C!-- Store location --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.storelocation\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003C!-- Store Section --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.storesection\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003C!-- Special requirements --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.specialrequirements\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003C!-- Remarks --\u003E\n \u003Ctd\u003E\u003Cinput type=\"text\" v-model=\"row.remarks\" \u002F\u003E\u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cdiv class=\"btn-pane\"\u003E\n \u003Cdiv\n class=\"btn btn-inline-block btn-in-table\"\n @click=\"updateRow(row);\"\n \u003E\n \u003Ci class=\"material-icons icons-in-table icons-update\"\n \u003Echeck_circle\u003C\u002Fi\n \u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv\n class=\"btn btn-inline-block btn-in-table\"\n @click=\"removeRow(row);\"\n \u003E\n \u003Ci class=\"material-icons icons-in-table icons-delete\"\n \u003Eremove_circle\u003C\u002Fi\n \u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Ftbody\u003E\n \u003C\u002Ftable\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"modal-dialog-pane\"\u003E\n \u003Cmodalpopup\n v-if=\"showModal\"\n @continue=\"\n showModal = false;\n isContinue = true;\n \"\n @cancel=\"\n showModal = false;\n isContinue = false;\n \"\n \u003E\n \u003C!--\n you can use custom content here to overwrite\n default content\n --\u003E\n \u003C\u002Fmodalpopup\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\u003Cstyle\u003E\n.textboxCT {\n text-align: center;\n}\n\nthead tr:first-child {\n background-color: #256d7b;\n}\ntbody tr:nth-child(even) {\n background-color: white;\n}\ntbody tr:nth-child(odd) {\n background-color: #b8ccd1;\n}\n.btn {\n padding: 8px;\n cursor: pointer;\n}\ndiv.btn-in-table {\n display: contents;\n float: left;\n width: 30%;\n}\ndiv.btn-pane {\n width: 60px;\n}\ni.icons-in-table {\n font-size: 22px;\n}\n.btn-create {\n color: orange;\n}\ni.icons-update {\n color: green;\n}\ni.icons-delete {\n color: #990000;\n}\n.list-op-pane {\n float: right;\n}\n.list-op-row {\n display: block;\n width: 100%;\n}\ndiv#stock-move-list {\n width: 100%;\n display: inline-block;\n overflow: auto;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_W4eY4NiZyjv4i69p3uWVhg","is_binary":false,"title":"ProductList.vue","sha":null,"inserted_at":"2018-12-25T08:38:50","updated_at":"2019-01-26T09:36:19","upload_id":null,"shortid":"2E5QJ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"VW44z"},{"code":"\u003C!-- template for the modal component --\u003E\n\u003Ctemplate\u003E\n \u003Ctransition name=\"modal\"\u003E\n \u003Cdiv class=\"modal-mask\"\u003E\n \u003Cdiv class=\"modal-wrapper\"\u003E\n \u003Cdiv class=\"modal-container\"\u003E\n \u003Cdiv class=\"modal-header\"\u003E\n \u003Cslot name=\"header\"\u003E default header \u003C\u002Fslot\u003E\n \u003C\u002Fdiv\u003E\n\n \u003Cdiv class=\"modal-body\"\u003E\u003Cslot name=\"body\"\u003E default body \u003C\u002Fslot\u003E\u003C\u002Fdiv\u003E\n\n \u003Cdiv class=\"modal-footer\"\u003E\n \u003Cslot name=\"footer\"\u003E\n default footer\n \u003Cbutton class=\"modal-default-button\" @click=\"$emit('continue');\"\u003E\n Yes\n \u003C\u002Fbutton\u003E\n \u003Cbutton class=\"modal-default-button\" @click=\"$emit('cancel');\"\u003E\n No\n \u003C\u002Fbutton\u003E\n \u003C\u002Fslot\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Ftransition\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cstyle\u003E\n.modal-mask {\n position: fixed;\n z-index: 9998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: table;\n transition: opacity 0.3s ease;\n}\n\n.modal-wrapper {\n display: table-cell;\n vertical-align: middle;\n}\n\n.modal-container {\n width: 300px;\n margin: 0px auto;\n padding: 20px 30px;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);\n transition: all 0.3s ease;\n font-family: Helvetica, Arial, sans-serif;\n}\n\n.modal-header h3 {\n margin-top: 0;\n color: #42b983;\n}\n\n.modal-body {\n margin: 20px 0;\n}\n\n.modal-default-button {\n float: right;\n}\n\n\u002F*\n * The following styles are auto-applied to elements with\n * transition=\"modal\" when their visibility is toggled\n * by Vue.js.\n *\n * You can easily play with the modal transition by editing\n * these styles.\n *\u002F\n\n.modal-enter {\n opacity: 0;\n}\n\n.modal-leave-active {\n opacity: 0;\n}\n\n.modal-enter .modal-container,\n.modal-leave-active .modal-container {\n -webkit-transform: scale(1.1);\n transform: scale(1.1);\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_AAEXvvHLBnqv1KGLgSv2DV","is_binary":false,"title":"Popup.vue","sha":null,"inserted_at":"2018-12-25T09:39:24","updated_at":"2018-12-25T13:17:46","upload_id":null,"shortid":"mMpZp","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"SyryY3d0TX"},{"code":"export const STOCK = {\n objectId: \"objectId\",\n stockId: \"stockId\",\n asOfDate: \"asOfDate\",\n product: \"product\",\n marketPrice: \"marketPrice\",\n averageBuyingPrice: \"averageBuyingPrice\",\n quantity: \"quantity\",\n packing: \"packing\",\n remarks: \"remarks\",\n section: \"section\",\n storeLocation: \"storeLocation\",\n buyingPrice: \"buyingPrice\"\n};\n","id":"mod_SK5kTJichhtFMWLUC4vUM4","is_binary":false,"title":"stockColMapping.js","sha":null,"inserted_at":"2018-12-28T16:13:33","updated_at":"2019-01-06T09:11:03","upload_id":null,"shortid":"j6j6z","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"ZppPw"},{"code":"\u003Cscript\u003E\nimport Datepicker from \"vuejs-datepicker\";\n\nexport default {\n name: \"StockManager\",\n components: {\n datepicker: Datepicker\n },\n data() {\n console.log(\"getting data\");\n return {\n saveData: null,\n rownum: 1,\n showModal: false,\n isContinue: false\n };\n },\n computed: {\n rows: {\n get() {\n console.log(\"getting stock rows\");\n if (!this.$store.state.stockList) {\n console.log(\"stockeList is undefined\");\n this.initData();\n }\n return this.$store.state.stockList;\n },\n set(value) {\n this.updateData(value);\n }\n }\n },\n props: {\n myOptions: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n getObj: function() {\n console.log(JSON.stringify(this.$store.state.stockList));\n return this.$store.state.stockList;\n },\n updateRow: function(value) {\n this.$store.dispatch(\"UPDATE_STOCK\", value);\n },\n initData: async function() {\n console.log(\"getting stock data\");\n\n let result = await this.$store.dispatch(\"LOAD_ALL_STOCK\");\n \u002F\u002F .then(data =\u003E {\n \u002F\u002F console.log(data);\n \u002F\u002F })\n \u002F\u002F .catch(err =\u003E {\n \u002F\u002F console.log(\"error\");\n \u002F\u002F console.log(err);\n \u002F\u002F });\n console.log(JSON.stringify(result));\n console.log(JSON.stringify(this.$store.state.stockList));\n },\n updateData: async function(value) {\n console.log(\"updateData\");\n this.$store.state.stockList = value;\n this.rows = this.$store.state.stockList;\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Ctemplate\u003E\n \u003Cdiv id=\"StockList\" class=\"subjects-content\"\u003E\n \u003Ch3 class=\"subjects-trimester-title\"\u003E{{ $t(\"appName\") }}\u003C\u002Fh3\u003E\n \u003Ch4 class=\"subjects-trimester-title\"\u003E{{ $t(\"stock\") }}\u003C\u002Fh4\u003E\n\n \u003Cdiv id=\"stock-move-list\" class=\"stock-move-list\"\u003E\n \u003Ctable id=\"StockTable\" class=\"table table-hover table-striped sortable\"\u003E\n \u003Cthead\u003E\n \u003Ctr\u003E\n \u003Cth\u003E{{ $t(\"productName\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"packing\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"marketPrice\") }}\u003C\u002Fth\u003E\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"avgBuyingPrice\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"profitMargin\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"quantity\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"totalValue\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"storeLocation\") }}\u003C\u002Fth\u003E\n \u003Cth\u003E{{ $t(\"storeSection\") }}\u003C\u002Fth\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Fthead\u003E\n\n \u003Ctbody\u003E\n \u003Ctr v-for=\"row in rows\"\u003E\n \u003Ctd\u003E\n \u003C!-- Product --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.product }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Packing --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.packing }} \u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Market Price --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.marketPrice }} \u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Buying Price --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.buyingPrice }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Profit Margin --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.margin }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003C!-- Quantity --\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.quantity }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003Ctd\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.totalValue }} \u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n\n \u003Ctd\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.storeLocation }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003C!-- Store Section --\u003E\n \u003Ctd\u003E\n \u003Cspan class=\"table-cell-text\"\u003E{{ row.storeSection }}\u003C\u002Fspan\u003E\n \u003C\u002Ftd\u003E\n \u003C\u002Ftr\u003E\n \u003C\u002Ftbody\u003E\n \u003C\u002Ftable\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cstyle\u003E\n.textboxCT {\n text-align: center;\n}\nth {\n color: white;\n}\nthead tr:first-child {\n background-color: #256d7b;\n}\ntbody tr:nth-child(even) {\n background-color: white;\n}\ntbody tr:nth-child(odd) {\n background-color: #b8ccd1;\n}\n.btn {\n padding: 8px;\n}\ndiv.btn-in-table {\n display: contents;\n float: left;\n width: 30%;\n}\ndiv.btn-pane {\n width: 60px;\n}\ni.icons-in-table {\n font-size: 22px;\n}\n.btn-create {\n color: orange;\n}\ni.icons-update {\n color: green;\n}\ni.icons-delete {\n color: #990000;\n}\n.list-op-pane {\n float: right;\n}\n.list-op-row {\n display: block;\n width: 100%;\n}\ndiv#stock-move-list {\n width: 100%;\n display: inline-block;\n overflow: auto;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_Sjpz5Z57ARbwBGFrgXhCjD","is_binary":false,"title":"StockList.vue","sha":null,"inserted_at":"2018-12-25T08:37:48","updated_at":"2019-03-03T07:17:26","upload_id":null,"shortid":"zl0Lr","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"PA2gn"},{"code":"","id":"mod_GcsquPGzVwnbPJaj9NazWh","is_binary":false,"title":"AutoComplete.vue","sha":null,"inserted_at":"2019-01-05T05:51:41","updated_at":"2019-01-05T05:51:41","upload_id":null,"shortid":"m8qLp","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"SyryY3d0TX"},{"code":"export const STORELOCA = {\n ObjectId: \"objectId\",\n sectionId: \"sectionId\",\n sectionCode: \"sectionCode\",\n sectionName: \"sectionName\",\n location: \"location\",\n name: \"name\",\n locationCode: \"locationCode\",\n storageType: \"storageType\"\n};\n","id":"mod_6ewmHAkoHWk9feJuGHmrwk","is_binary":false,"title":"storeLocationColMapping.js","sha":null,"inserted_at":"2019-01-05T08:58:04","updated_at":"2019-01-06T16:58:59","upload_id":null,"shortid":"7Wjo1","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"ZppPw"},{"code":"import Vue from \"vue\";\nimport Router from \"vue-router\";\nVue.use(Router);\n\nimport MainPage from \"..\u002Fcomponents\u002FMainPage\";\nimport Products from \"..\u002Fcomponents\u002FProducts.vue\";\nimport ProductsSellBy from \"..\u002Fcomponents\u002FProductsSellBy.vue\";\nimport ItemCheckIn from \"..\u002Fcomponents\u002FItemCheckIn\";\nimport AddNewItem from \"..\u002Fcomponents\u002FAddNewItem\";\nimport SignIn from \"..\u002Fcomponents\u002FSignIn\";\nimport SignUp from \"..\u002Fcomponents\u002FSignUp\";\nimport editItem from \"..\u002Fcomponents\u002FeditItem\";\nimport Users from \"..\u002Fcomponents\u002FUsers\";\nimport editUser from \"..\u002Fcomponents\u002FeditUser\";\nimport DuplicateItem from \"..\u002Fcomponents\u002FDuplicateItem\";\nimport Reorders from \"..\u002Fcomponents\u002FReorders\";\nimport MoveList from \"..\u002Fcomponents\u002Fmoves\u002FMoveList\";\nimport StockList from \"..\u002Fcomponents\u002Fstock\u002FStockList\";\nimport Report from \"..\u002Fcomponents\u002Freports\u002FReport\";\n\nexport default new Router({\n mode: \"history\",\n routes: [\n { path: \"\u002F\", component: StockList },\n { path: \"\u002FeditItem\", component: editItem, name: \"editItem\", props: true },\n {\n path: \"\u002FduplicateItem\",\n component: DuplicateItem,\n name: \"duplicateItem\",\n props: true\n },\n { path: \"\u002Fproducts\", component: Products },\n { path: \"\u002FproductsSellBy\", component: ProductsSellBy },\n { path: \"\u002FitemCheckIn\", component: ItemCheckIn },\n { path: \"\u002FaddNewItem\", component: AddNewItem },\n { path: \"\u002FsignIn\", component: SignIn },\n { path: \"\u002FsignUp\", component: SignUp },\n { path: \"\u002Fusers\", component: Users },\n { path: \"\u002Freorders\", component: Reorders },\n { path: \"\u002FeditUser\", component: editUser, name: \"editUser\", props: true },\n { path: \"\u002FMoveList\", component: MoveList },\n { path: \"\u002FStockList\", component: StockList },\n { path: \"\u002FReport\", component: Report }\n ]\n});\n","id":"mod_5qj9SK9ad7f9UEnUdU63mm","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-03-02T07:46:17","upload_id":null,"shortid":"SJ-Gkt2u0p7","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"r1PkKn_0a7"},{"code":"{\n \"name\": \"inventory-management\",\n \"description\": \"A Vue.js project\",\n \"version\": \"0.0.1\",\n \"author\": \"Cliff Lok\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"cross-env NODE_ENV=development webpack-dev-server --open --inline --hot\",\n \"build\": \"cross-env NODE_ENV=production webpack --progress --hide-modules\"\n },\n \"dependencies\": {\n \"vue-select\": \"^2.0\",\n \"date-fns\": \"^1.29.0\",\n \"firebase\": \"^4.9.1\",\n \"parse\": \"^2.1.0\",\n \"vue\": \"^2.5.22\",\n \"vue-router\": \"^3.0.1\",\n \"vuejs-dialog\": \"^0.4.7\",\n \"vuex\": \"^3.0.1\",\n \"vue-context-menu\": \"^2.0.6\",\n \"vuejs-datepicker\": \"^1.5.1\",\n \"vue-js-toggle-button\": \"^1.3.0\",\n \"vue-good-table\": \"^2.16.0\",\n \"vuetify\": \"^1.4.2\",\n \"vue-flag-icon\": \"^1.0.6\",\n \"vue-i18n\": \"^8.8.2\"\n },\n \"devDependencies\": {\n \"babel-core\": \"^6.26.0\",\n \"babel-loader\": \"^7.1.2\",\n \"babel-preset-env\": \"^1.6.0\",\n \"babel-preset-stage-2\": \"^6.24.1\",\n \"cross-env\": \"^5.0.5\",\n \"css-loader\": \"^0.28.7\",\n \"file-loader\": \"^1.1.4\",\n \"style-loader\": \"^0.13.1\",\n \"stylus\": \"^0.54.5\",\n \"stylus-loader\": \"^3.0.1\",\n \"vue-loader\": \"^13.0.5\",\n \"vue-template-compiler\": \"^2.5.3\",\n \"webpack\": \"^3.6.0\",\n \"webpack-dev-server\": \"^2.9.1\",\n \"material-design-icons\": \"^3.0.1\"\n },\n \"keywords\": []\n}\n","id":"mod_NmUBXyJQT9ATNQVfxecN12","is_binary":false,"title":"package.json","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-03-03T05:38:19","upload_id":null,"shortid":"B1CekY2OCTQ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":null},{"code":"\u003Cscript\u003E\nimport i18n from \".\u002Fplugins\u002Fi18n\";\nexport default {\n data() {\n return {\n sidebar: false,\n mini: false,\n right: null,\n languages: [\n { flag: \"us\", language: \"en\", title: \"English\" },\n { flag: \"cn\", language: \"cn\", title: \"中文\" }\n ]\n };\n },\n created(){\n i18n.locale = \"us\";\n },\n computed: {\n menuItems() {\n let menuItems = [];\n\n \u002F\u002F if (\n \u002F\u002F this.$store.state.user &&\n \u002F\u002F this.$store.state.user.authLevel === \"1\" &&\n \u002F\u002F this.$store.state.products.length \u003E 0\n \u002F\u002F ) {\n \u002F\u002Fused to bypass sign-in\n if (true) {\n console.log(\"user valid\");\n menuItems = [\n { icon: \"home\", title: this.$t(\"home\"), link: \"\u002FReport\" },\n { icon: \"view_list\", title: this.$t(\"stock\"), link: \"\u002FStockList\" },\n { icon: \"note_add\", title: this.$t(\"addMove\"), link: \"\u002FMoveList\" }\n ];\n } else {\n console.log(\"routing to signin from App\");\n \u002F\u002Fthis.$router.replace(\"\u002FsignIn\");\n \u002F\u002Fthis.$router.replace(\"\u002FStockList\");\n }\n\n return menuItems;\n },\n userIsAuthenticated() {\n console.log(\"auth\");\n return this.$store.state.user;\n },\n user() {\n console.log(\"get user App\");\n return this.$store.state.user;\n },\n hideNav() {\n console.log(\"App: hideNav\");\n return this.$store.state.hideNav;\n }\n },\n methods: {\n logOut() {\n console.log(\"App: logout\");\n this.$store.commit(\"clearAll\");\n },\n changeLocale(locale) {\n i18n.locale = locale;\n }\n }\n};\n\u003C\u002Fscript\u003E\n\n\u003Ctemplate\u003E\n \u003Cv-app\u003E\n \u003Cdiv :class=\"{ leftpanel: sidebar }\"\u003E\n \u003Cv-sidebar\n v-if=\"sidebar\"\n v-model=\"sidebar\"\n class=\"primary sidebar\"\n height=\"100%\"\n :close-on-click=\"false\"\n \u003E\n \u003Cdiv class=\"header-sidebar \"\u003E\n \u003Cv-btn class=\"sidebar-button\"\u003E{{ $t(\"appName\") }}\u003C\u002Fv-btn\u003E\n \u003C\u002Fdiv\u003E\n \u003Cv-sidebar-item\n v-for=\"item in this.menuItems\"\n :key=\"item.title\"\n :index=\"item.id\"\n :icon=\"item.icon\"\n class=\"sidebar-item \"\n \u003E\n \u003Cv-btn\n class=\"sidebar-button white--text\"\n flat\n :key=\"item.title\"\n :to=\"item.link\"\n \u003E\n {{ item.title }}\n \u003C\u002Fv-btn\u003E\n \u003C!-- \u003Cv-button :icon=\"item.icon\"\u003E\u003C\u002Fv-button\u003E --\u003E\n \u003C\u002Fv-sidebar-item\u003E\n \u003C!--\n \u003Cv-list class=\"pa-1\"\u003E\n \u003Cv-list-tile avatar tag=\"div\"\u003E\n \u003Cv-list-tile-avatar\u003E\n\n \u003Cimg src=\"https:\u002F\u002Frandomuser.me\u002Fapi\u002Fportraits\u002Fmen\u002F85.jpg\" \u002F\u003E\n\n \u003C\u002Fv-list-tile-avatar\u003E\n\n \u003Cv-list-tile-content\u003E\n \u003Cv-list-tile-title\u003EInventory Management\u003C\u002Fv-list-tile-title\u003E\n \u003C\u002Fv-list-tile-content\u003E\n \u003C\u002Fv-list-tile\u003E\n \u003C\u002Fv-list\u003E\n\n \u003Cv-list class=\"pt-0\" dense\u003E\n \u003Cv-list-tile\n v-for=\"item in this.menuItems\"\n :key=\"item.title\"\n :to=\"item.link\"\n \u003E\n \u003Cv-list-tile-action\u003E\n \u003Cv-icon\u003E{{ item.icon }}\u003C\u002Fv-icon\u003E\n \u003C\u002Fv-list-tile-action\u003E\n\n \u003Cv-list-tile-content\u003E\n \u003Cv-list-tile-title\u003E{{ item.title }}\u003C\u002Fv-list-tile-title\u003E\n \u003C\u002Fv-list-tile-content\u003E\n \u003C\u002Fv-list-tile\u003E\n \u003C\u002Fv-list\u003E\n --\u003E\n \u003C\u002Fv-sidebar\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv v-bind:class=\"{ rightpanel: sidebar }\"\u003E\n \u003Cv-toolbar v-if=\"!hideNav\" class=\"primary\" close-on-click\u003E\n \u003Cv-toolbar-side-icon @click.native.stop=\"sidebar = !sidebar;\" \u002F\u003E\n\n \u003Cv-toolbar-title class=\"white--text ml-0\"\u003E\n \u003Crouter-link\n v-if=\"userIsAuthenticated && $store.state.user.authLevel === '1'\"\n to=\"\u002FitemCheckin\"\n tag=\"span\"\n style=\"cursor: pointer\"\n \u003E\n \u003Cv-btn flat class=\"white--text ml-0\"\u003EInventory Management\u003C\u002Fv-btn\u003E\n \u003C\u002Frouter-link\u003E\n\n \u003Cv-btn v-else flat class=\"white--text ml-0\"\u003E{{\n $t(\"appName\")\n }}\u003C\u002Fv-btn\u003E\n \u003C\u002Fv-toolbar-title\u003E\n\n \u003Cv-spacer \u002F\u003E\n\n \u003Cv-toolbar-items class=\"hidden-xs-only\"\u003E\n \u003Cv-btn\n flat\n v-for=\"item in menuItems\"\n :key=\"item.title\"\n :to=\"item.link\"\n class=\"white--text\"\n \u003E\n {{ item.title }}\n \u003C\u002Fv-btn\u003E\n \u003Cv-btn\n flat\n class=\"white--text lang-button\"\n v-for=\"entry in languages\"\n :key=\"entry.title\"\n @click=\"changeLocale(entry.language);\"\n \u003E\n \u003Cflag :iso=\"entry.flag\" v-bind:squared=\"false\" \u002F\u003E {{ entry.title }}\n \u003C\u002Fv-btn\u003E\n \u003Cv-btn flat class=\"white--text\" @click=\"logOut\"\u003E\n {{ $t(\"logout\") }}\n \u003C\u002Fv-btn\u003E\n \u003C\u002Fv-toolbar-items\u003E\n \u003C\u002Fv-toolbar\u003E\n\n \u003Cv-content\u003E\n \u003Cv-container fluid\u003E \u003Crouter-view\u003E\u003C\u002Frouter-view\u003E \u003C\u002Fv-container\u003E\n \u003C\u002Fv-content\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fv-app\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cstyle scoped\u003E\n.lang-button {\n padding: 1px;\n border: 1px solid green;\n background-color: #2cb337;\n font-size: 0.8em;\n margin: 4px;\n}\n.leftpanel {\n height: 100%;\n float: left;\n width: 300px;\n position: fixed;\n z-index: 1;\n top: 0;\n left: 0;\n overflow-x: hidden;\n padding-top: 20px;\n background-color: #41706791;\n}\n.rightpanel {\n float: left;\n margin-left: 300px;\n}\n.sidebar-item {\n display: block;\n align-content: left;\n}\n\n.sidebar-button {\n width: 100%;\n}\n\u003C\u002Fstyle\u003E\n","id":"mod_UchyQAJ7ht393S8fTQEusp","is_binary":false,"title":"App.vue","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-06-20T03:09:17","upload_id":null,"shortid":"ByybythdR6m","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"B1Gyt2_RpQ"},{"code":"import Vue from \"vue\";\nimport VueI18n from \"vue-i18n\";\nimport messages from \"@\u002Fservices\u002Fi18n-translate\";\n\nVue.use(VueI18n);\n\nconst i18n = new VueI18n({\n locale: \"cn\", \u002F\u002F set locale\n fallbackLocale: \"en\", \u002F\u002F set fallback locale\n messages: messages \u002F\u002F set locale messages\n});\n\nexport default i18n;\n","id":"mod_5DqpKWWn567tYWpavG4kSL","is_binary":false,"title":"i18n.js","sha":null,"inserted_at":"2019-03-03T06:09:58","updated_at":"2019-03-03T07:33:34","upload_id":null,"shortid":"G2gm0","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"wRJjz"},{"code":"import Vue from \"vue\";\nimport App from \".\u002FApp.vue\";\nimport Vuetify from \"vuetify\";\nimport \"vuetify\u002Fdist\u002Fvuetify.css\";\nimport router from \".\u002Frouter\u002Findex\";\nimport { store } from \".\u002Fstore\u002Findex\";\nimport format from \"date-fns\u002Fformat\";\nimport VuejsDialog from \"vuejs-dialog\";\nimport CmpAlert from \".\u002Fcomponents\u002Fshared\u002FAlert.vue\";\nimport Parse from \"parse\";\nimport * as firebase from \"firebase\";\nimport ToggleButton from \"vue-js-toggle-button\";\nimport { messages } from \"@\u002Fservices\u002Fi18n-translate\";\nimport VueI18n from \"vue-i18n\";\nimport FlagIcon from \"vue-flag-icon\";\nimport i18n from \".\u002Fplugins\u002Fi18n\";\n\nVue.use(FlagIcon);\n\u002F\u002FVue.use(VueI18n);\n\n\u002F\u002F export const i18n = new VueI18n({\n\u002F\u002F locale: \"en\", \u002F\u002F set locale\n\u002F\u002F fallbackLocale: \"cn\", \u002F\u002F set fallback locale\n\u002F\u002F messages: messages \u002F\u002F set locale messages\n\u002F\u002F });\n\nVue.component(\"app-alert\", CmpAlert);\n\nVue.use(ToggleButton);\n\nVue.use(Vuetify, {\n theme: {\n primary: \"#037367\",\n secondary: \"#00281f\",\n accent: \"#4a7eb3\",\n error: \"#FF5252\",\n info: \"#2196F3\",\n success: \"#4CAF50\",\n warning: \"#FFC107\"\n }\n});\n\nVue.use(VuejsDialog, {\n html: true,\n okText: \"Proceed\",\n cancelText: \"Cancel\",\n animation: \"zoom\"\n});\n\nVue.directive(\"focus\", {\n inserted: function(el) {\n el.__vue__.focus();\n }\n});\n\nVue.config.productionTip = false;\n\nVue.filter(\"formatDateFull\", function(value) {\n if (value) {\n return format(value, \"dddd MMMM Do YYYY\");\n }\n});\n\nVue.filter(\"formatDate\", function(value) {\n if (value) {\n return format(value, \"MMMM Do YYYY\");\n }\n});\n\nVue.filter(\"formatDateShort\", function(value) {\n if (value) {\n return format(value, \"MM-DD-YYYY\");\n }\n});\n\nnew Vue({\n i18n,\n el: \"#app\",\n store,\n router,\n render: h =\u003E h(App),\n created() {\n console.log(\"Initial main.js\");\n \u002F\u002F if (this.$store.state.user === null) {\n \u002F\u002F console.log(\"not logged in\");\n \u002F\u002F \u002F\u002Fconsole.log(this.$store);\n \u002F\u002F \u002F\u002Fthis.$router.push(\"\u002FsignIn\");\n \u002F\u002F this.$router.push(\"\u002FStockList\");\n \u002F\u002F }\n }\n});\n","id":"mod_ChZtjRtSubzpvR6Y7KvCMA","is_binary":false,"title":"main.js","sha":null,"inserted_at":"2018-12-14T01:44:04","updated_at":"2019-03-03T06:20:00","upload_id":null,"shortid":"SyR-kYn_0TX","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"B1Gyt2_RpQ"},{"code":"const messages = {\n en: {\n appName: \"Inventory Management System\",\n stock: \"Stock\",\n addMove: \"Add Move\",\n home: \"home\",\n movements: \"Movements\",\n addRowsLabel: \"Number of rows to add\",\n eventDate: \"Event Date\",\n productName: \"Product Name\",\n packing: \"Packing\",\n marketPrice: \"Market Price\",\n buyingPrice: \"Buying Price\",\n quantity: \"Quantity\",\n inout: \"In\u002FOut\",\n expireby: \"Expire By\",\n usedby: \"Used By\",\n source: \"Source\",\n destination: \"Destination\",\n storeLocation: \"Store Location\",\n storeSection: \"Store Section\",\n specialRequirements: \"Special Requirements\",\n remarks: \"Remarks\",\n avgBuyingPrice: \"Average Buying Price\",\n profitMargin: \"Profit Margin\",\n totalValue: \"Total Value\",\n transactionReport: \"Transaction Report\",\n transaction: \"Transaction\",\n period: \"Period\",\n ok: \"OK\",\n cancel: \"Cancel\",\n logout: \"logout\"\n },\n cn: {\n appName: \"倉存管理系統\",\n stock: \"倉存\",\n addMove: \"管理進出\",\n home: \"首頁\",\n movements: \"進出明細\",\n addRowsLabel: \"增加行數\",\n eventDate: \"日期\",\n productName: \"產品名稱\",\n packing: \"包裝\",\n marketPrice: \"市價\",\n buyingPrice: \"買入價\",\n quantity: \"數量\",\n inout: \"出\u002F入\",\n expireby: \"過期日\",\n usedby: \"此日期前最佳\",\n source: \"來源\",\n destination: \"目的地\",\n storeLocation: \"儲存位置\",\n storeSection: \"儲存分區\",\n specialRequirements: \"特別要求\",\n remarks: \"備注\",\n avgBuyingPrice: \"平均買入價\",\n profitMargin: \"損益\",\n totalValue: \"總值\",\n transactionReport: \"交易報表\",\n transaction: \"交易\",\n period: \"日期\",\n ok: \"確定\",\n cancel: \"取消\",\n logout: \"登出\"\n }\n};\n\nexport default messages;\n","id":"mod_47E2ChH5Le3h7F4Zy8hUVH","is_binary":false,"title":"i18n-translate.js","sha":null,"inserted_at":"2019-03-02T08:15:08","updated_at":"2019-03-03T07:33:37","upload_id":null,"shortid":"WxyJ","source_id":"src_SPRu1QGxEv9HJodwcG8QtP","directory_shortid":"Go83r"}],"view_count":40077,"custom_template":null,"template":"vue-cli","original_git_commit_sha":"1c3b3dbea6944d6c7925ee21727165f0ad770ff9","version":1178,"screenshot_url":"https:\u002F\u002Fscreenshots.codesandbox.io\u002F4rv6v3m79\u002F1178.png","free_plan_editing_restricted":false,"entry":"src\u002Fmain.js","restricted":false,"like_count":0,"always_on":false,"id":"4rv6v3m79","npm_registries":[],"is_sse":false,"inserted_at":"2018-12-14T01:44:04","git":null,"sdk":false,"forked_template_sandbox":null,"updated_at":"2019-07-14T11:40:19","pr_number":null,"settings":{"ai_consent":null},"draft":true,"author":{"id":"user_LJCE9piFDBbt2yHMKX14z6","name":"cliffy","username":"cliffyllok","avatar_url":"https:\u002F\u002Flh3.googleusercontent.com\u002Fa\u002FACg8ocIYHsz2uiMAhpJvEGsVdYnOUGpWpbco7jIYZvHXFHqW2NJp1A=s96-c","personal_workspace_id":"ws_9i3iEs63L1PKzxACoFJomx","subscription_plan":null,"subscription_since":null},"base_git":null,"is_frozen":false,"room_id":null};