create-myexam-app 1.0.21 → 1.0.23
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(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/frontend → SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project}/index.html +2 -2
- 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/SMS-/frontend-project/src/pages/Reports.jsx +179 -23
- 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/{SCMS/backend → SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project}/package-lock.json +1609 -2190
- 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/{SCMS/frontend → SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project}/vite.config.js +5 -3
- package/projects/SCMS/backend/.env +0 -5
- package/projects/SCMS/backend/config/db.js +0 -12
- package/projects/SCMS/backend/controllers/authController.js +0 -90
- package/projects/SCMS/backend/controllers/deliveryController.js +0 -79
- package/projects/SCMS/backend/controllers/productController.js +0 -74
- package/projects/SCMS/backend/controllers/reportsController.js +0 -77
- package/projects/SCMS/backend/controllers/shipmentController.js +0 -80
- package/projects/SCMS/backend/controllers/supplierController.js +0 -58
- package/projects/SCMS/backend/middleware/auth.js +0 -32
- package/projects/SCMS/backend/models/User.js +0 -28
- package/projects/SCMS/backend/models/delivery.js +0 -33
- package/projects/SCMS/backend/models/product.js +0 -43
- package/projects/SCMS/backend/models/shipment.js +0 -34
- package/projects/SCMS/backend/models/supplier.js +0 -36
- package/projects/SCMS/backend/package.json +0 -23
- package/projects/SCMS/backend/routes/SupplierRoutes.js +0 -15
- package/projects/SCMS/backend/routes/authRoutes.js +0 -11
- package/projects/SCMS/backend/routes/deliveryRoutes.js +0 -18
- package/projects/SCMS/backend/routes/productRoutes.js +0 -15
- package/projects/SCMS/backend/routes/protectedRoutes.js +0 -10
- package/projects/SCMS/backend/routes/reportsRoutes.js +0 -8
- package/projects/SCMS/backend/routes/shipmentRoutes.js +0 -18
- package/projects/SCMS/backend/server.js +0 -35
- package/projects/SCMS/frontend/README.md +0 -16
- package/projects/SCMS/frontend/eslint.config.js +0 -21
- package/projects/SCMS/frontend/package-lock.json +0 -3053
- package/projects/SCMS/frontend/package.json +0 -31
- package/projects/SCMS/frontend/public/favicon.svg +0 -1
- package/projects/SCMS/frontend/src/App.jsx +0 -35
- package/projects/SCMS/frontend/src/components/DashboardLayout.jsx +0 -103
- package/projects/SCMS/frontend/src/components/ProtectedRoute.jsx +0 -30
- package/projects/SCMS/frontend/src/index.css +0 -114
- package/projects/SCMS/frontend/src/main.jsx +0 -10
- package/projects/SCMS/frontend/src/pages/DashboardHome.jsx +0 -34
- package/projects/SCMS/frontend/src/pages/Delivery.jsx +0 -183
- package/projects/SCMS/frontend/src/pages/Login.jsx +0 -81
- package/projects/SCMS/frontend/src/pages/Profile.jsx +0 -62
- package/projects/SCMS/frontend/src/pages/Register.jsx +0 -110
- package/projects/SCMS/frontend/src/pages/Reports.jsx +0 -94
- package/projects/SCMS/frontend/src/pages/Shipment.jsx +0 -182
- package/projects/SCMS/frontend/src/pages/Supplier.jsx +0 -165
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useState, useEffect } from "react";
|
|
2
2
|
import axios from '../axiosInstance';
|
|
3
3
|
|
|
4
|
-
function Reports
|
|
4
|
+
function Reports() {
|
|
5
|
+
|
|
5
6
|
const [products, setProducts] = useState([]);
|
|
6
7
|
const [warehouses, setWarehouses] = useState([]);
|
|
7
8
|
const [stockTransaction, setStockTransaction] = useState([]);
|
|
@@ -17,7 +18,7 @@ function Reports () {
|
|
|
17
18
|
|
|
18
19
|
const txRes = await axios.get('http://localhost:5000/api/stockTransaction');
|
|
19
20
|
setStockTransaction(txRes.data);
|
|
20
|
-
} catch(error) {
|
|
21
|
+
} catch (error) {
|
|
21
22
|
setError("Failed to generate report summaries.");
|
|
22
23
|
}
|
|
23
24
|
};
|
|
@@ -26,38 +27,150 @@ function Reports () {
|
|
|
26
27
|
fetchAllReports();
|
|
27
28
|
}, []);
|
|
28
29
|
|
|
30
|
+
const today = new Date();
|
|
31
|
+
|
|
32
|
+
const dailyTransactions = stockTransaction.filter((tx) => {
|
|
33
|
+
if (!tx.transactionDate) return false;
|
|
34
|
+
const txDate = new Date(tx.transactionDate);
|
|
35
|
+
return txDate.toDateString() === today.toDateString();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const weeklyTransactions = stockTransaction.filter((tx) => {
|
|
39
|
+
if (!tx.transactionDate) return false;
|
|
40
|
+
|
|
41
|
+
const txDate = new Date(tx.transactionDate);
|
|
42
|
+
|
|
43
|
+
const startOfWeek = new Date(today);
|
|
44
|
+
startOfWeek.setHours(0, 0, 0, 0);
|
|
45
|
+
startOfWeek.setDate(today.getDate() - today.getDay());
|
|
46
|
+
|
|
47
|
+
const endOfWeek = new Date(startOfWeek);
|
|
48
|
+
endOfWeek.setDate(startOfWeek.getDate() + 6);
|
|
49
|
+
endOfWeek.setHours(23, 59, 59, 999);
|
|
50
|
+
|
|
51
|
+
return txDate >= startOfWeek && txDate <= endOfWeek;
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const monthlyTransactions = stockTransaction.filter((tx) => {
|
|
55
|
+
if (!tx.transactionDate) return false;
|
|
56
|
+
|
|
57
|
+
const txDate = new Date(tx.transactionDate);
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
txDate.getMonth() === today.getMonth() &&
|
|
61
|
+
txDate.getFullYear() === today.getFullYear()
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const dailyQuantity = dailyTransactions.reduce(
|
|
66
|
+
(sum, tx) => sum + Number(tx.quantityMoved || 0),
|
|
67
|
+
0
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const weeklyQuantity = weeklyTransactions.reduce(
|
|
71
|
+
(sum, tx) => sum + Number(tx.quantityMoved || 0),
|
|
72
|
+
0
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const monthlyQuantity = monthlyTransactions.reduce(
|
|
76
|
+
(sum, tx) => sum + Number(tx.quantityMoved || 0),
|
|
77
|
+
0
|
|
78
|
+
);
|
|
79
|
+
|
|
29
80
|
return (
|
|
30
81
|
<div className="p-6 bg-slate-50 min-h-screen flex flex-col gap-8">
|
|
82
|
+
|
|
31
83
|
<div>
|
|
32
84
|
<h2 className="text-2xl font-bold text-slate-800">System Summary Reports</h2>
|
|
33
85
|
<p className="text-sm text-slate-500">Live summary data across your inventory portal.</p>
|
|
34
86
|
</div>
|
|
35
87
|
|
|
36
88
|
{error && (
|
|
37
|
-
<p className="text-red-500 bg-red-100 p-2 rounded text-sm font-semibold text-center">
|
|
89
|
+
<p className="text-red-500 bg-red-100 p-2 rounded text-sm font-semibold text-center">
|
|
90
|
+
{error}
|
|
91
|
+
</p>
|
|
38
92
|
)}
|
|
39
93
|
|
|
40
|
-
{/* Quick Stats Grid Cards */}
|
|
41
94
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
95
|
+
|
|
96
|
+
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
97
|
+
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
98
|
+
Total Items
|
|
99
|
+
</span>
|
|
100
|
+
<h4 className="text-2xl font-extrabold text-blue-600">
|
|
101
|
+
{products.length} Products
|
|
102
|
+
</h4>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
106
|
+
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
107
|
+
Active Spots
|
|
108
|
+
</span>
|
|
109
|
+
<h4 className="text-2xl font-extrabold text-green-600">
|
|
110
|
+
{warehouses.length} Warehouses
|
|
111
|
+
</h4>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
115
|
+
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
116
|
+
Logged Activity
|
|
117
|
+
</span>
|
|
118
|
+
<h4 className="text-2xl font-extrabold text-purple-600">
|
|
119
|
+
{stockTransaction.length} Logs
|
|
120
|
+
</h4>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
126
|
+
|
|
42
127
|
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
43
|
-
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
44
|
-
|
|
128
|
+
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
129
|
+
Daily Report
|
|
130
|
+
</span>
|
|
131
|
+
<h4 className="text-2xl font-extrabold text-blue-600">
|
|
132
|
+
{dailyTransactions.length} Transactions
|
|
133
|
+
</h4>
|
|
134
|
+
<p className="text-sm text-slate-500">
|
|
135
|
+
{dailyQuantity} Units Moved Today
|
|
136
|
+
</p>
|
|
45
137
|
</div>
|
|
138
|
+
|
|
46
139
|
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
47
|
-
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
48
|
-
|
|
140
|
+
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
141
|
+
Weekly Report
|
|
142
|
+
</span>
|
|
143
|
+
<h4 className="text-2xl font-extrabold text-green-600">
|
|
144
|
+
{weeklyTransactions.length} Transactions
|
|
145
|
+
</h4>
|
|
146
|
+
<p className="text-sm text-slate-500">
|
|
147
|
+
{weeklyQuantity} Units Moved This Week
|
|
148
|
+
</p>
|
|
49
149
|
</div>
|
|
150
|
+
|
|
50
151
|
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
51
|
-
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
52
|
-
|
|
152
|
+
<span className="text-xs font-bold text-slate-400 uppercase">
|
|
153
|
+
Monthly Report
|
|
154
|
+
</span>
|
|
155
|
+
<h4 className="text-2xl font-extrabold text-purple-600">
|
|
156
|
+
{monthlyTransactions.length} Transactions
|
|
157
|
+
</h4>
|
|
158
|
+
<p className="text-sm text-slate-500">
|
|
159
|
+
{monthlyQuantity} Units Moved This Month
|
|
160
|
+
</p>
|
|
53
161
|
</div>
|
|
162
|
+
|
|
54
163
|
</div>
|
|
55
164
|
|
|
56
|
-
{/* Products Table */}
|
|
57
165
|
<div className="bg-white rounded shadow-sm border border-slate-200 flex flex-col gap-2 p-4">
|
|
58
|
-
|
|
166
|
+
|
|
167
|
+
<h3 className="text-lg font-bold text-slate-700">
|
|
168
|
+
Available Products Summary
|
|
169
|
+
</h3>
|
|
170
|
+
|
|
59
171
|
<div className="overflow-x-auto">
|
|
60
172
|
<table className="w-full text-left border-collapse">
|
|
173
|
+
|
|
61
174
|
<thead>
|
|
62
175
|
<tr className="bg-slate-100 border-b border-slate-200 text-slate-700 text-sm font-bold">
|
|
63
176
|
<th className="p-3">Product Code</th>
|
|
@@ -69,28 +182,43 @@ function Reports () {
|
|
|
69
182
|
<th className="p-3">Date</th>
|
|
70
183
|
</tr>
|
|
71
184
|
</thead>
|
|
185
|
+
|
|
72
186
|
<tbody className="text-slate-600 text-sm divide-y divide-slate-100">
|
|
73
187
|
{Array.isArray(products) && products.map((prod) => (
|
|
74
188
|
<tr key={prod._id} className="hover:bg-slate-50">
|
|
75
|
-
<td className="p-3 font-semibold text-slate-700">
|
|
189
|
+
<td className="p-3 font-semibold text-slate-700">
|
|
190
|
+
{prod.productCode}
|
|
191
|
+
</td>
|
|
76
192
|
<td className="p-3">{prod.productName}</td>
|
|
77
193
|
<td className="p-3">{prod.category}</td>
|
|
78
194
|
<td className="p-3">{prod.quantityInStock}</td>
|
|
79
195
|
<td className="p-3">${prod.unitPrice}</td>
|
|
80
196
|
<td className="p-3">{prod.supplierName}</td>
|
|
81
|
-
<td className="p-3">
|
|
197
|
+
<td className="p-3">
|
|
198
|
+
{prod.date
|
|
199
|
+
? prod.date.substring(0, 10)
|
|
200
|
+
: (prod.dateReceived
|
|
201
|
+
? prod.dateReceived.substring(0, 10)
|
|
202
|
+
: "")}
|
|
203
|
+
</td>
|
|
82
204
|
</tr>
|
|
83
205
|
))}
|
|
84
206
|
</tbody>
|
|
207
|
+
|
|
85
208
|
</table>
|
|
86
209
|
</div>
|
|
210
|
+
|
|
87
211
|
</div>
|
|
88
212
|
|
|
89
|
-
{/* Warehouse Table */}
|
|
90
213
|
<div className="bg-white rounded shadow-sm border border-slate-200 flex flex-col gap-2 p-4">
|
|
91
|
-
|
|
214
|
+
|
|
215
|
+
<h3 className="text-lg font-bold text-slate-700">
|
|
216
|
+
Warehouse Setup Summary
|
|
217
|
+
</h3>
|
|
218
|
+
|
|
92
219
|
<div className="overflow-x-auto">
|
|
93
220
|
<table className="w-full text-left border-collapse">
|
|
221
|
+
|
|
94
222
|
<thead>
|
|
95
223
|
<tr className="bg-slate-100 border-b border-slate-200 text-slate-700 text-sm font-bold">
|
|
96
224
|
<th className="p-3">Warehouse Code</th>
|
|
@@ -98,24 +226,33 @@ function Reports () {
|
|
|
98
226
|
<th className="p-3">Warehouse Location</th>
|
|
99
227
|
</tr>
|
|
100
228
|
</thead>
|
|
229
|
+
|
|
101
230
|
<tbody className="text-slate-600 text-sm divide-y divide-slate-100">
|
|
102
231
|
{Array.isArray(warehouses) && warehouses.map((wh) => (
|
|
103
232
|
<tr key={wh._id} className="hover:bg-slate-50">
|
|
104
|
-
<td className="p-3 font-semibold text-slate-700">
|
|
233
|
+
<td className="p-3 font-semibold text-slate-700">
|
|
234
|
+
{wh.warehouseCode}
|
|
235
|
+
</td>
|
|
105
236
|
<td className="p-3">{wh.warehouseName}</td>
|
|
106
237
|
<td className="p-3">{wh.warehouseLocation}</td>
|
|
107
238
|
</tr>
|
|
108
239
|
))}
|
|
109
240
|
</tbody>
|
|
241
|
+
|
|
110
242
|
</table>
|
|
111
243
|
</div>
|
|
244
|
+
|
|
112
245
|
</div>
|
|
113
246
|
|
|
114
|
-
{/* Transactions Table */}
|
|
115
247
|
<div className="bg-white rounded shadow-sm border border-slate-200 flex flex-col gap-2 p-4">
|
|
116
|
-
|
|
248
|
+
|
|
249
|
+
<h3 className="text-lg font-bold text-slate-700">
|
|
250
|
+
Stock Activity Logs
|
|
251
|
+
</h3>
|
|
252
|
+
|
|
117
253
|
<div className="overflow-x-auto">
|
|
118
254
|
<table className="w-full text-left border-collapse">
|
|
255
|
+
|
|
119
256
|
<thead>
|
|
120
257
|
<tr className="bg-slate-100 border-b border-slate-200 text-slate-700 text-sm font-bold">
|
|
121
258
|
<th className="p-3">Transaction Date</th>
|
|
@@ -123,24 +260,43 @@ function Reports () {
|
|
|
123
260
|
<th className="p-3">Transaction Type</th>
|
|
124
261
|
</tr>
|
|
125
262
|
</thead>
|
|
263
|
+
|
|
126
264
|
<tbody className="text-slate-600 text-sm divide-y divide-slate-100">
|
|
127
265
|
{Array.isArray(stockTransaction) && stockTransaction.map((tx) => (
|
|
128
266
|
<tr key={tx._id} className="hover:bg-slate-50">
|
|
129
|
-
<td className="p-3">{tx.transactionDate ? tx.transactionDate.substring(0, 10) : ""}</td>
|
|
130
|
-
<td className="p-3 font-semibold">{tx.quantityMoved}</td>
|
|
131
267
|
<td className="p-3">
|
|
132
|
-
|
|
268
|
+
{tx.transactionDate
|
|
269
|
+
? tx.transactionDate.substring(0, 10)
|
|
270
|
+
: ""}
|
|
271
|
+
</td>
|
|
272
|
+
|
|
273
|
+
<td className="p-3 font-semibold">
|
|
274
|
+
{tx.quantityMoved}
|
|
275
|
+
</td>
|
|
276
|
+
|
|
277
|
+
<td className="p-3">
|
|
278
|
+
<span
|
|
279
|
+
className={`px-2 py-0.5 rounded text-xs font-bold ${
|
|
280
|
+
tx.transactionType?.toLowerCase().includes('in')
|
|
281
|
+
? 'bg-green-100 text-green-700'
|
|
282
|
+
: 'bg-amber-100 text-amber-700'
|
|
283
|
+
}`}
|
|
284
|
+
>
|
|
133
285
|
{tx.transactionType}
|
|
134
286
|
</span>
|
|
135
287
|
</td>
|
|
288
|
+
|
|
136
289
|
</tr>
|
|
137
290
|
))}
|
|
138
291
|
</tbody>
|
|
292
|
+
|
|
139
293
|
</table>
|
|
140
294
|
</div>
|
|
295
|
+
|
|
141
296
|
</div>
|
|
142
297
|
|
|
143
298
|
</div>
|
|
144
299
|
);
|
|
145
300
|
}
|
|
146
|
-
|
|
301
|
+
|
|
302
|
+
export default Reports;
|
|
@@ -1,47 +1,135 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react";
|
|
4
|
+
import axios from "../axiosInstance";
|
|
3
5
|
|
|
4
|
-
function Reports
|
|
5
|
-
const [customer, setCustomer] = useState([])
|
|
6
|
-
const [product
|
|
7
|
-
const [sale, setSale] = useState([])
|
|
8
|
-
const [error, setError]= useState(
|
|
6
|
+
function Reports() {
|
|
7
|
+
const [customer, setCustomer] = useState([]);
|
|
8
|
+
const [product, setProduct] = useState([]);
|
|
9
|
+
const [sale, setSale] = useState([]);
|
|
10
|
+
const [error, setError] = useState("");
|
|
9
11
|
|
|
10
|
-
const fetchReports = async ()=> {
|
|
11
|
-
try{
|
|
12
|
-
const cusRes = await axios.get(
|
|
13
|
-
setCustomer(cusRes.data)
|
|
12
|
+
const fetchReports = async () => {
|
|
13
|
+
try {
|
|
14
|
+
const cusRes = await axios.get("http://localhost:5000/api/customer");
|
|
15
|
+
setCustomer(cusRes.data);
|
|
14
16
|
|
|
15
|
-
const prRes = await axios.get(
|
|
16
|
-
setProduct(prRes.data)
|
|
17
|
+
const prRes = await axios.get("http://localhost:5000/api/product");
|
|
18
|
+
setProduct(prRes.data);
|
|
17
19
|
|
|
18
|
-
const slRes = await axios.get(
|
|
19
|
-
setSale(slRes.data)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}catch(error){
|
|
23
|
-
setError("failed to get reports")
|
|
20
|
+
const slRes = await axios.get("http://localhost:5000/api/sale");
|
|
21
|
+
setSale(slRes.data);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
setError("failed to get reports");
|
|
24
24
|
}
|
|
25
|
-
}
|
|
25
|
+
};
|
|
26
|
+
|
|
26
27
|
useEffect(() => {
|
|
27
|
-
fetchReports()
|
|
28
|
-
},[])
|
|
29
|
-
|
|
28
|
+
fetchReports();
|
|
29
|
+
}, []);
|
|
30
|
+
|
|
31
|
+
const today = new Date();
|
|
32
|
+
|
|
33
|
+
const dailySales = sale.filter((sl) => {
|
|
34
|
+
if (!sl.salesDate) return false;
|
|
35
|
+
const d = new Date(sl.salesDate);
|
|
36
|
+
return d.toDateString() === today.toDateString();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const weeklySales = sale.filter((sl) => {
|
|
40
|
+
if (!sl.salesDate) return false;
|
|
41
|
+
|
|
42
|
+
const d = new Date(sl.salesDate);
|
|
43
|
+
|
|
44
|
+
const startOfWeek = new Date(today);
|
|
45
|
+
startOfWeek.setDate(today.getDate() - today.getDay());
|
|
46
|
+
|
|
47
|
+
const endOfWeek = new Date(startOfWeek);
|
|
48
|
+
endOfWeek.setDate(startOfWeek.getDate() + 6);
|
|
49
|
+
|
|
50
|
+
return d >= startOfWeek && d <= endOfWeek;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const monthlySales = sale.filter((sl) => {
|
|
54
|
+
if (!sl.salesDate) return false;
|
|
55
|
+
|
|
56
|
+
const d = new Date(sl.salesDate);
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
d.getMonth() === today.getMonth() &&
|
|
60
|
+
d.getFullYear() === today.getFullYear()
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
const dailyTotal = dailySales.reduce(
|
|
65
|
+
(sum, s) => sum + Number(s.totalAmountPaid || 0),
|
|
66
|
+
0
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
const weeklyTotal = weeklySales.reduce(
|
|
70
|
+
(sum, s) => sum + Number(s.totalAmountPaid || 0),
|
|
71
|
+
0
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
const monthlyTotal = monthlySales.reduce(
|
|
75
|
+
(sum, s) => sum + Number(s.totalAmountPaid || 0),
|
|
76
|
+
0
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
return (
|
|
30
80
|
<div className="p-6 bg-slate-50 min-h-screen flex flex-col gap-6">
|
|
31
81
|
|
|
32
|
-
{/* Header Section */}
|
|
33
82
|
<div className="bg-white p-6 rounded shadow-sm border border-slate-200">
|
|
34
83
|
<h2 className="text-xl font-bold text-slate-700">Sales Management Reports</h2>
|
|
84
|
+
|
|
35
85
|
{error && (
|
|
36
|
-
<p className="text-red-500 bg-red-100 p-2 rounded text-sm font-semibold mt-4 text-center">
|
|
86
|
+
<p className="text-red-500 bg-red-100 p-2 rounded text-sm font-semibold mt-4 text-center">
|
|
87
|
+
{error}
|
|
88
|
+
</p>
|
|
37
89
|
)}
|
|
38
90
|
</div>
|
|
39
91
|
|
|
40
|
-
|
|
92
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
93
|
+
|
|
94
|
+
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
95
|
+
<h3 className="text-sm text-slate-500">Daily Sales</h3>
|
|
96
|
+
<p className="text-2xl font-bold text-blue-600">
|
|
97
|
+
{dailySales.length}
|
|
98
|
+
</p>
|
|
99
|
+
<p className="text-sm text-slate-600">
|
|
100
|
+
${dailyTotal}
|
|
101
|
+
</p>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
105
|
+
<h3 className="text-sm text-slate-500">Weekly Sales</h3>
|
|
106
|
+
<p className="text-2xl font-bold text-green-600">
|
|
107
|
+
{weeklySales.length}
|
|
108
|
+
</p>
|
|
109
|
+
<p className="text-sm text-slate-600">
|
|
110
|
+
${weeklyTotal}
|
|
111
|
+
</p>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<div className="bg-white p-4 rounded shadow-sm border border-slate-200">
|
|
115
|
+
<h3 className="text-sm text-slate-500">Monthly Sales</h3>
|
|
116
|
+
<p className="text-2xl font-bold text-purple-600">
|
|
117
|
+
{monthlySales.length}
|
|
118
|
+
</p>
|
|
119
|
+
<p className="text-sm text-slate-600">
|
|
120
|
+
${monthlyTotal}
|
|
121
|
+
</p>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
</div>
|
|
125
|
+
|
|
41
126
|
<div className="bg-white rounded shadow-sm border border-slate-200 overflow-x-auto">
|
|
42
127
|
<div className="p-4 bg-slate-100 border-b border-slate-200">
|
|
43
|
-
<h3 className="text-md font-bold text-slate-700">
|
|
128
|
+
<h3 className="text-md font-bold text-slate-700">
|
|
129
|
+
Total Customers ({customer.length})
|
|
130
|
+
</h3>
|
|
44
131
|
</div>
|
|
132
|
+
|
|
45
133
|
<table className="w-full text-left border-collapse">
|
|
46
134
|
<thead>
|
|
47
135
|
<tr className="bg-slate-50 border-b border-slate-200 text-slate-700 text-sm font-bold">
|
|
@@ -53,24 +141,29 @@ setError("failed to get reports")
|
|
|
53
141
|
</tr>
|
|
54
142
|
</thead>
|
|
55
143
|
<tbody className="text-slate-600 text-sm divide-y divide-slate-100">
|
|
56
|
-
{Array.isArray
|
|
57
|
-
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
144
|
+
{Array.isArray(customer) &&
|
|
145
|
+
customer.map((cus) => (
|
|
146
|
+
<tr key={cus._id} className="hover:bg-slate-50">
|
|
147
|
+
<td className="p-3 font-semibold">
|
|
148
|
+
{cus.customerNumber}
|
|
149
|
+
</td>
|
|
150
|
+
<td className="p-3">{cus.firstName}</td>
|
|
151
|
+
<td className="p-3">{cus.lastName}</td>
|
|
152
|
+
<td className="p-3">{cus.telephone}</td>
|
|
153
|
+
<td className="p-3">{cus.addres}</td>
|
|
154
|
+
</tr>
|
|
155
|
+
))}
|
|
65
156
|
</tbody>
|
|
66
157
|
</table>
|
|
67
158
|
</div>
|
|
68
159
|
|
|
69
|
-
{/* Products Report Table */}
|
|
70
160
|
<div className="bg-white rounded shadow-sm border border-slate-200 overflow-x-auto">
|
|
71
161
|
<div className="p-4 bg-slate-100 border-b border-slate-200">
|
|
72
|
-
<h3 className="text-md font-bold text-slate-700">
|
|
162
|
+
<h3 className="text-md font-bold text-slate-700">
|
|
163
|
+
Total Products ({product.length})
|
|
164
|
+
</h3>
|
|
73
165
|
</div>
|
|
166
|
+
|
|
74
167
|
<table className="w-full text-left border-collapse">
|
|
75
168
|
<thead>
|
|
76
169
|
<tr className="bg-slate-50 border-b border-slate-200 text-slate-700 text-sm font-bold">
|
|
@@ -80,24 +173,30 @@ setError("failed to get reports")
|
|
|
80
173
|
<th className="p-3">unitPrice</th>
|
|
81
174
|
</tr>
|
|
82
175
|
</thead>
|
|
176
|
+
|
|
83
177
|
<tbody className="text-slate-600 text-sm divide-y divide-slate-100">
|
|
84
|
-
{Array.isArray(product) &&
|
|
85
|
-
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
178
|
+
{Array.isArray(product) &&
|
|
179
|
+
product.map((pr) => (
|
|
180
|
+
<tr key={pr._id} className="hover:bg-slate-50">
|
|
181
|
+
<td className="p-3 font-semibold">
|
|
182
|
+
{pr.productCode}
|
|
183
|
+
</td>
|
|
184
|
+
<td className="p-3">{pr.productName}</td>
|
|
185
|
+
<td className="p-3">{pr.quantitySold}</td>
|
|
186
|
+
<td className="p-3">${pr.unitPrice}</td>
|
|
187
|
+
</tr>
|
|
188
|
+
))}
|
|
92
189
|
</tbody>
|
|
93
190
|
</table>
|
|
94
191
|
</div>
|
|
95
192
|
|
|
96
|
-
{/* Sales Report Table */}
|
|
97
193
|
<div className="bg-white rounded shadow-sm border border-slate-200 overflow-x-auto">
|
|
98
194
|
<div className="p-4 bg-slate-100 border-b border-slate-200">
|
|
99
|
-
<h3 className="text-md font-bold text-slate-700">
|
|
195
|
+
<h3 className="text-md font-bold text-slate-700">
|
|
196
|
+
Total Sale ({sale.length})
|
|
197
|
+
</h3>
|
|
100
198
|
</div>
|
|
199
|
+
|
|
101
200
|
<table className="w-full text-left border-collapse">
|
|
102
201
|
<thead>
|
|
103
202
|
<tr className="bg-slate-50 border-b border-slate-200 text-slate-700 text-sm font-bold">
|
|
@@ -107,20 +206,33 @@ setError("failed to get reports")
|
|
|
107
206
|
<th className="p-3">totalAmountPaid</th>
|
|
108
207
|
</tr>
|
|
109
208
|
</thead>
|
|
209
|
+
|
|
110
210
|
<tbody className="text-slate-600 text-sm divide-y divide-slate-100">
|
|
111
|
-
{Array.isArray
|
|
112
|
-
|
|
113
|
-
<
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
211
|
+
{Array.isArray(sale) &&
|
|
212
|
+
sale.map((sl) => (
|
|
213
|
+
<tr key={sl._id} className="hover:bg-slate-50">
|
|
214
|
+
<td className="p-3 font-semibold">
|
|
215
|
+
{sl.invoiceNumber}
|
|
216
|
+
</td>
|
|
217
|
+
<td className="p-3">
|
|
218
|
+
{sl.salesDate
|
|
219
|
+
? sl.salesDate.substring(0, 10)
|
|
220
|
+
: ""}
|
|
221
|
+
</td>
|
|
222
|
+
<td className="p-3">
|
|
223
|
+
{sl.paymentMethod}
|
|
224
|
+
</td>
|
|
225
|
+
<td className="p-3">
|
|
226
|
+
${sl.totalAmountPaid}
|
|
227
|
+
</td>
|
|
228
|
+
</tr>
|
|
229
|
+
))}
|
|
119
230
|
</tbody>
|
|
120
231
|
</table>
|
|
121
232
|
</div>
|
|
122
233
|
|
|
123
234
|
</div>
|
|
124
|
-
)
|
|
235
|
+
);
|
|
125
236
|
}
|
|
126
|
-
|
|
237
|
+
|
|
238
|
+
export default Reports;
|
package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/README.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Sales Record Management System (SRMS)
|
|
2
|
+
|
|
3
|
+
## Technologies Used
|
|
4
|
+
- **Frontend:** React.js, React Router DOM, Axios, Tailwind CSS
|
|
5
|
+
- **Backend:** Node.js, Express.js
|
|
6
|
+
- **Database:** MongoDB with Mongoose
|
|
7
|
+
- **Authentication:** Session-based with bcrypt
|
|
8
|
+
|
|
9
|
+
## Installation Steps
|
|
10
|
+
|
|
11
|
+
### 1. Clone or extract the project
|
|
12
|
+
```bash
|
|
13
|
+
cd KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 2. Backend Setup
|
|
17
|
+
```bash
|
|
18
|
+
cd backend-project
|
|
19
|
+
npm install
|
|
20
|
+
```
|
|
21
|
+
Create a `.env` file in the backend-project folder:
|
|
22
|
+
```
|
|
23
|
+
PORT=5000
|
|
24
|
+
MONGO_URI=mongodb://localhost:27017/SRMS
|
|
25
|
+
SESSION_SECRET=your_secret_key_here
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 3. Frontend Setup
|
|
29
|
+
```bash
|
|
30
|
+
cd frontend-project
|
|
31
|
+
npm install
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 4. Start Backend
|
|
35
|
+
```bash
|
|
36
|
+
cd backend-project
|
|
37
|
+
npm start
|
|
38
|
+
```
|
|
39
|
+
Server runs on http://localhost:5000
|
|
40
|
+
|
|
41
|
+
### 5. Start Frontend
|
|
42
|
+
```bash
|
|
43
|
+
cd frontend-project
|
|
44
|
+
npm run dev
|
|
45
|
+
```
|
|
46
|
+
App runs on http://localhost:5173
|
|
47
|
+
|
|
48
|
+
### 6. Default Credentials
|
|
49
|
+
Register a new user account from the application login page.
|