create-myexam-app 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +25 -17
- package/package.json +1 -1
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +84 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env +3 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +13 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/authController.js +115 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/employeeController.js +97 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/payrollController.js +113 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/reportController.js +35 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Employee.js +52 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Payroll.js +50 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +19 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1509 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +19 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/authRoutes.js +18 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/employeeRoutes.js +19 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/payrollRoutes.js +19 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/reportRoutes.js +9 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +71 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +12 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2888 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +57 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +16 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/authApi.js +26 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/employeeApi.js +26 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/payrollApi.js +26 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/reportApi.js +6 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Header.jsx +17 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +17 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/ProtectedRoute.jsx +41 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +38 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/index.css +30 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/DashboardPage.jsx +64 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/EmployeePage.jsx +166 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/LoginPage.jsx +73 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/PayrollPage.jsx +198 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RecoverPasswordPage.jsx +69 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RegisterPage.jsx +69 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ReportsPage.jsx +113 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +13 -0
- package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +9 -0
- package/projects/SCMS/frontend/node_modules/.bin/acorn +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/acorn.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/acorn.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/baseline-browser-mapping +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/baseline-browser-mapping.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/baseline-browser-mapping.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/browserslist +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/browserslist.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/browserslist.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/eslint +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/eslint.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/eslint.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/jiti +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/jiti.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/jiti.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/jsesc +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/jsesc.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/jsesc.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/json5 +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/json5.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/json5.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/nanoid +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/nanoid.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/nanoid.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/node-which +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/node-which.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/node-which.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/parser +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/parser.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/parser.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/rolldown +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/rolldown.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/rolldown.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/semver +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/semver.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/semver.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/update-browserslist-db +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/update-browserslist-db.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/update-browserslist-db.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.bin/vite +16 -0
- package/projects/SCMS/frontend/node_modules/.bin/vite.cmd +17 -0
- package/projects/SCMS/frontend/node_modules/.bin/vite.ps1 +28 -0
- package/projects/SCMS/frontend/node_modules/.package-lock.json +2401 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/_metadata.json +56 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/axios.js +3184 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/axios.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/chunk-B-1-B7_t.js +33 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/package.json +3 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom.js +186 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom_client.js +14385 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom_client.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react-router-dom.js +10177 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react-router-dom.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react.js +769 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-dev-runtime.js +205 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-runtime.js +209 -0
- package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-runtime.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/code-frame/LICENSE +22 -0
- package/projects/SCMS/frontend/node_modules/@babel/code-frame/README.md +19 -0
- package/projects/SCMS/frontend/node_modules/@babel/code-frame/lib/index.js +217 -0
- package/projects/SCMS/frontend/node_modules/@babel/code-frame/lib/index.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/code-frame/package.json +32 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/LICENSE +22 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/README.md +19 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/corejs2-built-ins.js +2 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/corejs3-shipped-proposals.js +2 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/corejs2-built-ins.json +2120 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json +5 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/native-modules.json +18 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/overlapping-plugins.json +38 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/plugin-bugfixes.json +231 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/plugins.json +843 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/native-modules.js +2 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/overlapping-plugins.js +2 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/package.json +40 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/plugin-bugfixes.js +2 -0
- package/projects/SCMS/frontend/node_modules/@babel/compat-data/plugins.js +2 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/LICENSE +22 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/README.md +19 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/cache-contexts.js +5 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/cache-contexts.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/caching.js +261 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/caching.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-chain.js +469 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-chain.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-descriptors.js +190 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-descriptors.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/configuration.js +290 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/configuration.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/import.cjs +6 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/import.cjs.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index-browser.js +58 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index-browser.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index.js +78 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/full.js +312 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/full.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/index.js +87 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/index.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/item.js +67 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/item.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/partial.js +158 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/partial.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/pattern-to-regex.js +38 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/pattern-to-regex.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/plugin.js +33 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/plugin.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/printer.js +113 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/printer.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets-browser.js +41 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets-browser.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets.js +61 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/util.js +31 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/util.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/index.js +230 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/index.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/parse.js +45 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/parse.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-ast.js +48 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-ast.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file-browser.js +23 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file-browser.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file.js +40 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform.js +47 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform.js.map +1 -0
- package/projects/SCMS/frontend/node_modules/@babel/core/package.json +84 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +106 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/01_Introduction.md +8 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/02_Problem_Statement.md +12 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/03_Objectives.md +17 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/04_Technologies_Used.md +23 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/05_ERD.md +60 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/06_Database_Design.md +71 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/07_System_Architecture.md +28 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/08_API_Documentation.md +43 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/09_Testing.md +43 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/10_Challenges.md +12 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/11_Conclusion.md +8 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env.example +4 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +16 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/deliveryController.js +145 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/shipmentController.js +149 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/supplierController.js +56 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/userController.js +158 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Delivery.js +34 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Shipment.js +34 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Supplier.js +38 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +21 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1540 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +22 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/deliveryRoutes.js +11 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/shipmentRoutes.js +11 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/supplierRoutes.js +9 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/userRoutes.js +11 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +70 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/.env.example +2 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +13 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2944 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +72 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +14 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/deliveryApi.js +17 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/shipmentApi.js +17 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/supplierApi.js +9 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/userApi.js +21 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +16 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/PageHeader.jsx +12 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +40 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Dashboard.jsx +62 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Delivery.jsx +212 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Login.jsx +158 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Logout.jsx +24 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Reports.jsx +221 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Shipment.jsx +212 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Supplier.jsx +118 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/styles.css +27 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +8 -0
- package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +6 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +84 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env +3 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +13 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/productController.js +29 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/reportController.js +52 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/stockTransactionController.js +128 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/userController.js +115 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/warehouseController.js +29 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Product.js +44 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/StockTransaction.js +33 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +19 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Warehouse.js +25 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1509 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +19 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/productRoutes.js +10 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/reportRoutes.js +9 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/stockTransactionRoutes.js +17 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/userRoutes.js +18 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/warehouseRoutes.js +10 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +73 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +12 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2888 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +66 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +16 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/productApi.js +11 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/reportApi.js +6 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/transactionApi.js +21 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/userApi.js +26 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/warehouseApi.js +11 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Header.jsx +17 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +17 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/ProtectedRoute.jsx +41 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +39 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/index.css +30 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/DashboardPage.jsx +64 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/LoginPage.jsx +73 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ProductPage.jsx +107 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RecoverPasswordPage.jsx +69 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RegisterPage.jsx +69 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ReportsPage.jsx +152 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/TransactionPage.jsx +195 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/WarehousePage.jsx +93 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +13 -0
- package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +9 -0
- package/projects/SRMS/frontend/src/pages/Reports.jsx +170 -58
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/README.md +49 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/.env +3 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/middleware/authMiddleware.js +19 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Customer.js +11 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Product.js +10 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Sale.js +19 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/User.js +8 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/package-lock.json +1609 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/package.json +20 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/authRoutes.js +75 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/customerRoutes.js +42 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/productRoutes.js +41 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/reportRoutes.js +129 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/saleRoutes.js +107 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/server.js +49 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/assets/index-DZxY56Bj.js +75 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/assets/index-J8MKb3Fq.css +1 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/index.html +13 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/index.html +12 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/package-lock.json +2029 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/package.json +21 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/App.jsx +77 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/index.css +333 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/main.jsx +10 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Customers.jsx +85 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Dashboard.jsx +75 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Login.jsx +65 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Products.jsx +91 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Register.jsx +82 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Reports.jsx +138 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Sales.jsx +154 -0
- package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/vite.config.js +9 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
import { createSupplier, getSuppliers } from "../api/supplierApi";
|
|
3
|
+
import Message from "../components/Message";
|
|
4
|
+
import PageHeader from "../components/PageHeader";
|
|
5
|
+
|
|
6
|
+
var emptySupplier = {
|
|
7
|
+
supplierCode: "",
|
|
8
|
+
supplierName: "",
|
|
9
|
+
telephone: "",
|
|
10
|
+
address: "",
|
|
11
|
+
email: "",
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
function Supplier() {
|
|
15
|
+
var formState = useState(emptySupplier);
|
|
16
|
+
var formData = formState[0];
|
|
17
|
+
var setFormData = formState[1];
|
|
18
|
+
var supplierState = useState([]);
|
|
19
|
+
var suppliers = supplierState[0];
|
|
20
|
+
var setSuppliers = supplierState[1];
|
|
21
|
+
var messageState = useState("");
|
|
22
|
+
var message = messageState[0];
|
|
23
|
+
var setMessage = messageState[1];
|
|
24
|
+
var messageTypeState = useState("");
|
|
25
|
+
var messageType = messageTypeState[0];
|
|
26
|
+
var setMessageType = messageTypeState[1];
|
|
27
|
+
|
|
28
|
+
function loadSuppliers() {
|
|
29
|
+
return getSuppliers()
|
|
30
|
+
.then(function (response) {
|
|
31
|
+
setSuppliers(response.data);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
useEffect(function () {
|
|
36
|
+
loadSuppliers().catch(function () {});
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
function handleChange(event) {
|
|
40
|
+
var newFormData = Object.assign({}, formData);
|
|
41
|
+
newFormData[event.target.name] = event.target.value;
|
|
42
|
+
setFormData(newFormData);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function handleSubmit(event) {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
setMessage("");
|
|
48
|
+
|
|
49
|
+
createSupplier(formData)
|
|
50
|
+
.then(function (response) {
|
|
51
|
+
setMessageType("success");
|
|
52
|
+
setMessage(response.data.message);
|
|
53
|
+
setFormData(emptySupplier);
|
|
54
|
+
loadSuppliers();
|
|
55
|
+
})
|
|
56
|
+
.catch(function (error) {
|
|
57
|
+
setMessageType("error");
|
|
58
|
+
setMessage(error.response && error.response.data ? error.response.data.message : "Failed to save supplier");
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div>
|
|
64
|
+
<PageHeader title="Supplier" subtitle="Insert supplier records only" />
|
|
65
|
+
|
|
66
|
+
<form onSubmit={handleSubmit} className="mb-6 rounded-md border border-slate-200 bg-white p-4">
|
|
67
|
+
<Message type={messageType} text={message} />
|
|
68
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
69
|
+
{Object.keys(emptySupplier).map(function (field) {
|
|
70
|
+
return (
|
|
71
|
+
<div key={field}>
|
|
72
|
+
<label className="mb-2 block text-sm font-semibold">{field}</label>
|
|
73
|
+
<input
|
|
74
|
+
className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900"
|
|
75
|
+
name={field}
|
|
76
|
+
value={formData[field]}
|
|
77
|
+
onChange={handleChange}
|
|
78
|
+
required
|
|
79
|
+
type={field === "email" ? "email" : "text"}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
})}
|
|
84
|
+
</div>
|
|
85
|
+
<button className="mt-4 rounded-md bg-blue-900 px-5 py-2 font-semibold text-slate-50">Insert Supplier</button>
|
|
86
|
+
</form>
|
|
87
|
+
|
|
88
|
+
<div className="overflow-x-auto rounded-md border border-slate-200 bg-white">
|
|
89
|
+
<table className="w-full min-w-[760px] text-left text-sm">
|
|
90
|
+
<thead className="bg-blue-900 text-slate-50">
|
|
91
|
+
<tr>
|
|
92
|
+
<th className="p-3">Code</th>
|
|
93
|
+
<th className="p-3">Name</th>
|
|
94
|
+
<th className="p-3">Telephone</th>
|
|
95
|
+
<th className="p-3">Address</th>
|
|
96
|
+
<th className="p-3">Email</th>
|
|
97
|
+
</tr>
|
|
98
|
+
</thead>
|
|
99
|
+
<tbody>
|
|
100
|
+
{suppliers.map(function (supplier) {
|
|
101
|
+
return (
|
|
102
|
+
<tr key={supplier._id} className="border-t border-slate-200">
|
|
103
|
+
<td className="p-3">{supplier.supplierCode}</td>
|
|
104
|
+
<td className="p-3">{supplier.supplierName}</td>
|
|
105
|
+
<td className="p-3">{supplier.telephone}</td>
|
|
106
|
+
<td className="p-3">{supplier.address}</td>
|
|
107
|
+
<td className="p-3">{supplier.email}</td>
|
|
108
|
+
</tr>
|
|
109
|
+
);
|
|
110
|
+
})}
|
|
111
|
+
</tbody>
|
|
112
|
+
</table>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export default Supplier;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
body {
|
|
6
|
+
margin: 0;
|
|
7
|
+
background: #f8fafc;
|
|
8
|
+
color: #1e3a8a;
|
|
9
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
input,
|
|
13
|
+
select,
|
|
14
|
+
button {
|
|
15
|
+
font: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@media print {
|
|
19
|
+
.no-print {
|
|
20
|
+
display: none !important;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.print-area {
|
|
24
|
+
padding: 0 !important;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026
|
|
2
|
+
|
|
3
|
+
## Project Name
|
|
4
|
+
|
|
5
|
+
Stock Management System for StockHub Ltd.
|
|
6
|
+
|
|
7
|
+
## Technologies Used
|
|
8
|
+
|
|
9
|
+
Frontend:
|
|
10
|
+
- React.js
|
|
11
|
+
- React Router DOM
|
|
12
|
+
- Axios
|
|
13
|
+
- Tailwind CSS
|
|
14
|
+
|
|
15
|
+
Backend:
|
|
16
|
+
- Node.js
|
|
17
|
+
- Express.js
|
|
18
|
+
- MongoDB
|
|
19
|
+
- Mongoose
|
|
20
|
+
- bcryptjs
|
|
21
|
+
- express-session
|
|
22
|
+
|
|
23
|
+
## Installation Steps
|
|
24
|
+
|
|
25
|
+
1. Open the project folder:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cd KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
2. Install backend dependencies:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd backend-project
|
|
35
|
+
npm install
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
3. Install frontend dependencies:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cd ../frontend-project
|
|
42
|
+
npm install
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
4. Make sure MongoDB is running locally.
|
|
46
|
+
|
|
47
|
+
The backend uses this MongoDB database:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
mongodb://127.0.0.1:27017/SMS
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Backend Startup
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cd backend-project
|
|
57
|
+
npm run dev
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Backend URL:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
http://localhost:5000
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Default login account:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
Username: manager
|
|
70
|
+
Password: manager123
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Frontend Startup
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
cd frontend-project
|
|
77
|
+
npm run dev
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Frontend URL:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
http://localhost:5173
|
|
84
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const connectDB = async () => {
|
|
4
|
+
try {
|
|
5
|
+
await mongoose.connect(process.env.MONGO_URI || "mongodb://127.0.0.1:27017/SMS");
|
|
6
|
+
console.log("MongoDB connected to SMS database");
|
|
7
|
+
} catch (error) {
|
|
8
|
+
console.error("MongoDB connection failed:", error.message);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
module.exports = connectDB;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const Product = require("../models/Product");
|
|
2
|
+
|
|
3
|
+
const createProduct = async (req, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const existingProduct = await Product.findOne({ productCode: req.body.productCode });
|
|
6
|
+
if (existingProduct) {
|
|
7
|
+
return res.status(400).json({ message: "Product code already exists" });
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const product = await Product.create(req.body);
|
|
11
|
+
res.status(201).json({ message: "Product recorded successfully", product });
|
|
12
|
+
} catch (error) {
|
|
13
|
+
res.status(400).json({ message: "Product was not recorded", error: error.message });
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const getProducts = async (req, res) => {
|
|
18
|
+
try {
|
|
19
|
+
const products = await Product.find().sort({ createdAt: -1 });
|
|
20
|
+
res.json(products);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
res.status(500).json({ message: "Products could not be retrieved", error: error.message });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
module.exports = {
|
|
27
|
+
createProduct,
|
|
28
|
+
getProducts
|
|
29
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const Product = require("../models/Product");
|
|
2
|
+
const StockTransaction = require("../models/StockTransaction");
|
|
3
|
+
|
|
4
|
+
const getDateRange = (period) => {
|
|
5
|
+
const now = new Date();
|
|
6
|
+
const start = new Date(now);
|
|
7
|
+
|
|
8
|
+
if (period === "weekly") {
|
|
9
|
+
start.setDate(now.getDate() - 7);
|
|
10
|
+
} else if (period === "monthly") {
|
|
11
|
+
start.setMonth(now.getMonth() - 1);
|
|
12
|
+
} else {
|
|
13
|
+
start.setHours(0, 0, 0, 0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const end = new Date(now);
|
|
17
|
+
end.setHours(23, 59, 59, 999);
|
|
18
|
+
|
|
19
|
+
return { start, end };
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const getReports = async (req, res) => {
|
|
23
|
+
try {
|
|
24
|
+
const period = req.query.period || "daily";
|
|
25
|
+
const { start, end } = getDateRange(period);
|
|
26
|
+
|
|
27
|
+
const availableStock = await Product.find().sort({ productName: 1 });
|
|
28
|
+
const transactions = await StockTransaction.find({
|
|
29
|
+
transactionDate: { $gte: start, $lte: end }
|
|
30
|
+
})
|
|
31
|
+
.populate("product warehouse")
|
|
32
|
+
.sort({ transactionDate: -1 });
|
|
33
|
+
|
|
34
|
+
const stockIn = transactions.filter((item) => item.transactionType === "Stock In");
|
|
35
|
+
const stockOut = transactions.filter((item) => item.transactionType === "Stock Out");
|
|
36
|
+
|
|
37
|
+
res.json({
|
|
38
|
+
period,
|
|
39
|
+
startDate: start,
|
|
40
|
+
endDate: end,
|
|
41
|
+
availableStock,
|
|
42
|
+
stockIn,
|
|
43
|
+
stockOut
|
|
44
|
+
});
|
|
45
|
+
} catch (error) {
|
|
46
|
+
res.status(500).json({ message: "Reports could not be generated", error: error.message });
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
getReports
|
|
52
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
const Product = require("../models/Product");
|
|
2
|
+
const StockTransaction = require("../models/StockTransaction");
|
|
3
|
+
|
|
4
|
+
const applyStockMovement = async (productId, transactionType, quantityMoved) => {
|
|
5
|
+
const product = await Product.findById(productId);
|
|
6
|
+
|
|
7
|
+
if (!product) {
|
|
8
|
+
throw new Error("Selected product was not found");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const quantity = Number(quantityMoved);
|
|
12
|
+
const newQuantity =
|
|
13
|
+
transactionType === "Stock In"
|
|
14
|
+
? product.quantityInStock + quantity
|
|
15
|
+
: product.quantityInStock - quantity;
|
|
16
|
+
|
|
17
|
+
if (newQuantity < 0) {
|
|
18
|
+
throw new Error("Stock out quantity cannot be greater than available stock");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
product.quantityInStock = newQuantity;
|
|
22
|
+
await product.save();
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const reverseStockMovement = async (transaction) => {
|
|
26
|
+
const oppositeType = transaction.transactionType === "Stock In" ? "Stock Out" : "Stock In";
|
|
27
|
+
await applyStockMovement(transaction.product, oppositeType, transaction.quantityMoved);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const createTransaction = async (req, res) => {
|
|
31
|
+
try {
|
|
32
|
+
const transaction = new StockTransaction(req.body);
|
|
33
|
+
await transaction.validate();
|
|
34
|
+
await applyStockMovement(req.body.product, req.body.transactionType, req.body.quantityMoved);
|
|
35
|
+
await transaction.save();
|
|
36
|
+
const savedTransaction = await transaction.populate("product warehouse");
|
|
37
|
+
|
|
38
|
+
res.status(201).json({
|
|
39
|
+
message: "Stock transaction recorded successfully",
|
|
40
|
+
transaction: savedTransaction
|
|
41
|
+
});
|
|
42
|
+
} catch (error) {
|
|
43
|
+
res.status(400).json({ message: "Transaction was not recorded", error: error.message });
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const getTransactions = async (req, res) => {
|
|
48
|
+
try {
|
|
49
|
+
const transactions = await StockTransaction.find()
|
|
50
|
+
.populate("product warehouse")
|
|
51
|
+
.sort({ transactionDate: -1, createdAt: -1 });
|
|
52
|
+
|
|
53
|
+
res.json(transactions);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
res.status(500).json({ message: "Transactions could not be retrieved", error: error.message });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const updateTransaction = async (req, res) => {
|
|
60
|
+
try {
|
|
61
|
+
const transaction = await StockTransaction.findById(req.params.id);
|
|
62
|
+
|
|
63
|
+
if (!transaction) {
|
|
64
|
+
return res.status(404).json({ message: "Transaction was not found" });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const previousTransaction = {
|
|
68
|
+
product: transaction.product,
|
|
69
|
+
transactionType: transaction.transactionType,
|
|
70
|
+
quantityMoved: transaction.quantityMoved
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
transaction.product = req.body.product;
|
|
74
|
+
transaction.warehouse = req.body.warehouse;
|
|
75
|
+
transaction.transactionDate = req.body.transactionDate;
|
|
76
|
+
transaction.quantityMoved = req.body.quantityMoved;
|
|
77
|
+
transaction.transactionType = req.body.transactionType;
|
|
78
|
+
await transaction.validate();
|
|
79
|
+
|
|
80
|
+
await applyStockMovement(
|
|
81
|
+
previousTransaction.product,
|
|
82
|
+
previousTransaction.transactionType === "Stock In" ? "Stock Out" : "Stock In",
|
|
83
|
+
previousTransaction.quantityMoved
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
await applyStockMovement(req.body.product, req.body.transactionType, req.body.quantityMoved);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
await applyStockMovement(
|
|
90
|
+
previousTransaction.product,
|
|
91
|
+
previousTransaction.transactionType,
|
|
92
|
+
previousTransaction.quantityMoved
|
|
93
|
+
);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
await transaction.save();
|
|
98
|
+
|
|
99
|
+
const updatedTransaction = await transaction.populate("product warehouse");
|
|
100
|
+
res.json({ message: "Transaction updated successfully", transaction: updatedTransaction });
|
|
101
|
+
} catch (error) {
|
|
102
|
+
res.status(400).json({ message: "Transaction was not updated", error: error.message });
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const deleteTransaction = async (req, res) => {
|
|
107
|
+
try {
|
|
108
|
+
const transaction = await StockTransaction.findById(req.params.id);
|
|
109
|
+
|
|
110
|
+
if (!transaction) {
|
|
111
|
+
return res.status(404).json({ message: "Transaction was not found" });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
await reverseStockMovement(transaction);
|
|
115
|
+
await StockTransaction.findByIdAndDelete(req.params.id);
|
|
116
|
+
|
|
117
|
+
res.json({ message: "Transaction deleted successfully" });
|
|
118
|
+
} catch (error) {
|
|
119
|
+
res.status(400).json({ message: "Transaction was not deleted", error: error.message });
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
module.exports = {
|
|
124
|
+
createTransaction,
|
|
125
|
+
getTransactions,
|
|
126
|
+
updateTransaction,
|
|
127
|
+
deleteTransaction
|
|
128
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const bcrypt = require("bcryptjs");
|
|
2
|
+
const User = require("../models/User");
|
|
3
|
+
|
|
4
|
+
const saveSession = (req, res, message, user) => {
|
|
5
|
+
req.session.user = {
|
|
6
|
+
id: user._id,
|
|
7
|
+
username: user.username
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
req.session.save((error) => {
|
|
11
|
+
if (error) {
|
|
12
|
+
return res.status(500).json({ message: "Session could not be saved" });
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
res.json({ message, user: req.session.user });
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const register = async (req, res) => {
|
|
20
|
+
try {
|
|
21
|
+
const { username, password } = req.body;
|
|
22
|
+
|
|
23
|
+
if (!username || !password) {
|
|
24
|
+
return res.status(400).json({ message: "Username and password are required" });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingUser = await User.findOne({ username: username.trim() });
|
|
28
|
+
if (existingUser) {
|
|
29
|
+
return res.status(400).json({ message: "Username already exists" });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const hashedPassword = await bcrypt.hash(password, 10);
|
|
33
|
+
const user = await User.create({
|
|
34
|
+
username: username.trim(),
|
|
35
|
+
password: hashedPassword
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
saveSession(req, res, "Account created successfully", user);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
res.status(500).json({ message: "Registration failed", error: error.message });
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const login = async (req, res) => {
|
|
45
|
+
try {
|
|
46
|
+
const { username, password } = req.body;
|
|
47
|
+
|
|
48
|
+
if (!username || !password) {
|
|
49
|
+
return res.status(400).json({ message: "Username and password are required" });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const user = await User.findOne({ username: username.trim() });
|
|
53
|
+
if (!user) {
|
|
54
|
+
return res.status(400).json({ message: "Invalid username or password" });
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const isPasswordCorrect = await bcrypt.compare(password, user.password);
|
|
58
|
+
if (!isPasswordCorrect) {
|
|
59
|
+
return res.status(400).json({ message: "Invalid username or password" });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
saveSession(req, res, "Login successful", user);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
res.status(500).json({ message: "Login failed", error: error.message });
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const logout = (req, res) => {
|
|
69
|
+
req.session.destroy((error) => {
|
|
70
|
+
if (error) {
|
|
71
|
+
return res.status(500).json({ message: "Logout failed" });
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
res.clearCookie("connect.sid");
|
|
75
|
+
res.json({ message: "Logout successful" });
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const getSession = (req, res) => {
|
|
80
|
+
if (!req.session || !req.session.user) {
|
|
81
|
+
return res.status(401).json({ message: "No active session" });
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
res.json({ user: req.session.user });
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const recoverPassword = async (req, res) => {
|
|
88
|
+
try {
|
|
89
|
+
const { username, newPassword } = req.body;
|
|
90
|
+
|
|
91
|
+
if (!username || !newPassword) {
|
|
92
|
+
return res.status(400).json({ message: "Username and new password are required" });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const user = await User.findOne({ username: username.trim() });
|
|
96
|
+
if (!user) {
|
|
97
|
+
return res.status(404).json({ message: "User account was not found" });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
user.password = await bcrypt.hash(newPassword, 10);
|
|
101
|
+
await user.save();
|
|
102
|
+
|
|
103
|
+
res.json({ message: "Password changed successfully" });
|
|
104
|
+
} catch (error) {
|
|
105
|
+
res.status(500).json({ message: "Password recovery failed", error: error.message });
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
module.exports = {
|
|
110
|
+
register,
|
|
111
|
+
login,
|
|
112
|
+
logout,
|
|
113
|
+
getSession,
|
|
114
|
+
recoverPassword
|
|
115
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const Warehouse = require("../models/Warehouse");
|
|
2
|
+
|
|
3
|
+
const createWarehouse = async (req, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const existingWarehouse = await Warehouse.findOne({ warehouseCode: req.body.warehouseCode });
|
|
6
|
+
if (existingWarehouse) {
|
|
7
|
+
return res.status(400).json({ message: "Warehouse code already exists" });
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const warehouse = await Warehouse.create(req.body);
|
|
11
|
+
res.status(201).json({ message: "Warehouse recorded successfully", warehouse });
|
|
12
|
+
} catch (error) {
|
|
13
|
+
res.status(400).json({ message: "Warehouse was not recorded", error: error.message });
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const getWarehouses = async (req, res) => {
|
|
18
|
+
try {
|
|
19
|
+
const warehouses = await Warehouse.find().sort({ createdAt: -1 });
|
|
20
|
+
res.json(warehouses);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
res.status(500).json({ message: "Warehouses could not be retrieved", error: error.message });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
module.exports = {
|
|
27
|
+
createWarehouse,
|
|
28
|
+
getWarehouses
|
|
29
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const productSchema = new mongoose.Schema(
|
|
4
|
+
{
|
|
5
|
+
productCode: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: [true, "Product code is required"],
|
|
8
|
+
unique: true,
|
|
9
|
+
trim: true
|
|
10
|
+
},
|
|
11
|
+
productName: {
|
|
12
|
+
type: String,
|
|
13
|
+
required: [true, "Product name is required"],
|
|
14
|
+
trim: true
|
|
15
|
+
},
|
|
16
|
+
category: {
|
|
17
|
+
type: String,
|
|
18
|
+
required: [true, "Category is required"],
|
|
19
|
+
trim: true
|
|
20
|
+
},
|
|
21
|
+
quantityInStock: {
|
|
22
|
+
type: Number,
|
|
23
|
+
required: [true, "Quantity in stock is required"],
|
|
24
|
+
min: [0, "Quantity cannot be negative"]
|
|
25
|
+
},
|
|
26
|
+
unitPrice: {
|
|
27
|
+
type: Number,
|
|
28
|
+
required: [true, "Unit price is required"],
|
|
29
|
+
min: [0, "Unit price cannot be negative"]
|
|
30
|
+
},
|
|
31
|
+
supplierName: {
|
|
32
|
+
type: String,
|
|
33
|
+
required: [true, "Supplier name is required"],
|
|
34
|
+
trim: true
|
|
35
|
+
},
|
|
36
|
+
dateReceived: {
|
|
37
|
+
type: Date,
|
|
38
|
+
required: [true, "Date received is required"]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{ timestamps: true }
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
module.exports = mongoose.model("Product", productSchema);
|