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,21 @@
1
+ {
2
+ "name": "srm-frontend",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "axios": "^1.6.2",
13
+ "react": "^18.2.0",
14
+ "react-dom": "^18.2.0",
15
+ "react-router-dom": "^6.20.1"
16
+ },
17
+ "devDependencies": {
18
+ "@vitejs/plugin-react": "^4.2.0",
19
+ "vite": "^5.0.4"
20
+ }
21
+ }
@@ -0,0 +1,77 @@
1
+ import React from 'react';
2
+ import { useEffect, useState } from 'react';
3
+ import { BrowserRouter, Link, Navigate, NavLink, Route, Routes, useNavigate } from 'react-router-dom';
4
+ import axios from 'axios';
5
+ import Login from './pages/Login';
6
+ import Register from './pages/Register';
7
+ import Dashboard from './pages/Dashboard';
8
+ import Customers from './pages/Customers';
9
+ import Products from './pages/Products';
10
+ import Sales from './pages/Sales';
11
+ import Reports from './pages/Reports';
12
+
13
+ var API = 'http://localhost:5000/api';
14
+
15
+ function App() {
16
+ var sessionState = useState(function() {
17
+ var stored = localStorage.getItem('srmsSession');
18
+ return stored ? JSON.parse(stored) : null;
19
+ });
20
+ var session = sessionState[0];
21
+ var setSession = sessionState[1];
22
+ var noticeState = useState('');
23
+ var notice = noticeState[0];
24
+ var setNotice = noticeState[1];
25
+
26
+ function saveSession(data) {
27
+ localStorage.setItem('srmsSession', JSON.stringify(data));
28
+ setSession(data);
29
+ }
30
+
31
+ function logout() {
32
+ localStorage.removeItem('srmsSession');
33
+ setSession(null);
34
+ }
35
+
36
+ return React.createElement('div', null,
37
+ session && React.createElement(TopNav, { user: session.user, onLogout: logout }),
38
+ notice && React.createElement('div', { className: 'notice', onClick: function() { setNotice(''); } }, notice),
39
+ React.createElement(Routes, null,
40
+ React.createElement(Route, { path: '/', element: session ? React.createElement(Navigate, { to: '/dashboard' }) : React.createElement(Login, { onLogin: saveSession }) }),
41
+ React.createElement(Route, { path: '/login', element: React.createElement(Login, { onLogin: saveSession }) }),
42
+ React.createElement(Route, { path: '/register', element: React.createElement(Register, { onLogin: saveSession }) }),
43
+ React.createElement(Route, { path: '/dashboard', element: React.createElement(Protected, { session: session }, React.createElement(Dashboard, { API: API })) }),
44
+ React.createElement(Route, { path: '/customers', element: React.createElement(Protected, { session: session }, React.createElement(Customers, { API: API, session: session, setNotice: setNotice })) }),
45
+ React.createElement(Route, { path: '/products', element: React.createElement(Protected, { session: session }, React.createElement(Products, { API: API, session: session, setNotice: setNotice })) }),
46
+ React.createElement(Route, { path: '/sales', element: React.createElement(Protected, { session: session }, React.createElement(Sales, { API: API, session: session, setNotice: setNotice })) }),
47
+ React.createElement(Route, { path: '/reports', element: React.createElement(Protected, { session: session }, React.createElement(Reports, { API: API, session: session, setNotice: setNotice })) }),
48
+ React.createElement(Route, { path: '*', element: React.createElement(Navigate, { to: session ? '/dashboard' : '/login' }) })
49
+ )
50
+ );
51
+ }
52
+
53
+ function Protected(props) {
54
+ return props.session ? props.children : React.createElement(Navigate, { to: '/login' });
55
+ }
56
+
57
+ function TopNav(props) {
58
+ return React.createElement('header', { className: 'top-nav no-print' },
59
+ React.createElement('div', null,
60
+ React.createElement('h1', null, 'SRMS'),
61
+ React.createElement('p', null, 'Sales Record Management System')
62
+ ),
63
+ React.createElement('nav', null,
64
+ React.createElement(NavLink, { to: '/dashboard' }, 'Dashboard'),
65
+ React.createElement(NavLink, { to: '/customers' }, 'Customers'),
66
+ React.createElement(NavLink, { to: '/products' }, 'Products'),
67
+ React.createElement(NavLink, { to: '/sales' }, 'Sales'),
68
+ React.createElement(NavLink, { to: '/reports' }, 'Reports')
69
+ ),
70
+ React.createElement('div', { className: 'profile' },
71
+ React.createElement('span', null, props.user ? props.user.username : ''),
72
+ React.createElement('button', { onClick: props.onLogout }, 'Logout')
73
+ )
74
+ );
75
+ }
76
+
77
+ export default App;
@@ -0,0 +1,333 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ body {
6
+ margin: 0;
7
+ background: #F8FAFC;
8
+ color: #1e293b;
9
+ font-family: Arial, Helvetica, sans-serif;
10
+ font-size: 14px;
11
+ }
12
+
13
+ button, input, select {
14
+ font: inherit;
15
+ }
16
+
17
+ button {
18
+ background: #1E3A8A;
19
+ border: 0;
20
+ border-radius: 4px;
21
+ color: white;
22
+ cursor: pointer;
23
+ padding: 8px 11px;
24
+ transition: background 0.2s;
25
+ }
26
+
27
+ button:hover {
28
+ background: #1a3378;
29
+ }
30
+
31
+ .danger {
32
+ background: #dc2626;
33
+ }
34
+
35
+ .danger:hover {
36
+ background: #b91c1c;
37
+ }
38
+
39
+ @media print {
40
+ .no-print { display: none !important; }
41
+ }
42
+
43
+ .top-nav {
44
+ align-items: center;
45
+ background: white;
46
+ border-bottom: 1px solid #e2e8f0;
47
+ display: flex;
48
+ gap: 12px;
49
+ justify-content: space-between;
50
+ padding: 10px 18px;
51
+ }
52
+
53
+ .top-nav h1, .top-nav p {
54
+ margin: 0;
55
+ }
56
+
57
+ .top-nav h1 {
58
+ font-size: 18px;
59
+ color: #1E3A8A;
60
+ }
61
+
62
+ .top-nav p {
63
+ color: #64748b;
64
+ font-size: 12px;
65
+ }
66
+
67
+ .top-nav nav {
68
+ display: flex;
69
+ flex-wrap: wrap;
70
+ gap: 4px;
71
+ justify-content: center;
72
+ }
73
+
74
+ .top-nav a {
75
+ border-radius: 4px;
76
+ color: #475569;
77
+ font-size: 13px;
78
+ padding: 7px 8px;
79
+ text-decoration: none;
80
+ }
81
+
82
+ .top-nav a.active, .top-nav a:hover {
83
+ background: #e8edf5;
84
+ color: #1E3A8A;
85
+ }
86
+
87
+ .profile {
88
+ align-items: center;
89
+ display: flex;
90
+ font-size: 13px;
91
+ gap: 8px;
92
+ white-space: nowrap;
93
+ }
94
+
95
+ .notice {
96
+ background: #1E3A8A;
97
+ border-radius: 4px;
98
+ color: white;
99
+ cursor: pointer;
100
+ margin: 10px auto 0;
101
+ max-width: 1100px;
102
+ padding: 9px 12px;
103
+ }
104
+
105
+ .page {
106
+ margin: 0 auto;
107
+ max-width: 1100px;
108
+ padding: 16px;
109
+ }
110
+
111
+ .page-title {
112
+ margin-bottom: 10px;
113
+ }
114
+
115
+ .page-title h2 {
116
+ font-size: 20px;
117
+ margin: 0;
118
+ color: #1e293b;
119
+ }
120
+
121
+ .page-title p {
122
+ color: #64748b;
123
+ font-size: 13px;
124
+ margin: 3px 0 0;
125
+ }
126
+
127
+ .cards-grid {
128
+ display: grid;
129
+ gap: 10px;
130
+ grid-template-columns: repeat(4, 1fr);
131
+ }
132
+
133
+ .card {
134
+ background: white;
135
+ border: 1px solid #e2e8f0;
136
+ border-radius: 4px;
137
+ padding: 12px;
138
+ }
139
+
140
+ .card span {
141
+ color: #64748b;
142
+ display: block;
143
+ font-size: 13px;
144
+ }
145
+
146
+ .card strong {
147
+ display: block;
148
+ font-size: 22px;
149
+ margin-top: 6px;
150
+ color: #1e293b;
151
+ }
152
+
153
+ .form-grid {
154
+ background: white;
155
+ border: 1px solid #e2e8f0;
156
+ border-radius: 4px;
157
+ display: grid;
158
+ gap: 8px;
159
+ grid-template-columns: repeat(5, 1fr) auto;
160
+ margin-bottom: 10px;
161
+ padding: 10px;
162
+ }
163
+
164
+ .form-grid.three {
165
+ grid-template-columns: repeat(3, 1fr) auto;
166
+ }
167
+
168
+ .form-grid.four {
169
+ grid-template-columns: repeat(4, 1fr) auto;
170
+ }
171
+
172
+ input, select {
173
+ border: 1px solid #cbd5e1;
174
+ border-radius: 4px;
175
+ min-width: 0;
176
+ padding: 8px;
177
+ }
178
+
179
+ input:focus, select:focus {
180
+ border-color: #1E3A8A;
181
+ outline: 1px solid #c5d1e8;
182
+ }
183
+
184
+ .table-wrap {
185
+ background: white;
186
+ border: 1px solid #e2e8f0;
187
+ border-radius: 4px;
188
+ overflow-x: auto;
189
+ }
190
+
191
+ table {
192
+ border-collapse: collapse;
193
+ width: 100%;
194
+ }
195
+
196
+ th, td {
197
+ border-bottom: 1px solid #e2e8f0;
198
+ padding: 8px 9px;
199
+ text-align: left;
200
+ white-space: nowrap;
201
+ }
202
+
203
+ th {
204
+ background: #f1f5f9;
205
+ color: #475569;
206
+ font-size: 13px;
207
+ }
208
+
209
+ tr:hover {
210
+ background: #f8fafc;
211
+ }
212
+
213
+ .actions {
214
+ display: flex;
215
+ gap: 5px;
216
+ }
217
+
218
+ .actions button {
219
+ padding: 5px 8px;
220
+ }
221
+
222
+ .auth-page {
223
+ align-items: center;
224
+ display: flex;
225
+ justify-content: center;
226
+ min-height: 100vh;
227
+ padding: 15px;
228
+ }
229
+
230
+ .auth-card {
231
+ background: white;
232
+ border: 1px solid #e2e8f0;
233
+ border-radius: 4px;
234
+ max-width: 340px;
235
+ padding: 20px;
236
+ width: 100%;
237
+ }
238
+
239
+ .auth-card h1 {
240
+ font-size: 20px;
241
+ margin: 0 0 14px;
242
+ text-align: center;
243
+ color: #1E3A8A;
244
+ }
245
+
246
+ .auth-form {
247
+ display: grid;
248
+ gap: 9px;
249
+ }
250
+
251
+ .auth-links {
252
+ display: flex;
253
+ justify-content: center;
254
+ margin-top: 2px;
255
+ }
256
+
257
+ .auth-links a {
258
+ color: #1E3A8A;
259
+ text-decoration: none;
260
+ }
261
+
262
+ .auth-links a:hover {
263
+ text-decoration: underline;
264
+ }
265
+
266
+ .form-error {
267
+ background: #fef2f2;
268
+ border-radius: 4px;
269
+ color: #dc2626;
270
+ margin: 0;
271
+ padding: 8px;
272
+ }
273
+
274
+ .report-filters {
275
+ background: white;
276
+ border: 1px solid #e2e8f0;
277
+ border-radius: 4px;
278
+ padding: 14px;
279
+ margin-bottom: 10px;
280
+ display: flex;
281
+ flex-wrap: wrap;
282
+ gap: 10px;
283
+ align-items: flex-end;
284
+ }
285
+
286
+ .report-summary {
287
+ display: grid;
288
+ gap: 10px;
289
+ grid-template-columns: repeat(3, 1fr);
290
+ margin-bottom: 16px;
291
+ }
292
+
293
+ .report-stat {
294
+ background: #e8edf5;
295
+ border-radius: 4px;
296
+ padding: 12px;
297
+ }
298
+
299
+ .report-stat span {
300
+ color: #1E3A8A;
301
+ font-size: 13px;
302
+ display: block;
303
+ }
304
+
305
+ .report-stat strong {
306
+ display: block;
307
+ font-size: 20px;
308
+ margin-top: 4px;
309
+ color: #1E3A8A;
310
+ }
311
+
312
+ @media (max-width: 950px) {
313
+ .top-nav {
314
+ align-items: flex-start;
315
+ flex-direction: column;
316
+ }
317
+ .cards-grid, .form-grid, .form-grid.three, .form-grid.four {
318
+ grid-template-columns: 1fr 1fr;
319
+ }
320
+ .report-summary {
321
+ grid-template-columns: 1fr 1fr;
322
+ }
323
+ }
324
+
325
+ @media (max-width: 620px) {
326
+ .page { padding: 12px; }
327
+ .cards-grid, .form-grid, .form-grid.three, .form-grid.four {
328
+ grid-template-columns: 1fr;
329
+ }
330
+ .report-summary {
331
+ grid-template-columns: 1fr;
332
+ }
333
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react'
2
+ import ReactDOM from 'react-dom/client'
3
+ import App from './App.jsx'
4
+ import './index.css'
5
+
6
+ ReactDOM.createRoot(document.getElementById('root')).render(
7
+ React.createElement(React.StrictMode, null,
8
+ React.createElement(App, null)
9
+ )
10
+ )
@@ -0,0 +1,85 @@
1
+ import React from 'react';
2
+ import { useState, useEffect } from 'react';
3
+ import axios from 'axios';
4
+
5
+ var emptyCustomer = { customerNumber: '', firstName: '', lastName: '', telephone: '', address: '' };
6
+
7
+ function Customers(props) {
8
+ var customersState = useState([]);
9
+ var customers = customersState[0];
10
+ var setCustomers = customersState[1];
11
+ var formState = useState(emptyCustomer);
12
+ var form = formState[0];
13
+ var setForm = formState[1];
14
+
15
+ var token = props.session ? props.session.token : '';
16
+ var headers = { Authorization: 'Bearer ' + token };
17
+
18
+ function load() {
19
+ axios.get(props.API + '/customers', { headers: headers })
20
+ .then(function(res) {
21
+ setCustomers(res.data);
22
+ })
23
+ .catch(function() {});
24
+ }
25
+
26
+ useEffect(function() { load(); }, []);
27
+
28
+ function submit() {
29
+ if (!form.customerNumber || !form.firstName || !form.lastName || !form.telephone || !form.address) {
30
+ props.setNotice('All fields are required');
31
+ return;
32
+ }
33
+ axios.post(props.API + '/customers', form, { headers: headers })
34
+ .then(function() {
35
+ setForm(emptyCustomer);
36
+ return load();
37
+ })
38
+ .then(function() {
39
+ props.setNotice('Customer saved successfully');
40
+ })
41
+ .catch(function(err) {
42
+ var msg = 'Could not save';
43
+ if (err.response && err.response.data) {
44
+ msg = err.response.data.message || err.response.data.error || msg;
45
+ }
46
+ props.setNotice(msg);
47
+ });
48
+ }
49
+
50
+ return (
51
+ <main className="page">
52
+ <div className="page-title"><h2>Customers</h2><p>Manage customer records.</p></div>
53
+ <section className="form-grid">
54
+ <input placeholder="Customer Number" value={form.customerNumber} onChange={function(e) { setForm({ customerNumber: e.target.value, firstName: form.firstName, lastName: form.lastName, telephone: form.telephone, address: form.address }); }} />
55
+ <input placeholder="First Name" value={form.firstName} onChange={function(e) { setForm({ customerNumber: form.customerNumber, firstName: e.target.value, lastName: form.lastName, telephone: form.telephone, address: form.address }); }} />
56
+ <input placeholder="Last Name" value={form.lastName} onChange={function(e) { setForm({ customerNumber: form.customerNumber, firstName: form.firstName, lastName: e.target.value, telephone: form.telephone, address: form.address }); }} />
57
+ <input placeholder="Telephone" value={form.telephone} onChange={function(e) { setForm({ customerNumber: form.customerNumber, firstName: form.firstName, lastName: form.lastName, telephone: e.target.value, address: form.address }); }} />
58
+ <input placeholder="Address" value={form.address} onChange={function(e) { setForm({ customerNumber: form.customerNumber, firstName: form.firstName, lastName: form.lastName, telephone: form.telephone, address: e.target.value }); }} />
59
+ <button onClick={submit}>Submit Data</button>
60
+ </section>
61
+ <div className="table-wrap">
62
+ <table>
63
+ <thead>
64
+ <tr>
65
+ <th>Number</th><th>First Name</th><th>Last Name</th><th>Telephone</th><th>Address</th>
66
+ </tr>
67
+ </thead>
68
+ <tbody>
69
+ {customers.length === 0 ? (
70
+ <tr><td colSpan="5" style={{ textAlign: 'center', color: '#94a3b8', padding: 20 }}>No customers found</td></tr>
71
+ ) : customers.map(function(c) {
72
+ return (
73
+ <tr key={c._id}>
74
+ <td>{c.customerNumber}</td><td>{c.firstName}</td><td>{c.lastName}</td><td>{c.telephone}</td><td>{c.address}</td>
75
+ </tr>
76
+ );
77
+ })}
78
+ </tbody>
79
+ </table>
80
+ </div>
81
+ </main>
82
+ );
83
+ }
84
+
85
+ export default Customers;
@@ -0,0 +1,75 @@
1
+ import React from 'react';
2
+ import { useState, useEffect } from 'react';
3
+ import { Link } from 'react-router-dom';
4
+ import axios from 'axios';
5
+
6
+ function Dashboard(props) {
7
+ var statsState = useState({ customers: 0, products: 0, sales: 0, revenue: 0 });
8
+ var stats = statsState[0];
9
+ var setStats = statsState[1];
10
+ var loadingState = useState(true);
11
+ var loading = loadingState[0];
12
+ var setLoading = loadingState[1];
13
+
14
+ var sessionData = JSON.parse(localStorage.getItem('srmsSession') || '{}');
15
+ var token = sessionData.token || '';
16
+ var headers = { Authorization: 'Bearer ' + token };
17
+
18
+ useEffect(function() {
19
+ axios.get(props.API + '/customers', { headers: headers })
20
+ .then(function(custRes) {
21
+ return Promise.all([
22
+ Promise.resolve(custRes),
23
+ axios.get(props.API + '/products', { headers: headers }),
24
+ axios.get(props.API + '/sales', { headers: headers })
25
+ ]);
26
+ })
27
+ .then(function(results) {
28
+ var sales = results[2].data;
29
+ var totalRevenue = 0;
30
+ for (var i = 0; i < sales.length; i++) {
31
+ totalRevenue += sales[i].totalAmountPaid || 0;
32
+ }
33
+ setStats({
34
+ customers: results[0].data.length,
35
+ products: results[1].data.length,
36
+ sales: sales.length,
37
+ revenue: totalRevenue
38
+ });
39
+ })
40
+ .catch(function(err) {
41
+ console.error('Dashboard fetch error:', err);
42
+ })
43
+ .then(function() {
44
+ setLoading(false);
45
+ });
46
+ }, []);
47
+
48
+ if (loading) {
49
+ return React.createElement('main', { className: 'page' },
50
+ React.createElement('p', null, 'Loading dashboard...')
51
+ );
52
+ }
53
+
54
+ return (
55
+ <main className="page">
56
+ <div className="page-title">
57
+ <h2>Dashboard</h2>
58
+ <p>Overview of the Sales Record Management System.</p>
59
+ </div>
60
+ <section className="cards-grid">
61
+ <article className="card"><span>Total Customers</span><strong>{stats.customers}</strong></article>
62
+ <article className="card"><span>Total Products</span><strong>{stats.products}</strong></article>
63
+ <article className="card"><span>Total Sales</span><strong>{stats.sales}</strong></article>
64
+ <article className="card"><span>Total Revenue</span><strong>{stats.revenue.toLocaleString()} FRW</strong></article>
65
+ </section>
66
+ <div style={{ marginTop: 16 }}>
67
+ <Link to="/customers"><button style={{ marginRight: 8 }}>Add Customer</button></Link>
68
+ <Link to="/products"><button style={{ marginRight: 8 }}>Add Product</button></Link>
69
+ <Link to="/sales"><button>New Sale</button></Link>
70
+ </div>
71
+ </main>
72
+ );
73
+ }
74
+
75
+ export default Dashboard;
@@ -0,0 +1,65 @@
1
+ import React from 'react';
2
+ import { useState } from 'react';
3
+ import { Link, useNavigate } from 'react-router-dom';
4
+ import axios from 'axios';
5
+
6
+ var API = 'http://localhost:5000/api';
7
+
8
+ function Login(props) {
9
+ var navigate = useNavigate();
10
+ var formState = useState({ username: '', password: '' });
11
+ var form = formState[0];
12
+ var setForm = formState[1];
13
+ var errorState = useState('');
14
+ var error = errorState[0];
15
+ var setError = errorState[1];
16
+
17
+ function submit(e) {
18
+ e.preventDefault();
19
+ setError('');
20
+ if (!form.username || !form.password) {
21
+ setError('All fields are required');
22
+ return;
23
+ }
24
+ axios.post(API + '/auth/login', form)
25
+ .then(function(res) {
26
+ props.onLogin(res.data);
27
+ navigate('/dashboard');
28
+ })
29
+ .catch(function(err) {
30
+ var msg = 'Login failed';
31
+ if (err.response && err.response.data && err.response.data.message) {
32
+ msg = err.response.data.message;
33
+ }
34
+ setError(msg);
35
+ });
36
+ }
37
+
38
+ return (
39
+ <main className="auth-page">
40
+ <section className="auth-card">
41
+ <h1>SRMS Login</h1>
42
+ <form onSubmit={submit} className="auth-form">
43
+ {error && <p className="form-error">{error}</p>}
44
+ <input
45
+ placeholder="Username"
46
+ value={form.username}
47
+ onChange={function(e) { setForm({ username: e.target.value, password: form.password }); }}
48
+ />
49
+ <input
50
+ type="password"
51
+ placeholder="Password"
52
+ value={form.password}
53
+ onChange={function(e) { setForm({ username: form.username, password: e.target.value }); }}
54
+ />
55
+ <button type="submit">Login</button>
56
+ <div className="auth-links">
57
+ <Link to="/register">Create Account</Link>
58
+ </div>
59
+ </form>
60
+ </section>
61
+ </main>
62
+ );
63
+ }
64
+
65
+ export default Login;