@tomei/rental 0.17.4 → 0.17.5

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 (295) hide show
  1. package/.commitlintrc.json +23 -23
  2. package/.gitlab-ci.yml +16 -16
  3. package/.husky/commit-msg +9 -9
  4. package/.husky/pre-commit +7 -7
  5. package/.prettierrc +4 -4
  6. package/Jenkinsfile +51 -51
  7. package/README.md +8 -8
  8. package/dist/ClassMappings/ItemClassMap.d.ts +4 -0
  9. package/dist/ClassMappings/ItemClassMap.js +8 -0
  10. package/dist/ClassMappings/ItemClassMap.js.map +1 -0
  11. package/dist/ClassMappings/index.d.ts +2 -0
  12. package/dist/ClassMappings/index.js +6 -0
  13. package/dist/ClassMappings/index.js.map +1 -0
  14. package/dist/components/agreement/agreement.d.ts +27 -0
  15. package/dist/components/agreement/agreement.js +120 -0
  16. package/dist/components/agreement/agreement.js.map +1 -0
  17. package/dist/components/agreement/agreement.repository.d.ts +8 -0
  18. package/dist/components/agreement/agreement.repository.js +52 -0
  19. package/dist/components/agreement/agreement.repository.js.map +1 -0
  20. package/dist/components/agreement-history/agreement-history.d.ts +17 -0
  21. package/dist/components/agreement-history/agreement-history.js +40 -0
  22. package/dist/components/agreement-history/agreement-history.js.map +1 -0
  23. package/dist/components/agreement-history/agreement-history.repository.d.ts +8 -0
  24. package/dist/components/agreement-history/agreement-history.repository.js +52 -0
  25. package/dist/components/agreement-history/agreement-history.repository.js.map +1 -0
  26. package/dist/components/agreement-signature/agreement-signature.d.ts +27 -0
  27. package/dist/components/agreement-signature/agreement-signature.js +99 -0
  28. package/dist/components/agreement-signature/agreement-signature.js.map +1 -0
  29. package/dist/components/agreement-signature/agreement-signature.repository.d.ts +8 -0
  30. package/dist/components/agreement-signature/agreement-signature.repository.js +53 -0
  31. package/dist/components/agreement-signature/agreement-signature.repository.js.map +1 -0
  32. package/dist/components/booking/booking.d.ts +46 -0
  33. package/dist/components/booking/booking.js +289 -0
  34. package/dist/components/booking/booking.js.map +1 -0
  35. package/dist/components/booking/booking.repository.d.ts +8 -0
  36. package/dist/components/booking/booking.repository.js +52 -0
  37. package/dist/components/booking/booking.repository.js.map +1 -0
  38. package/dist/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.d.ts +32 -0
  39. package/dist/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.js +106 -0
  40. package/dist/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.js.map +1 -0
  41. package/dist/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.repository.d.ts +9 -0
  42. package/dist/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.repository.js +62 -0
  43. package/dist/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.repository.js.map +1 -0
  44. package/dist/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.d.ts +22 -0
  45. package/dist/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.js +89 -0
  46. package/dist/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.js.map +1 -0
  47. package/dist/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.repository.d.ts +9 -0
  48. package/dist/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.repository.js +63 -0
  49. package/dist/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.repository.js.map +1 -0
  50. package/dist/components/hirer-change-request-signature/hirer-change-request-signature.d.ts +30 -0
  51. package/dist/components/hirer-change-request-signature/hirer-change-request-signature.js +208 -0
  52. package/dist/components/hirer-change-request-signature/hirer-change-request-signature.js.map +1 -0
  53. package/dist/components/hirer-change-request-signature/hirer-change-request-signature.repository.d.ts +9 -0
  54. package/dist/components/hirer-change-request-signature/hirer-change-request-signature.repository.js +63 -0
  55. package/dist/components/hirer-change-request-signature/hirer-change-request-signature.repository.js.map +1 -0
  56. package/dist/components/joint-hirer/joint-hirer.d.ts +26 -0
  57. package/dist/components/joint-hirer/joint-hirer.js +137 -0
  58. package/dist/components/joint-hirer/joint-hirer.js.map +1 -0
  59. package/dist/components/joint-hirer/joint-hirer.repository.d.ts +8 -0
  60. package/dist/components/joint-hirer/joint-hirer.repository.js +52 -0
  61. package/dist/components/joint-hirer/joint-hirer.repository.js.map +1 -0
  62. package/dist/components/rental/rental.d.ts +72 -0
  63. package/dist/components/rental/rental.js +844 -0
  64. package/dist/components/rental/rental.js.map +1 -0
  65. package/dist/components/rental/rental.repository.d.ts +8 -0
  66. package/dist/components/rental/rental.repository.js +52 -0
  67. package/dist/components/rental/rental.repository.js.map +1 -0
  68. package/dist/components/rental-hirer-change-request/rental-hirer-change-request.d.ts +71 -0
  69. package/dist/components/rental-hirer-change-request/rental-hirer-change-request.js +531 -0
  70. package/dist/components/rental-hirer-change-request/rental-hirer-change-request.js.map +1 -0
  71. package/dist/components/rental-hirer-change-request/rental-hirer-change-request.repository.d.ts +9 -0
  72. package/dist/components/rental-hirer-change-request/rental-hirer-change-request.repository.js +62 -0
  73. package/dist/components/rental-hirer-change-request/rental-hirer-change-request.repository.js.map +1 -0
  74. package/dist/components/rental-price/rental-price.d.ts +18 -0
  75. package/dist/components/rental-price/rental-price.js +66 -0
  76. package/dist/components/rental-price/rental-price.js.map +1 -0
  77. package/dist/components/rental-price/rental-price.repository.d.ts +8 -0
  78. package/dist/components/rental-price/rental-price.repository.js +52 -0
  79. package/dist/components/rental-price/rental-price.repository.js.map +1 -0
  80. package/dist/database.d.ts +4 -0
  81. package/dist/database.js +37 -0
  82. package/dist/database.js.map +1 -0
  83. package/dist/enum/account-type.enum.d.ts +4 -0
  84. package/dist/enum/account-type.enum.js +9 -0
  85. package/dist/enum/account-type.enum.js.map +1 -0
  86. package/dist/enum/aggrement-status.enum.d.ts +5 -0
  87. package/dist/enum/aggrement-status.enum.js +10 -0
  88. package/dist/enum/aggrement-status.enum.js.map +1 -0
  89. package/dist/enum/agreement-signature-status.enum.d.ts +4 -0
  90. package/dist/enum/agreement-signature-status.enum.js +9 -0
  91. package/dist/enum/agreement-signature-status.enum.js.map +1 -0
  92. package/dist/enum/agreement-signature-verification-method.enum.d.ts +4 -0
  93. package/dist/enum/agreement-signature-verification-method.enum.js +9 -0
  94. package/dist/enum/agreement-signature-verification-method.enum.js.map +1 -0
  95. package/dist/enum/booking.enum.d.ts +5 -0
  96. package/dist/enum/booking.enum.js +10 -0
  97. package/dist/enum/booking.enum.js.map +1 -0
  98. package/dist/enum/hirer-type.enum.d.ts +4 -0
  99. package/dist/enum/hirer-type.enum.js +9 -0
  100. package/dist/enum/hirer-type.enum.js.map +1 -0
  101. package/dist/enum/index.d.ts +11 -0
  102. package/dist/enum/index.js +24 -0
  103. package/dist/enum/index.js.map +1 -0
  104. package/dist/enum/rental-hirer-change-request-hirer-role.d.ts +4 -0
  105. package/dist/enum/rental-hirer-change-request-hirer-role.js +9 -0
  106. package/dist/enum/rental-hirer-change-request-hirer-role.js.map +1 -0
  107. package/dist/enum/rental-hirer-change-request-status.d.ts +7 -0
  108. package/dist/enum/rental-hirer-change-request-status.js +12 -0
  109. package/dist/enum/rental-hirer-change-request-status.js.map +1 -0
  110. package/dist/enum/rental-hirer-change-request-type.d.ts +4 -0
  111. package/dist/enum/rental-hirer-change-request-type.js +9 -0
  112. package/dist/enum/rental-hirer-change-request-type.js.map +1 -0
  113. package/dist/enum/rental-status.enum.d.ts +9 -0
  114. package/dist/enum/rental-status.enum.js +14 -0
  115. package/dist/enum/rental-status.enum.js.map +1 -0
  116. package/dist/interfaces/agreemeent-signature-attr.interface.d.ts +14 -0
  117. package/dist/interfaces/agreemeent-signature-attr.interface.js +3 -0
  118. package/dist/interfaces/agreemeent-signature-attr.interface.js.map +1 -0
  119. package/dist/interfaces/agreement-attr.interface.d.ts +7 -0
  120. package/dist/interfaces/agreement-attr.interface.js +3 -0
  121. package/dist/interfaces/agreement-attr.interface.js.map +1 -0
  122. package/dist/interfaces/agreement-history-attr.interface.d.ts +7 -0
  123. package/dist/interfaces/agreement-history-attr.interface.js +3 -0
  124. package/dist/interfaces/agreement-history-attr.interface.js.map +1 -0
  125. package/dist/interfaces/booking-attr.interface.d.ts +18 -0
  126. package/dist/interfaces/booking-attr.interface.js +3 -0
  127. package/dist/interfaces/booking-attr.interface.js.map +1 -0
  128. package/dist/interfaces/booking-find-all-search-attr.interface.d.ts +12 -0
  129. package/dist/interfaces/booking-find-all-search-attr.interface.js +3 -0
  130. package/dist/interfaces/booking-find-all-search-attr.interface.js.map +1 -0
  131. package/dist/interfaces/hirer-change-request-new-hirer-attr.interface.d.ts +15 -0
  132. package/dist/interfaces/hirer-change-request-new-hirer-attr.interface.js +3 -0
  133. package/dist/interfaces/hirer-change-request-new-hirer-attr.interface.js.map +1 -0
  134. package/dist/interfaces/hirer-change-request-remove-hirer-attr.interface.d.ts +5 -0
  135. package/dist/interfaces/hirer-change-request-remove-hirer-attr.interface.js +3 -0
  136. package/dist/interfaces/hirer-change-request-remove-hirer-attr.interface.js.map +1 -0
  137. package/dist/interfaces/hirer-change-request-signature-attr.interface.d.ts +14 -0
  138. package/dist/interfaces/hirer-change-request-signature-attr.interface.js +3 -0
  139. package/dist/interfaces/hirer-change-request-signature-attr.interface.js.map +1 -0
  140. package/dist/interfaces/index.d.ts +14 -0
  141. package/dist/interfaces/index.js +3 -0
  142. package/dist/interfaces/index.js.map +1 -0
  143. package/dist/interfaces/joint-hirer-attr.interface.d.ts +11 -0
  144. package/dist/interfaces/joint-hirer-attr.interface.js +3 -0
  145. package/dist/interfaces/joint-hirer-attr.interface.js.map +1 -0
  146. package/dist/interfaces/rental-attr.interface.d.ts +24 -0
  147. package/dist/interfaces/rental-attr.interface.js +3 -0
  148. package/dist/interfaces/rental-attr.interface.js.map +1 -0
  149. package/dist/interfaces/rental-find-all-search-attr.interface.d.ts +10 -0
  150. package/dist/interfaces/rental-find-all-search-attr.interface.js +3 -0
  151. package/dist/interfaces/rental-find-all-search-attr.interface.js.map +1 -0
  152. package/dist/interfaces/rental-hirer-change-request.attr.interface.d.ts +16 -0
  153. package/dist/interfaces/rental-hirer-change-request.attr.interface.js +3 -0
  154. package/dist/interfaces/rental-hirer-change-request.attr.interface.js.map +1 -0
  155. package/dist/interfaces/rental-hirer-change-request.update.interface.d.ts +4 -0
  156. package/dist/interfaces/rental-hirer-change-request.update.interface.js +3 -0
  157. package/dist/interfaces/rental-hirer-change-request.update.interface.js.map +1 -0
  158. package/dist/interfaces/rental-price-attr.interface.d.ts +7 -0
  159. package/dist/interfaces/rental-price-attr.interface.js +3 -0
  160. package/dist/interfaces/rental-price-attr.interface.js.map +1 -0
  161. package/dist/interfaces/response-hirer-signature-attr.interface.d.ts +14 -0
  162. package/dist/interfaces/response-hirer-signature-attr.interface.js +3 -0
  163. package/dist/interfaces/response-hirer-signature-attr.interface.js.map +1 -0
  164. package/dist/models/agreement-history.entity.d.ts +10 -0
  165. package/dist/models/agreement-history.entity.js +65 -0
  166. package/dist/models/agreement-history.entity.js.map +1 -0
  167. package/dist/models/agreement-signature.entity.d.ts +22 -0
  168. package/dist/models/agreement-signature.entity.js +123 -0
  169. package/dist/models/agreement-signature.entity.js.map +1 -0
  170. package/dist/models/agreement.entity.d.ts +14 -0
  171. package/dist/models/agreement.entity.js +70 -0
  172. package/dist/models/agreement.entity.js.map +1 -0
  173. package/dist/models/booking.entity.d.ts +21 -0
  174. package/dist/models/booking.entity.js +128 -0
  175. package/dist/models/booking.entity.js.map +1 -0
  176. package/dist/models/hirer-change-request-new-hirer.entity.d.ts +19 -0
  177. package/dist/models/hirer-change-request-new-hirer.entity.js +121 -0
  178. package/dist/models/hirer-change-request-new-hirer.entity.js.map +1 -0
  179. package/dist/models/hirer-change-request-remove-hirer.entity.d.ts +11 -0
  180. package/dist/models/hirer-change-request-remove-hirer.entity.js +57 -0
  181. package/dist/models/hirer-change-request-remove-hirer.entity.js.map +1 -0
  182. package/dist/models/hirer-change-request-signature.entity.d.ts +18 -0
  183. package/dist/models/hirer-change-request-signature.entity.js +101 -0
  184. package/dist/models/hirer-change-request-signature.entity.js.map +1 -0
  185. package/dist/models/index.d.ts +12 -0
  186. package/dist/models/index.js +26 -0
  187. package/dist/models/index.js.map +1 -0
  188. package/dist/models/joint-hirer.entity.d.ts +14 -0
  189. package/dist/models/joint-hirer.entity.js +91 -0
  190. package/dist/models/joint-hirer.entity.js.map +1 -0
  191. package/dist/models/rental-hirer-change-request.entity.d.ts +22 -0
  192. package/dist/models/rental-hirer-change-request.entity.js +108 -0
  193. package/dist/models/rental-hirer-change-request.entity.js.map +1 -0
  194. package/dist/models/rental-price.entity.d.ts +8 -0
  195. package/dist/models/rental-price.entity.js +59 -0
  196. package/dist/models/rental-price.entity.js.map +1 -0
  197. package/dist/models/rental.entity.d.ts +29 -0
  198. package/dist/models/rental.entity.js +160 -0
  199. package/dist/models/rental.entity.js.map +1 -0
  200. package/dist/src/components/agreement/agreement.js +9 -9
  201. package/dist/src/components/rental/rental.d.ts +2 -1
  202. package/dist/src/components/rental/rental.js +19 -16
  203. package/dist/src/components/rental/rental.js.map +1 -1
  204. package/dist/src/enum/agreement-signature-verification-method.enum.d.ts +4 -0
  205. package/dist/src/enum/agreement-signature-verification-method.enum.js +9 -0
  206. package/dist/src/enum/agreement-signature-verification-method.enum.js.map +1 -0
  207. package/dist/src/enum/index.d.ts +2 -1
  208. package/dist/src/enum/index.js +3 -1
  209. package/dist/src/enum/index.js.map +1 -1
  210. package/dist/src/models/agreement-signature.entity.d.ts +4 -0
  211. package/dist/src/models/agreement-signature.entity.js +22 -0
  212. package/dist/src/models/agreement-signature.entity.js.map +1 -1
  213. package/dist/tsconfig.build.tsbuildinfo +1 -0
  214. package/dist/tsconfig.tsbuildinfo +1 -1
  215. package/eslint.config.mjs +58 -58
  216. package/jest.config.js +10 -10
  217. package/migrations/20250529092130-add-status-to-joint-hirer.js +19 -19
  218. package/migrations/agreement-signature-table-migration.js +76 -64
  219. package/migrations/booking-table-migration.js +79 -79
  220. package/migrations/hirer-change-request-new-hirer-migration.js +72 -72
  221. package/migrations/hirer-change-request-remove-hirer-migration.js +39 -39
  222. package/migrations/hirer-change-request-signature-migration.js +65 -65
  223. package/migrations/joint-hirer-table-migration.js +52 -52
  224. package/migrations/rental-aggreement-history-migration.js +41 -41
  225. package/migrations/rental-aggrement-table-migration.js +30 -30
  226. package/migrations/rental-hirer-change-request-migrations.js +64 -64
  227. package/migrations/rental-price-table-migration.js +32 -32
  228. package/migrations/rental-table-migrations.js +96 -96
  229. package/package.json +80 -80
  230. package/sonar-project.properties +12 -12
  231. package/src/ClassMappings/ItemClassMap.ts +7 -7
  232. package/src/ClassMappings/index.ts +3 -3
  233. package/src/components/agreement/agreement.repository.ts +54 -54
  234. package/src/components/agreement/agreement.ts +187 -187
  235. package/src/components/agreement-history/agreement-history.repository.ts +54 -54
  236. package/src/components/agreement-history/agreement-history.ts +57 -57
  237. package/src/components/agreement-signature/agreement-signature.repository.ts +55 -55
  238. package/src/components/agreement-signature/agreement-signature.ts +143 -143
  239. package/src/components/booking/booking.repository.ts +51 -51
  240. package/src/components/booking/booking.ts +492 -492
  241. package/src/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.repository.ts +64 -64
  242. package/src/components/hirer-change-request-new-hirer/hirer-change-request-new-hirer.ts +153 -153
  243. package/src/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.repository.ts +65 -65
  244. package/src/components/hirer-change-request-remove-hirer/hirer-change-request-remove-hirer.ts +134 -134
  245. package/src/components/hirer-change-request-signature/hirer-change-request-signature.repository.ts +65 -65
  246. package/src/components/hirer-change-request-signature/hirer-change-request-signature.ts +272 -272
  247. package/src/components/joint-hirer/joint-hirer.repository.ts +54 -54
  248. package/src/components/joint-hirer/joint-hirer.ts +252 -252
  249. package/src/components/rental/rental.repository.ts +51 -51
  250. package/src/components/rental/rental.ts +1466 -1460
  251. package/src/components/rental-hirer-change-request/rental-hirer-change-request.repository.ts +64 -64
  252. package/src/components/rental-hirer-change-request/rental-hirer-change-request.ts +907 -907
  253. package/src/components/rental-price/rental-price.repository.ts +54 -54
  254. package/src/components/rental-price/rental-price.ts +100 -100
  255. package/src/database.ts +39 -39
  256. package/src/enum/account-type.enum.ts +4 -4
  257. package/src/enum/agreement-signature-status.enum.ts +4 -4
  258. package/src/enum/agreement-signature-verification-method.enum.ts +4 -0
  259. package/src/enum/booking.enum.ts +5 -5
  260. package/src/enum/hirer-type.enum.ts +4 -4
  261. package/src/enum/index.ts +23 -21
  262. package/src/enum/rental-hirer-change-request-hirer-role.ts +4 -4
  263. package/src/enum/rental-hirer-change-request-status.ts +7 -7
  264. package/src/enum/rental-hirer-change-request-type.ts +4 -4
  265. package/src/enum/rental-status.enum.ts +39 -39
  266. package/src/index.ts +54 -54
  267. package/src/interfaces/agreemeent-signature-attr.interface.ts +15 -15
  268. package/src/interfaces/agreement-attr.interface.ts +7 -7
  269. package/src/interfaces/agreement-history-attr.interface.ts +7 -7
  270. package/src/interfaces/booking-attr.interface.ts +19 -19
  271. package/src/interfaces/booking-find-all-search-attr.interface.ts +12 -12
  272. package/src/interfaces/hirer-change-request-new-hirer-attr.interface.ts +15 -15
  273. package/src/interfaces/hirer-change-request-remove-hirer-attr.interface.ts +5 -5
  274. package/src/interfaces/hirer-change-request-signature-attr.interface.ts +15 -15
  275. package/src/interfaces/index.ts +29 -29
  276. package/src/interfaces/joint-hirer-attr.interface.ts +11 -11
  277. package/src/interfaces/rental-attr.interface.ts +25 -25
  278. package/src/interfaces/rental-find-all-search-attr.interface.ts +11 -11
  279. package/src/interfaces/rental-hirer-change-request.attr.interface.ts +17 -17
  280. package/src/interfaces/rental-hirer-change-request.update.interface.ts +4 -4
  281. package/src/interfaces/rental-price-attr.interface.ts +7 -7
  282. package/src/interfaces/response-hirer-signature-attr.interface.ts +15 -15
  283. package/src/models/agreement-history.entity.ts +51 -51
  284. package/src/models/agreement-signature.entity.ts +105 -86
  285. package/src/models/agreement.entity.ts +47 -47
  286. package/src/models/booking.entity.ts +105 -105
  287. package/src/models/hirer-change-request-new-hirer.entity.ts +102 -102
  288. package/src/models/hirer-change-request-remove-hirer.entity.ts +47 -47
  289. package/src/models/hirer-change-request-signature.entity.ts +86 -86
  290. package/src/models/index.ts +25 -25
  291. package/src/models/joint-hirer.entity.ts +70 -70
  292. package/src/models/rental-price.entity.ts +38 -38
  293. package/src/models/rental.entity.ts +133 -133
  294. package/tsconfig.build.json +5 -5
  295. package/tsconfig.json +24 -24
