create-myexam-app 1.0.21 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) 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/frontend/node_modules/.bin/acorn +16 -0
  48. package/projects/SCMS/frontend/node_modules/.bin/acorn.cmd +17 -0
  49. package/projects/SCMS/frontend/node_modules/.bin/acorn.ps1 +28 -0
  50. package/projects/SCMS/frontend/node_modules/.bin/baseline-browser-mapping +16 -0
  51. package/projects/SCMS/frontend/node_modules/.bin/baseline-browser-mapping.cmd +17 -0
  52. package/projects/SCMS/frontend/node_modules/.bin/baseline-browser-mapping.ps1 +28 -0
  53. package/projects/SCMS/frontend/node_modules/.bin/browserslist +16 -0
  54. package/projects/SCMS/frontend/node_modules/.bin/browserslist.cmd +17 -0
  55. package/projects/SCMS/frontend/node_modules/.bin/browserslist.ps1 +28 -0
  56. package/projects/SCMS/frontend/node_modules/.bin/eslint +16 -0
  57. package/projects/SCMS/frontend/node_modules/.bin/eslint.cmd +17 -0
  58. package/projects/SCMS/frontend/node_modules/.bin/eslint.ps1 +28 -0
  59. package/projects/SCMS/frontend/node_modules/.bin/jiti +16 -0
  60. package/projects/SCMS/frontend/node_modules/.bin/jiti.cmd +17 -0
  61. package/projects/SCMS/frontend/node_modules/.bin/jiti.ps1 +28 -0
  62. package/projects/SCMS/frontend/node_modules/.bin/jsesc +16 -0
  63. package/projects/SCMS/frontend/node_modules/.bin/jsesc.cmd +17 -0
  64. package/projects/SCMS/frontend/node_modules/.bin/jsesc.ps1 +28 -0
  65. package/projects/SCMS/frontend/node_modules/.bin/json5 +16 -0
  66. package/projects/SCMS/frontend/node_modules/.bin/json5.cmd +17 -0
  67. package/projects/SCMS/frontend/node_modules/.bin/json5.ps1 +28 -0
  68. package/projects/SCMS/frontend/node_modules/.bin/nanoid +16 -0
  69. package/projects/SCMS/frontend/node_modules/.bin/nanoid.cmd +17 -0
  70. package/projects/SCMS/frontend/node_modules/.bin/nanoid.ps1 +28 -0
  71. package/projects/SCMS/frontend/node_modules/.bin/node-which +16 -0
  72. package/projects/SCMS/frontend/node_modules/.bin/node-which.cmd +17 -0
  73. package/projects/SCMS/frontend/node_modules/.bin/node-which.ps1 +28 -0
  74. package/projects/SCMS/frontend/node_modules/.bin/parser +16 -0
  75. package/projects/SCMS/frontend/node_modules/.bin/parser.cmd +17 -0
  76. package/projects/SCMS/frontend/node_modules/.bin/parser.ps1 +28 -0
  77. package/projects/SCMS/frontend/node_modules/.bin/rolldown +16 -0
  78. package/projects/SCMS/frontend/node_modules/.bin/rolldown.cmd +17 -0
  79. package/projects/SCMS/frontend/node_modules/.bin/rolldown.ps1 +28 -0
  80. package/projects/SCMS/frontend/node_modules/.bin/semver +16 -0
  81. package/projects/SCMS/frontend/node_modules/.bin/semver.cmd +17 -0
  82. package/projects/SCMS/frontend/node_modules/.bin/semver.ps1 +28 -0
  83. package/projects/SCMS/frontend/node_modules/.bin/update-browserslist-db +16 -0
  84. package/projects/SCMS/frontend/node_modules/.bin/update-browserslist-db.cmd +17 -0
  85. package/projects/SCMS/frontend/node_modules/.bin/update-browserslist-db.ps1 +28 -0
  86. package/projects/SCMS/frontend/node_modules/.bin/vite +16 -0
  87. package/projects/SCMS/frontend/node_modules/.bin/vite.cmd +17 -0
  88. package/projects/SCMS/frontend/node_modules/.bin/vite.ps1 +28 -0
  89. package/projects/SCMS/frontend/node_modules/.package-lock.json +2401 -0
  90. package/projects/SCMS/frontend/node_modules/.vite/deps/_metadata.json +56 -0
  91. package/projects/SCMS/frontend/node_modules/.vite/deps/axios.js +3184 -0
  92. package/projects/SCMS/frontend/node_modules/.vite/deps/axios.js.map +1 -0
  93. package/projects/SCMS/frontend/node_modules/.vite/deps/chunk-B-1-B7_t.js +33 -0
  94. package/projects/SCMS/frontend/node_modules/.vite/deps/package.json +3 -0
  95. package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom.js +186 -0
  96. package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom.js.map +1 -0
  97. package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom_client.js +14385 -0
  98. package/projects/SCMS/frontend/node_modules/.vite/deps/react-dom_client.js.map +1 -0
  99. package/projects/SCMS/frontend/node_modules/.vite/deps/react-router-dom.js +10177 -0
  100. package/projects/SCMS/frontend/node_modules/.vite/deps/react-router-dom.js.map +1 -0
  101. package/projects/SCMS/frontend/node_modules/.vite/deps/react.js +769 -0
  102. package/projects/SCMS/frontend/node_modules/.vite/deps/react.js.map +1 -0
  103. package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-dev-runtime.js +205 -0
  104. package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +1 -0
  105. package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-runtime.js +209 -0
  106. package/projects/SCMS/frontend/node_modules/.vite/deps/react_jsx-runtime.js.map +1 -0
  107. package/projects/SCMS/frontend/node_modules/@babel/code-frame/LICENSE +22 -0
  108. package/projects/SCMS/frontend/node_modules/@babel/code-frame/README.md +19 -0
  109. package/projects/SCMS/frontend/node_modules/@babel/code-frame/lib/index.js +217 -0
  110. package/projects/SCMS/frontend/node_modules/@babel/code-frame/lib/index.js.map +1 -0
  111. package/projects/SCMS/frontend/node_modules/@babel/code-frame/package.json +32 -0
  112. package/projects/SCMS/frontend/node_modules/@babel/compat-data/LICENSE +22 -0
  113. package/projects/SCMS/frontend/node_modules/@babel/compat-data/README.md +19 -0
  114. package/projects/SCMS/frontend/node_modules/@babel/compat-data/corejs2-built-ins.js +2 -0
  115. package/projects/SCMS/frontend/node_modules/@babel/compat-data/corejs3-shipped-proposals.js +2 -0
  116. package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/corejs2-built-ins.json +2120 -0
  117. package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json +5 -0
  118. package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/native-modules.json +18 -0
  119. package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/overlapping-plugins.json +38 -0
  120. package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/plugin-bugfixes.json +231 -0
  121. package/projects/SCMS/frontend/node_modules/@babel/compat-data/data/plugins.json +843 -0
  122. package/projects/SCMS/frontend/node_modules/@babel/compat-data/native-modules.js +2 -0
  123. package/projects/SCMS/frontend/node_modules/@babel/compat-data/overlapping-plugins.js +2 -0
  124. package/projects/SCMS/frontend/node_modules/@babel/compat-data/package.json +40 -0
  125. package/projects/SCMS/frontend/node_modules/@babel/compat-data/plugin-bugfixes.js +2 -0
  126. package/projects/SCMS/frontend/node_modules/@babel/compat-data/plugins.js +2 -0
  127. package/projects/SCMS/frontend/node_modules/@babel/core/LICENSE +22 -0
  128. package/projects/SCMS/frontend/node_modules/@babel/core/README.md +19 -0
  129. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/cache-contexts.js +5 -0
  130. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/cache-contexts.js.map +1 -0
  131. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/caching.js +261 -0
  132. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/caching.js.map +1 -0
  133. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-chain.js +469 -0
  134. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-chain.js.map +1 -0
  135. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-descriptors.js +190 -0
  136. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/config-descriptors.js.map +1 -0
  137. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/configuration.js +290 -0
  138. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/configuration.js.map +1 -0
  139. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/import.cjs +6 -0
  140. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/import.cjs.map +1 -0
  141. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index-browser.js +58 -0
  142. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index-browser.js.map +1 -0
  143. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index.js +78 -0
  144. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/files/index.js.map +1 -0
  145. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/full.js +312 -0
  146. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/full.js.map +1 -0
  147. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/index.js +87 -0
  148. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/index.js.map +1 -0
  149. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/item.js +67 -0
  150. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/item.js.map +1 -0
  151. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/partial.js +158 -0
  152. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/partial.js.map +1 -0
  153. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/pattern-to-regex.js +38 -0
  154. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/pattern-to-regex.js.map +1 -0
  155. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/plugin.js +33 -0
  156. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/plugin.js.map +1 -0
  157. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/printer.js +113 -0
  158. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/printer.js.map +1 -0
  159. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets-browser.js +41 -0
  160. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets-browser.js.map +1 -0
  161. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets.js +61 -0
  162. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/resolve-targets.js.map +1 -0
  163. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/util.js +31 -0
  164. package/projects/SCMS/frontend/node_modules/@babel/core/lib/config/util.js.map +1 -0
  165. package/projects/SCMS/frontend/node_modules/@babel/core/lib/index.js +230 -0
  166. package/projects/SCMS/frontend/node_modules/@babel/core/lib/index.js.map +1 -0
  167. package/projects/SCMS/frontend/node_modules/@babel/core/lib/parse.js +45 -0
  168. package/projects/SCMS/frontend/node_modules/@babel/core/lib/parse.js.map +1 -0
  169. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-ast.js +48 -0
  170. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-ast.js.map +1 -0
  171. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file-browser.js +23 -0
  172. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file-browser.js.map +1 -0
  173. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file.js +40 -0
  174. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform-file.js.map +1 -0
  175. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform.js +47 -0
  176. package/projects/SCMS/frontend/node_modules/@babel/core/lib/transform.js.map +1 -0
  177. package/projects/SCMS/frontend/node_modules/@babel/core/package.json +84 -0
  178. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +106 -0
  179. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/01_Introduction.md +8 -0
  180. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/02_Problem_Statement.md +12 -0
  181. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/03_Objectives.md +17 -0
  182. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/04_Technologies_Used.md +23 -0
  183. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/05_ERD.md +60 -0
  184. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/06_Database_Design.md +71 -0
  185. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/07_System_Architecture.md +28 -0
  186. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/08_API_Documentation.md +43 -0
  187. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/09_Testing.md +43 -0
  188. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/10_Challenges.md +12 -0
  189. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/REPORT/11_Conclusion.md +8 -0
  190. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env.example +4 -0
  191. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +16 -0
  192. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/deliveryController.js +145 -0
  193. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/shipmentController.js +149 -0
  194. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/supplierController.js +56 -0
  195. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/userController.js +158 -0
  196. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
  197. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Delivery.js +34 -0
  198. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Shipment.js +34 -0
  199. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Supplier.js +38 -0
  200. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +21 -0
  201. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1540 -0
  202. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +22 -0
  203. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/deliveryRoutes.js +11 -0
  204. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/shipmentRoutes.js +11 -0
  205. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/supplierRoutes.js +9 -0
  206. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/userRoutes.js +11 -0
  207. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +70 -0
  208. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/.env.example +2 -0
  209. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +13 -0
  210. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2944 -0
  211. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
  212. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
  213. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +72 -0
  214. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +14 -0
  215. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/deliveryApi.js +17 -0
  216. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/shipmentApi.js +17 -0
  217. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/supplierApi.js +9 -0
  218. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/userApi.js +21 -0
  219. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +16 -0
  220. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
  221. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/PageHeader.jsx +12 -0
  222. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +40 -0
  223. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
  224. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Dashboard.jsx +62 -0
  225. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Delivery.jsx +212 -0
  226. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Login.jsx +158 -0
  227. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Logout.jsx +24 -0
  228. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Reports.jsx +221 -0
  229. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Shipment.jsx +212 -0
  230. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/Supplier.jsx +118 -0
  231. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/styles.css +27 -0
  232. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +8 -0
  233. package/projects/SCMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +6 -0
  234. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/README.md +84 -0
  235. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/.env +3 -0
  236. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/config/db.js +13 -0
  237. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/productController.js +29 -0
  238. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/reportController.js +52 -0
  239. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/stockTransactionController.js +128 -0
  240. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/userController.js +115 -0
  241. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/controllers/warehouseController.js +29 -0
  242. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/middleware/authMiddleware.js +9 -0
  243. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Product.js +44 -0
  244. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/StockTransaction.js +33 -0
  245. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/User.js +19 -0
  246. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/models/Warehouse.js +25 -0
  247. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package-lock.json +1509 -0
  248. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/package.json +19 -0
  249. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/productRoutes.js +10 -0
  250. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/reportRoutes.js +9 -0
  251. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/stockTransactionRoutes.js +17 -0
  252. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/userRoutes.js +18 -0
  253. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/routes/warehouseRoutes.js +10 -0
  254. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/backend-project/server.js +73 -0
  255. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/index.html +12 -0
  256. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package-lock.json +2888 -0
  257. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/package.json +23 -0
  258. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/postcss.config.js +6 -0
  259. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/App.jsx +66 -0
  260. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/apiClient.js +16 -0
  261. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/productApi.js +11 -0
  262. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/reportApi.js +6 -0
  263. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/transactionApi.js +21 -0
  264. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/userApi.js +26 -0
  265. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/api/warehouseApi.js +11 -0
  266. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Header.jsx +17 -0
  267. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Layout.jsx +17 -0
  268. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Message.jsx +15 -0
  269. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/ProtectedRoute.jsx +41 -0
  270. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/components/Sidebar.jsx +39 -0
  271. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/index.css +30 -0
  272. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/main.jsx +13 -0
  273. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/DashboardPage.jsx +64 -0
  274. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/LoginPage.jsx +73 -0
  275. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ProductPage.jsx +107 -0
  276. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RecoverPasswordPage.jsx +69 -0
  277. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/RegisterPage.jsx +69 -0
  278. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/ReportsPage.jsx +152 -0
  279. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/TransactionPage.jsx +195 -0
  280. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/src/pages/WarehousePage.jsx +93 -0
  281. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/tailwind.config.js +13 -0
  282. package/projects/SHMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026/frontend-project/vite.config.js +9 -0
  283. package/projects/SRMS/frontend/src/pages/Reports.jsx +170 -58
  284. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/README.md +49 -0
  285. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/.env +3 -0
  286. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/middleware/authMiddleware.js +19 -0
  287. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Customer.js +11 -0
  288. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Product.js +10 -0
  289. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/Sale.js +19 -0
  290. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/models/User.js +8 -0
  291. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/package-lock.json +1609 -0
  292. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/package.json +20 -0
  293. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/authRoutes.js +75 -0
  294. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/customerRoutes.js +42 -0
  295. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/productRoutes.js +41 -0
  296. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/reportRoutes.js +129 -0
  297. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/routes/saleRoutes.js +107 -0
  298. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/backend-project/server.js +49 -0
  299. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/assets/index-DZxY56Bj.js +75 -0
  300. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/assets/index-J8MKb3Fq.css +1 -0
  301. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/dist/index.html +13 -0
  302. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/index.html +12 -0
  303. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/package-lock.json +2029 -0
  304. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/package.json +21 -0
  305. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/App.jsx +77 -0
  306. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/index.css +333 -0
  307. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/main.jsx +10 -0
  308. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Customers.jsx +85 -0
  309. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Dashboard.jsx +75 -0
  310. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Login.jsx +65 -0
  311. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Products.jsx +91 -0
  312. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Register.jsx +82 -0
  313. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Reports.jsx +138 -0
  314. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/src/pages/Sales.jsx +154 -0
  315. package/projects/SRMS(Ely)/KALIWABO_SHEMA_ELYSEE_National_Practical_Examination_2026(/frontend-project/vite.config.js +9 -0
@@ -0,0 +1,118 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { createSupplier, getSuppliers } from "../api/supplierApi";
3
+ import Message from "../components/Message";
4
+ import PageHeader from "../components/PageHeader";
5
+
6
+ var emptySupplier = {
7
+ supplierCode: "",
8
+ supplierName: "",
9
+ telephone: "",
10
+ address: "",
11
+ email: "",
12
+ };
13
+
14
+ function Supplier() {
15
+ var formState = useState(emptySupplier);
16
+ var formData = formState[0];
17
+ var setFormData = formState[1];
18
+ var supplierState = useState([]);
19
+ var suppliers = supplierState[0];
20
+ var setSuppliers = supplierState[1];
21
+ var messageState = useState("");
22
+ var message = messageState[0];
23
+ var setMessage = messageState[1];
24
+ var messageTypeState = useState("");
25
+ var messageType = messageTypeState[0];
26
+ var setMessageType = messageTypeState[1];
27
+
28
+ function loadSuppliers() {
29
+ return getSuppliers()
30
+ .then(function (response) {
31
+ setSuppliers(response.data);
32
+ });
33
+ }
34
+
35
+ useEffect(function () {
36
+ loadSuppliers().catch(function () {});
37
+ }, []);
38
+
39
+ function handleChange(event) {
40
+ var newFormData = Object.assign({}, formData);
41
+ newFormData[event.target.name] = event.target.value;
42
+ setFormData(newFormData);
43
+ }
44
+
45
+ function handleSubmit(event) {
46
+ event.preventDefault();
47
+ setMessage("");
48
+
49
+ createSupplier(formData)
50
+ .then(function (response) {
51
+ setMessageType("success");
52
+ setMessage(response.data.message);
53
+ setFormData(emptySupplier);
54
+ loadSuppliers();
55
+ })
56
+ .catch(function (error) {
57
+ setMessageType("error");
58
+ setMessage(error.response && error.response.data ? error.response.data.message : "Failed to save supplier");
59
+ });
60
+ }
61
+
62
+ return (
63
+ <div>
64
+ <PageHeader title="Supplier" subtitle="Insert supplier records only" />
65
+
66
+ <form onSubmit={handleSubmit} className="mb-6 rounded-md border border-slate-200 bg-white p-4">
67
+ <Message type={messageType} text={message} />
68
+ <div className="grid gap-4 md:grid-cols-2">
69
+ {Object.keys(emptySupplier).map(function (field) {
70
+ return (
71
+ <div key={field}>
72
+ <label className="mb-2 block text-sm font-semibold">{field}</label>
73
+ <input
74
+ className="w-full rounded-md border border-slate-200 bg-slate-50 px-3 py-2 outline-blue-900"
75
+ name={field}
76
+ value={formData[field]}
77
+ onChange={handleChange}
78
+ required
79
+ type={field === "email" ? "email" : "text"}
80
+ />
81
+ </div>
82
+ );
83
+ })}
84
+ </div>
85
+ <button className="mt-4 rounded-md bg-blue-900 px-5 py-2 font-semibold text-slate-50">Insert Supplier</button>
86
+ </form>
87
+
88
+ <div className="overflow-x-auto rounded-md border border-slate-200 bg-white">
89
+ <table className="w-full min-w-[760px] text-left text-sm">
90
+ <thead className="bg-blue-900 text-slate-50">
91
+ <tr>
92
+ <th className="p-3">Code</th>
93
+ <th className="p-3">Name</th>
94
+ <th className="p-3">Telephone</th>
95
+ <th className="p-3">Address</th>
96
+ <th className="p-3">Email</th>
97
+ </tr>
98
+ </thead>
99
+ <tbody>
100
+ {suppliers.map(function (supplier) {
101
+ return (
102
+ <tr key={supplier._id} className="border-t border-slate-200">
103
+ <td className="p-3">{supplier.supplierCode}</td>
104
+ <td className="p-3">{supplier.supplierName}</td>
105
+ <td className="p-3">{supplier.telephone}</td>
106
+ <td className="p-3">{supplier.address}</td>
107
+ <td className="p-3">{supplier.email}</td>
108
+ </tr>
109
+ );
110
+ })}
111
+ </tbody>
112
+ </table>
113
+ </div>
114
+ </div>
115
+ );
116
+ }
117
+
118
+ export default Supplier;
@@ -0,0 +1,27 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ body {
6
+ margin: 0;
7
+ background: #f8fafc;
8
+ color: #1e3a8a;
9
+ font-family: Arial, Helvetica, sans-serif;
10
+ }
11
+
12
+ input,
13
+ select,
14
+ button {
15
+ font: inherit;
16
+ }
17
+
18
+ @media print {
19
+ .no-print {
20
+ display: none !important;
21
+ }
22
+
23
+ .print-area {
24
+ padding: 0 !important;
25
+ }
26
+ }
27
+
@@ -0,0 +1,8 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ content: ["./index.html", "./src/**/*.{js,jsx}"],
4
+ theme: {
5
+ extend: {},
6
+ },
7
+ plugins: [],
8
+ };
@@ -0,0 +1,6 @@
1
+ var defineConfig = require("vite").defineConfig;
2
+ var react = require("@vitejs/plugin-react");
3
+
4
+ module.exports = defineConfig({
5
+ plugins: [react()],
6
+ });
@@ -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/SMS
3
+ SESSION_SECRET=stockhub_sms_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/SMS");
6
+ console.log("MongoDB connected to SMS 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,29 @@
1
+ const Product = require("../models/Product");
2
+
3
+ const createProduct = async (req, res) => {
4
+ try {
5
+ const existingProduct = await Product.findOne({ productCode: req.body.productCode });
6
+ if (existingProduct) {
7
+ return res.status(400).json({ message: "Product code already exists" });
8
+ }
9
+
10
+ const product = await Product.create(req.body);
11
+ res.status(201).json({ message: "Product recorded successfully", product });
12
+ } catch (error) {
13
+ res.status(400).json({ message: "Product was not recorded", error: error.message });
14
+ }
15
+ };
16
+
17
+ const getProducts = async (req, res) => {
18
+ try {
19
+ const products = await Product.find().sort({ createdAt: -1 });
20
+ res.json(products);
21
+ } catch (error) {
22
+ res.status(500).json({ message: "Products could not be retrieved", error: error.message });
23
+ }
24
+ };
25
+
26
+ module.exports = {
27
+ createProduct,
28
+ getProducts
29
+ };
@@ -0,0 +1,52 @@
1
+ const Product = require("../models/Product");
2
+ const StockTransaction = require("../models/StockTransaction");
3
+
4
+ const getDateRange = (period) => {
5
+ const now = new Date();
6
+ const start = new Date(now);
7
+
8
+ if (period === "weekly") {
9
+ start.setDate(now.getDate() - 7);
10
+ } else if (period === "monthly") {
11
+ start.setMonth(now.getMonth() - 1);
12
+ } else {
13
+ start.setHours(0, 0, 0, 0);
14
+ }
15
+
16
+ const end = new Date(now);
17
+ end.setHours(23, 59, 59, 999);
18
+
19
+ return { start, end };
20
+ };
21
+
22
+ const getReports = async (req, res) => {
23
+ try {
24
+ const period = req.query.period || "daily";
25
+ const { start, end } = getDateRange(period);
26
+
27
+ const availableStock = await Product.find().sort({ productName: 1 });
28
+ const transactions = await StockTransaction.find({
29
+ transactionDate: { $gte: start, $lte: end }
30
+ })
31
+ .populate("product warehouse")
32
+ .sort({ transactionDate: -1 });
33
+
34
+ const stockIn = transactions.filter((item) => item.transactionType === "Stock In");
35
+ const stockOut = transactions.filter((item) => item.transactionType === "Stock Out");
36
+
37
+ res.json({
38
+ period,
39
+ startDate: start,
40
+ endDate: end,
41
+ availableStock,
42
+ stockIn,
43
+ stockOut
44
+ });
45
+ } catch (error) {
46
+ res.status(500).json({ message: "Reports could not be generated", error: error.message });
47
+ }
48
+ };
49
+
50
+ module.exports = {
51
+ getReports
52
+ };
@@ -0,0 +1,128 @@
1
+ const Product = require("../models/Product");
2
+ const StockTransaction = require("../models/StockTransaction");
3
+
4
+ const applyStockMovement = async (productId, transactionType, quantityMoved) => {
5
+ const product = await Product.findById(productId);
6
+
7
+ if (!product) {
8
+ throw new Error("Selected product was not found");
9
+ }
10
+
11
+ const quantity = Number(quantityMoved);
12
+ const newQuantity =
13
+ transactionType === "Stock In"
14
+ ? product.quantityInStock + quantity
15
+ : product.quantityInStock - quantity;
16
+
17
+ if (newQuantity < 0) {
18
+ throw new Error("Stock out quantity cannot be greater than available stock");
19
+ }
20
+
21
+ product.quantityInStock = newQuantity;
22
+ await product.save();
23
+ };
24
+
25
+ const reverseStockMovement = async (transaction) => {
26
+ const oppositeType = transaction.transactionType === "Stock In" ? "Stock Out" : "Stock In";
27
+ await applyStockMovement(transaction.product, oppositeType, transaction.quantityMoved);
28
+ };
29
+
30
+ const createTransaction = async (req, res) => {
31
+ try {
32
+ const transaction = new StockTransaction(req.body);
33
+ await transaction.validate();
34
+ await applyStockMovement(req.body.product, req.body.transactionType, req.body.quantityMoved);
35
+ await transaction.save();
36
+ const savedTransaction = await transaction.populate("product warehouse");
37
+
38
+ res.status(201).json({
39
+ message: "Stock transaction recorded successfully",
40
+ transaction: savedTransaction
41
+ });
42
+ } catch (error) {
43
+ res.status(400).json({ message: "Transaction was not recorded", error: error.message });
44
+ }
45
+ };
46
+
47
+ const getTransactions = async (req, res) => {
48
+ try {
49
+ const transactions = await StockTransaction.find()
50
+ .populate("product warehouse")
51
+ .sort({ transactionDate: -1, createdAt: -1 });
52
+
53
+ res.json(transactions);
54
+ } catch (error) {
55
+ res.status(500).json({ message: "Transactions could not be retrieved", error: error.message });
56
+ }
57
+ };
58
+
59
+ const updateTransaction = async (req, res) => {
60
+ try {
61
+ const transaction = await StockTransaction.findById(req.params.id);
62
+
63
+ if (!transaction) {
64
+ return res.status(404).json({ message: "Transaction was not found" });
65
+ }
66
+
67
+ const previousTransaction = {
68
+ product: transaction.product,
69
+ transactionType: transaction.transactionType,
70
+ quantityMoved: transaction.quantityMoved
71
+ };
72
+
73
+ transaction.product = req.body.product;
74
+ transaction.warehouse = req.body.warehouse;
75
+ transaction.transactionDate = req.body.transactionDate;
76
+ transaction.quantityMoved = req.body.quantityMoved;
77
+ transaction.transactionType = req.body.transactionType;
78
+ await transaction.validate();
79
+
80
+ await applyStockMovement(
81
+ previousTransaction.product,
82
+ previousTransaction.transactionType === "Stock In" ? "Stock Out" : "Stock In",
83
+ previousTransaction.quantityMoved
84
+ );
85
+
86
+ try {
87
+ await applyStockMovement(req.body.product, req.body.transactionType, req.body.quantityMoved);
88
+ } catch (error) {
89
+ await applyStockMovement(
90
+ previousTransaction.product,
91
+ previousTransaction.transactionType,
92
+ previousTransaction.quantityMoved
93
+ );
94
+ throw error;
95
+ }
96
+
97
+ await transaction.save();
98
+
99
+ const updatedTransaction = await transaction.populate("product warehouse");
100
+ res.json({ message: "Transaction updated successfully", transaction: updatedTransaction });
101
+ } catch (error) {
102
+ res.status(400).json({ message: "Transaction was not updated", error: error.message });
103
+ }
104
+ };
105
+
106
+ const deleteTransaction = async (req, res) => {
107
+ try {
108
+ const transaction = await StockTransaction.findById(req.params.id);
109
+
110
+ if (!transaction) {
111
+ return res.status(404).json({ message: "Transaction was not found" });
112
+ }
113
+
114
+ await reverseStockMovement(transaction);
115
+ await StockTransaction.findByIdAndDelete(req.params.id);
116
+
117
+ res.json({ message: "Transaction deleted successfully" });
118
+ } catch (error) {
119
+ res.status(400).json({ message: "Transaction was not deleted", error: error.message });
120
+ }
121
+ };
122
+
123
+ module.exports = {
124
+ createTransaction,
125
+ getTransactions,
126
+ updateTransaction,
127
+ deleteTransaction
128
+ };
@@ -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,29 @@
1
+ const Warehouse = require("../models/Warehouse");
2
+
3
+ const createWarehouse = async (req, res) => {
4
+ try {
5
+ const existingWarehouse = await Warehouse.findOne({ warehouseCode: req.body.warehouseCode });
6
+ if (existingWarehouse) {
7
+ return res.status(400).json({ message: "Warehouse code already exists" });
8
+ }
9
+
10
+ const warehouse = await Warehouse.create(req.body);
11
+ res.status(201).json({ message: "Warehouse recorded successfully", warehouse });
12
+ } catch (error) {
13
+ res.status(400).json({ message: "Warehouse was not recorded", error: error.message });
14
+ }
15
+ };
16
+
17
+ const getWarehouses = async (req, res) => {
18
+ try {
19
+ const warehouses = await Warehouse.find().sort({ createdAt: -1 });
20
+ res.json(warehouses);
21
+ } catch (error) {
22
+ res.status(500).json({ message: "Warehouses could not be retrieved", error: error.message });
23
+ }
24
+ };
25
+
26
+ module.exports = {
27
+ createWarehouse,
28
+ getWarehouses
29
+ };
@@ -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,44 @@
1
+ const mongoose = require("mongoose");
2
+
3
+ const productSchema = new mongoose.Schema(
4
+ {
5
+ productCode: {
6
+ type: String,
7
+ required: [true, "Product code is required"],
8
+ unique: true,
9
+ trim: true
10
+ },
11
+ productName: {
12
+ type: String,
13
+ required: [true, "Product name is required"],
14
+ trim: true
15
+ },
16
+ category: {
17
+ type: String,
18
+ required: [true, "Category is required"],
19
+ trim: true
20
+ },
21
+ quantityInStock: {
22
+ type: Number,
23
+ required: [true, "Quantity in stock is required"],
24
+ min: [0, "Quantity cannot be negative"]
25
+ },
26
+ unitPrice: {
27
+ type: Number,
28
+ required: [true, "Unit price is required"],
29
+ min: [0, "Unit price cannot be negative"]
30
+ },
31
+ supplierName: {
32
+ type: String,
33
+ required: [true, "Supplier name is required"],
34
+ trim: true
35
+ },
36
+ dateReceived: {
37
+ type: Date,
38
+ required: [true, "Date received is required"]
39
+ }
40
+ },
41
+ { timestamps: true }
42
+ );
43
+
44
+ module.exports = mongoose.model("Product", productSchema);