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.
Files changed (226) hide show
  1. package/index.js +25 -17
  2. package/package.json +1 -1
  3. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +84 -0
  4. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env +3 -0
  5. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +13 -0
  6. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/authController.js +115 -0
  7. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/employeeController.js +97 -0
  8. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/payrollController.js +113 -0
  9. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/reportController.js +35 -0
  10. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
  11. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Employee.js +52 -0
  12. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Payroll.js +50 -0
  13. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +19 -0
  14. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1509 -0
  15. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +19 -0
  16. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/authRoutes.js +18 -0
  17. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/employeeRoutes.js +19 -0
  18. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/payrollRoutes.js +19 -0
  19. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/reportRoutes.js +9 -0
  20. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +71 -0
  21. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +12 -0
  22. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2888 -0
  23. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
  24. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
  25. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +57 -0
  26. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +16 -0
  27. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/authApi.js +26 -0
  28. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/employeeApi.js +26 -0
  29. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/payrollApi.js +26 -0
  30. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/reportApi.js +6 -0
  31. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Header.jsx +17 -0
  32. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +17 -0
  33. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
  34. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/ProtectedRoute.jsx +41 -0
  35. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +38 -0
  36. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/index.css +30 -0
  37. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
  38. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/DashboardPage.jsx +64 -0
  39. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/EmployeePage.jsx +166 -0
  40. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/LoginPage.jsx +73 -0
  41. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/PayrollPage.jsx +198 -0
  42. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RecoverPasswordPage.jsx +69 -0
  43. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RegisterPage.jsx +69 -0
  44. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ReportsPage.jsx +113 -0
  45. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +13 -0
  46. package/projects/EPMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +9 -0
  47. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +106 -0
  48. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/01_Introduction.md +8 -0
  49. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/02_Problem_Statement.md +12 -0
  50. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/03_Objectives.md +17 -0
  51. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/04_Technologies_Used.md +23 -0
  52. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/05_ERD.md +60 -0
  53. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/06_Database_Design.md +71 -0
  54. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/07_System_Architecture.md +28 -0
  55. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/08_API_Documentation.md +43 -0
  56. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/09_Testing.md +43 -0
  57. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/10_Challenges.md +12 -0
  58. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/11_Conclusion.md +8 -0
  59. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env.example +4 -0
  60. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +16 -0
  61. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/deliveryController.js +145 -0
  62. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/shipmentController.js +149 -0
  63. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/supplierController.js +56 -0
  64. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/userController.js +158 -0
  65. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
  66. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Delivery.js +34 -0
  67. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Shipment.js +34 -0
  68. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Supplier.js +38 -0
  69. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +21 -0
  70. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1540 -0
  71. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +22 -0
  72. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/deliveryRoutes.js +11 -0
  73. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/shipmentRoutes.js +11 -0
  74. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/supplierRoutes.js +9 -0
  75. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/userRoutes.js +11 -0
  76. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +70 -0
  77. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/.env.example +2 -0
  78. package/projects/{SCMS/frontend → SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project}/index.html +2 -2
  79. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2944 -0
  80. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
  81. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
  82. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +72 -0
  83. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +14 -0
  84. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/deliveryApi.js +17 -0
  85. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/shipmentApi.js +17 -0
  86. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/supplierApi.js +9 -0
  87. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/userApi.js +21 -0
  88. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +16 -0
  89. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
  90. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/PageHeader.jsx +12 -0
  91. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +40 -0
  92. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
  93. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Dashboard.jsx +62 -0
  94. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Delivery.jsx +212 -0
  95. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Login.jsx +158 -0
  96. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Logout.jsx +24 -0
  97. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Reports.jsx +221 -0
  98. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Shipment.jsx +212 -0
  99. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Supplier.jsx +118 -0
  100. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/styles.css +27 -0
  101. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +8 -0
  102. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +6 -0
  103. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +84 -0
  104. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env +3 -0
  105. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +13 -0
  106. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/productController.js +29 -0
  107. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/reportController.js +52 -0
  108. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/stockTransactionController.js +128 -0
  109. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/userController.js +115 -0
  110. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/warehouseController.js +29 -0
  111. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
  112. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Product.js +44 -0
  113. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/StockTransaction.js +33 -0
  114. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +19 -0
  115. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Warehouse.js +25 -0
  116. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1509 -0
  117. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +19 -0
  118. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/productRoutes.js +10 -0
  119. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/reportRoutes.js +9 -0
  120. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/stockTransactionRoutes.js +17 -0
  121. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/userRoutes.js +18 -0
  122. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/warehouseRoutes.js +10 -0
  123. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +73 -0
  124. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +12 -0
  125. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2888 -0
  126. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
  127. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
  128. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +66 -0
  129. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +16 -0
  130. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/productApi.js +11 -0
  131. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/reportApi.js +6 -0
  132. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/transactionApi.js +21 -0
  133. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/userApi.js +26 -0
  134. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/warehouseApi.js +11 -0
  135. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Header.jsx +17 -0
  136. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +17 -0
  137. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
  138. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/ProtectedRoute.jsx +41 -0
  139. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +39 -0
  140. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/index.css +30 -0
  141. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
  142. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/DashboardPage.jsx +64 -0
  143. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/LoginPage.jsx +73 -0
  144. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ProductPage.jsx +107 -0
  145. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RecoverPasswordPage.jsx +69 -0
  146. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RegisterPage.jsx +69 -0
  147. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ReportsPage.jsx +152 -0
  148. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/TransactionPage.jsx +195 -0
  149. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/WarehousePage.jsx +93 -0
  150. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +13 -0
  151. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +9 -0
  152. package/projects/SMS-/frontend-project/src/pages/Reports.jsx +179 -23
  153. package/projects/SRMS/frontend/src/pages/Reports.jsx +170 -58
  154. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/README.md +49 -0
  155. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/.env +3 -0
  156. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/middleware/authMiddleware.js +19 -0
  157. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Customer.js +11 -0
  158. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Product.js +10 -0
  159. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Sale.js +19 -0
  160. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/User.js +8 -0
  161. package/projects/{SCMS/backend → SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project}/package-lock.json +1609 -2190
  162. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/package.json +20 -0
  163. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/authRoutes.js +75 -0
  164. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/customerRoutes.js +42 -0
  165. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/productRoutes.js +41 -0
  166. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/reportRoutes.js +129 -0
  167. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/saleRoutes.js +107 -0
  168. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/server.js +49 -0
  169. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/assets/index-DZxY56Bj.js +75 -0
  170. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/assets/index-J8MKb3Fq.css +1 -0
  171. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/index.html +13 -0
  172. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/index.html +12 -0
  173. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/package-lock.json +2029 -0
  174. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/package.json +21 -0
  175. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/App.jsx +77 -0
  176. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/index.css +333 -0
  177. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/main.jsx +10 -0
  178. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Customers.jsx +85 -0
  179. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Dashboard.jsx +75 -0
  180. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Login.jsx +65 -0
  181. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Products.jsx +91 -0
  182. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Register.jsx +82 -0
  183. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Reports.jsx +138 -0
  184. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Sales.jsx +154 -0
  185. package/projects/{SCMS/frontend → SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project}/vite.config.js +5 -3
  186. package/projects/SCMS/backend/.env +0 -5
  187. package/projects/SCMS/backend/config/db.js +0 -12
  188. package/projects/SCMS/backend/controllers/authController.js +0 -90
  189. package/projects/SCMS/backend/controllers/deliveryController.js +0 -79
  190. package/projects/SCMS/backend/controllers/productController.js +0 -74
  191. package/projects/SCMS/backend/controllers/reportsController.js +0 -77
  192. package/projects/SCMS/backend/controllers/shipmentController.js +0 -80
  193. package/projects/SCMS/backend/controllers/supplierController.js +0 -58
  194. package/projects/SCMS/backend/middleware/auth.js +0 -32
  195. package/projects/SCMS/backend/models/User.js +0 -28
  196. package/projects/SCMS/backend/models/delivery.js +0 -33
  197. package/projects/SCMS/backend/models/product.js +0 -43
  198. package/projects/SCMS/backend/models/shipment.js +0 -34
  199. package/projects/SCMS/backend/models/supplier.js +0 -36
  200. package/projects/SCMS/backend/package.json +0 -23
  201. package/projects/SCMS/backend/routes/SupplierRoutes.js +0 -15
  202. package/projects/SCMS/backend/routes/authRoutes.js +0 -11
  203. package/projects/SCMS/backend/routes/deliveryRoutes.js +0 -18
  204. package/projects/SCMS/backend/routes/productRoutes.js +0 -15
  205. package/projects/SCMS/backend/routes/protectedRoutes.js +0 -10
  206. package/projects/SCMS/backend/routes/reportsRoutes.js +0 -8
  207. package/projects/SCMS/backend/routes/shipmentRoutes.js +0 -18
  208. package/projects/SCMS/backend/server.js +0 -35
  209. package/projects/SCMS/frontend/README.md +0 -16
  210. package/projects/SCMS/frontend/eslint.config.js +0 -21
  211. package/projects/SCMS/frontend/package-lock.json +0 -3053
  212. package/projects/SCMS/frontend/package.json +0 -31
  213. package/projects/SCMS/frontend/public/favicon.svg +0 -1
  214. package/projects/SCMS/frontend/src/App.jsx +0 -35
  215. package/projects/SCMS/frontend/src/components/DashboardLayout.jsx +0 -103
  216. package/projects/SCMS/frontend/src/components/ProtectedRoute.jsx +0 -30
  217. package/projects/SCMS/frontend/src/index.css +0 -114
  218. package/projects/SCMS/frontend/src/main.jsx +0 -10
  219. package/projects/SCMS/frontend/src/pages/DashboardHome.jsx +0 -34
  220. package/projects/SCMS/frontend/src/pages/Delivery.jsx +0 -183
  221. package/projects/SCMS/frontend/src/pages/Login.jsx +0 -81
  222. package/projects/SCMS/frontend/src/pages/Profile.jsx +0 -62
  223. package/projects/SCMS/frontend/src/pages/Register.jsx +0 -110
  224. package/projects/SCMS/frontend/src/pages/Reports.jsx +0 -94
  225. package/projects/SCMS/frontend/src/pages/Shipment.jsx +0 -182
  226. package/projects/SCMS/frontend/src/pages/Supplier.jsx +0 -165
