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,91 @@
1
+ import React from 'react';
2
+ import { useState, useEffect } from 'react';
3
+ import axios from 'axios';
4
+
5
+ var emptyProduct = { productCode: '', productName: '', quantitySold: '', unitPrice: '' };
6
+
7
+ function Products(props) {
8
+ var productsState = useState([]);
9
+ var products = productsState[0];
10
+ var setProducts = productsState[1];
11
+ var formState = useState(emptyProduct);
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 + '/products', { headers: headers })
20
+ .then(function(res) {
21
+ setProducts(res.data);
22
+ })
23
+ .catch(function() {});
24
+ }
25
+
26
+ useEffect(function() { load(); }, []);
27
+
28
+ function submit() {
29
+ if (!form.productCode || !form.productName || !form.quantitySold || !form.unitPrice) {
30
+ props.setNotice('All fields are required');
31
+ return;
32
+ }
33
+ axios.post(props.API + '/products', {
34
+ productCode: form.productCode,
35
+ productName: form.productName,
36
+ quantitySold: Number(form.quantitySold),
37
+ unitPrice: Number(form.unitPrice)
38
+ }, { headers: headers })
39
+ .then(function() {
40
+ setForm(emptyProduct);
41
+ return load();
42
+ })
43
+ .then(function() {
44
+ props.setNotice('Product saved successfully');
45
+ })
46
+ .catch(function(err) {
47
+ var msg = 'Could not save';
48
+ if (err.response && err.response.data) {
49
+ msg = err.response.data.message || err.response.data.error || msg;
50
+ }
51
+ props.setNotice(msg);
52
+ });
53
+ }
54
+
55
+ return (
56
+ <main className="page">
57
+ <div className="page-title"><h2>Products</h2><p>Manage product records.</p></div>
58
+ <section className="form-grid four">
59
+ <input placeholder="Product Code" value={form.productCode} onChange={function(e) { setForm({ productCode: e.target.value, productName: form.productName, quantitySold: form.quantitySold, unitPrice: form.unitPrice }); }} />
60
+ <input placeholder="Product Name" value={form.productName} onChange={function(e) { setForm({ productCode: form.productCode, productName: e.target.value, quantitySold: form.quantitySold, unitPrice: form.unitPrice }); }} />
61
+ <input type="number" placeholder="Quantity Sold" value={form.quantitySold} onChange={function(e) { setForm({ productCode: form.productCode, productName: form.productName, quantitySold: e.target.value, unitPrice: form.unitPrice }); }} />
62
+ <input type="number" placeholder="Unit Price" value={form.unitPrice} onChange={function(e) { setForm({ productCode: form.productCode, productName: form.productName, quantitySold: form.quantitySold, unitPrice: e.target.value }); }} />
63
+ <button onClick={submit}>Submit Data</button>
64
+ </section>
65
+ <div className="table-wrap">
66
+ <table>
67
+ <thead>
68
+ <tr>
69
+ <th>Code</th><th>Name</th><th>Quantity Sold</th><th>Unit Price</th><th>Total</th>
70
+ </tr>
71
+ </thead>
72
+ <tbody>
73
+ {products.length === 0 ? (
74
+ <tr><td colSpan="5" style={{ textAlign: 'center', color: '#94a3b8', padding: 20 }}>No products found</td></tr>
75
+ ) : products.map(function(p) {
76
+ return (
77
+ <tr key={p._id}>
78
+ <td>{p.productCode}</td><td>{p.productName}</td>
79
+ <td>{p.quantitySold}</td><td>{p.unitPrice.toLocaleString()} FRW</td>
80
+ <td>{(p.quantitySold * p.unitPrice).toLocaleString()} FRW</td>
81
+ </tr>
82
+ );
83
+ })}
84
+ </tbody>
85
+ </table>
86
+ </div>
87
+ </main>
88
+ );
89
+ }
90
+
91
+ export default Products;
@@ -0,0 +1,82 @@
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 Register(props) {
9
+ var navigate = useNavigate();
10
+ var formState = useState({ username: '', password: '', confirmPassword: '' });
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
+ if (form.password !== form.confirmPassword) {
25
+ setError('Passwords do not match');
26
+ return;
27
+ }
28
+ if (form.password.length < 4) {
29
+ setError('Password must be at least 4 characters');
30
+ return;
31
+ }
32
+ axios.post(API + '/auth/register', {
33
+ username: form.username,
34
+ password: form.password
35
+ })
36
+ .then(function(res) {
37
+ props.onLogin(res.data);
38
+ navigate('/dashboard');
39
+ })
40
+ .catch(function(err) {
41
+ var msg = 'Registration failed';
42
+ if (err.response && err.response.data && err.response.data.message) {
43
+ msg = err.response.data.message;
44
+ }
45
+ setError(msg);
46
+ });
47
+ }
48
+
49
+ return (
50
+ <main className="auth-page">
51
+ <section className="auth-card">
52
+ <h1>Create Account</h1>
53
+ <form onSubmit={submit} className="auth-form">
54
+ {error && <p className="form-error">{error}</p>}
55
+ <input
56
+ placeholder="Username"
57
+ value={form.username}
58
+ onChange={function(e) { setForm({ username: e.target.value, password: form.password, confirmPassword: form.confirmPassword }); }}
59
+ />
60
+ <input
61
+ type="password"
62
+ placeholder="Password"
63
+ value={form.password}
64
+ onChange={function(e) { setForm({ username: form.username, password: e.target.value, confirmPassword: form.confirmPassword }); }}
65
+ />
66
+ <input
67
+ type="password"
68
+ placeholder="Confirm Password"
69
+ value={form.confirmPassword}
70
+ onChange={function(e) { setForm({ username: form.username, password: form.password, confirmPassword: e.target.value }); }}
71
+ />
72
+ <button type="submit">Register</button>
73
+ <div className="auth-links">
74
+ <Link to="/login">Back to Login</Link>
75
+ </div>
76
+ </form>
77
+ </section>
78
+ </main>
79
+ );
80
+ }
81
+
82
+ export default Register;
@@ -0,0 +1,138 @@
1
+ import React from 'react';
2
+ import { useState } from 'react';
3
+ import axios from 'axios';
4
+
5
+ function Reports(props) {
6
+ var typeState = useState('daily');
7
+ var reportType = typeState[0];
8
+ var setReportType = typeState[1];
9
+ var dataState = useState(null);
10
+ var reportData = dataState[0];
11
+ var setReportData = dataState[1];
12
+ var loadingState = useState(false);
13
+ var loading = loadingState[0];
14
+ var setLoading = loadingState[1];
15
+
16
+ var now = new Date();
17
+ var dateStr = now.getFullYear() + '-' + (now.getMonth() + 1 < 10 ? '0' + (now.getMonth() + 1) : now.getMonth() + 1) + '-' + (now.getDate() < 10 ? '0' + now.getDate() : now.getDate());
18
+ var monthStr = now.getFullYear() + '-' + (now.getMonth() + 1 < 10 ? '0' + (now.getMonth() + 1) : now.getMonth() + 1);
19
+
20
+ var dateInputState = useState(dateStr);
21
+ var dateInput = dateInputState[0];
22
+ var setDateInput = dateInputState[1];
23
+ var monthInputState = useState(monthStr);
24
+ var monthInput = monthInputState[0];
25
+ var setMonthInput = monthInputState[1];
26
+
27
+ var token = props.session ? props.session.token : '';
28
+ var headers = { Authorization: 'Bearer ' + token };
29
+
30
+ function fetchReport() {
31
+ setLoading(true);
32
+ setReportData(null);
33
+
34
+ var url;
35
+ var params;
36
+ if (reportType === 'daily') {
37
+ url = props.API + '/reports/daily';
38
+ params = { date: dateInput };
39
+ } else if (reportType === 'weekly') {
40
+ url = props.API + '/reports/weekly';
41
+ params = { date: dateInput };
42
+ } else {
43
+ url = props.API + '/reports/monthly';
44
+ var parts = monthInput.split('-');
45
+ params = { year: parts[0], month: parts[1] };
46
+ }
47
+
48
+ axios.get(url, { headers: headers, params: params })
49
+ .then(function(res) {
50
+ setReportData(res.data);
51
+ })
52
+ .catch(function(err) {
53
+ console.error('Report error:', err);
54
+ })
55
+ .then(function() {
56
+ setLoading(false);
57
+ });
58
+ }
59
+
60
+ function dateText(d) {
61
+ return d ? new Date(d).toLocaleDateString() : '-';
62
+ }
63
+
64
+ var types = [
65
+ { key: 'daily', label: 'Daily' },
66
+ { key: 'weekly', label: 'Weekly' },
67
+ { key: 'monthly', label: 'Monthly' },
68
+ ];
69
+
70
+ return (
71
+ <main className="page">
72
+ <div className="page-title"><h2>Reports</h2><p>Generate sales reports.</p></div>
73
+
74
+ <section className="report-filters">
75
+ {types.map(function(t) {
76
+ return React.createElement('button', {
77
+ key: t.key,
78
+ onClick: function() { setReportType(t.key); },
79
+ style: {
80
+ background: reportType === t.key ? '#1E3A8A' : '#e2e8f0',
81
+ color: reportType === t.key ? 'white' : '#475569'
82
+ }
83
+ }, t.label);
84
+ })}
85
+ {(reportType === 'daily' || reportType === 'weekly') ? React.createElement('input', { type: 'date', value: dateInput, onChange: function(e) { setDateInput(e.target.value); } }) : null}
86
+ {reportType === 'monthly' ? React.createElement('input', { type: 'month', value: monthInput, onChange: function(e) { setMonthInput(e.target.value); } }) : null}
87
+ <button onClick={fetchReport} disabled={loading}>{loading ? 'Generating...' : 'Generate Report'}</button>
88
+ {reportData ? React.createElement('button', { className: 'no-print', onClick: function() { window.print(); } }, '🖨️ Print') : null}
89
+ </section>
90
+
91
+ {reportData ? (
92
+ <div>
93
+ <section className="report-summary">
94
+ <div className="report-stat">
95
+ <span>Total Transactions</span>
96
+ <strong>{reportData.totalTransactions}</strong>
97
+ </div>
98
+ <div className="report-stat">
99
+ <span>Total Revenue</span>
100
+ <strong>{reportData.totalRevenue.toLocaleString()} FRW</strong>
101
+ </div>
102
+ <div className="report-stat">
103
+ <span>Average per Sale</span>
104
+ <strong>{reportData.totalTransactions > 0 ? (reportData.totalRevenue / reportData.totalTransactions).toLocaleString() : '0'} FRW</strong>
105
+ </div>
106
+ </section>
107
+
108
+ <div className="table-wrap">
109
+ <table>
110
+ <thead>
111
+ <tr>
112
+ <th>Invoice</th><th>Date</th><th>Customer</th><th>Payment</th><th>Amount</th>
113
+ </tr>
114
+ </thead>
115
+ <tbody>
116
+ {reportData.sales.length === 0 ? (
117
+ <tr><td colSpan="5" style={{ textAlign: 'center', color: '#94a3b8', padding: 20 }}>No sales found</td></tr>
118
+ ) : reportData.sales.map(function(s) {
119
+ return (
120
+ <tr key={s._id}>
121
+ <td>{s.invoiceNumber}</td>
122
+ <td>{dateText(s.salesDate)}</td>
123
+ <td>{s.customer ? s.customer.firstName + ' ' + s.customer.lastName : 'N/A'}</td>
124
+ <td>{s.paymentMethod}</td>
125
+ <td>{s.totalAmountPaid.toLocaleString()} FRW</td>
126
+ </tr>
127
+ );
128
+ })}
129
+ </tbody>
130
+ </table>
131
+ </div>
132
+ </div>
133
+ ) : null}
134
+ </main>
135
+ );
136
+ }
137
+
138
+ export default Reports;
@@ -0,0 +1,154 @@
1
+ import React from 'react';
2
+ import { useState, useEffect } from 'react';
3
+ import axios from 'axios';
4
+
5
+ var emptySale = { invoiceNumber: '', salesDate: '', paymentMethod: 'Cash', totalAmountPaid: '', customer: '' };
6
+
7
+ function Sales(props) {
8
+ var salesState = useState([]);
9
+ var sales = salesState[0];
10
+ var setSales = salesState[1];
11
+ var customersState = useState([]);
12
+ var customers = customersState[0];
13
+ var setCustomers = customersState[1];
14
+ var formState = useState(emptySale);
15
+ var form = formState[0];
16
+ var setForm = formState[1];
17
+ var editIdState = useState('');
18
+ var editId = editIdState[0];
19
+ var setEditId = editIdState[1];
20
+
21
+ var token = props.session ? props.session.token : '';
22
+ var headers = { Authorization: 'Bearer ' + token };
23
+
24
+ function load() {
25
+ Promise.all([
26
+ axios.get(props.API + '/sales', { headers: headers }),
27
+ axios.get(props.API + '/customers', { headers: headers })
28
+ ])
29
+ .then(function(results) {
30
+ setSales(results[0].data);
31
+ setCustomers(results[1].data);
32
+ })
33
+ .catch(function() {});
34
+ }
35
+
36
+ useEffect(function() { load(); }, []);
37
+
38
+ function submit() {
39
+ if (!form.invoiceNumber || !form.salesDate || !form.paymentMethod || !form.totalAmountPaid || !form.customer) {
40
+ props.setNotice('All fields are required');
41
+ return;
42
+ }
43
+ var payload = {
44
+ invoiceNumber: form.invoiceNumber,
45
+ salesDate: form.salesDate,
46
+ paymentMethod: form.paymentMethod,
47
+ totalAmountPaid: Number(form.totalAmountPaid),
48
+ customer: form.customer
49
+ };
50
+
51
+ var request;
52
+ if (editId) {
53
+ request = axios.put(props.API + '/sales/' + editId, payload, { headers: headers });
54
+ } else {
55
+ request = axios.post(props.API + '/sales', payload, { headers: headers });
56
+ }
57
+
58
+ request
59
+ .then(function() {
60
+ setForm(emptySale);
61
+ setEditId('');
62
+ props.setNotice(editId ? 'Sale updated successfully' : 'Sale created successfully');
63
+ return load();
64
+ })
65
+ .catch(function(err) {
66
+ var msg = 'Operation failed';
67
+ if (err.response && err.response.data) {
68
+ msg = err.response.data.message || err.response.data.error || msg;
69
+ }
70
+ props.setNotice(msg);
71
+ });
72
+ }
73
+
74
+ function edit(sale) {
75
+ setEditId(sale._id);
76
+ setForm({
77
+ invoiceNumber: sale.invoiceNumber,
78
+ salesDate: sale.salesDate ? sale.salesDate.slice(0, 10) : '',
79
+ paymentMethod: sale.paymentMethod,
80
+ totalAmountPaid: String(sale.totalAmountPaid),
81
+ customer: sale.customer ? sale.customer._id : ''
82
+ });
83
+ }
84
+
85
+ function remove(id) {
86
+ if (!confirm('Delete this sale?')) return;
87
+ axios.delete(props.API + '/sales/' + id, { headers: headers })
88
+ .then(function() {
89
+ return load();
90
+ })
91
+ .then(function() {
92
+ props.setNotice('Sale deleted successfully');
93
+ })
94
+ .catch(function(err) {
95
+ props.setNotice(err.response && err.response.data ? err.response.data.message : 'Could not delete');
96
+ });
97
+ }
98
+
99
+ function dateText(d) {
100
+ return d ? new Date(d).toLocaleDateString() : '-';
101
+ }
102
+
103
+ return (
104
+ <main className="page">
105
+ <div className="page-title"><h2>Sales</h2><p>{editId ? 'Edit' : 'Add'} sale record.</p></div>
106
+ <section className="form-grid four">
107
+ <input placeholder="Invoice Number" value={form.invoiceNumber} onChange={function(e) { setForm({ invoiceNumber: e.target.value, salesDate: form.salesDate, paymentMethod: form.paymentMethod, totalAmountPaid: form.totalAmountPaid, customer: form.customer }); }} />
108
+ <input type="date" value={form.salesDate} onChange={function(e) { setForm({ invoiceNumber: form.invoiceNumber, salesDate: e.target.value, paymentMethod: form.paymentMethod, totalAmountPaid: form.totalAmountPaid, customer: form.customer }); }} />
109
+ <select value={form.paymentMethod} onChange={function(e) { setForm({ invoiceNumber: form.invoiceNumber, salesDate: form.salesDate, paymentMethod: e.target.value, totalAmountPaid: form.totalAmountPaid, customer: form.customer }); }}>
110
+ <option>Cash</option><option>Credit Card</option><option>Mobile Money</option><option>Bank Transfer</option>
111
+ </select>
112
+ <input type="number" placeholder="Total Amount" value={form.totalAmountPaid} onChange={function(e) { setForm({ invoiceNumber: form.invoiceNumber, salesDate: form.salesDate, paymentMethod: form.paymentMethod, totalAmountPaid: e.target.value, customer: form.customer }); }} />
113
+ <select value={form.customer} onChange={function(e) { setForm({ invoiceNumber: form.invoiceNumber, salesDate: form.salesDate, paymentMethod: form.paymentMethod, totalAmountPaid: form.totalAmountPaid, customer: e.target.value }); }}>
114
+ <option value="">Select Customer</option>
115
+ {customers.map(function(c) { return React.createElement('option', { key: c._id, value: c._id }, c.firstName + ' ' + c.lastName + ' (' + c.customerNumber + ')'); })}
116
+ </select>
117
+ <button onClick={submit}>{editId ? 'Update' : 'Submit Data'}</button>
118
+ {editId ? React.createElement('button', { className: 'danger', onClick: function() { setForm(emptySale); setEditId(''); } }, 'Cancel') : null}
119
+ </section>
120
+ <div className="table-wrap">
121
+ <table>
122
+ <thead>
123
+ <tr>
124
+ <th>Invoice</th><th>Date</th><th>Customer</th><th>Payment</th><th>Amount</th><th>Actions</th>
125
+ </tr>
126
+ </thead>
127
+ <tbody>
128
+ {sales.length === 0 ? (
129
+ <tr><td colSpan="6" style={{ textAlign: 'center', color: '#94a3b8', padding: 20 }}>No sales found</td></tr>
130
+ ) : sales.map(function(s) {
131
+ return (
132
+ <tr key={s._id}>
133
+ <td>{s.invoiceNumber}</td>
134
+ <td>{dateText(s.salesDate)}</td>
135
+ <td>{s.customer ? s.customer.firstName + ' ' + s.customer.lastName : 'N/A'}</td>
136
+ <td>{s.paymentMethod}</td>
137
+ <td>{s.totalAmountPaid.toLocaleString()} FRW</td>
138
+ <td>
139
+ <div className="actions">
140
+ <button onClick={function() { edit(s); }}>Edit</button>
141
+ <button className="danger" onClick={function() { remove(s._id); }}>Delete</button>
142
+ </div>
143
+ </td>
144
+ </tr>
145
+ );
146
+ })}
147
+ </tbody>
148
+ </table>
149
+ </div>
150
+ </main>
151
+ );
152
+ }
153
+
154
+ export default Sales;
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from 'vite'
2
+ import react from '@vitejs/plugin-react'
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: {
7
+ port: 5173,
8
+ },
9
+ })