@@ -0,0 +1,844 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Rental = void 0;
4
+ const rental_status_enum_1 = require("../../enum/rental-status.enum");
5
+ const rental_repository_1 = require("./rental.repository");
6
+ const general_1 = require("@tomei/general");
7
+ const config_1 = require("@tomei/config");
8
+ const sequelize_1 = require("sequelize");
9
+ const activity_history_1 = require("@tomei/activity-history");
10
+ const account_type_enum_1 = require("../../enum/account-type.enum");
11
+ const joint_hirer_1 = require("../joint-hirer/joint-hirer");
12
+ const joint_hirer_entity_1 = require("../../models/joint-hirer.entity");
13
+ const agreement_repository_1 = require("../agreement/agreement.repository");
14
+ const rentalDb = require("../../database");
15
+ const rental_entity_1 = require("../../models/rental.entity");
16
+ const joint_hirer_repository_1 = require("../joint-hirer/joint-hirer.repository");
17
+ const models_1 = require("../../models");
18
+ const agreement_1 = require("../agreement/agreement");
19
+ const aggrement_status_enum_1 = require("../../enum/aggrement-status.enum");
20
+ const agreement_signature_repository_1 = require("../agreement-signature/agreement-signature.repository");
21
+ const agreement_signature_status_enum_1 = require("../../enum/agreement-signature-status.enum");
22
+ const hirer_type_enum_1 = require("../../enum/hirer-type.enum");
23
+ const agreement_history_repository_1 = require("../agreement-history/agreement-history.repository");
24
+ const finance_1 = require("@tomei/finance");
25
+ const ItemClassMap_1 = require("../../ClassMappings/ItemClassMap");
26
+ class Rental extends general_1.ObjectBase {
27
+ get RentalId() {
28
+ return this.ObjectId;
29
+ }
30
+ set RentalId(value) {
31
+ this.ObjectId = value;
32
+ }
33
+ get Status() {
34
+ return this._Status;
35
+ }
36
+ get EscheatmentYN() {
37
+ return this._EscheatmentYN;
38
+ }
39
+ get CreatedById() {
40
+ return this._CreatedById;
41
+ }
42
+ get CreatedAt() {
43
+ return this._CreatedAt;
44
+ }
45
+ get UpdatedById() {
46
+ return this._UpdatedById;
47
+ }
48
+ get UpdatedAt() {
49
+ return this._UpdatedAt;
50
+ }
51
+ setTerminated() {
52
+ this._Status = rental_status_enum_1.RentalStatusEnum.TERMINATED;
53
+ }
54
+ constructor(rentalAttr) {
55
+ super();
56
+ this.ObjectType = 'Rental';
57
+ this.JointHirers = [];
58
+ this.Invoices = [];
59
+ this._EscheatmentYN = 'N';
60
+ if (rentalAttr) {
61
+ this.RentalId = rentalAttr.RentalId;
62
+ this.CustomerId = rentalAttr.CustomerId;
63
+ this.CustomerType = rentalAttr.CustomerType;
64
+ this.ItemId = rentalAttr.ItemId;
65
+ this.ItemType = rentalAttr.ItemType;
66
+ this.PriceId = rentalAttr.PriceId;
67
+ this.StartDateTime = rentalAttr.StartDateTime;
68
+ this.EndDateTime = rentalAttr.EndDateTime;
69
+ this.CancelRemarks = rentalAttr.CancelRemarks;
70
+ this.TerminateRemarks = rentalAttr.TerminateRemarks;
71
+ this.AgreementNo = rentalAttr.AgreementNo;
72
+ this.AccountType = rentalAttr.AccountType;
73
+ this._Status = rentalAttr.Status;
74
+ this._EscheatmentYN = rentalAttr.EscheatmentYN;
75
+ this._CreatedById = rentalAttr.CreatedById;
76
+ this._CreatedAt = rentalAttr.CreatedAt;
77
+ this._UpdatedById = rentalAttr.UpdatedById;
78
+ this._UpdatedAt = rentalAttr.UpdatedAt;
79
+ }
80
+ }
81
+ static async init(dbTransaction, rentalId) {
82
+ try {
83
+ if (rentalId) {
84
+ const rental = await Rental._Repo.findByPk(rentalId, dbTransaction);
85
+ if (rental) {
86
+ return new Rental(rental);
87
+ }
88
+ else {
89
+ throw new general_1.ClassError('Rental', 'RentalErrMsg00', 'Rental Not Found');
90
+ }
91
+ }
92
+ return new Rental();
93
+ }
94
+ catch (error) {
95
+ throw new general_1.ClassError('Rental', 'RentalErrMsg00', 'Failed To Initialize Price');
96
+ }
97
+ }
98
+ async create(rentalPrice, loginUser, jointHirers, dbTransaction) {
99
+ try {
100
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
101
+ const isPrivileged = await loginUser.checkPrivileges(systemCode, 'Rental - Create');
102
+ if (!isPrivileged) {
103
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'Rental - Create' privilege.");
104
+ }
105
+ const isItemAvailable = await Rental.isItemAvailable(this.ItemId, this.ItemType, this.StartDateTime, this.EndDateTime, dbTransaction);
106
+ if (!isItemAvailable) {
107
+ throw new general_1.ClassError('Rental', 'RentalErrMsg02', 'Rental Item is not available at current date.');
108
+ }
109
+ await Rental._AgreementRepo.create({
110
+ AgreementNo: this.AgreementNo,
111
+ Status: 'Not Generated',
112
+ }, {
113
+ transaction: dbTransaction,
114
+ });
115
+ await Rental._AgreementSignatureRepo.create({
116
+ SignatureId: this.createId(),
117
+ AgreementNo: this.AgreementNo,
118
+ Party: hirer_type_enum_1.HirerTypeEnum.PRIMARY,
119
+ PartyId: this.CustomerId,
120
+ PartyType: 'Customer',
121
+ SignatureStatus: agreement_signature_status_enum_1.AgreementSignatureStatusEnum.PENDING,
122
+ SignedAt: new Date(),
123
+ CreatedById: loginUser.ObjectId,
124
+ CreatedAt: new Date(),
125
+ UpdatedById: loginUser.ObjectId,
126
+ UpdatedAt: new Date(),
127
+ }, { transaction: dbTransaction });
128
+ if (jointHirers && jointHirers.length > 0) {
129
+ for (const jointHirer of jointHirers) {
130
+ await Rental._AgreementSignatureRepo.create({
131
+ SignatureId: this.createId(),
132
+ AgreementNo: this.AgreementNo,
133
+ Party: hirer_type_enum_1.HirerTypeEnum.JOINT,
134
+ PartyId: jointHirer.CustomerId,
135
+ PartyType: 'Customer',
136
+ SignatureStatus: agreement_signature_status_enum_1.AgreementSignatureStatusEnum.PENDING,
137
+ SignedAt: new Date(),
138
+ CreatedById: loginUser.ObjectId,
139
+ CreatedAt: new Date(),
140
+ UpdatedById: loginUser.ObjectId,
141
+ UpdatedAt: new Date(),
142
+ }, { transaction: dbTransaction });
143
+ }
144
+ }
145
+ if (!rentalPrice.PriceId) {
146
+ const rentalPriceData = await rentalPrice.create(loginUser, dbTransaction);
147
+ this.PriceId = rentalPriceData.PriceId;
148
+ }
149
+ else {
150
+ this.PriceId = rentalPrice.PriceId;
151
+ }
152
+ this.RentalId = this.createId();
153
+ this._Status = rental_status_enum_1.RentalStatusEnum.PENDING_SIGNING;
154
+ this._CreatedById = loginUser.ObjectId;
155
+ this._UpdatedById = loginUser.ObjectId;
156
+ this._CreatedAt = new Date();
157
+ this._UpdatedAt = new Date();
158
+ const data = {
159
+ RentalId: this.RentalId,
160
+ CustomerId: this.CustomerId,
161
+ CustomerType: this.CustomerType,
162
+ ItemId: this.ItemId,
163
+ ItemType: this.ItemType,
164
+ PriceId: this.PriceId,
165
+ StartDateTime: this.StartDateTime,
166
+ EndDateTime: this.EndDateTime,
167
+ CancelRemarks: this.CancelRemarks,
168
+ TerminateRemarks: this.TerminateRemarks,
169
+ AgreementNo: this.AgreementNo,
170
+ AccountType: this.AccountType,
171
+ Status: this.Status,
172
+ EscheatmentYN: this.EscheatmentYN,
173
+ CreatedById: this.CreatedById,
174
+ CreatedAt: this.CreatedAt,
175
+ UpdatedById: this.UpdatedById,
176
+ UpdatedAt: this.UpdatedAt,
177
+ };
178
+ await Rental._Repo.create(data, {
179
+ transaction: dbTransaction,
180
+ });
181
+ if (jointHirers) {
182
+ for (let i = 0; i < jointHirers.length; i++) {
183
+ jointHirers[i].RentalId = this.RentalId;
184
+ await jointHirers[i].create(loginUser, dbTransaction);
185
+ this.JointHirers.push(jointHirers[i]);
186
+ }
187
+ }
188
+ const activity = new activity_history_1.Activity();
189
+ activity.ActivityId = activity.createId();
190
+ activity.Action = activity_history_1.ActionEnum.CREATE;
191
+ activity.Description = 'Add Rental';
192
+ activity.EntityType = 'Rental';
193
+ activity.EntityId = this.RentalId;
194
+ activity.EntityValueBefore = JSON.stringify({});
195
+ activity.EntityValueAfter = JSON.stringify(data);
196
+ await activity.create(loginUser.ObjectId, dbTransaction);
197
+ return this;
198
+ }
199
+ catch (error) {
200
+ throw error;
201
+ }
202
+ }
203
+ static async isItemAvailable(itemId, itemType, startDateTime, endDateTime, dbTransaction) {
204
+ try {
205
+ const rental = await Rental._Repo.findOne({
206
+ where: {
207
+ ItemId: itemId,
208
+ ItemType: itemType,
209
+ StartDateTime: {
210
+ [sequelize_1.Op.lte]: endDateTime,
211
+ },
212
+ EndDateTime: {
213
+ [sequelize_1.Op.gte]: startDateTime,
214
+ },
215
+ },
216
+ transaction: dbTransaction,
217
+ });
218
+ if (!rental) {
219
+ return true;
220
+ }
221
+ if (rental.Status === rental_status_enum_1.RentalStatusEnum.TERMINATED ||
222
+ rental.Status === rental_status_enum_1.RentalStatusEnum.CANCELLED) {
223
+ return true;
224
+ }
225
+ return false;
226
+ }
227
+ catch (error) {
228
+ throw error;
229
+ }
230
+ }
231
+ static async findAll(authContext, dbTransaction, page, row, search) {
232
+ var _a;
233
+ try {
234
+ const systemCode = await config_1.ApplicationConfig.getComponentConfigValue('system-code');
235
+ if ('loginUser' in authContext) {
236
+ const isPrivileged = await authContext.loginUser.checkPrivileges(systemCode, 'Rental - View');
237
+ if (!isPrivileged) {
238
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'Rental - View' privilege.");
239
+ }
240
+ }
241
+ const queryObj = {};
242
+ let options = {
243
+ transaction: dbTransaction,
244
+ order: [['CreatedAt', 'DESC']],
245
+ };
246
+ if (page && row) {
247
+ options = Object.assign(Object.assign({}, options), { limit: row, offset: row * (page - 1) });
248
+ }
249
+ if (search) {
250
+ Object.entries(search).forEach(([key, value]) => {
251
+ if (key === 'StartDateTime') {
252
+ queryObj[key] = {
253
+ [sequelize_1.Op.gte]: value,
254
+ };
255
+ }
256
+ else if (key === 'EndDateTime') {
257
+ queryObj[key] = {
258
+ [sequelize_1.Op.lte]: value,
259
+ };
260
+ }
261
+ else if (key === 'CustomerId') {
262
+ queryObj[key] = {
263
+ [sequelize_1.Op.substring]: value,
264
+ };
265
+ options.include = [
266
+ {
267
+ model: joint_hirer_entity_1.JointHirerModel,
268
+ required: false,
269
+ where: {
270
+ CustomerId: {
271
+ [sequelize_1.Op.substring]: value,
272
+ },
273
+ },
274
+ },
275
+ ];
276
+ }
277
+ else {
278
+ queryObj[key] = {
279
+ [sequelize_1.Op.substring]: value,
280
+ };
281
+ }
282
+ });
283
+ if (((_a = options === null || options === void 0 ? void 0 : options.include) === null || _a === void 0 ? void 0 : _a.length) > 1) {
284
+ options.include.push({
285
+ model: models_1.AgreementModel,
286
+ required: false,
287
+ });
288
+ }
289
+ else {
290
+ options.include = [
291
+ {
292
+ model: models_1.AgreementModel,
293
+ required: false,
294
+ },
295
+ ];
296
+ }
297
+ options = Object.assign(Object.assign({}, options), { where: queryObj });
298
+ }
299
+ return await Rental._Repo.findAndCountAll(options);
300
+ }
301
+ catch (err) {
302
+ throw err;
303
+ }
304
+ }
305
+ static async checkActiveByItemId(loginUser, itemId, itemType, dbTransaction) {
306
+ try {
307
+ const systemCode = await config_1.ApplicationConfig.getComponentConfigValue('system-code');
308
+ const isPrivileged = await loginUser.checkPrivileges(systemCode, 'Rental - View');
309
+ if (!isPrivileged) {
310
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'Rental - View' privilege.");
311
+ }
312
+ const queryObj = {
313
+ ItemId: itemId,
314
+ ItemType: itemType,
315
+ Status: rental_status_enum_1.RentalStatusEnum.ACTIVE,
316
+ };
317
+ const options = {
318
+ transaction: dbTransaction,
319
+ where: queryObj,
320
+ };
321
+ const rental = await Rental._Repo.findOne(options);
322
+ if (rental) {
323
+ return true;
324
+ }
325
+ else {
326
+ return false;
327
+ }
328
+ }
329
+ catch (err) {
330
+ throw err;
331
+ }
332
+ }
333
+ setStartDateTime(startDateTime) {
334
+ const startDateTimeObject = new Date(startDateTime);
335
+ startDateTimeObject.setHours(0, 0, 0, 0);
336
+ if (startDateTimeObject < new Date(new Date().setHours(0, 0, 0, 0))) {
337
+ throw new general_1.ClassError('Rental', 'RentalErrMsg02', 'StartDateTime cannot be a past datetime.');
338
+ }
339
+ if (this.EndDateTime && startDateTimeObject > this.EndDateTime) {
340
+ throw new general_1.ClassError('Rental', 'RentalErrMsg03', 'StartDateTime cannot be more than EndDateTime.');
341
+ }
342
+ if (startDateTimeObject > new Date(new Date().setHours(0, 0, 0, 0))) {
343
+ this._Status = rental_status_enum_1.RentalStatusEnum.RESERVED;
344
+ }
345
+ else {
346
+ this._Status = rental_status_enum_1.RentalStatusEnum.ACTIVE;
347
+ }
348
+ }
349
+ async periodEndProcess(loginUser, dbTransaction, stockInventory) {
350
+ try {
351
+ const systemCode = await config_1.ApplicationConfig.getComponentConfigValue('system-code');
352
+ const isPrivileged = await loginUser.checkPrivileges(systemCode, 'Rental – PeriodEndProcess');
353
+ if (!isPrivileged) {
354
+ throw new general_1.ClassError('Rental', 'RentalErrMsg04', "You do not have 'Rental - PeriodEndProcess' privilege.");
355
+ }
356
+ if (this.AgreementNo === undefined || this.AgreementNo === null) {
357
+ throw new general_1.ClassError('Rental', 'RentalErrMsg05', 'Rental must be existing rental.');
358
+ }
359
+ if (this.EndDateTime === new Date(new Date().setHours(0, 0, 0, 0))) {
360
+ throw new general_1.ClassError('Rental', 'RentalErrMsg06', 'Rental period is not ending today.');
361
+ }
362
+ await stockInventory.setAvailable(loginUser, dbTransaction);
363
+ const entityValueBefore = {
364
+ RentalId: this.RentalId,
365
+ CustomerId: this.CustomerId,
366
+ CustomerType: this.CustomerType,
367
+ ItemId: this.ItemId,
368
+ ItemType: this.ItemType,
369
+ PriceId: this.PriceId,
370
+ StartDateTime: this.StartDateTime,
371
+ EndDateTime: this.EndDateTime,
372
+ CancelRemarks: this.CancelRemarks,
373
+ TerminateRemarks: this.TerminateRemarks,
374
+ AgreementNo: this.AgreementNo,
375
+ AccountType: this.AccountType,
376
+ Status: this.Status,
377
+ EscheatmentYN: this.EscheatmentYN,
378
+ CreatedById: this.CreatedById,
379
+ CreatedAt: this.CreatedAt,
380
+ UpdatedById: this.UpdatedById,
381
+ UpdatedAt: this.UpdatedAt,
382
+ };
383
+ this.setTerminated();
384
+ this._UpdatedById = loginUser.ObjectId;
385
+ this._UpdatedAt = new Date();
386
+ const entityValueAfter = {
387
+ RentalId: this.RentalId,
388
+ CustomerId: this.CustomerId,
389
+ CustomerType: this.CustomerType,
390
+ ItemId: this.ItemId,
391
+ ItemType: this.ItemType,
392
+ PriceId: this.PriceId,
393
+ StartDateTime: this.StartDateTime,
394
+ EndDateTime: this.EndDateTime,
395
+ CancelRemarks: this.CancelRemarks,
396
+ TerminateRemarks: this.TerminateRemarks,
397
+ AgreementNo: this.AgreementNo,
398
+ AccountType: this.AccountType,
399
+ Status: this.Status,
400
+ EscheatmentYN: this.EscheatmentYN,
401
+ CreatedById: this.CreatedById,
402
+ CreatedAt: this.CreatedAt,
403
+ UpdatedById: this.UpdatedById,
404
+ UpdatedAt: this.UpdatedAt,
405
+ };
406
+ const activity = new activity_history_1.Activity();
407
+ activity.ActivityId = activity.createId();
408
+ activity.Action = activity_history_1.ActionEnum.UPDATE;
409
+ activity.Description = 'Set Rental as Terminated';
410
+ activity.EntityType = 'Rental';
411
+ activity.EntityId = this.RentalId;
412
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
413
+ activity.EntityValueAfter = JSON.stringify(entityValueAfter);
414
+ await activity.create(loginUser.ObjectId, dbTransaction);
415
+ return this;
416
+ }
417
+ catch (err) {
418
+ throw err;
419
+ }
420
+ }
421
+ async getCustomerActiveRentals(loginUser, dbTransaction, CustomerId) {
422
+ try {
423
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
424
+ const isPrivileged = loginUser.checkPrivileges(systemCode, 'RENTAL_VIEW');
425
+ if (!isPrivileged) {
426
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'Rental - View' privilege.");
427
+ }
428
+ const query = `
429
+ SELECT
430
+ r.*
431
+ FROM
432
+ rental_Rental r
433
+ LEFT JOIN
434
+ rental_JointHirer jh ON r.RentalId = jh.RentalId
435
+ WHERE
436
+ r.Status = 'Active'
437
+ AND (
438
+ r.CustomerId = '${CustomerId}'
439
+ OR jh.CustomerId = '${CustomerId}'
440
+ )
441
+ GROUP BY
442
+ r.RentalId
443
+ `;
444
+ const db = rentalDb.getConnection();
445
+ const result = await db.query(query, {
446
+ type: sequelize_1.QueryTypes.SELECT,
447
+ transaction: dbTransaction,
448
+ model: rental_entity_1.RentalModel,
449
+ mapToModel: true,
450
+ });
451
+ const records = result.map((record) => {
452
+ return {
453
+ RentalId: record.RentalId,
454
+ CustomerId: record.CustomerId,
455
+ CustomerType: record.CustomerType,
456
+ ItemId: record.ItemId,
457
+ ItemType: record.ItemType,
458
+ PriceId: record.PriceId,
459
+ StartDateTime: record.StartDateTime,
460
+ EndDateTime: record.EndDateTime,
461
+ CancelRemarks: record.CancelRemarks,
462
+ TerminateRemarks: record.TerminateRemarks,
463
+ AgreementNo: record.AgreementNo,
464
+ AccountType: record.AccountType,
465
+ Status: record.Status,
466
+ EscheatmentYN: record.EscheatmentYN,
467
+ CreatedById: record.CreatedById,
468
+ CreatedAt: record.CreatedAt,
469
+ UpdatedById: record.UpdatedById,
470
+ UpdatedAt: record.UpdatedAt,
471
+ };
472
+ });
473
+ return records;
474
+ }
475
+ catch (error) {
476
+ throw error;
477
+ }
478
+ }
479
+ async getJointHirers(dbTransaction) {
480
+ try {
481
+ if (!this.RentalId) {
482
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'RentalId is missing');
483
+ }
484
+ if (this.AccountType !== account_type_enum_1.RentalAccountTypeEnum.JOINT) {
485
+ throw new general_1.ClassError('Rental', 'RentalErrMsg07', 'This rental does not have joint hirers.');
486
+ }
487
+ const jointHirers = await Rental._JointHirerRepo.findAll({
488
+ where: {
489
+ RentalId: this.RentalId,
490
+ },
491
+ transaction: dbTransaction,
492
+ });
493
+ const jointHirerInstances = Promise.all(jointHirers.map(async (hirer) => {
494
+ return await joint_hirer_1.JointHirer.init(hirer.HirerId, dbTransaction);
495
+ }));
496
+ return jointHirerInstances;
497
+ }
498
+ catch (error) {
499
+ console.error('Error in getJointHirers:', error);
500
+ throw error;
501
+ }
502
+ }
503
+ async getCustomerIds(loginUser, dbTransaction) {
504
+ try {
505
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
506
+ const isPrivileged = loginUser.checkPrivileges(systemCode, 'RENTAL_VIEW');
507
+ if (!isPrivileged) {
508
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'Rental - View' privilege.");
509
+ }
510
+ if (!this.RentalId) {
511
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'RentalId is missing');
512
+ }
513
+ const options = {
514
+ where: {
515
+ RentalId: this.RentalId,
516
+ },
517
+ transaction: dbTransaction,
518
+ };
519
+ const joinHirers = await Rental._JointHirerRepo.findAll(options);
520
+ const customerIds = [this.CustomerId];
521
+ for (let i = 0; i < joinHirers.length; i++) {
522
+ const jointHirer = joinHirers[i];
523
+ customerIds.push(jointHirer.CustomerId);
524
+ }
525
+ return customerIds;
526
+ }
527
+ catch (error) {
528
+ throw error;
529
+ }
530
+ }
531
+ async signAgreement(loginUser, party, PartyId, PartyType, dbTransaction, statusAfterSign, method, justification) {
532
+ try {
533
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
534
+ const isPrivileged = loginUser.checkPrivileges(systemCode, 'RENTAL_SIGN');
535
+ if (!isPrivileged) {
536
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'RENTAL_SIGN' privilege.");
537
+ }
538
+ const agreement = await agreement_1.Agreement.init(this.AgreementNo, dbTransaction);
539
+ if (this.Status !== rental_status_enum_1.RentalStatusEnum.PENDING_SIGNING &&
540
+ agreement.Status !== aggrement_status_enum_1.AggrementStatusEnum.GENERATED) {
541
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'Rental is not ready to be signed yet.');
542
+ }
543
+ const signatureList = await agreement_1.Agreement.getSignatureList(loginUser, this.AgreementNo, dbTransaction);
544
+ const customerSignature = signatureList.find((sig) => sig.PartyId === PartyId &&
545
+ sig.PartyType === PartyType &&
546
+ sig.Party === party &&
547
+ sig.SignatureStatus === agreement_signature_status_enum_1.AgreementSignatureStatusEnum.PENDING);
548
+ if (!customerSignature) {
549
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'Signature is not pending.');
550
+ }
551
+ const signaturePayload = {
552
+ SignatureStatus: agreement_signature_status_enum_1.AgreementSignatureStatusEnum.SIGNED,
553
+ SignedAt: new Date(),
554
+ UpdatedById: loginUser.ObjectId,
555
+ UpdatedAt: new Date(),
556
+ VerificationMethod: method,
557
+ VerificationJustification: justification,
558
+ VerifiedById: loginUser.ObjectId,
559
+ };
560
+ await Rental._AgreementSignatureRepo.update(signaturePayload, {
561
+ where: {
562
+ AgreementNo: this.AgreementNo,
563
+ Party: party,
564
+ PartyId: PartyId,
565
+ PartyType: PartyType,
566
+ },
567
+ transaction: dbTransaction,
568
+ });
569
+ const signatureActivity = new activity_history_1.Activity();
570
+ signatureActivity.ActivityId = signatureActivity.createId();
571
+ signatureActivity.Action = activity_history_1.ActionEnum.UPDATE;
572
+ signatureActivity.Description = 'Update hirer signature';
573
+ signatureActivity.EntityType = 'AgreementSignature';
574
+ signatureActivity.EntityId = this.AgreementNo;
575
+ signatureActivity.EntityValueBefore = JSON.stringify(customerSignature);
576
+ signatureActivity.EntityValueAfter = JSON.stringify(signaturePayload);
577
+ await signatureActivity.create(loginUser.ObjectId, dbTransaction);
578
+ const updatedSignatureList = await agreement_1.Agreement.getSignatureList(loginUser, this.AgreementNo, dbTransaction);
579
+ const pendingSignatures = updatedSignatureList.filter((sig) => sig.SignatureStatus === 'Pending');
580
+ if (pendingSignatures.length > 0) {
581
+ return;
582
+ }
583
+ const entityValueAgreementBefore = {
584
+ AgreementNo: agreement.AgreementNo,
585
+ Status: agreement.Status,
586
+ DateSigned: agreement.DateSigned,
587
+ };
588
+ const payload = {
589
+ DateSigned: new Date(),
590
+ Status: aggrement_status_enum_1.AggrementStatusEnum.SIGNED,
591
+ };
592
+ await Rental._AgreementRepo.update(payload, {
593
+ where: {
594
+ AgreementNo: this.AgreementNo,
595
+ },
596
+ transaction: dbTransaction,
597
+ });
598
+ const entityValueAgreementAfter = Object.assign({ entityValueAgreementBefore }, payload);
599
+ const activity = new activity_history_1.Activity();
600
+ activity.ActivityId = activity.createId();
601
+ activity.Action = activity_history_1.ActionEnum.UPDATE;
602
+ activity.Description = 'Update agreement';
603
+ activity.EntityType = 'RentalAgreement';
604
+ activity.EntityId = this.AgreementNo;
605
+ activity.EntityValueBefore = JSON.stringify(entityValueAgreementBefore);
606
+ activity.EntityValueAfter = JSON.stringify(entityValueAgreementAfter);
607
+ await activity.create(loginUser.ObjectId, dbTransaction);
608
+ const entityValueRentalBefore = {
609
+ RentalId: this.RentalId,
610
+ CustomerId: this.CustomerId,
611
+ CustomerType: this.CustomerType,
612
+ ItemId: this.ItemId,
613
+ ItemType: this.ItemType,
614
+ PriceId: this.PriceId,
615
+ StartDateTime: this.StartDateTime,
616
+ EndDateTime: this.EndDateTime,
617
+ CancelRemarks: this.CancelRemarks,
618
+ TerminateRemarks: this.TerminateRemarks,
619
+ AgreementNo: this.AgreementNo,
620
+ AccountType: this.AccountType,
621
+ Status: this.Status,
622
+ EscheatmentYN: this.EscheatmentYN,
623
+ CreatedById: this.CreatedById,
624
+ CreatedAt: this.CreatedAt,
625
+ UpdatedById: this.UpdatedById,
626
+ UpdatedAt: this.UpdatedAt,
627
+ };
628
+ this._Status = statusAfterSign
629
+ ? statusAfterSign
630
+ : rental_status_enum_1.RentalStatusEnum.ACTIVE;
631
+ const payloadRental = {
632
+ Status: this._Status,
633
+ UpdatedById: loginUser.ObjectId,
634
+ UpdatedAt: new Date(),
635
+ };
636
+ await Rental._Repo.update(payloadRental, {
637
+ where: {
638
+ RentalId: this.RentalId,
639
+ },
640
+ transaction: dbTransaction,
641
+ });
642
+ const entityValueRentalAfter = Object.assign({ entityValueRentalBefore }, payloadRental);
643
+ const rentalActivity = new activity_history_1.Activity();
644
+ rentalActivity.ActivityId = activity.createId();
645
+ rentalActivity.Action = activity_history_1.ActionEnum.UPDATE;
646
+ rentalActivity.Description = 'Sign rental agreement';
647
+ rentalActivity.EntityType = 'Rental';
648
+ rentalActivity.EntityId = this.RentalId;
649
+ rentalActivity.EntityValueBefore = JSON.stringify(entityValueRentalBefore);
650
+ rentalActivity.EntityValueAfter = JSON.stringify(entityValueRentalAfter);
651
+ await rentalActivity.create(loginUser.ObjectId, dbTransaction);
652
+ }
653
+ catch (error) {
654
+ throw error;
655
+ }
656
+ }
657
+ async generateAgreement(loginUser, dbTransaction, MediaId) {
658
+ try {
659
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
660
+ const isPrivileged = loginUser.checkPrivileges(systemCode, 'RENTAL_AGREEMENT_CREATE');
661
+ if (!isPrivileged) {
662
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'RENTAL_AGREEMENT_CREATE' privilege.");
663
+ }
664
+ const agreement = await agreement_1.Agreement.init(this.AgreementNo, dbTransaction);
665
+ if (!MediaId) {
666
+ throw new general_1.ClassError('Rental', 'RentalErrMsg0X', 'MediaId is required.');
667
+ }
668
+ const EntityValueBefore = agreement;
669
+ agreement.Status = aggrement_status_enum_1.AggrementStatusEnum.GENERATED;
670
+ agreement.MediaId = MediaId;
671
+ await Rental._AgreementRepo.update({
672
+ Status: agreement.Status,
673
+ MediaId: agreement.MediaId,
674
+ }, {
675
+ where: {
676
+ AgreementNo: this.AgreementNo,
677
+ },
678
+ transaction: dbTransaction,
679
+ });
680
+ const EntityValueAfter = agreement;
681
+ const activity = new activity_history_1.Activity();
682
+ activity.ActivityId = activity.createId();
683
+ activity.Action = activity_history_1.ActionEnum.UPDATE;
684
+ activity.Description = 'Generate agreement.';
685
+ activity.EntityType = 'RentalAgreement';
686
+ activity.EntityId = this.AgreementNo;
687
+ activity.EntityValueBefore = JSON.stringify(EntityValueBefore);
688
+ activity.EntityValueAfter = JSON.stringify(EntityValueAfter);
689
+ await activity.create(loginUser.ObjectId, dbTransaction);
690
+ const agreementHistory = await Rental._AgreementHistoryRepo.create({
691
+ AgreementNo: this.AgreementNo,
692
+ MediaId,
693
+ ActivityCompleted: 'Agreement Generated',
694
+ CreatedAt: new Date(),
695
+ }, { transaction: dbTransaction });
696
+ const entityValueAfter = agreementHistory.get({ plain: true });
697
+ const activityHistory = new activity_history_1.Activity();
698
+ activityHistory.ActivityId = activityHistory.createId();
699
+ activityHistory.Action = activity_history_1.ActionEnum.CREATE;
700
+ activityHistory.Description = 'Generate agreement.';
701
+ activityHistory.EntityType = 'RentalAgreementHistory';
702
+ activityHistory.EntityId = agreementHistory.HistoryId.toString();
703
+ activityHistory.EntityValueBefore = JSON.stringify({});
704
+ activityHistory.EntityValueAfter = JSON.stringify(entityValueAfter);
705
+ await activityHistory.create(loginUser.ObjectId, dbTransaction);
706
+ }
707
+ catch (error) {
708
+ throw error;
709
+ }
710
+ }
711
+ toJSON() {
712
+ return {
713
+ RentalId: this.RentalId,
714
+ CustomerId: this.CustomerId,
715
+ CustomerType: this.CustomerType,
716
+ ItemId: this.ItemId,
717
+ ItemType: this.ItemType,
718
+ PriceId: this.PriceId,
719
+ StartDateTime: this.StartDateTime,
720
+ EndDateTime: this.EndDateTime,
721
+ Status: this.Status,
722
+ CancelRemarks: this.CancelRemarks,
723
+ TerminateRemarks: this.TerminateRemarks,
724
+ EscheatmentYN: this.EscheatmentYN,
725
+ AgreementNo: this.AgreementNo,
726
+ AccountType: this.AccountType,
727
+ CreatedById: this.CreatedById,
728
+ CreatedAt: this.CreatedAt,
729
+ UpdatedById: this.UpdatedById,
730
+ UpdatedAt: this.UpdatedAt,
731
+ };
732
+ }
733
+ async getInvoices(loginUser, dbTransaction, accountingSystem) {
734
+ try {
735
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
736
+ const isPrivileged = loginUser.checkPrivileges(systemCode, 'RENTAL_VIEW_INVOICE');
737
+ if (!isPrivileged) {
738
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'RENTAL_VIEW_INVOICE' privilege.");
739
+ }
740
+ if (!this.ObjectId) {
741
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'ObjectId is missing.');
742
+ }
743
+ if (this.Invoices.length > 0) {
744
+ return this.Invoices;
745
+ }
746
+ const search = {
747
+ DocType: finance_1.DocType.INVOICE,
748
+ RelatedObjectId: this.ObjectId,
749
+ RelatedObjectType: this.ObjectType,
750
+ };
751
+ const documents = await finance_1.Document.findAll(loginUser, dbTransaction, undefined, undefined, search, undefined, accountingSystem);
752
+ this.Invoices = documents.rows.map((doc) => {
753
+ const document = new finance_1.Document(dbTransaction, doc);
754
+ return document;
755
+ });
756
+ return this.Invoices;
757
+ }
758
+ catch (error) {
759
+ throw error;
760
+ }
761
+ }
762
+ async getItem(dbTransaction) {
763
+ if (this.Item) {
764
+ return this.Item;
765
+ }
766
+ else {
767
+ const ItemClass = ItemClassMap_1.ItemClassMap[this.ItemType];
768
+ if (!ItemClass || typeof ItemClass.init !== 'function') {
769
+ throw new Error(`Invalid or unregistered ItemType: ${this.ItemType}`);
770
+ }
771
+ ItemClass._Repo = ItemClass._Repo || ItemClass.getRepo();
772
+ if (!ItemClass._Repo) {
773
+ throw new Error(`ItemType ${this.ItemType} does not have a repository.`);
774
+ }
775
+ const itemInstance = await ItemClass.init(this.ItemId, dbTransaction);
776
+ if (!itemInstance) {
777
+ throw new Error(`${this.ItemType} not found with ID ${this.ItemId}`);
778
+ }
779
+ this.Item = itemInstance;
780
+ if (typeof this.Item.setAvailable !== 'function') {
781
+ throw new Error(`${this.ItemType} does not implement setAvailable()`);
782
+ }
783
+ return this.Item;
784
+ }
785
+ }
786
+ async cancel(loginUser, dbTransaction, remarks) {
787
+ try {
788
+ const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
789
+ const isPrivileged = await loginUser.checkPrivileges(systemCode, 'RENTAL_CANCEL');
790
+ if (!isPrivileged) {
791
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', "You do not have 'RENTAL_CANCEL' privilege.");
792
+ }
793
+ if (!this.ObjectId) {
794
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'Rental not found. Rental Id is empty.');
795
+ }
796
+ if (this.Status === rental_status_enum_1.RentalStatusEnum.ACTIVE ||
797
+ this.Status === rental_status_enum_1.RentalStatusEnum.SUSPENDED) {
798
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', `Rental already ${this.Status}, please do termination process.`);
799
+ }
800
+ if (!remarks) {
801
+ throw new general_1.ClassError('Rental', 'RentalErrMsg01', 'Cancellation remarks is required.');
802
+ }
803
+ const entityValueBefore = this.toJSON();
804
+ this._Status = rental_status_enum_1.RentalStatusEnum.CANCELLED;
805
+ this.CancelRemarks = remarks;
806
+ this._UpdatedById = loginUser.ObjectId;
807
+ this._UpdatedAt = new Date();
808
+ await Rental._Repo.update({
809
+ Status: this.Status,
810
+ CancelRemarks: this.CancelRemarks,
811
+ UpdatedById: this.UpdatedById,
812
+ UpdatedAt: this.UpdatedAt,
813
+ }, {
814
+ where: {
815
+ RentalId: this.RentalId,
816
+ },
817
+ transaction: dbTransaction,
818
+ });
819
+ const item = await this.getItem(dbTransaction);
820
+ await item.setAvailable(loginUser, dbTransaction);
821
+ const entityValueAfter = this.toJSON();
822
+ const activity = new activity_history_1.Activity();
823
+ activity.ActivityId = activity.createId();
824
+ activity.Action = activity_history_1.ActionEnum.UPDATE;
825
+ activity.Description = 'Rental Cancellation';
826
+ activity.EntityType = this.ObjectType;
827
+ activity.EntityId = this.ObjectId;
828
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
829
+ activity.EntityValueAfter = JSON.stringify(entityValueAfter);
830
+ await activity.create(loginUser.ObjectId, dbTransaction);
831
+ return this;
832
+ }
833
+ catch (error) {
834
+ throw error;
835
+ }
836
+ }
837
+ }
838
+ exports.Rental = Rental;
839
+ Rental._Repo = new rental_repository_1.RentalRepository();
840
+ Rental._AgreementRepo = new agreement_repository_1.AgreementRepository();
841
+ Rental._JointHirerRepo = new joint_hirer_repository_1.JointHirerRepository();
842
+ Rental._AgreementSignatureRepo = new agreement_signature_repository_1.AgreementSignatureRepository();
843
+ Rental._AgreementHistoryRepo = new agreement_history_repository_1.AgreementHistoryRepository();
844
+ //# sourceMappingURL=rental.js.map