package/index.js CHANGED
@@ -11,31 +11,39 @@ const rl = readline.createInterface({
11
11
  })
12
12
  console.log('\n[1] Car Repair Parking Managemnt System')
13
13
  console.log('[2]Employee Payroll Management System')
14
- console.log('[3]middleware')
15
- console.log('[4] Parking Management System')
16
- console.log('[5]Supply Chain Managemnt System')
17
- console.log('[6] School fee Management System')
18
- console.log('[7]Stock Invetory Management System')
19
- console.log('[8]Stock Management System')
20
- console.log('[9]Stock Record Management System')
21
- console.log('[10]userController.js')
14
+ console.log('[3]Employee Payroll Management System Elysee')
15
+ console.log('[4]middleware')
16
+ console.log('[5] Parking Management System')
17
+ console.log('[6]Supply Chain Managemnt System')
18
+ console.log('[7]Supply Chain Management System Elysee')
19
+ console.log('[8] School fee Management System')
20
+ console.log('[9]Stock Hub Management System')
21
+ console.log('[10]Stock Invetory Management System')
22
+ console.log('[11]Stock Management System')
23
+ console.log('[12]Sales Record Management System')
24
+ console.log('[13]Sales Record Management System Elysee')
25
+ console.log('[14]userController.js')
22
26
 
