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,73 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link, useNavigate } from "react-router-dom";
|
|
3
|
+
import { loginUser } from "../api/authApi";
|
|
4
|
+
import Message from "../components/Message";
|
|
5
|
+
|
|
6
|
+
const LoginPage = ({ setUser }) => {
|
|
7
|
+
const navigate = useNavigate();
|
|
8
|
+
const [formData, setFormData] = useState({ username: "", password: "" });
|
|
9
|
+
const [message, setMessage] = useState("");
|
|
10
|
+
const [messageType, setMessageType] = useState("");
|
|
11
|
+
|
|
12
|
+
const handleChange = (event) => {
|
|
13
|
+
setFormData({ ...formData, [event.target.name]: event.target.value });
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const handleSubmit = async (event) => {
|
|
17
|
+
event.preventDefault();
|
|
18
|
+
setMessage("");
|
|
19
|
+
|
|
20
|
+
if (!formData.username || !formData.password) {
|
|
21
|
+
setMessageType("error");
|
|
22
|
+
setMessage("All fields are required");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
const data = await loginUser(formData);
|
|
28
|
+
setUser(data.user);
|
|
29
|
+
navigate("/");
|
|
30
|
+
} catch (error) {
|
|
31
|
+
setMessageType("error");
|
|
32
|
+
setMessage(error.message);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div className="flex min-h-screen items-center justify-center bg-secondary p-4 text-primary">
|
|
38
|
+
<form onSubmit={handleSubmit} className="w-full max-w-md rounded-md border border-primary p-6">
|
|
39
|
+
<h1 className="mb-2 text-2xl font-bold">EPMS Login</h1>
|
|
40
|
+
<p className="mb-6 text-sm">Employee Payroll Management System</p>
|
|
41
|
+
<Message message={message} type={messageType} />
|
|
42
|
+
|
|
43
|
+
<label className="mb-2 block text-sm font-semibold">Username</label>
|
|
44
|
+
<input
|
|
45
|
+
name="username"
|
|
46
|
+
value={formData.username}
|
|
47
|
+
onChange={handleChange}
|
|
48
|
+
className="mb-4 w-full rounded-md border border-primary bg-secondary p-3 outline-none"
|
|
49
|
+
/>
|
|
50
|
+
|
|
51
|
+
<label className="mb-2 block text-sm font-semibold">Password</label>
|
|
52
|
+
<input
|
|
53
|
+
name="password"
|
|
54
|
+
type="password"
|
|
55
|
+
value={formData.password}
|
|
56
|
+
onChange={handleChange}
|
|
57
|
+
className="mb-4 w-full rounded-md border border-primary bg-secondary p-3 outline-none"
|
|
58
|
+
/>
|
|
59
|
+
|
|
60
|
+
<button className="w-full rounded-md bg-primary px-4 py-3 font-semibold text-secondary">
|
|
61
|
+
Login
|
|
62
|
+
</button>
|
|
63
|
+
|
|
64
|
+
<div className="mt-4 flex flex-col gap-2 text-sm sm:flex-row sm:justify-between">
|
|
65
|
+
<Link to="/register" className="font-semibold">Create account</Link>
|
|
66
|
+
<Link to="/recover-password" className="font-semibold">Recover password</Link>
|
|
67
|
+
</div>
|
|
68
|
+
</form>
|
|
69
|
+
</div>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default LoginPage;
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
import { createPayroll, getPayrolls, updatePayroll, deletePayroll } from "../api/payrollApi";
|
|
3
|
+
import { getEmployees } from "../api/employeeApi";
|
|
4
|
+
import Layout from "../components/Layout";
|
|
5
|
+
import Message from "../components/Message";
|
|
6
|
+
|
|
7
|
+
const initialForm = {
|
|
8
|
+
employee: "",
|
|
9
|
+
month: new Date().getMonth() + 1,
|
|
10
|
+
year: new Date().getFullYear(),
|
|
11
|
+
basicPay: "",
|
|
12
|
+
allowances: "0",
|
|
13
|
+
deductions: "0",
|
|
14
|
+
netPay: ""
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const PayrollPage = ({ user, setUser }) => {
|
|
18
|
+
const [formData, setFormData] = useState(initialForm);
|
|
19
|
+
const [payrolls, setPayrolls] = useState([]);
|
|
20
|
+
const [employees, setEmployees] = useState([]);
|
|
21
|
+
const [editingId, setEditingId] = useState(null);
|
|
22
|
+
const [message, setMessage] = useState("");
|
|
23
|
+
const [messageType, setMessageType] = useState("");
|
|
24
|
+
|
|
25
|
+
const loadPayrolls = async () => {
|
|
26
|
+
const data = await getPayrolls();
|
|
27
|
+
setPayrolls(data);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const loadEmployees = async () => {
|
|
31
|
+
const data = await getEmployees();
|
|
32
|
+
setEmployees(data);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
loadPayrolls();
|
|
37
|
+
loadEmployees();
|
|
38
|
+
}, []);
|
|
39
|
+
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
const basic = parseFloat(formData.basicPay) || 0;
|
|
42
|
+
const allowances = parseFloat(formData.allowances) || 0;
|
|
43
|
+
const deductions = parseFloat(formData.deductions) || 0;
|
|
44
|
+
setFormData((prev) => ({ ...prev, netPay: Math.max(0, basic + allowances - deductions) }));
|
|
45
|
+
}, [formData.basicPay, formData.allowances, formData.deductions]);
|
|
46
|
+
|
|
47
|
+
const handleChange = (event) => {
|
|
48
|
+
setFormData({ ...formData, [event.target.name]: event.target.value });
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const handleEmployeeSelect = (event) => {
|
|
52
|
+
const empId = event.target.value;
|
|
53
|
+
const selected = employees.find((e) => e._id === empId);
|
|
54
|
+
setFormData({
|
|
55
|
+
...formData,
|
|
56
|
+
employee: empId,
|
|
57
|
+
basicPay: selected ? selected.baseSalary : ""
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const handleSubmit = async (event) => {
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
|
|
64
|
+
if (!formData.employee || !formData.basicPay || formData.netPay === undefined) {
|
|
65
|
+
setMessageType("error");
|
|
66
|
+
setMessage("Employee, basic pay and net pay are required");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
if (editingId) {
|
|
72
|
+
const data = await updatePayroll(editingId, formData);
|
|
73
|
+
setMessageType("success");
|
|
74
|
+
setMessage(data.message);
|
|
75
|
+
setEditingId(null);
|
|
76
|
+
} else {
|
|
77
|
+
const data = await createPayroll(formData);
|
|
78
|
+
setMessageType("success");
|
|
79
|
+
setMessage(data.message);
|
|
80
|
+
}
|
|
81
|
+
setFormData(initialForm);
|
|
82
|
+
loadPayrolls();
|
|
83
|
+
} catch (error) {
|
|
84
|
+
setMessageType("error");
|
|
85
|
+
setMessage(error.message);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const handleEdit = (payroll) => {
|
|
90
|
+
setEditingId(payroll._id);
|
|
91
|
+
setFormData({
|
|
92
|
+
employee: payroll.employee?._id || "",
|
|
93
|
+
month: payroll.month,
|
|
94
|
+
year: payroll.year,
|
|
95
|
+
basicPay: payroll.basicPay,
|
|
96
|
+
allowances: payroll.allowances,
|
|
97
|
+
deductions: payroll.deductions,
|
|
98
|
+
netPay: payroll.netPay
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const handleCancelEdit = () => {
|
|
103
|
+
setEditingId(null);
|
|
104
|
+
setFormData(initialForm);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const handleDelete = async (id) => {
|
|
108
|
+
if (!window.confirm("Delete this payroll record?")) return;
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
const data = await deletePayroll(id);
|
|
112
|
+
setMessageType("success");
|
|
113
|
+
setMessage(data.message);
|
|
114
|
+
loadPayrolls();
|
|
115
|
+
} catch (error) {
|
|
116
|
+
setMessageType("error");
|
|
117
|
+
setMessage(error.message);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const monthNames = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
122
|
+
|
|
123
|
+
return (
|
|
124
|
+
<Layout title="Payroll" user={user} setUser={setUser}>
|
|
125
|
+
<form onSubmit={handleSubmit} className="rounded-md border border-primary p-4">
|
|
126
|
+
<Message message={message} type={messageType} />
|
|
127
|
+
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
|
|
128
|
+
<select name="employee" value={formData.employee} onChange={handleEmployeeSelect} className="rounded-md border border-primary bg-secondary p-3 outline-none">
|
|
129
|
+
<option value="">Select Employee *</option>
|
|
130
|
+
{employees.map((emp) => (
|
|
131
|
+
<option key={emp._id} value={emp._id}>{emp.firstName} {emp.lastName} ({emp.employeeCode})</option>
|
|
132
|
+
))}
|
|
133
|
+
</select>
|
|
134
|
+
<select name="month" value={formData.month} onChange={handleChange} className="rounded-md border border-primary bg-secondary p-3 outline-none">
|
|
135
|
+
{monthNames.slice(1).map((name, idx) => (
|
|
136
|
+
<option key={idx + 1} value={idx + 1}>{name}</option>
|
|
137
|
+
))}
|
|
138
|
+
</select>
|
|
139
|
+
<input name="year" type="number" min="2020" max="2030" placeholder="Year" value={formData.year} onChange={handleChange} className="rounded-md border border-primary bg-secondary p-3 outline-none" />
|
|
140
|
+
<input name="basicPay" type="number" min="0" placeholder="Basic Pay *" value={formData.basicPay} onChange={handleChange} className="rounded-md border border-primary bg-secondary p-3 outline-none" />
|
|
141
|
+
<input name="allowances" type="number" min="0" placeholder="Allowances" value={formData.allowances} onChange={handleChange} className="rounded-md border border-primary bg-secondary p-3 outline-none" />
|
|
142
|
+
<input name="deductions" type="number" min="0" placeholder="Deductions" value={formData.deductions} onChange={handleChange} className="rounded-md border border-primary bg-secondary p-3 outline-none" />
|
|
143
|
+
<input name="netPay" type="number" min="0" placeholder="Net Pay *" value={formData.netPay} readOnly className="rounded-md border border-primary bg-gray-100 p-3 outline-none" />
|
|
144
|
+
</div>
|
|
145
|
+
<div className="mt-4 flex gap-3">
|
|
146
|
+
<button className="rounded-md bg-primary px-5 py-3 font-semibold text-secondary">
|
|
147
|
+
{editingId ? "Update Payroll" : "Process Payroll"}
|
|
148
|
+
</button>
|
|
149
|
+
{editingId && (
|
|
150
|
+
<button type="button" onClick={handleCancelEdit} className="rounded-md border border-primary px-5 py-3 font-semibold">
|
|
151
|
+
Cancel
|
|
152
|
+
</button>
|
|
153
|
+
)}
|
|
154
|
+
</div>
|
|
155
|
+
</form>
|
|
156
|
+
|
|
157
|
+
<div className="mt-6 overflow-x-auto">
|
|
158
|
+
<table className="w-full min-w-[900px] border border-primary text-left text-sm">
|
|
159
|
+
<thead className="bg-primary text-secondary">
|
|
160
|
+
<tr>
|
|
161
|
+
<th className="p-3">Employee</th>
|
|
162
|
+
<th className="p-3">Period</th>
|
|
163
|
+
<th className="p-3">Basic Pay</th>
|
|
164
|
+
<th className="p-3">Allowances</th>
|
|
165
|
+
<th className="p-3">Deductions</th>
|
|
166
|
+
<th className="p-3">Net Pay</th>
|
|
167
|
+
<th className="p-3">Actions</th>
|
|
168
|
+
</tr>
|
|
169
|
+
</thead>
|
|
170
|
+
<tbody>
|
|
171
|
+
{payrolls.length === 0 ? (
|
|
172
|
+
<tr className="border-t border-primary">
|
|
173
|
+
<td colSpan="7" className="p-3 text-center">No payroll records found</td>
|
|
174
|
+
</tr>
|
|
175
|
+
) : (
|
|
176
|
+
payrolls.map((payroll) => (
|
|
177
|
+
<tr key={payroll._id} className="border-t border-primary">
|
|
178
|
+
<td className="p-3">{payroll.employee?.firstName} {payroll.employee?.lastName}</td>
|
|
179
|
+
<td className="p-3">{monthNames[payroll.month]} {payroll.year}</td>
|
|
180
|
+
<td className="p-3">{Number(payroll.basicPay).toLocaleString()} FRW</td>
|
|
181
|
+
<td className="p-3">{Number(payroll.allowances).toLocaleString()} FRW</td>
|
|
182
|
+
<td className="p-3">{Number(payroll.deductions).toLocaleString()} FRW</td>
|
|
183
|
+
<td className="p-3 font-bold">{Number(payroll.netPay).toLocaleString()} FRW</td>
|
|
184
|
+
<td className="p-3">
|
|
185
|
+
<button onClick={() => handleEdit(payroll)} className="mr-2 font-semibold text-primary">Edit</button>
|
|
186
|
+
<button onClick={() => handleDelete(payroll._id)} className="font-semibold text-red-600">Delete</button>
|
|
187
|
+
</td>
|
|
188
|
+
</tr>
|
|
189
|
+
))
|
|
190
|
+
)}
|
|
191
|
+
</tbody>
|
|
192
|
+
</table>
|
|
193
|
+
</div>
|
|
194
|
+
</Layout>
|
|
195
|
+
);
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export default PayrollPage;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import { recoverPassword } from "../api/authApi";
|
|
4
|
+
import Message from "../components/Message";
|
|
5
|
+
|
|
6
|
+
const RecoverPasswordPage = () => {
|
|
7
|
+
const [formData, setFormData] = useState({ username: "", newPassword: "" });
|
|
8
|
+
const [message, setMessage] = useState("");
|
|
9
|
+
const [messageType, setMessageType] = useState("");
|
|
10
|
+
|
|
11
|
+
const handleChange = (event) => {
|
|
12
|
+
setFormData({ ...formData, [event.target.name]: event.target.value });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const handleSubmit = async (event) => {
|
|
16
|
+
event.preventDefault();
|
|
17
|
+
|
|
18
|
+
if (!formData.username || !formData.newPassword) {
|
|
19
|
+
setMessageType("error");
|
|
20
|
+
setMessage("All fields are required");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const data = await recoverPassword(formData);
|
|
26
|
+
setMessageType("success");
|
|
27
|
+
setMessage(data.message);
|
|
28
|
+
setFormData({ username: "", newPassword: "" });
|
|
29
|
+
} catch (error) {
|
|
30
|
+
setMessageType("error");
|
|
31
|
+
setMessage(error.message);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div className="flex min-h-screen items-center justify-center bg-secondary p-4 text-primary">
|
|
37
|
+
<form onSubmit={handleSubmit} className="w-full max-w-md rounded-md border border-primary p-6">
|
|
38
|
+
<h1 className="mb-2 text-2xl font-bold">Password Recovery</h1>
|
|
39
|
+
<p className="mb-6 text-sm">Set a new password for an existing username</p>
|
|
40
|
+
<Message message={message} type={messageType} />
|
|
41
|
+
|
|
42
|
+
<label className="mb-2 block text-sm font-semibold">Username</label>
|
|
43
|
+
<input
|
|
44
|
+
name="username"
|
|
45
|
+
value={formData.username}
|
|
46
|
+
onChange={handleChange}
|
|
47
|
+
className="mb-4 w-full rounded-md border border-primary bg-secondary p-3 outline-none"
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
<label className="mb-2 block text-sm font-semibold">New Password</label>
|
|
51
|
+
<input
|
|
52
|
+
name="newPassword"
|
|
53
|
+
type="password"
|
|
54
|
+
value={formData.newPassword}
|
|
55
|
+
onChange={handleChange}
|
|
56
|
+
className="mb-4 w-full rounded-md border border-primary bg-secondary p-3 outline-none"
|
|
57
|
+
/>
|
|
58
|
+
|
|
59
|
+
<button className="w-full rounded-md bg-primary px-4 py-3 font-semibold text-secondary">
|
|
60
|
+
Change Password
|
|
61
|
+
</button>
|
|
62
|
+
|
|
63
|
+
<Link to="/login" className="mt-4 block text-sm font-semibold">Back to login</Link>
|
|
64
|
+
</form>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export default RecoverPasswordPage;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link, useNavigate } from "react-router-dom";
|
|
3
|
+
import { registerUser } from "../api/authApi";
|
|
4
|
+
import Message from "../components/Message";
|
|
5
|
+
|
|
6
|
+
const RegisterPage = ({ setUser }) => {
|
|
7
|
+
const navigate = useNavigate();
|
|
8
|
+
const [formData, setFormData] = useState({ username: "", password: "" });
|
|
9
|
+
const [message, setMessage] = useState("");
|
|
10
|
+
const [messageType, setMessageType] = useState("");
|
|
11
|
+
|
|
12
|
+
const handleChange = (event) => {
|
|
13
|
+
setFormData({ ...formData, [event.target.name]: event.target.value });
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const handleSubmit = async (event) => {
|
|
17
|
+
event.preventDefault();
|
|
18
|
+
|
|
19
|
+
if (!formData.username || !formData.password) {
|
|
20
|
+
setMessageType("error");
|
|
21
|
+
setMessage("All fields are required");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
const data = await registerUser(formData);
|
|
27
|
+
setUser(data.user);
|
|
28
|
+
navigate("/");
|
|
29
|
+
} catch (error) {
|
|
30
|
+
setMessageType("error");
|
|
31
|
+
setMessage(error.message);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div className="flex min-h-screen items-center justify-center bg-secondary p-4 text-primary">
|
|
37
|
+
<form onSubmit={handleSubmit} className="w-full max-w-md rounded-md border border-primary p-6">
|
|
38
|
+
<h1 className="mb-2 text-2xl font-bold">Create Account</h1>
|
|
39
|
+
<p className="mb-6 text-sm">Register the system administrator account</p>
|
|
40
|
+
<Message message={message} type={messageType} />
|
|
41
|
+
|
|
42
|
+
<label className="mb-2 block text-sm font-semibold">Username</label>
|
|
43
|
+
<input
|
|
44
|
+
name="username"
|
|
45
|
+
value={formData.username}
|
|
46
|
+
onChange={handleChange}
|
|
47
|
+
className="mb-4 w-full rounded-md border border-primary bg-secondary p-3 outline-none"
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
<label className="mb-2 block text-sm font-semibold">Password</label>
|
|
51
|
+
<input
|
|
52
|
+
name="password"
|
|
53
|
+
type="password"
|
|
54
|
+
value={formData.password}
|
|
55
|
+
onChange={handleChange}
|
|
56
|
+
className="mb-4 w-full rounded-md border border-primary bg-secondary p-3 outline-none"
|
|
57
|
+
/>
|
|
58
|
+
|
|
59
|
+
<button className="w-full rounded-md bg-primary px-4 py-3 font-semibold text-secondary">
|
|
60
|
+
Register
|
|
61
|
+
</button>
|
|
62
|
+
|
|
63
|
+
<Link to="/login" className="mt-4 block text-sm font-semibold">Back to login</Link>
|
|
64
|
+
</form>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export default RegisterPage;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
import { getReports } from "../api/reportApi";
|
|
3
|
+
import Layout from "../components/Layout";
|
|
4
|
+
|
|
5
|
+
const ReportsPage = ({ user, setUser }) => {
|
|
6
|
+
const now = new Date();
|
|
7
|
+
const [month, setMonth] = useState(now.getMonth() + 1);
|
|
8
|
+
const [year, setYear] = useState(now.getFullYear());
|
|
9
|
+
const [report, setReport] = useState({
|
|
10
|
+
totalEmployees: 0,
|
|
11
|
+
totalPayrollAmount: 0,
|
|
12
|
+
totalAllowances: 0,
|
|
13
|
+
totalDeductions: 0,
|
|
14
|
+
payrollRecords: []
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const monthNames = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
18
|
+
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const loadReport = async () => {
|
|
21
|
+
const data = await getReports(month, year);
|
|
22
|
+
setReport(data);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
loadReport();
|
|
26
|
+
}, [month, year]);
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<Layout title="Reports" user={user} setUser={setUser}>
|
|
30
|
+
<div className="no-print mb-5 flex flex-col gap-3 rounded-md border border-primary p-4 sm:flex-row sm:items-center sm:justify-between">
|
|
31
|
+
<div className="flex gap-3">
|
|
32
|
+
<select value={month} onChange={(event) => setMonth(parseInt(event.target.value))} className="rounded-md border border-primary bg-secondary p-3 outline-none">
|
|
33
|
+
{monthNames.slice(1).map((name, idx) => (
|
|
34
|
+
<option key={idx + 1} value={idx + 1}>{name}</option>
|
|
35
|
+
))}
|
|
36
|
+
</select>
|
|
37
|
+
<input type="number" min="2020" max="2030" value={year} onChange={(event) => setYear(parseInt(event.target.value))} className="w-24 rounded-md border border-primary bg-secondary p-3 outline-none" />
|
|
38
|
+
</div>
|
|
39
|
+
<button onClick={() => window.print()} className="rounded-md bg-primary px-5 py-3 font-semibold text-secondary">
|
|
40
|
+
Print Report
|
|
41
|
+
</button>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<h3 className="mb-4 text-xl font-bold">{monthNames[month]} {year} Payroll Report</h3>
|
|
45
|
+
|
|
46
|
+
<section className="mb-6 grid gap-4 md:grid-cols-4">
|
|
47
|
+
<div className="rounded-md border border-primary p-4">
|
|
48
|
+
<p className="text-sm font-semibold">Total Employees</p>
|
|
49
|
+
<p className="mt-2 text-2xl font-bold">{report.totalEmployees}</p>
|
|
50
|
+
</div>
|
|
51
|
+
<div className="rounded-md border border-primary p-4">
|
|
52
|
+
<p className="text-sm font-semibold">Payroll Records</p>
|
|
53
|
+
<p className="mt-2 text-2xl font-bold">{report.recordCount}</p>
|
|
54
|
+
</div>
|
|
55
|
+
<div className="rounded-md border border-primary p-4">
|
|
56
|
+
<p className="text-sm font-semibold">Total Allowances</p>
|
|
57
|
+
<p className="mt-2 text-2xl font-bold">{report.totalAllowances.toLocaleString()} FRW</p>
|
|
58
|
+
</div>
|
|
59
|
+
<div className="rounded-md border border-primary p-4">
|
|
60
|
+
<p className="text-sm font-semibold">Total Deductions</p>
|
|
61
|
+
<p className="mt-2 text-2xl font-bold">{report.totalDeductions.toLocaleString()} FRW</p>
|
|
62
|
+
</div>
|
|
63
|
+
</section>
|
|
64
|
+
|
|
65
|
+
<section className="mb-6 grid gap-4 md:grid-cols-2">
|
|
66
|
+
<div className="rounded-md border border-primary p-4">
|
|
67
|
+
<p className="text-sm font-semibold">Total Payroll Amount</p>
|
|
68
|
+
<p className="mt-2 text-3xl font-bold">{report.totalPayrollAmount.toLocaleString()} FRW</p>
|
|
69
|
+
</div>
|
|
70
|
+
</section>
|
|
71
|
+
|
|
72
|
+
<section>
|
|
73
|
+
<h3 className="mb-3 text-lg font-bold">Payroll Records</h3>
|
|
74
|
+
<div className="overflow-x-auto">
|
|
75
|
+
<table className="w-full min-w-[800px] border border-primary text-left text-sm">
|
|
76
|
+
<thead className="bg-primary text-secondary">
|
|
77
|
+
<tr>
|
|
78
|
+
<th className="p-3">Employee Code</th>
|
|
79
|
+
<th className="p-3">Name</th>
|
|
80
|
+
<th className="p-3">Department</th>
|
|
81
|
+
<th className="p-3">Basic Pay</th>
|
|
82
|
+
<th className="p-3">Allowances</th>
|
|
83
|
+
<th className="p-3">Deductions</th>
|
|
84
|
+
<th className="p-3">Net Pay</th>
|
|
85
|
+
</tr>
|
|
86
|
+
</thead>
|
|
87
|
+
<tbody>
|
|
88
|
+
{report.payrollRecords.length === 0 ? (
|
|
89
|
+
<tr className="border-t border-primary">
|
|
90
|
+
<td colSpan="7" className="p-3 text-center">No payroll records for this period</td>
|
|
91
|
+
</tr>
|
|
92
|
+
) : (
|
|
93
|
+
report.payrollRecords.map((record) => (
|
|
94
|
+
<tr key={record._id} className="border-t border-primary">
|
|
95
|
+
<td className="p-3">{record.employee?.employeeCode}</td>
|
|
96
|
+
<td className="p-3">{record.employee?.firstName} {record.employee?.lastName}</td>
|
|
97
|
+
<td className="p-3">{record.employee?.department}</td>
|
|
98
|
+
<td className="p-3">{Number(record.basicPay).toLocaleString()} FRW</td>
|
|
99
|
+
<td className="p-3">{Number(record.allowances).toLocaleString()} FRW</td>
|
|
100
|
+
<td className="p-3">{Number(record.deductions).toLocaleString()} FRW</td>
|
|
101
|
+
<td className="p-3 font-bold">{Number(record.netPay).toLocaleString()} FRW</td>
|
|
102
|
+
</tr>
|
|
103
|
+
))
|
|
104
|
+
)}
|
|
105
|
+
</tbody>
|
|
106
|
+
</table>
|
|
107
|
+
</div>
|
|
108
|
+
</section>
|
|
109
|
+
</Layout>
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export default ReportsPage;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -x "$basedir/node" ]; then
|
|
13
|
+
exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@"
|
|
14
|
+
else
|
|
15
|
+
exec node "$basedir/../acorn/bin/acorn" "$@"
|
|
16
|
+
fi
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@ECHO off
|
|
2
|
+
GOTO start
|
|
3
|
+
:find_dp0
|
|
4
|
+
SET dp0=%~dp0
|
|
5
|
+
EXIT /b
|
|
6
|
+
:start
|
|
7
|
+
SETLOCAL
|
|
8
|
+
CALL :find_dp0
|
|
9
|
+
|
|
10
|
+
IF EXIST "%dp0%\node.exe" (
|
|
11
|
+
SET "_prog=%dp0%\node.exe"
|
|
12
|
+
) ELSE (
|
|
13
|
+
SET "_prog=node"
|
|
14
|
+
SET PATHEXT=%PATHEXT:;.JS;=;%
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\acorn\bin\acorn" %*
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env pwsh
|
|
2
|
+
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
|
3
|
+
|
|
4
|
+
$exe=""
|
|
5
|
+
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
|
6
|
+
# Fix case when both the Windows and Linux builds of Node
|
|
7
|
+
# are installed in the same directory
|
|
8
|
+
$exe=".exe"
|
|
9
|
+
}
|
|
10
|
+
$ret=0
|
|
11
|
+
if (Test-Path "$basedir/node$exe") {
|
|
12
|
+
# Support pipeline input
|
|
13
|
+
if ($MyInvocation.ExpectingInput) {
|
|
14
|
+
$input | & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
|
|
15
|
+
} else {
|
|
16
|
+
& "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
|
|
17
|
+
}
|
|
18
|
+
$ret=$LASTEXITCODE
|
|
19
|
+
} else {
|
|
20
|
+
# Support pipeline input
|
|
21
|
+
if ($MyInvocation.ExpectingInput) {
|
|
22
|
+
$input | & "node$exe" "$basedir/../acorn/bin/acorn" $args
|
|
23
|
+
} else {
|
|
24
|
+
& "node$exe" "$basedir/../acorn/bin/acorn" $args
|
|
25
|
+
}
|
|
26
|
+
$ret=$LASTEXITCODE
|
|
27
|
+
}
|
|
28
|
+
exit $ret
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -x "$basedir/node" ]; then
|
|
13
|
+
exec "$basedir/node" "$basedir/../baseline-browser-mapping/dist/cli.cjs" "$@"
|
|
14
|
+
else
|
|
15
|
+
exec node "$basedir/../baseline-browser-mapping/dist/cli.cjs" "$@"
|
|
16
|
+
fi
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@ECHO off
|
|
2
|
+
GOTO start
|
|
3
|
+
:find_dp0
|
|
4
|
+
SET dp0=%~dp0
|
|
5
|
+
EXIT /b
|
|
6
|
+
:start
|
|
7
|
+
SETLOCAL
|
|
8
|
+
CALL :find_dp0
|
|
9
|
+
|
|
10
|
+
IF EXIST "%dp0%\node.exe" (
|
|
11
|
+
SET "_prog=%dp0%\node.exe"
|
|
12
|
+
) ELSE (
|
|
13
|
+
SET "_prog=node"
|
|
14
|
+
SET PATHEXT=%PATHEXT:;.JS;=;%
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\baseline-browser-mapping\dist\cli.cjs" %*
|