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
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "scms-frontend-project",
3
+ "version": "1.0.0",
4
+ "description": "Supply Chain Management System frontend for TVET National Practical Examination",
5
+ "scripts": {
6
+ "dev": "vite",
7
+ "build": "vite build",
8
+ "preview": "vite preview"
9
+ },
10
+ "dependencies": {
11
+ "axios": "^1.6.7",
12
+ "react": "^18.2.0",
13
+ "react-dom": "^18.2.0",
14
+ "react-router-dom": "^6.22.3"
15
+ },
16
+ "devDependencies": {
17
+ "@vitejs/plugin-react": "^4.2.1",
18
+ "autoprefixer": "^10.4.18",
19
+ "postcss": "^8.4.35",
20
+ "tailwindcss": "^3.4.1",
21
+ "vite": "^5.1.6"
22
+ }
23
+ }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ };
@@ -0,0 +1,72 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { Navigate, Route, Routes } from "react-router-dom";
3
+ import { getSessionUser } from "./api/userApi";
4
+ import Layout from "./components/Layout";
5
+ import Dashboard from "./pages/Dashboard";
6
+ import Login from "./pages/Login";
7
+ import Supplier from "./pages/Supplier";
8
+ import Shipment from "./pages/Shipment";
9
+ import Delivery from "./pages/Delivery";
10
+ import Reports from "./pages/Reports";
11
+ import Logout from "./pages/Logout";
12
+
13
+ function ProtectedRoute(props) {
14
+ if (!props.user) {
15
+ return <Navigate to="/login" replace />;
16
+ }
17
+
18
+ return props.children;
19
+ }
20
+
21
+ function App() {
22
+ var userState = useState(null);
23
+ var user = userState[0];
24
+ var setUser = userState[1];
25
+ var checkingSessionState = useState(true);
26
+ var checkingSession = checkingSessionState[0];
27
+ var setCheckingSession = checkingSessionState[1];
28
+
29
+ useEffect(function () {
30
+ getSessionUser()
31
+ .then(function (response) {
32
+ setUser(response.data.user);
33
+ })
34
+ .catch(function () {
35
+ setUser(null);
36
+ })
37
+ .finally(function () {
38
+ setCheckingSession(false);
39
+ });
40
+ }, []);
41
+
42
+ if (checkingSession) {
43
+ return (
44
+ <div className="flex min-h-screen items-center justify-center bg-slate-50 text-blue-900">
45
+ Loading SCMS...
46
+ </div>
47
+ );
48
+ }
49
+
50
+ return (
51
+ <Routes>
52
+ <Route path="/login" element={<Login setUser={setUser} />} />
53
+ <Route
54
+ path="/"
55
+ element={
56
+ <ProtectedRoute user={user}>
57
+ <Layout user={user} />
58
+ </ProtectedRoute>
59
+ }
60
+ >
61
+ <Route index element={<Dashboard />} />
62
+ <Route path="suppliers" element={<Supplier />} />
63
+ <Route path="shipments" element={<Shipment />} />
64
+ <Route path="deliveries" element={<Delivery />} />
65
+ <Route path="reports" element={<Reports />} />
66
+ <Route path="logout" element={<Logout setUser={setUser} />} />
67
+ </Route>
68
+ </Routes>
69
+ );
70
+ }
71
+
72
+ export default App;
@@ -0,0 +1,14 @@
1
+ import axios from "axios";
2
+
3
+ var baseURL = "http://localhost:5000/api";
4
+
5
+ if (import.meta.env && import.meta.env.VITE_API_URL) {
6
+ baseURL = import.meta.env.VITE_API_URL;
7
+ }
8
+
9
+ var apiClient = axios.create({
10
+ baseURL: baseURL,
11
+ withCredentials: true,
12
+ });
13
+
14
+ export default apiClient;
@@ -0,0 +1,17 @@
1
+ import apiClient from "./apiClient";
2
+
3
+ export function createDelivery(deliveryData) {
4
+ return apiClient.post("/deliveries", deliveryData);
5
+ }
6
+
7
+ export function getDeliveries() {
8
+ return apiClient.get("/deliveries");
9
+ }
10
+
11
+ export function updateDelivery(id, deliveryData) {
12
+ return apiClient.put("/deliveries/" + id, deliveryData);
13
+ }
14
+
15
+ export function deleteDelivery(id) {
16
+ return apiClient.delete("/deliveries/" + id);
17
+ }
@@ -0,0 +1,17 @@
1
+ import apiClient from "./apiClient";
2
+
3
+ export function createShipment(shipmentData) {
4
+ return apiClient.post("/shipments", shipmentData);
5
+ }
6
+
7
+ export function getShipments() {
8
+ return apiClient.get("/shipments");
9
+ }
10
+
11
+ export function updateShipment(id, shipmentData) {
12
+ return apiClient.put("/shipments/" + id, shipmentData);
13
+ }
14
+
15
+ export function deleteShipment(id) {
16
+ return apiClient.delete("/shipments/" + id);
17
+ }
@@ -0,0 +1,9 @@
1
+ import apiClient from "./apiClient";
2
+
3
+ export function createSupplier(supplierData) {
4
+ return apiClient.post("/suppliers", supplierData);
5
+ }
6
+
7
+ export function getSuppliers() {
8
+ return apiClient.get("/suppliers");
9
+ }
@@ -0,0 +1,21 @@
1
+ import apiClient from "./apiClient";
2
+
3
+ export function registerUser(userData) {
4
+ return apiClient.post("/users/register", userData);
5
+ }
6
+
7
+ export function loginUser(userData) {
8
+ return apiClient.post("/users/login", userData);
9
+ }
10
+
11
+ export function recoverPassword(userData) {
12
+ return apiClient.post("/users/recover-password", userData);
13
+ }
14
+
15
+ export function logoutUser() {
16
+ return apiClient.post("/users/logout");
17
+ }
18
+
19
+ export function getSessionUser() {
20
+ return apiClient.get("/users/session");
21
+ }
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import { Outlet } from "react-router-dom";
3
+ import Sidebar from "./Sidebar";
4
+
5
+ function Layout(props) {
6
+ return (
7
+ <div className="min-h-screen bg-slate-50 text-blue-900 md:flex">
8
+ <Sidebar user={props.user} />
9
+ <main className="flex-1 p-4 md:p-6">
10
+ <Outlet />
11
+ </main>
12
+ </div>
13
+ );
14
+ }
15
+
16
+ export default Layout;
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+
3
+ function Message(props) {
4
+ if (!props.text) {
5
+ return null;
6
+ }
7
+
8
+ return (
9
+ <div className={"mb-4 rounded-md border p-3 text-sm " + (props.type === "error" ? "border-blue-900 bg-slate-100" : "border-blue-800 bg-slate-100")}>
10
+ {props.text}
11
+ </div>
12
+ );
13
+ }
14
+
15
+ export default Message;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+
3
+ function PageHeader(props) {
4
+ return (
5
+ <div className="mb-5">
6
+ <h2 className="text-2xl font-bold text-blue-900">{props.title}</h2>
7
+ <p className="mt-1 text-sm text-blue-800">{props.subtitle}</p>
8
+ </div>
9
+ );
10
+ }
11
+
12
+ export default PageHeader;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import { NavLink } from "react-router-dom";
3
+
4
+ var menuItems = [
5
+ { path: "/", label: "Dashboard" },
6
+ { path: "/suppliers", label: "Supplier" },
7
+ { path: "/shipments", label: "Shipment" },
8
+ { path: "/deliveries", label: "Delivery" },
9
+ { path: "/reports", label: "Reports" },
10
+ { path: "/logout", label: "Logout" },
11
+ ];
12
+
13
+ function Sidebar(props) {
14
+ function linkClass(linkProps) {
15
+ return "block rounded-md px-4 py-3 text-sm font-semibold " +
16
+ (linkProps.isActive ? "bg-slate-50 text-blue-900" : "text-slate-50 hover:bg-blue-800");
17
+ }
18
+
19
+ return (
20
+ <aside className="no-print bg-blue-900 p-4 text-slate-50 md:min-h-screen md:w-64">
21
+ <div className="mb-6 border-b border-blue-800 pb-4">
22
+ <h1 className="text-xl font-bold">SCMS</h1>
23
+ <p className="mt-1 text-sm text-slate-100">SupplyNet Ltd</p>
24
+ <p className="mt-3 text-xs text-slate-100">User: {props.user ? props.user.username : ""}</p>
25
+ </div>
26
+
27
+ <nav className="grid gap-2">
28
+ {menuItems.map(function (item) {
29
+ return (
30
+ <NavLink key={item.path} to={item.path} end={item.path === "/"} className={linkClass}>
31
+ {item.label}
32
+ </NavLink>
33
+ );
34
+ })}
35
+ </nav>
36
+ </aside>
37
+ );
38
+ }
39
+
40
+ export default Sidebar;
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import ReactDOM from "react-dom/client";
3
+ import { BrowserRouter } from "react-router-dom";
4
+ import App from "./App";
5
+ import "./styles.css";
6
+
7
+ ReactDOM.createRoot(document.getElementById("root")).render(
8
+ <React.StrictMode>
9
+ <BrowserRouter>
10
+ <App />
11
+ </BrowserRouter>
12
+ </React.StrictMode>
13
+ );
@@ -0,0 +1,62 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { getSuppliers } from "../api/supplierApi";
3
+ import { getShipments } from "../api/shipmentApi";
4
+ import { getDeliveries } from "../api/deliveryApi";
5
+ import PageHeader from "../components/PageHeader";
6
+
7
+ function Dashboard() {
8
+ var countState = useState({ suppliers: 0, shipments: 0, deliveries: 0 });
9
+ var counts = countState[0];
10
+ var setCounts = countState[1];
11
+
12
+ useEffect(function () {
13
+ function loadDashboard() {
14
+ Promise.all([
15
+ getSuppliers(),
16
+ getShipments(),
17
+ getDeliveries(),
18
+ ])
19
+ .then(function (responses) {
20
+ setCounts({
21
+ suppliers: responses[0].data.length,
22
+ shipments: responses[1].data.length,
23
+ deliveries: responses[2].data.length,
24
+ });
25
+ });
26
+ }
27
+
28
+ loadDashboard();
29
+ }, []);
30
+
31
+ var cards = [
32
+ { title: "Suppliers", value: counts.suppliers },
33
+ { title: "Shipments", value: counts.shipments },
34
+ { title: "Deliveries", value: counts.deliveries },
35
+ ];
36
+
37
+ return (
38
+ <div>
39
+ <PageHeader title="Dashboard" subtitle="Summary of supply chain records" />
40
+
41
+ <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
42
+ {cards.map(function (card) {
43
+ return (
44
+ <div key={card.title} className="rounded-md border border-slate-200 bg-white p-5">
45
+ <p className="text-sm font-semibold text-blue-800">{card.title}</p>
46
+ <p className="mt-3 text-3xl font-bold">{card.value}</p>
47
+ </div>
48
+ );
49
+ })}
50
+ </div>
51
+
52
+ <section className="mt-6 rounded-md border border-slate-200 bg-white p-5">
53
+ <h3 className="font-bold">System Purpose</h3>
54
+ <p className="mt-2 text-sm leading-6 text-blue-800">
55
+ This system helps SupplyNet Ltd manage suppliers, shipments, deliveries, and printable reports using a simple MERN stack application.
56
+ </p>
57
+ </section>
58
+ </div>
59
+ );
60
+ }
61
+
62
+ export default Dashboard;
@@ -0,0 +1,212 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { createDelivery, deleteDelivery, getDeliveries, updateDelivery } from "../api/deliveryApi";
3
+ import { getShipments } from "../api/shipmentApi";
4
+ import Message from "../components/Message";
5
+ import PageHeader from "../components/PageHeader";
6
+
7
+ var emptyDelivery = {
8
+ shipment: "",
9
+ deliveryCode: "",
10
+ deliveryDate: "",
11
+ quantityDelivered: "",
12
+ deliveryStatus: "",
13
+ };
14
+
15
+ var deliveryStatuses = ["Pending", "Partial", "Completed", "Returned"];
16
+
17
+ function formatDateForInput(dateValue) {
18
+ if (!dateValue) return "";
19
+ return new Date(dateValue).toISOString().split("T")[0];
20
+ }
21
+
22
+ function Delivery() {
23
+ var formState = useState(emptyDelivery);
24
+ var formData = formState[0];
25
+ var setFormData = formState[1];
26
+ var shipmentState = useState([]);
27
+ var shipments = shipmentState[0];
28
+ var setShipments = shipmentState[1];
29
+ var deliveryState = useState([]);
30
+ var deliveries = deliveryState[0];
31
+ var setDeliveries = deliveryState[1];
32
+ var editingState = useState("");
33
+ var editingId = editingState[0];
34
+ var setEditingId = editingState[1];
35
+ var messageState = useState("");
36
+ var message = messageState[0];
37
+ var setMessage = messageState[1];
38
+ var messageTypeState = useState("");
39
+ var messageType = messageTypeState[0];
40
+ var setMessageType = messageTypeState[1];
41
+
42
+ function loadData() {
43
+ return Promise.all([getShipments(), getDeliveries()])
44
+ .then(function (responses) {
45
+ setShipments(responses[0].data);
46
+ setDeliveries(responses[1].data);
47
+ });
48
+ }
49
+
50
+ useEffect(function () {
51
+ loadData().catch(function () {});
52
+ }, []);
53
+
54
+ function handleChange(event) {
55
+ var newFormData = Object.assign({}, formData);
56
+ newFormData[event.target.name] = event.target.value;
57
+ setFormData(newFormData);
58
+ }
59
+
60
+ function clearForm() {
61
+ setFormData(emptyDelivery);
62
+ setEditingId("");
63
+ }
64
+
65
+ function handleSubmit(event) {
66
+ event.preventDefault();
67
+ setMessage("");
68
+
69
+ var request = editingId ? updateDelivery(editingId, formData) : createDelivery(formData);
70
+
71
+ request
72
+ .then(function (response) {
73
+ setMessageType("success");
74
+ setMessage(response.data.message);
75
+ clearForm();
76
+ loadData();
77
+ })
78
+ .catch(function (error) {
79
+ setMessageType("error");
80
+ setMessage(error.response && error.response.data ? error.response.data.message : "Failed to save delivery");
81
+ });
82
+ }
83
+
84
+ function handleEdit(delivery) {
85
+ setEditingId(delivery._id);
86
+ setFormData({
87
+ shipment: delivery.shipment && delivery.shipment._id ? delivery.shipment._id : delivery.shipment,
88
+ deliveryCode: delivery.deliveryCode,
89
+ deliveryDate: formatDateForInput(delivery.deliveryDate),
90
+ quantityDelivered: delivery.quantityDelivered,
91
+ deliveryStatus: delivery.deliveryStatus,
92
+ });
93
+ }
94
+
95
+ function handleDelete(id) {
96
+ if (!confirm("Delete this delivery?")) return;
97
+
98
+ deleteDelivery(id)
99
+ .then(function (response) {
100
+ setMessageType("success");
101
+ setMessage(response.data.message);
102
+ loadData();
103
+ })
104
+ .catch(function (error) {
105
+ setMessageType("error");
106
+ setMessage(error.response && error.response.data ? error.response.data.message : "Failed to delete delivery");
107
+ });
108
+ }
109
+
110
+ return (
111
+ <div>
112
+ <PageHeader title="Delivery" subtitle="Insert, get, update, and delete delivery records" />
113
+
114
+ <form onSubmit={handleSubmit} className="mb-6 rounded-md border border-slate-200 bg-white p-4">
115
+ <Message type={messageType} text={message} />
116
+ <div className="grid gap-4 md:grid-cols-2">
117
+ <div>
118
+ <label className="mb-2 block text-sm font-semibold">Shipment</label>
119
+ <select className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900" name="shipment" value={formData.shipment} onChange={handleChange} required>
120
+ <option value="">Select shipment</option>
121
+ {shipments.map(function (shipment) {
122
+ return (
123
+ <option key={shipment._id} value={shipment._id}>
124
+ {shipment.shipmentNumber} - {shipment.destination}
125
+ </option>
126
+ );
127
+ })}
128
+ </select>
129
+ </div>
130
+
131
+ <div>
132
+ <label className="mb-2 block text-sm font-semibold">Delivery Code</label>
133
+ <input className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900" name="deliveryCode" value={formData.deliveryCode} onChange={handleChange} required />
134
+ </div>
135
+
136
+ <div>
137
+ <label className="mb-2 block text-sm font-semibold">Delivery Date</label>
138
+ <input className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900" name="deliveryDate" type="date" value={formData.deliveryDate} onChange={handleChange} required />
139
+ </div>
140
+
141
+ <div>
142
+ <label className="mb-2 block text-sm font-semibold">Quantity Delivered</label>
143
+ <input className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900" name="quantityDelivered" type="number" min="1" value={formData.quantityDelivered} onChange={handleChange} required />
144
+ </div>
145
+
146
+ <div className="md:col-span-2">
147
+ <label className="mb-2 block text-sm font-semibold">Delivery Status</label>
148
+ <select className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900" name="deliveryStatus" value={formData.deliveryStatus} onChange={handleChange} required>
149
+ <option value="">Select status</option>
150
+ {deliveryStatuses.map(function (status) {
151
+ return (
152
+ <option key={status} value={status}>
153
+ {status}
154
+ </option>
155
+ );
156
+ })}
157
+ </select>
158
+ </div>
159
+ </div>
160
+
161
+ <div className="mt-4 flex flex-wrap gap-2">
162
+ <button className="rounded-md bg-blue-900 px-5 py-2 font-semibold text-slate-50">
163
+ {editingId ? "Update Delivery" : "Insert Delivery"}
164
+ </button>
165
+ {editingId && (
166
+ <button type="button" onClick={clearForm} className="rounded-md border border-blue-900 px-5 py-2 font-semibold">
167
+ Cancel
168
+ </button>
169
+ )}
170
+ </div>
171
+ </form>
172
+
173
+ <div className="overflow-x-auto rounded-md border border-slate-200 bg-white">
174
+ <table className="w-full min-w-[900px] text-left text-sm">
175
+ <thead className="bg-blue-900 text-slate-50">
176
+ <tr>
177
+ <th className="p-3">Delivery Code</th>
178
+ <th className="p-3">Shipment</th>
179
+ <th className="p-3">Date</th>
180
+ <th className="p-3">Quantity</th>
181
+ <th className="p-3">Status</th>
182
+ <th className="p-3">Actions</th>
183
+ </tr>
184
+ </thead>
185
+ <tbody>
186
+ {deliveries.map(function (delivery) {
187
+ return (
188
+ <tr key={delivery._id} className="border-t border-slate-200">
189
+ <td className="p-3">{delivery.deliveryCode}</td>
190
+ <td className="p-3">{delivery.shipment ? delivery.shipment.shipmentNumber : ""}</td>
191
+ <td className="p-3">{formatDateForInput(delivery.deliveryDate)}</td>
192
+ <td className="p-3">{delivery.quantityDelivered}</td>
193
+ <td className="p-3">{delivery.deliveryStatus}</td>
194
+ <td className="p-3">
195
+ <button onClick={function () { handleEdit(delivery); }} className="mr-2 rounded-md border border-blue-900 px-3 py-1 font-semibold">
196
+ Edit
197
+ </button>
198
+ <button onClick={function () { handleDelete(delivery._id); }} className="rounded-md bg-blue-900 px-3 py-1 font-semibold text-slate-50">
199
+ Delete
200
+ </button>
201
+ </td>
202
+ </tr>
203
+ );
204
+ })}
205
+ </tbody>
206
+ </table>
207
+ </div>
208
+ </div>
209
+ );
210
+ }
211
+
212
+ export default Delivery;