23
27
 
24
28
 
25
29
 
26
- rl.question('Pick (1-10): ', (answer) => {
30
+ rl.question('Pick (1-14): ', (answer) => {
27
31
 
28
32
  const projects = {
29
33
  '1':'crpms',
30
34
  '2':'EPMS',
31
- '3':'middleware',
32
- '4': 'parking managementt system',
33
- '5':'SCMS',
34
- '6': 'sfms-app',
35
- '7':'sims',
36
- '8': 'SMS-',
37
- '9':'SRMS',
38
- '10':'user',
35
+ '3':'EPMS(Ely)',
36
+ '4':'middleware',
37
+ '5': 'parking managementt system',
38
+ '6':'SCMS',
39
+ '7':'SCMS(Ely)',
40
+ '8': 'sfms-app',
41
+ '9':'SHMS(Ely)',
42
+ '10':'sims',
43
+ '11': 'SMS-',
44
+ '12':'SRMS',
45
+ '13':'SRMS(Ely)',
46
+ '14':'user',
39
47
 
40
48
 
41
49
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  "name": "create-myexam-app",
4
4
 
5
- "version": "1.0.21",
5
+ "version": "1.0.23",
6
6
 
7
7
  "description": "My exam projects",
8
8
 
@@ -0,0 +1,84 @@
1
+ # KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026
2
+
3
+ ## Project Name
4
+
5
+ Stock Management System for StockHub Ltd.
6
+
7
+ ## Technologies Used
8
+
9
+ Frontend:
10
+ - React.js
11
+ - React Router DOM
12
+ - Axios
13
+ - Tailwind CSS
14
+
15
+ Backend:
16
+ - Node.js
17
+ - Express.js
18
+ - MongoDB
19
+ - Mongoose
20
+ - bcryptjs
21
+ - express-session
22
+
23
+ ## Installation Steps
24
+
25
+ 1. Open the project folder:
26
+
27
+ ```bash
28
+ cd KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026
29
+ ```
30
+
31
+ 2. Install backend dependencies:
32
+
33
+ ```bash
34
+ cd backend-project
35
+ npm install
36
+ ```
37
+
38
+ 3. Install frontend dependencies:
39
+
40
+ ```bash
41
+ cd ../frontend-project
42
+ npm install
43
+ ```
44
+
45
+ 4. Make sure MongoDB is running locally.
46
+
47
+ The backend uses this MongoDB database:
48
+
49
+ ```bash
50
+ mongodb://127.0.0.1:27017/SMS
51
+ ```
52
+
53
+ ## Backend Startup
54
+
55
+ ```bash
56
+ cd backend-project
57
+ npm run dev
58
+ ```
59
+
60
+ Backend URL:
61
+
62
+ ```bash
63
+ http://localhost:5000
64
+ ```
65
+
66
+ Default login account:
67
+
68
+ ```bash
69
+ Username: manager
70
+ Password: manager123
71
+ ```
72
+
73
+ ## Frontend Startup
74
+
75
+ ```bash
76
+ cd frontend-project
77
+ npm run dev
78
+ ```
79
+
80
+ Frontend URL:
81
+
82
+ ```bash
83
+ http://localhost:5173
84
+ ```
@@ -0,0 +1,3 @@
1
+ PORT=5000
2
+ MONGO_URI=mongodb://127.0.0.1:27017/epms
3
+ SESSION_SECRET=epms_exam_secret
@@ -0,0 +1,13 @@
1
+ const mongoose = require("mongoose");
2
+
3
+ const connectDB = async () => {
4
+ try {
5
+ await mongoose.connect(process.env.MONGO_URI || "mongodb://127.0.0.1:27017/epms");
6
+ console.log("MongoDB connected to EPMS database");
7
+ } catch (error) {
8
+ console.error("MongoDB connection failed:", error.message);
9
+ process.exit(1);
10
+ }
11
+ };
12
+
13
+ module.exports = connectDB;
@@ -0,0 +1,115 @@
1
+ const bcrypt = require("bcryptjs");
2
+ const User = require("../models/User");
3
+
4
+ const saveSession = (req, res, message, user) => {
5
+ req.session.user = {
6
+ id: user._id,
7
+ username: user.username
8
+ };
9
+
10
+ req.session.save((error) => {
11
+ if (error) {
12
+ return res.status(500).json({ message: "Session could not be saved" });
13
+ }
14
+
15
+ res.json({ message, user: req.session.user });
16
+ });
17
+ };
18
+
19
+ const register = async (req, res) => {
20
+ try {
21
+ const { username, password } = req.body;
22
+
23
+ if (!username || !password) {
24
+ return res.status(400).json({ message: "Username and password are required" });
25
+ }
26
+
27
+ const existingUser = await User.findOne({ username: username.trim() });
28
+ if (existingUser) {
29
+ return res.status(400).json({ message: "Username already exists" });
30
+ }
31
+
32
+ const hashedPassword = await bcrypt.hash(password, 10);
33
+ const user = await User.create({
34
+ username: username.trim(),
35
+ password: hashedPassword
36
+ });
37
+
38
+ saveSession(req, res, "Account created successfully", user);
39
+ } catch (error) {
40
+ res.status(500).json({ message: "Registration failed", error: error.message });
41
+ }
42
+ };
43
+
44
+ const login = async (req, res) => {
45
+ try {
46
+ const { username, password } = req.body;
47
+
48
+ if (!username || !password) {
49
+ return res.status(400).json({ message: "Username and password are required" });
50
+ }
51
+
52
+ const user = await User.findOne({ username: username.trim() });
53
+ if (!user) {
54
+ return res.status(400).json({ message: "Invalid username or password" });
55
+ }
56
+
57
+ const isPasswordCorrect = await bcrypt.compare(password, user.password);
58
+ if (!isPasswordCorrect) {
59
+ return res.status(400).json({ message: "Invalid username or password" });
60
+ }
61
+
62
+ saveSession(req, res, "Login successful", user);
63
+ } catch (error) {
64
+ res.status(500).json({ message: "Login failed", error: error.message });
65
+ }
66
+ };
67
+
68
+ const logout = (req, res) => {
69
+ req.session.destroy((error) => {
70
+ if (error) {
71
+ return res.status(500).json({ message: "Logout failed" });
72
+ }
73
+
74
+ res.clearCookie("connect.sid");
75
+ res.json({ message: "Logout successful" });
76
+ });
77
+ };
78
+
79
+ const getSession = (req, res) => {
80
+ if (!req.session || !req.session.user) {
81
+ return res.status(401).json({ message: "No active session" });
82
+ }
83
+
84
+ res.json({ user: req.session.user });
85
+ };
86
+
87
+ const recoverPassword = async (req, res) => {
88
+ try {
89
+ const { username, newPassword } = req.body;
90
+
91
+ if (!username || !newPassword) {
92
+ return res.status(400).json({ message: "Username and new password are required" });
93
+ }
94
+
95
+ const user = await User.findOne({ username: username.trim() });
96
+ if (!user) {
97
+ return res.status(404).json({ message: "User account was not found" });
98
+ }
99
+
100
+ user.password = await bcrypt.hash(newPassword, 10);
101
+ await user.save();
102
+
103
+ res.json({ message: "Password changed successfully" });
104
+ } catch (error) {
105
+ res.status(500).json({ message: "Password recovery failed", error: error.message });
106
+ }
107
+ };
108
+
109
+ module.exports = {
110
+ register,
111
+ login,
112
+ logout,
113
+ getSession,
114
+ recoverPassword
115
+ };
@@ -0,0 +1,97 @@
1
+ const Employee = require("../models/Employee");
2
+
3
+ const createEmployee = async (req, res) => {
4
+ try {
5
+ const { employeeCode, firstName, lastName, department, position, baseSalary, hireDate, email, phone } = req.body;
6
+
7
+ if (!employeeCode || !firstName || !lastName || !department || !position || !baseSalary || !hireDate) {
8
+ return res.status(400).json({ message: "All required fields must be filled" });
9
+ }
10
+
11
+ const existingEmployee = await Employee.findOne({ employeeCode });
12
+ if (existingEmployee) {
13
+ return res.status(400).json({ message: "Employee code already exists" });
14
+ }
15
+
16
+ const employee = await Employee.create({
17
+ employeeCode,
18
+ firstName: firstName.trim(),
19
+ lastName: lastName.trim(),
20
+ department: department.trim(),
21
+ position: position.trim(),
22
+ baseSalary,
23
+ hireDate,
24
+ email,
25
+ phone
26
+ });
27
+
28
+ res.status(201).json({ message: "Employee added successfully", employee });
29
+ } catch (error) {
30
+ res.status(500).json({ message: "Employee could not be created", error: error.message });
31
+ }
32
+ };
33
+
34
+ const getEmployees = async (req, res) => {
35
+ try {
36
+ const employees = await Employee.find().sort({ lastName: 1 });
37
+ res.json(employees);
38
+ } catch (error) {
39
+ res.status(500).json({ message: "Employees could not be retrieved", error: error.message });
40
+ }
41
+ };
42
+
43
+ const getEmployee = async (req, res) => {
44
+ try {
45
+ const employee = await Employee.findById(req.params.id);
46
+
47
+ if (!employee) {
48
+ return res.status(404).json({ message: "Employee not found" });
49
+ }
50
+
51
+ res.json(employee);
52
+ } catch (error) {
53
+ res.status(500).json({ message: "Employee could not be retrieved", error: error.message });
54
+ }
55
+ };
56
+
57
+ const updateEmployee = async (req, res) => {
58
+ try {
59
+ const { firstName, lastName, department, position, baseSalary, hireDate, email, phone } = req.body;
60
+
61
+ const employee = await Employee.findByIdAndUpdate(
62
+ req.params.id,
63
+ { firstName, lastName, department, position, baseSalary, hireDate, email, phone },
64
+ { new: true, runValidators: true }
65
+ );
66
+
67
+ if (!employee) {
68
+ return res.status(404).json({ message: "Employee not found" });
69
+ }
70
+
71
+ res.json({ message: "Employee updated successfully", employee });
72
+ } catch (error) {
73
+ res.status(500).json({ message: "Employee could not be updated", error: error.message });
74
+ }
75
+ };
76
+
77
+ const deleteEmployee = async (req, res) => {
78
+ try {
79
+ const employee = await Employee.findByIdAndDelete(req.params.id);
80
+
81
+ if (!employee) {
82
+ return res.status(404).json({ message: "Employee not found" });
83
+ }
84
+
85
+ res.json({ message: "Employee deleted successfully" });
86
+ } catch (error) {
87
+ res.status(500).json({ message: "Employee could not be deleted", error: error.message });
88
+ }
89
+ };
90
+
91
+ module.exports = {
92
+ createEmployee,
93
+ getEmployees,
94
+ getEmployee,
95
+ updateEmployee,
96
+ deleteEmployee
97
+ };
@@ -0,0 +1,113 @@
1
+ const Payroll = require("../models/Payroll");
2
+ const Employee = require("../models/Employee");
3
+
4
+ const createPayroll = async (req, res) => {
5
+ try {
6
+ const { employee, month, year, basicPay, allowances, deductions, netPay, paymentDate } = req.body;
7
+
8
+ if (!employee || !month || !year || basicPay === undefined || netPay === undefined) {
9
+ return res.status(400).json({ message: "Employee, month, year, basic pay and net pay are required" });
10
+ }
11
+
12
+ const employeeExists = await Employee.findById(employee);
13
+ if (!employeeExists) {
14
+ return res.status(404).json({ message: "Employee not found" });
15
+ }
16
+
17
+ const existingPayroll = await Payroll.findOne({ employee, month, year });
18
+ if (existingPayroll) {
19
+ return res.status(400).json({ message: "Payroll already exists for this employee for the given period" });
20
+ }
21
+
22
+ const payroll = await Payroll.create({
23
+ employee,
24
+ month,
25
+ year,
26
+ basicPay,
27
+ allowances: allowances || 0,
28
+ deductions: deductions || 0,
29
+ netPay,
30
+ paymentDate: paymentDate || Date.now()
31
+ });
32
+
33
+ const populatedPayroll = await Payroll.findById(payroll._id).populate("employee");
34
+
35
+ res.status(201).json({ message: "Payroll processed successfully", payroll: populatedPayroll });
36
+ } catch (error) {
37
+ res.status(500).json({ message: "Payroll could not be created", error: error.message });
38
+ }
39
+ };
40
+
41
+ const getPayrolls = async (req, res) => {
42
+ try {
43
+ const filter = {};
44
+
45
+ if (req.query.month) filter.month = parseInt(req.query.month);
46
+ if (req.query.year) filter.year = parseInt(req.query.year);
47
+ if (req.query.employee) filter.employee = req.query.employee;
48
+
49
+ const payrolls = await Payroll.find(filter)
50
+ .populate("employee")
51
+ .sort({ year: -1, month: -1 });
52
+
53
+ res.json(payrolls);
54
+ } catch (error) {
55
+ res.status(500).json({ message: "Payrolls could not be retrieved", error: error.message });
56
+ }
57
+ };
58
+
59
+ const getPayroll = async (req, res) => {
60
+ try {
61
+ const payroll = await Payroll.findById(req.params.id).populate("employee");
62
+
63
+ if (!payroll) {
64
+ return res.status(404).json({ message: "Payroll record not found" });
65
+ }
66
+
67
+ res.json(payroll);
68
+ } catch (error) {
69
+ res.status(500).json({ message: "Payroll could not be retrieved", error: error.message });
70
+ }
71
+ };
72
+
73
+ const updatePayroll = async (req, res) => {
74
+ try {
75
+ const { basicPay, allowances, deductions, netPay, paymentDate } = req.body;
76
+
77
+ const payroll = await Payroll.findByIdAndUpdate(
78
+ req.params.id,
79
+ { basicPay, allowances, deductions, netPay, paymentDate },
80
+ { new: true, runValidators: true }
81
+ ).populate("employee");
82
+
83
+ if (!payroll) {
84
+ return res.status(404).json({ message: "Payroll record not found" });
85
+ }
86
+
87
+ res.json({ message: "Payroll updated successfully", payroll });
88
+ } catch (error) {
89
+ res.status(500).json({ message: "Payroll could not be updated", error: error.message });
90
+ }
91
+ };
92
+
93
+ const deletePayroll = async (req, res) => {
94
+ try {
95
+ const payroll = await Payroll.findByIdAndDelete(req.params.id);
96
+
97
+ if (!payroll) {
98
+ return res.status(404).json({ message: "Payroll record not found" });
99
+ }
100
+
101
+ res.json({ message: "Payroll record deleted successfully" });
102
+ } catch (error) {
103
+ res.status(500).json({ message: "Payroll could not be deleted", error: error.message });
104
+ }
105
+ };
106
+
107
+ module.exports = {
108
+ createPayroll,
109
+ getPayrolls,
110
+ getPayroll,
111
+ updatePayroll,
112
+ deletePayroll
113
+ };
@@ -0,0 +1,35 @@
1
+ const Payroll = require("../models/Payroll");
2
+ const Employee = require("../models/Employee");
3
+
4
+ const getReports = async (req, res) => {
5
+ try {
6
+ const month = parseInt(req.query.month) || new Date().getMonth() + 1;
7
+ const year = parseInt(req.query.year) || new Date().getFullYear();
8
+
9
+ const payrolls = await Payroll.find({ month, year })
10
+ .populate("employee")
11
+ .sort({ "employee.lastName": 1 });
12
+
13
+ const totalEmployees = await Employee.countDocuments();
14
+ const totalPayrollAmount = payrolls.reduce((sum, p) => sum + p.netPay, 0);
15
+ const totalAllowances = payrolls.reduce((sum, p) => sum + (p.allowances || 0), 0);
16
+ const totalDeductions = payrolls.reduce((sum, p) => sum + (p.deductions || 0), 0);
17
+
18
+ res.json({
19
+ month,
20
+ year,
21
+ totalEmployees,
22
+ payrollRecords: payrolls,
23
+ totalPayrollAmount,
24
+ totalAllowances,
25
+ totalDeductions,
26
+ recordCount: payrolls.length
27
+ });
28
+ } catch (error) {
29
+ res.status(500).json({ message: "Report could not be generated", error: error.message });
30
+ }
31
+ };
32
+
33
+ module.exports = {
34
+ getReports
35
+ };
@@ -0,0 +1,9 @@
1
+ const requireAuth = (req, res, next) => {
2
+ if (!req.session || !req.session.user) {
3
+ return res.status(401).json({ message: "Please login first" });
4
+ }
5
+
6
+ next();
7
+ };
8
+
9
+ module.exports = requireAuth;
@@ -0,0 +1,52 @@
1
+ const mongoose = require("mongoose");
2
+
3
+ const employeeSchema = new mongoose.Schema(
4
+ {
5
+ employeeCode: {
6
+ type: String,
7
+ required: [true, "Employee code is required"],
8
+ unique: true,
9
+ trim: true
10
+ },
11
+ firstName: {
12
+ type: String,
13
+ required: [true, "First name is required"],
14
+ trim: true
15
+ },
16
+ lastName: {
17
+ type: String,
18
+ required: [true, "Last name is required"],
19
+ trim: true
20
+ },
21
+ department: {
22
+ type: String,
23
+ required: [true, "Department is required"],
24
+ trim: true
25
+ },
26
+ position: {
27
+ type: String,
28
+ required: [true, "Position is required"],
29
+ trim: true
30
+ },
31
+ baseSalary: {
32
+ type: Number,
33
+ required: [true, "Base salary is required"],
34
+ min: [0, "Salary cannot be negative"]
35
+ },
36
+ hireDate: {
37
+ type: Date,
38
+ required: [true, "Hire date is required"]
39
+ },
40
+ email: {
41
+ type: String,
42
+ trim: true
43
+ },
44
+ phone: {
45
+ type: String,
46
+ trim: true
47
+ }
48
+ },
49
+ { timestamps: true }
50
+ );
51
+
52
+ module.exports = mongoose.model("Employee", employeeSchema);
@@ -0,0 +1,50 @@
1
+ const mongoose = require("mongoose");
2
+
3
+ const payrollSchema = new mongoose.Schema(
4
+ {
5
+ employee: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: "Employee",
8
+ required: [true, "Employee is required"]
9
+ },
10
+ month: {
11
+ type: Number,
12
+ required: [true, "Month is required"],
13
+ min: 1,
14
+ max: 12
15
+ },
16
+ year: {
17
+ type: Number,
18
+ required: [true, "Year is required"]
19
+ },
20
+ basicPay: {
21
+ type: Number,
22
+ required: [true, "Basic pay is required"],
23
+ min: 0
24
+ },
25
+ allowances: {
26
+ type: Number,
27
+ default: 0,
28
+ min: 0
29
+ },
30
+ deductions: {
31
+ type: Number,
32
+ default: 0,
33
+ min: 0
34
+ },
35
+ netPay: {
36
+ type: Number,
37
+ required: [true, "Net pay is required"],
38
+ min: 0
39
+ },
40
+ paymentDate: {
41
+ type: Date,
42
+ default: Date.now
43
+ }
44
+ },
45
+ { timestamps: true }
46
+ );
47
+
48
+ payrollSchema.index({ employee: 1, month: 1, year: 1 }, { unique: true });
49
+
50
+ module.exports = mongoose.model("Payroll", payrollSchema);
@@ -0,0 +1,19 @@
1
+ const mongoose = require("mongoose");
2
+
3
+ const userSchema = new mongoose.Schema(
4
+ {
5
+ username: {
6
+ type: String,
7
+ required: [true, "Username is required"],
8
+ unique: true,
9
+ trim: true
10
+ },
11
+ password: {
12
+ type: String,
13
+ required: [true, "Password is required"]
14
+ }
15
+ },
16
+ { timestamps: true }
17
+ );
18
+
19
+ module.exports = mongoose.model("User", userSchema);