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
package/index.js
CHANGED
|
@@ -11,31 +11,39 @@ const rl = readline.createInterface({
|
|
|
11
11
|
})
|
|
12
12
|
console.log('\n[1] Car Repair Parking Managemnt System')
|
|
13
13
|
console.log('[2]Employee Payroll Management System')
|
|
14
|
-
console.log('[3]
|
|
15
|
-
console.log('[4]
|
|
16
|
-
console.log('[5]
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
console.log('[8]
|
|
20
|
-
console.log('[9]Stock
|
|
21
|
-
console.log('[10]
|
|
14
|
+
console.log('[3]Employee Payroll Management System Elysee')
|
|
15
|
+
console.log('[4]middleware')
|
|
16
|
+
console.log('[5] Parking Management System')
|
|
17
|
+
console.log('[6]Supply Chain Managemnt System')
|
|
18
|
+
console.log('[7]Supply Chain Management System Elysee')
|
|
19
|
+
console.log('[8] School fee Management System')
|
|
20
|
+
console.log('[9]Stock Hub Management System')
|
|
21
|
+
console.log('[10]Stock Invetory Management System')
|
|
22
|
+
console.log('[11]Stock Management System')
|
|
23
|
+
console.log('[12]Sales Record Management System')
|
|
24
|
+
console.log('[13]Sales Record Management System Elysee')
|
|
25
|
+
console.log('[14]userController.js')
|
|
22
26
|
|
|
23
27
|
|
|
24
28
|
|
|
25
29
|
|
|
26
|
-
rl.question('Pick (1-
|
|
30
|
+
rl.question('Pick (1-14): ', (answer) => {
|
|
27
31
|
|
|
28
32
|
const projects = {
|
|
29
33
|
'1':'crpms',
|
|
30
34
|
'2':'EPMS',
|
|
31
|
-
'3':'
|
|
32
|
-
'4':
|
|
33
|
-
'5':'
|
|
34
|
-
'6':
|
|
35
|
-
'7':'
|
|
36
|
-
'8': '
|
|
37
|
-
'9':'
|
|
38
|
-
'10':'
|
|
35
|
+
'3':'EPMS(Ely)',
|
|
36
|
+
'4':'middleware',
|
|
37
|
+
'5': 'parking managementt system',
|
|
38
|
+
'6':'SCMS',
|
|
39
|
+
'7':'SCMS(Ely)',
|
|
40
|
+
'8': 'sfms-app',
|
|
41
|
+
'9':'SHMS(Ely)',
|
|
42
|
+
'10':'sims',
|
|
43
|
+
'11': 'SMS-',
|
|
44
|
+
'12':'SRMS',
|
|
45
|
+
'13':'SRMS(Ely)',
|
|
46
|
+
'14':'user',
|
|
39
47
|
|
|
40
48
|
|
|
41
49
|
}
|
package/package.json
CHANGED
package/projects/EPMS(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/epms");
|
|
6
|
+
console.log("MongoDB connected to EPMS 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,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,97 @@
|
|
|
1
|
+
const Employee = require("../models/Employee");
|
|
2
|
+
|
|
3
|
+
const createEmployee = async (req, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const { employeeCode, firstName, lastName, department, position, baseSalary, hireDate, email, phone } = req.body;
|
|
6
|
+
|
|
7
|
+
if (!employeeCode || !firstName || !lastName || !department || !position || !baseSalary || !hireDate) {
|
|
8
|
+
return res.status(400).json({ message: "All required fields must be filled" });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const existingEmployee = await Employee.findOne({ employeeCode });
|
|
12
|
+
if (existingEmployee) {
|
|
13
|
+
return res.status(400).json({ message: "Employee code already exists" });
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const employee = await Employee.create({
|
|
17
|
+
employeeCode,
|
|
18
|
+
firstName: firstName.trim(),
|
|
19
|
+
lastName: lastName.trim(),
|
|
20
|
+
department: department.trim(),
|
|
21
|
+
position: position.trim(),
|
|
22
|
+
baseSalary,
|
|
23
|
+
hireDate,
|
|
24
|
+
email,
|
|
25
|
+
phone
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
res.status(201).json({ message: "Employee added successfully", employee });
|
|
29
|
+
} catch (error) {
|
|
30
|
+
res.status(500).json({ message: "Employee could not be created", error: error.message });
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const getEmployees = async (req, res) => {
|
|
35
|
+
try {
|
|
36
|
+
const employees = await Employee.find().sort({ lastName: 1 });
|
|
37
|
+
res.json(employees);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
res.status(500).json({ message: "Employees could not be retrieved", error: error.message });
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const getEmployee = async (req, res) => {
|
|
44
|
+
try {
|
|
45
|
+
const employee = await Employee.findById(req.params.id);
|
|
46
|
+
|
|
47
|
+
if (!employee) {
|
|
48
|
+
return res.status(404).json({ message: "Employee not found" });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
res.json(employee);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
res.status(500).json({ message: "Employee could not be retrieved", error: error.message });
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const updateEmployee = async (req, res) => {
|
|
58
|
+
try {
|
|
59
|
+
const { firstName, lastName, department, position, baseSalary, hireDate, email, phone } = req.body;
|
|
60
|
+
|
|
61
|
+
const employee = await Employee.findByIdAndUpdate(
|
|
62
|
+
req.params.id,
|
|
63
|
+
{ firstName, lastName, department, position, baseSalary, hireDate, email, phone },
|
|
64
|
+
{ new: true, runValidators: true }
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
if (!employee) {
|
|
68
|
+
return res.status(404).json({ message: "Employee not found" });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
res.json({ message: "Employee updated successfully", employee });
|
|
72
|
+
} catch (error) {
|
|
73
|
+
res.status(500).json({ message: "Employee could not be updated", error: error.message });
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const deleteEmployee = async (req, res) => {
|
|
78
|
+
try {
|
|
79
|
+
const employee = await Employee.findByIdAndDelete(req.params.id);
|
|
80
|
+
|
|
81
|
+
if (!employee) {
|
|
82
|
+
return res.status(404).json({ message: "Employee not found" });
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
res.json({ message: "Employee deleted successfully" });
|
|
86
|
+
} catch (error) {
|
|
87
|
+
res.status(500).json({ message: "Employee could not be deleted", error: error.message });
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
module.exports = {
|
|
92
|
+
createEmployee,
|
|
93
|
+
getEmployees,
|
|
94
|
+
getEmployee,
|
|
95
|
+
updateEmployee,
|
|
96
|
+
deleteEmployee
|
|
97
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
const Payroll = require("../models/Payroll");
|
|
2
|
+
const Employee = require("../models/Employee");
|
|
3
|
+
|
|
4
|
+
const createPayroll = async (req, res) => {
|
|
5
|
+
try {
|
|
6
|
+
const { employee, month, year, basicPay, allowances, deductions, netPay, paymentDate } = req.body;
|
|
7
|
+
|
|
8
|
+
if (!employee || !month || !year || basicPay === undefined || netPay === undefined) {
|
|
9
|
+
return res.status(400).json({ message: "Employee, month, year, basic pay and net pay are required" });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const employeeExists = await Employee.findById(employee);
|
|
13
|
+
if (!employeeExists) {
|
|
14
|
+
return res.status(404).json({ message: "Employee not found" });
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const existingPayroll = await Payroll.findOne({ employee, month, year });
|
|
18
|
+
if (existingPayroll) {
|
|
19
|
+
return res.status(400).json({ message: "Payroll already exists for this employee for the given period" });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const payroll = await Payroll.create({
|
|
23
|
+
employee,
|
|
24
|
+
month,
|
|
25
|
+
year,
|
|
26
|
+
basicPay,
|
|
27
|
+
allowances: allowances || 0,
|
|
28
|
+
deductions: deductions || 0,
|
|
29
|
+
netPay,
|
|
30
|
+
paymentDate: paymentDate || Date.now()
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const populatedPayroll = await Payroll.findById(payroll._id).populate("employee");
|
|
34
|
+
|
|
35
|
+
res.status(201).json({ message: "Payroll processed successfully", payroll: populatedPayroll });
|
|
36
|
+
} catch (error) {
|
|
37
|
+
res.status(500).json({ message: "Payroll could not be created", error: error.message });
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getPayrolls = async (req, res) => {
|
|
42
|
+
try {
|
|
43
|
+
const filter = {};
|
|
44
|
+
|
|
45
|
+
if (req.query.month) filter.month = parseInt(req.query.month);
|
|
46
|
+
if (req.query.year) filter.year = parseInt(req.query.year);
|
|
47
|
+
if (req.query.employee) filter.employee = req.query.employee;
|
|
48
|
+
|
|
49
|
+
const payrolls = await Payroll.find(filter)
|
|
50
|
+
.populate("employee")
|
|
51
|
+
.sort({ year: -1, month: -1 });
|
|
52
|
+
|
|
53
|
+
res.json(payrolls);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
res.status(500).json({ message: "Payrolls could not be retrieved", error: error.message });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const getPayroll = async (req, res) => {
|
|
60
|
+
try {
|
|
61
|
+
const payroll = await Payroll.findById(req.params.id).populate("employee");
|
|
62
|
+
|
|
63
|
+
if (!payroll) {
|
|
64
|
+
return res.status(404).json({ message: "Payroll record not found" });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
res.json(payroll);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
res.status(500).json({ message: "Payroll could not be retrieved", error: error.message });
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const updatePayroll = async (req, res) => {
|
|
74
|
+
try {
|
|
75
|
+
const { basicPay, allowances, deductions, netPay, paymentDate } = req.body;
|
|
76
|
+
|
|
77
|
+
const payroll = await Payroll.findByIdAndUpdate(
|
|
78
|
+
req.params.id,
|
|
79
|
+
{ basicPay, allowances, deductions, netPay, paymentDate },
|
|
80
|
+
{ new: true, runValidators: true }
|
|
81
|
+
).populate("employee");
|
|
82
|
+
|
|
83
|
+
if (!payroll) {
|
|
84
|
+
return res.status(404).json({ message: "Payroll record not found" });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
res.json({ message: "Payroll updated successfully", payroll });
|
|
88
|
+
} catch (error) {
|
|
89
|
+
res.status(500).json({ message: "Payroll could not be updated", error: error.message });
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const deletePayroll = async (req, res) => {
|
|
94
|
+
try {
|
|
95
|
+
const payroll = await Payroll.findByIdAndDelete(req.params.id);
|
|
96
|
+
|
|
97
|
+
if (!payroll) {
|
|
98
|
+
return res.status(404).json({ message: "Payroll record not found" });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
res.json({ message: "Payroll record deleted successfully" });
|
|
102
|
+
} catch (error) {
|
|
103
|
+
res.status(500).json({ message: "Payroll could not be deleted", error: error.message });
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
module.exports = {
|
|
108
|
+
createPayroll,
|
|
109
|
+
getPayrolls,
|
|
110
|
+
getPayroll,
|
|
111
|
+
updatePayroll,
|
|
112
|
+
deletePayroll
|
|
113
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const Payroll = require("../models/Payroll");
|
|
2
|
+
const Employee = require("../models/Employee");
|
|
3
|
+
|
|
4
|
+
const getReports = async (req, res) => {
|
|
5
|
+
try {
|
|
6
|
+
const month = parseInt(req.query.month) || new Date().getMonth() + 1;
|
|
7
|
+
const year = parseInt(req.query.year) || new Date().getFullYear();
|
|
8
|
+
|
|
9
|
+
const payrolls = await Payroll.find({ month, year })
|
|
10
|
+
.populate("employee")
|
|
11
|
+
.sort({ "employee.lastName": 1 });
|
|
12
|
+
|
|
13
|
+
const totalEmployees = await Employee.countDocuments();
|
|
14
|
+
const totalPayrollAmount = payrolls.reduce((sum, p) => sum + p.netPay, 0);
|
|
15
|
+
const totalAllowances = payrolls.reduce((sum, p) => sum + (p.allowances || 0), 0);
|
|
16
|
+
const totalDeductions = payrolls.reduce((sum, p) => sum + (p.deductions || 0), 0);
|
|
17
|
+
|
|
18
|
+
res.json({
|
|
19
|
+
month,
|
|
20
|
+
year,
|
|
21
|
+
totalEmployees,
|
|
22
|
+
payrollRecords: payrolls,
|
|
23
|
+
totalPayrollAmount,
|
|
24
|
+
totalAllowances,
|
|
25
|
+
totalDeductions,
|
|
26
|
+
recordCount: payrolls.length
|
|
27
|
+
});
|
|
28
|
+
} catch (error) {
|
|
29
|
+
res.status(500).json({ message: "Report could not be generated", error: error.message });
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
module.exports = {
|
|
34
|
+
getReports
|
|
35
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const employeeSchema = new mongoose.Schema(
|
|
4
|
+
{
|
|
5
|
+
employeeCode: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: [true, "Employee code is required"],
|
|
8
|
+
unique: true,
|
|
9
|
+
trim: true
|
|
10
|
+
},
|
|
11
|
+
firstName: {
|
|
12
|
+
type: String,
|
|
13
|
+
required: [true, "First name is required"],
|
|
14
|
+
trim: true
|
|
15
|
+
},
|
|
16
|
+
lastName: {
|
|
17
|
+
type: String,
|
|
18
|
+
required: [true, "Last name is required"],
|
|
19
|
+
trim: true
|
|
20
|
+
},
|
|
21
|
+
department: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: [true, "Department is required"],
|
|
24
|
+
trim: true
|
|
25
|
+
},
|
|
26
|
+
position: {
|
|
27
|
+
type: String,
|
|
28
|
+
required: [true, "Position is required"],
|
|
29
|
+
trim: true
|
|
30
|
+
},
|
|
31
|
+
baseSalary: {
|
|
32
|
+
type: Number,
|
|
33
|
+
required: [true, "Base salary is required"],
|
|
34
|
+
min: [0, "Salary cannot be negative"]
|
|
35
|
+
},
|
|
36
|
+
hireDate: {
|
|
37
|
+
type: Date,
|
|
38
|
+
required: [true, "Hire date is required"]
|
|
39
|
+
},
|
|
40
|
+
email: {
|
|
41
|
+
type: String,
|
|
42
|
+
trim: true
|
|
43
|
+
},
|
|
44
|
+
phone: {
|
|
45
|
+
type: String,
|
|
46
|
+
trim: true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{ timestamps: true }
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
module.exports = mongoose.model("Employee", employeeSchema);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const payrollSchema = new mongoose.Schema(
|
|
4
|
+
{
|
|
5
|
+
employee: {
|
|
6
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
7
|
+
ref: "Employee",
|
|
8
|
+
required: [true, "Employee is required"]
|
|
9
|
+
},
|
|
10
|
+
month: {
|
|
11
|
+
type: Number,
|
|
12
|
+
required: [true, "Month is required"],
|
|
13
|
+
min: 1,
|
|
14
|
+
max: 12
|
|
15
|
+
},
|
|
16
|
+
year: {
|
|
17
|
+
type: Number,
|
|
18
|
+
required: [true, "Year is required"]
|
|
19
|
+
},
|
|
20
|
+
basicPay: {
|
|
21
|
+
type: Number,
|
|
22
|
+
required: [true, "Basic pay is required"],
|
|
23
|
+
min: 0
|
|
24
|
+
},
|
|
25
|
+
allowances: {
|
|
26
|
+
type: Number,
|
|
27
|
+
default: 0,
|
|
28
|
+
min: 0
|
|
29
|
+
},
|
|
30
|
+
deductions: {
|
|
31
|
+
type: Number,
|
|
32
|
+
default: 0,
|
|
33
|
+
min: 0
|
|
34
|
+
},
|
|
35
|
+
netPay: {
|
|
36
|
+
type: Number,
|
|
37
|
+
required: [true, "Net pay is required"],
|
|
38
|
+
min: 0
|
|
39
|
+
},
|
|
40
|
+
paymentDate: {
|
|
41
|
+
type: Date,
|
|
42
|
+
default: Date.now
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{ timestamps: true }
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
payrollSchema.index({ employee: 1, month: 1, year: 1 }, { unique: true });
|
|
49
|
+
|
|
50
|
+
module.exports = mongoose.model("Payroll", payrollSchema);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const userSchema = new mongoose.Schema(
|
|
4
|
+
{
|
|
5
|
+
username: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: [true, "Username is required"],
|
|
8
|
+
unique: true,
|
|
9
|
+
trim: true
|
|
10
|
+
},
|
|
11
|
+
password: {
|
|
12
|
+
type: String,
|
|
13
|
+
required: [true, "Password is required"]
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{ timestamps: true }
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
module.exports = mongoose.model("User", userSchema);
|