taxtank-core 0.31.61 → 0.32.1

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 (1305) hide show
  1. package/esm2022/lib/collections/subscription/service-subscription.collection.mjs +55 -0
  2. package/esm2022/lib/collections/vehicle/best-vehicle-logbook.collection.mjs +96 -0
  3. package/esm2022/lib/collections/vehicle/vehicle-logbook.collection.mjs +54 -0
  4. package/esm2022/lib/db/Models/address.mjs +4 -0
  5. package/esm2022/lib/db/Models/bank/bank-account-balance.mjs +9 -0
  6. package/esm2022/lib/db/Models/bank/bank-account-property.mjs +9 -0
  7. package/esm2022/lib/db/Models/bank/bank-account.mjs +9 -0
  8. package/esm2022/lib/db/Models/bank/bank-connection.mjs +4 -0
  9. package/esm2022/lib/db/Models/bank/bank-transaction-import.mjs +4 -0
  10. package/esm2022/lib/db/Models/bank/bank-transaction.mjs +4 -0
  11. package/esm2022/lib/db/Models/bank/bank.mjs +4 -0
  12. package/esm2022/lib/db/Models/bank/basiq-job.mjs +4 -0
  13. package/esm2022/lib/db/Models/chart-accounts/chart-accounts-depreciation.mjs +4 -0
  14. package/esm2022/lib/db/Models/chart-accounts/chart-accounts-heading.mjs +4 -0
  15. package/esm2022/lib/db/Models/chart-accounts/chart-accounts-meta-field.mjs +4 -0
  16. package/esm2022/lib/db/Models/chart-accounts/chart-accounts-value.mjs +4 -0
  17. package/esm2022/lib/db/Models/chart-accounts/chart-accounts.mjs +4 -0
  18. package/esm2022/lib/db/Models/client/client-details.mjs +4 -0
  19. package/esm2022/lib/db/Models/client/client-income-types.mjs +4 -0
  20. package/esm2022/lib/db/Models/client/occupation.mjs +4 -0
  21. package/esm2022/lib/db/Models/country.mjs +4 -0
  22. package/esm2022/lib/db/Models/depreciation/depreciation-capital-project.mjs +4 -0
  23. package/esm2022/lib/db/Models/depreciation/depreciation-forecast.mjs +4 -0
  24. package/esm2022/lib/db/Models/depreciation/depreciation.mjs +4 -0
  25. package/esm2022/lib/db/Models/document/document-base.mjs +4 -0
  26. package/esm2022/lib/db/Models/document/document-folder.mjs +4 -0
  27. package/esm2022/lib/db/Models/document/document.mjs +4 -0
  28. package/esm2022/lib/db/Models/document/property-document.mjs +4 -0
  29. package/esm2022/lib/db/Models/file.mjs +4 -0
  30. package/esm2022/lib/db/Models/firm/chat.mjs +4 -0
  31. package/esm2022/lib/db/Models/firm/client-invite.mjs +4 -0
  32. package/esm2022/lib/db/Models/firm/client-movement.mjs +4 -0
  33. package/esm2022/lib/db/Models/firm/employee-invite.mjs +4 -0
  34. package/esm2022/lib/db/Models/firm/firm-invite.mjs +4 -0
  35. package/esm2022/lib/db/Models/firm/firm.mjs +4 -0
  36. package/esm2022/lib/db/Models/firm/message-document.mjs +4 -0
  37. package/esm2022/lib/db/Models/firm/message.mjs +4 -0
  38. package/esm2022/lib/db/Models/holding/holding-sale.mjs +3 -0
  39. package/esm2022/lib/db/Models/incomeSource/income-source-forecast.mjs +4 -0
  40. package/esm2022/lib/db/Models/incomeSource/income-source-type.mjs +4 -0
  41. package/esm2022/lib/db/Models/incomeSource/income-source.mjs +4 -0
  42. package/esm2022/lib/db/Models/incomeSource/salary-forecast.mjs +4 -0
  43. package/esm2022/lib/db/Models/loan/borrowing-expense-loan.mjs +4 -0
  44. package/esm2022/lib/db/Models/loan/borrowing-expense.mjs +4 -0
  45. package/esm2022/lib/db/Models/loan/loan-payout.mjs +12 -0
  46. package/esm2022/lib/db/Models/loan/loan.mjs +21 -0
  47. package/esm2022/lib/db/Models/phone.mjs +4 -0
  48. package/esm2022/lib/db/Models/property/borrowing-report.mjs +4 -0
  49. package/esm2022/lib/db/Models/property/property-category-movement.mjs +4 -0
  50. package/esm2022/lib/db/Models/property/property-category.mjs +4 -0
  51. package/esm2022/lib/db/Models/property/property-forecast.mjs +4 -0
  52. package/esm2022/lib/db/Models/property/property-sale/property-sale-tax-exemption-meta-field.mjs +4 -0
  53. package/esm2022/lib/db/Models/property/property-sale/property-sale.mjs +4 -0
  54. package/esm2022/lib/db/Models/property/property-sale/tax-exemption-meta-field.mjs +4 -0
  55. package/esm2022/lib/db/Models/property/property-sale/tax-exemption.mjs +4 -0
  56. package/esm2022/lib/db/Models/property/property-share.mjs +9 -0
  57. package/esm2022/lib/db/Models/property/property-subscription.mjs +4 -0
  58. package/esm2022/lib/db/Models/property/property-valuation.mjs +4 -0
  59. package/esm2022/lib/db/Models/property/property.mjs +21 -0
  60. package/esm2022/lib/db/Models/service-notification.mjs +4 -0
  61. package/esm2022/lib/db/Models/sole/bas-report.mjs +4 -0
  62. package/esm2022/lib/db/Models/sole/sole-business-activity.mjs +4 -0
  63. package/esm2022/lib/db/Models/sole/sole-business-allocation.mjs +4 -0
  64. package/esm2022/lib/db/Models/sole/sole-business-loss-offset-rule.mjs +4 -0
  65. package/esm2022/lib/db/Models/sole/sole-business-loss.mjs +4 -0
  66. package/esm2022/lib/db/Models/sole/sole-business.mjs +4 -0
  67. package/esm2022/lib/db/Models/sole/sole-contact.mjs +4 -0
  68. package/esm2022/lib/db/Models/sole/sole-depreciation-method.mjs +4 -0
  69. package/esm2022/lib/db/Models/sole/sole-details.mjs +4 -0
  70. package/esm2022/lib/db/Models/sole/sole-forecast.mjs +4 -0
  71. package/esm2022/lib/db/Models/sole/sole-invoice-item.mjs +4 -0
  72. package/esm2022/lib/db/Models/sole/sole-invoice-template.mjs +4 -0
  73. package/esm2022/lib/db/Models/sole/sole-invoice.mjs +4 -0
  74. package/esm2022/lib/db/Models/spare/spare-document-category.mjs +4 -0
  75. package/esm2022/lib/db/Models/spare/spare-document.mjs +4 -0
  76. package/esm2022/lib/db/Models/subscription/service-payment-method.mjs +4 -0
  77. package/esm2022/lib/db/Models/subscription/service-payment.mjs +4 -0
  78. package/esm2022/lib/db/Models/subscription/service-price.mjs +4 -0
  79. package/esm2022/lib/db/Models/subscription/service-product.mjs +4 -0
  80. package/esm2022/lib/db/Models/subscription/service-subscription-item.mjs +4 -0
  81. package/esm2022/lib/db/Models/subscription/service-subscription.mjs +4 -0
  82. package/esm2022/lib/db/Models/tax-calculation.mjs +4 -0
  83. package/esm2022/lib/db/Models/tax-return/tax-return-category.mjs +4 -0
  84. package/esm2022/lib/db/Models/tax-return/tax-return-item.mjs +4 -0
  85. package/esm2022/lib/db/Models/tax-return/tax-return.mjs +4 -0
  86. package/esm2022/lib/db/Models/transaction/allocation-rule-condition.mjs +4 -0
  87. package/esm2022/lib/db/Models/transaction/allocation-rule-transaction-meta-field.mjs +4 -0
  88. package/esm2022/lib/db/Models/transaction/allocation-rule-transaction.mjs +4 -0
  89. package/esm2022/lib/db/Models/transaction/allocation-rule.mjs +4 -0
  90. package/esm2022/lib/db/Models/transaction/transaction-allocation.mjs +4 -0
  91. package/esm2022/lib/db/Models/transaction/transaction-meta-field.mjs +4 -0
  92. package/esm2022/lib/db/Models/transaction/transaction.mjs +4 -0
  93. package/esm2022/lib/db/Models/user/employee-details.mjs +4 -0
  94. package/esm2022/lib/db/Models/user/registration-invite.mjs +4 -0
  95. package/esm2022/lib/db/Models/user/user-event-setting.mjs +4 -0
  96. package/esm2022/lib/db/Models/user/user-event-type-category.mjs +4 -0
  97. package/esm2022/lib/db/Models/user/user-event-type.mjs +4 -0
  98. package/esm2022/lib/db/Models/user/user-event.mjs +4 -0
  99. package/esm2022/lib/db/Models/vehicle/vehicle-claim-details.mjs +4 -0
  100. package/esm2022/lib/db/Models/vehicle/vehicle-claim.mjs +4 -0
  101. package/esm2022/lib/db/Models/vehicle/vehicle-logbook.mjs +4 -0
  102. package/esm2022/lib/db/Models/vehicle/vehicle.mjs +4 -0
  103. package/esm2022/lib/forms/address/address.form.mjs +188 -0
  104. package/esm2022/lib/forms/bank/bank-account/bank-account-add-manual.form.mjs +46 -0
  105. package/esm2022/lib/forms/bank/bank-account/bank-accounts-import.form.mjs +50 -0
  106. package/esm2022/lib/forms/loan/loan.form.mjs +90 -0
  107. package/esm2022/lib/forms/sole/sole-invoice-item.form.mjs +16 -0
  108. package/esm2022/lib/forms/vehicle/vehicle-logbook.form.mjs +63 -0
  109. package/esm2022/lib/forms/vehicle/vehicle.form.mjs +17 -0
  110. package/esm2022/lib/interceptors/basiq-client-id.interceptor.mjs +31 -0
  111. package/esm2022/lib/interceptors/basiq-token.interceptor.mjs +33 -0
  112. package/esm2022/lib/interceptors/corelogic-interceptor.mjs +41 -0
  113. package/esm2022/lib/interceptors/financial-year-interceptor.mjs +42 -0
  114. package/esm2022/lib/interceptors/interceptors.module.mjs +96 -0
  115. package/esm2022/lib/interceptors/jwt-interceptor.mjs +138 -0
  116. package/esm2022/lib/interceptors/preloader.interceptor.mjs +32 -0
  117. package/esm2022/lib/interceptors/user-switcher-interceptor.mjs +40 -0
  118. package/esm2022/lib/models/address/country.mjs +18 -0
  119. package/esm2022/lib/models/chart-accounts/chart-accounts.mjs +234 -0
  120. package/esm2022/lib/models/depreciation/depreciation.mjs +188 -0
  121. package/esm2022/lib/models/file/file.mjs +12 -0
  122. package/esm2022/lib/models/financial-year/financial-year.mjs +55 -0
  123. package/esm2022/lib/models/loan/loan.mjs +84 -0
  124. package/esm2022/lib/models/property/property.mjs +265 -0
  125. package/esm2022/lib/models/report/my-tax/my-tax-deductions/my-tax-deductions.mjs +96 -0
  126. package/esm2022/lib/models/service-subscription/service-payment.mjs +22 -0
  127. package/esm2022/lib/models/service-subscription/service-product.mjs +27 -0
  128. package/esm2022/lib/models/sole/sole-business.mjs +57 -0
  129. package/esm2022/lib/models/sole/sole-invoice.mjs +149 -0
  130. package/esm2022/lib/models/tax-return/tax-return-item.mjs +40 -0
  131. package/esm2022/lib/models/vehicle/vehicle-claim.mjs +60 -0
  132. package/esm2022/lib/pipes/app-currency.pipe.mjs +23 -0
  133. package/esm2022/lib/services/account-setup/account-setup.service.mjs +169 -0
  134. package/esm2022/lib/services/affiliate/rewardful/rewardful.service.mjs +34 -0
  135. package/esm2022/lib/services/asset/assets.service.mjs +51 -0
  136. package/esm2022/lib/services/auth/auth.service.mjs +55 -0
  137. package/esm2022/lib/services/auth/jwt.service.mjs +48 -0
  138. package/esm2022/lib/services/bank/bank-account-calculation.service.mjs +36 -0
  139. package/esm2022/lib/services/bank/bank-transaction-calculation.service.mjs +61 -0
  140. package/esm2022/lib/services/data.service.mjs +45 -0
  141. package/esm2022/lib/services/event/event-dispatcher.service.mjs +41 -0
  142. package/esm2022/lib/services/event/sse.service.mjs +48 -0
  143. package/esm2022/lib/services/export/export-formatter.service.mjs +34 -0
  144. package/esm2022/lib/services/header-title/header-title.service.mjs +28 -0
  145. package/esm2022/lib/services/http/address/address.service.mjs +37 -0
  146. package/esm2022/lib/services/http/bank/bank-account/bank-account.service.mjs +79 -0
  147. package/esm2022/lib/services/http/bank/bank-connection/bank-connection.service.mjs +93 -0
  148. package/esm2022/lib/services/http/bank/bank-transaction/bank-transaction.service.mjs +72 -0
  149. package/esm2022/lib/services/http/bank/bank.service.mjs +27 -0
  150. package/esm2022/lib/services/http/bank/basiq/basiq-token.service.mjs +39 -0
  151. package/esm2022/lib/services/http/bank/basiq/basiq.service.mjs +142 -0
  152. package/esm2022/lib/services/http/budget/budget.service.mjs +24 -0
  153. package/esm2022/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.mjs +27 -0
  154. package/esm2022/lib/services/http/chart-accounts/chart-accounts.service.mjs +49 -0
  155. package/esm2022/lib/services/http/chat/chat.service.mjs +86 -0
  156. package/esm2022/lib/services/http/chat/message-document.service.mjs +76 -0
  157. package/esm2022/lib/services/http/chat/message.service.mjs +67 -0
  158. package/esm2022/lib/services/http/client/capital-gain/annual-client-details.service.mjs +24 -0
  159. package/esm2022/lib/services/http/client/occupation/occupation.service.mjs +43 -0
  160. package/esm2022/lib/services/http/depreciation/depreciation-capital-project/depreciation-capital-project.service.mjs +27 -0
  161. package/esm2022/lib/services/http/depreciation/depreciation.service.mjs +96 -0
  162. package/esm2022/lib/services/http/document/document-folder/document-folder.service.mjs +26 -0
  163. package/esm2022/lib/services/http/document/document.service.mjs +24 -0
  164. package/esm2022/lib/services/http/facebook/facebook.service.mjs +90 -0
  165. package/esm2022/lib/services/http/file/file.service.mjs +40 -0
  166. package/esm2022/lib/services/http/firm/client-income/client-income-types.service.mjs +24 -0
  167. package/esm2022/lib/services/http/firm/client-invite/client-invite-messages.enum.mjs +15 -0
  168. package/esm2022/lib/services/http/firm/client-invite/client-invite.service.mjs +113 -0
  169. package/esm2022/lib/services/http/firm/client-movement/client-movement.service.mjs +90 -0
  170. package/esm2022/lib/services/http/firm/employee/employee.service.mjs +70 -0
  171. package/esm2022/lib/services/http/firm/employee-invite/employee-invite.service.mjs +51 -0
  172. package/esm2022/lib/services/http/firm/firm.service.mjs +63 -0
  173. package/esm2022/lib/services/http/firm/portfolio-report/client-portfolio-report.service.mjs +37 -0
  174. package/esm2022/lib/services/http/google/google.service.mjs +80 -0
  175. package/esm2022/lib/services/http/holding/holding-sale.service.mjs +24 -0
  176. package/esm2022/lib/services/http/holding/holding-type.service.mjs +24 -0
  177. package/esm2022/lib/services/http/holding/holding.service.mjs +29 -0
  178. package/esm2022/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.mjs +79 -0
  179. package/esm2022/lib/services/http/income-source/income-source.service.mjs +88 -0
  180. package/esm2022/lib/services/http/income-source/salary-forecast/salary-forecast.service.mjs +81 -0
  181. package/esm2022/lib/services/http/income-source/sole-forecast/sole-forecast.service.mjs +88 -0
  182. package/esm2022/lib/services/http/loan/borrowing-expense/borrowing-expense.service.mjs +74 -0
  183. package/esm2022/lib/services/http/loan/loan.service.mjs +86 -0
  184. package/esm2022/lib/services/http/property/borrowing-report/borrowing-report.service.mjs +24 -0
  185. package/esm2022/lib/services/http/property/property-category/property-category.service.mjs +26 -0
  186. package/esm2022/lib/services/http/property/property-category-movement/property-category-movement.service.mjs +26 -0
  187. package/esm2022/lib/services/http/property/property-document/property-document.service.mjs +52 -0
  188. package/esm2022/lib/services/http/property/property-sale/property-sale.service.mjs +23 -0
  189. package/esm2022/lib/services/http/property/property-share/property-share.service.mjs +61 -0
  190. package/esm2022/lib/services/http/property/property-valuation/property-valuation.service.mjs +39 -0
  191. package/esm2022/lib/services/http/property/property.service.mjs +128 -0
  192. package/esm2022/lib/services/http/rest/rest-old.service.mjs +235 -0
  193. package/esm2022/lib/services/http/rest/rest.service.mjs +302 -0
  194. package/esm2022/lib/services/http/service-notification/service-notification.service.mjs +74 -0
  195. package/esm2022/lib/services/http/setup-item/setup-item.service.mjs +24 -0
  196. package/esm2022/lib/services/http/sole/bas-report/bas-report.service.mjs +21 -0
  197. package/esm2022/lib/services/http/sole/sole-business/sole-business.service.mjs +30 -0
  198. package/esm2022/lib/services/http/sole/sole-business-activity/sole-business-activity.service.mjs +21 -0
  199. package/esm2022/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.mjs +24 -0
  200. package/esm2022/lib/services/http/sole/sole-business-loss/sole-business-loss.service.mjs +33 -0
  201. package/esm2022/lib/services/http/sole/sole-contact/sole-contact.service.mjs +21 -0
  202. package/esm2022/lib/services/http/sole/sole-depreciation-method/sole-depreciation-method.service.mjs +73 -0
  203. package/esm2022/lib/services/http/sole/sole-details/sole-details.service.mjs +64 -0
  204. package/esm2022/lib/services/http/sole/sole-invoice/sole-invoice.service.mjs +82 -0
  205. package/esm2022/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.mjs +21 -0
  206. package/esm2022/lib/services/http/subscription/service-payment/service-payment.service.mjs +34 -0
  207. package/esm2022/lib/services/http/subscription/service-payment-method/service-payment-method.service.mjs +61 -0
  208. package/esm2022/lib/services/http/subscription/service-price/service-price.service.mjs +27 -0
  209. package/esm2022/lib/services/http/subscription/service-product/service-product.service.mjs +24 -0
  210. package/esm2022/lib/services/http/subscription/service-subscription/subscription.service.mjs +106 -0
  211. package/esm2022/lib/services/http/tax-review/tax-review-history/tax-review-history.service.mjs +40 -0
  212. package/esm2022/lib/services/http/tax-review/tax-review.service.mjs +101 -0
  213. package/esm2022/lib/services/http/tax-summary/tax-summary.service.mjs +71 -0
  214. package/esm2022/lib/services/http/transaction/transaction-allocation/allocation-rule/allocation-rule.service.mjs +23 -0
  215. package/esm2022/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.mjs +95 -0
  216. package/esm2022/lib/services/http/transaction/transaction.service.mjs +271 -0
  217. package/esm2022/lib/services/http/tutorial-video/tutorial-video.service.mjs +35 -0
  218. package/esm2022/lib/services/http/user/financial-year/financial-year.service.mjs +32 -0
  219. package/esm2022/lib/services/http/user/user-event-setting/user-event-setting.service.mjs +24 -0
  220. package/esm2022/lib/services/http/user/user-event-type/user-event-type.service.mjs +24 -0
  221. package/esm2022/lib/services/http/user/user.service.mjs +134 -0
  222. package/esm2022/lib/services/http/user/users-invite/users-invite.service.mjs +23 -0
  223. package/esm2022/lib/services/http/vehicle/vehicle-claim-details.service.mjs +75 -0
  224. package/esm2022/lib/services/http/vehicle/vehicle-claim.service.mjs +69 -0
  225. package/esm2022/lib/services/http/vehicle/vehicle-logbook/vehicle-logbook.service.mjs +25 -0
  226. package/esm2022/lib/services/http/vehicle/vehicle.service.mjs +25 -0
  227. package/esm2022/lib/services/intercom/intercom.service.mjs +41 -0
  228. package/esm2022/lib/services/json/chart-accounts/chart-accounts-value.service.mjs +31 -0
  229. package/esm2022/lib/services/json/holding/holding-type-exchange.service.mjs +23 -0
  230. package/esm2022/lib/services/json/income-source/income-source-type.service.mjs +23 -0
  231. package/esm2022/lib/services/json/tax-exemption/tax-exemption.service.mjs +23 -0
  232. package/esm2022/lib/services/json/tax-return/tax-return-item.service.mjs +23 -0
  233. package/esm2022/lib/services/mixpanel/mixpanel.service.mjs +53 -0
  234. package/esm2022/lib/services/pdf/pdf-from-dom-element/pdf-from-dom-element.service.mjs +47 -0
  235. package/esm2022/lib/services/pdf/pdf-from-table/pdf-from-data-table/pdf-from-data-table.service.mjs +46 -0
  236. package/esm2022/lib/services/pdf/pdf-from-table/pdf-from-html-table/pdf-from-html-table.service.mjs +42 -0
  237. package/esm2022/lib/services/pdf/pdf-from-table/pdf-from-table.service.mjs +63 -0
  238. package/esm2022/lib/services/preloader/preloader.service.mjs +30 -0
  239. package/esm2022/lib/services/property/corelogic/corelogic.service.mjs +42 -0
  240. package/esm2022/lib/services/property/equity-position-chart/equity-position-chart.service.mjs +39 -0
  241. package/esm2022/lib/services/property/property-calculation/property-calculation.service.mjs +159 -0
  242. package/esm2022/lib/services/report/property/property-transaction-report.service.mjs +65 -0
  243. package/esm2022/lib/services/toast/toast.service.mjs +59 -0
  244. package/esm2022/lib/services/transaction/transaction-calculation.service.mjs +77 -0
  245. package/esm2022/lib/services/user/user-switcher.service.mjs +37 -0
  246. package/esm2022/lib/services/xlsx/xlsx.service.mjs +84 -0
  247. package/esm2022/lib/tt-core.module.mjs +37 -0
  248. package/esm2022/lib/validators/unique-email.validator.mjs +20 -0
  249. package/fesm2022/taxtank-core.mjs +23663 -0
  250. package/fesm2022/taxtank-core.mjs.map +1 -0
  251. package/lib/collections/vehicle/best-vehicle-logbook.collection.d.ts +2 -1
  252. package/lib/collections/vehicle/vehicle-logbook.collection.d.ts +3 -2
  253. package/lib/db/Models/address.d.ts +0 -1
  254. package/lib/db/Models/bank/bank-account-balance.d.ts +0 -1
  255. package/lib/db/Models/bank/bank-account-property.d.ts +0 -1
  256. package/lib/db/Models/bank/bank-account.d.ts +0 -1
  257. package/lib/db/Models/bank/bank-connection.d.ts +0 -1
  258. package/lib/db/Models/bank/bank-transaction-import.d.ts +0 -1
  259. package/lib/db/Models/bank/bank-transaction.d.ts +0 -1
  260. package/lib/db/Models/bank/bank.d.ts +0 -1
  261. package/lib/db/Models/bank/basiq-job.d.ts +0 -1
  262. package/lib/db/Models/chart-accounts/chart-accounts-depreciation.d.ts +0 -1
  263. package/lib/db/Models/chart-accounts/chart-accounts-heading.d.ts +0 -1
  264. package/lib/db/Models/chart-accounts/chart-accounts-meta-field.d.ts +0 -1
  265. package/lib/db/Models/chart-accounts/chart-accounts-value.d.ts +0 -1
  266. package/lib/db/Models/chart-accounts/chart-accounts.d.ts +0 -1
  267. package/lib/db/Models/client/client-details.d.ts +0 -1
  268. package/lib/db/Models/client/client-income-types.d.ts +0 -1
  269. package/lib/db/Models/client/occupation.d.ts +0 -1
  270. package/lib/db/Models/country.d.ts +0 -1
  271. package/lib/db/Models/depreciation/depreciation-capital-project.d.ts +0 -1
  272. package/lib/db/Models/depreciation/depreciation-forecast.d.ts +0 -1
  273. package/lib/db/Models/depreciation/depreciation.d.ts +0 -1
  274. package/lib/db/Models/document/document-base.d.ts +0 -1
  275. package/lib/db/Models/document/document-folder.d.ts +0 -1
  276. package/lib/db/Models/document/document.d.ts +0 -1
  277. package/lib/db/Models/document/property-document.d.ts +0 -1
  278. package/lib/db/Models/file.d.ts +0 -1
  279. package/lib/db/Models/firm/chat.d.ts +0 -1
  280. package/lib/db/Models/firm/client-invite.d.ts +2 -3
  281. package/lib/db/Models/firm/client-movement.d.ts +0 -1
  282. package/lib/db/Models/firm/employee-invite.d.ts +0 -1
  283. package/lib/db/Models/firm/firm-invite.d.ts +0 -1
  284. package/lib/db/Models/firm/firm.d.ts +0 -1
  285. package/lib/db/Models/firm/message-document.d.ts +0 -1
  286. package/lib/db/Models/firm/message.d.ts +0 -1
  287. package/lib/db/Models/incomeSource/income-source-forecast.d.ts +0 -1
  288. package/lib/db/Models/incomeSource/income-source-type.d.ts +0 -1
  289. package/lib/db/Models/incomeSource/income-source.d.ts +0 -1
  290. package/lib/db/Models/incomeSource/salary-forecast.d.ts +0 -1
  291. package/lib/db/Models/loan/borrowing-expense-loan.d.ts +0 -1
  292. package/lib/db/Models/loan/borrowing-expense.d.ts +0 -1
  293. package/lib/db/Models/loan/loan-payout.d.ts +0 -1
  294. package/lib/db/Models/loan/loan.d.ts +0 -1
  295. package/lib/db/Models/phone.d.ts +0 -1
  296. package/lib/db/Models/property/borrowing-report.d.ts +0 -1
  297. package/lib/db/Models/property/property-category-movement.d.ts +0 -1
  298. package/lib/db/Models/property/property-category.d.ts +0 -1
  299. package/lib/db/Models/property/property-forecast.d.ts +0 -1
  300. package/lib/db/Models/property/property-sale/property-sale-tax-exemption-meta-field.d.ts +0 -1
  301. package/lib/db/Models/property/property-sale/property-sale.d.ts +0 -1
  302. package/lib/db/Models/property/property-sale/tax-exemption-meta-field.d.ts +0 -1
  303. package/lib/db/Models/property/property-sale/tax-exemption.d.ts +0 -1
  304. package/lib/db/Models/property/property-share.d.ts +0 -1
  305. package/lib/db/Models/property/property-subscription.d.ts +0 -1
  306. package/lib/db/Models/property/property-valuation.d.ts +0 -1
  307. package/lib/db/Models/property/property.d.ts +0 -1
  308. package/lib/db/Models/service-notification.d.ts +0 -1
  309. package/lib/db/Models/sole/bas-report.d.ts +0 -1
  310. package/lib/db/Models/sole/sole-business-activity.d.ts +0 -1
  311. package/lib/db/Models/sole/sole-business-allocation.d.ts +0 -1
  312. package/lib/db/Models/sole/sole-business-loss-offset-rule.d.ts +0 -1
  313. package/lib/db/Models/sole/sole-business-loss.d.ts +0 -1
  314. package/lib/db/Models/sole/sole-business.d.ts +0 -1
  315. package/lib/db/Models/sole/sole-contact.d.ts +0 -1
  316. package/lib/db/Models/sole/sole-depreciation-method.d.ts +0 -1
  317. package/lib/db/Models/sole/sole-details.d.ts +0 -1
  318. package/lib/db/Models/sole/sole-forecast.d.ts +0 -1
  319. package/lib/db/Models/sole/sole-invoice-item.d.ts +0 -1
  320. package/lib/db/Models/sole/sole-invoice-template.d.ts +0 -1
  321. package/lib/db/Models/sole/sole-invoice.d.ts +0 -1
  322. package/lib/db/Models/spare/spare-document-category.d.ts +0 -1
  323. package/lib/db/Models/spare/spare-document.d.ts +0 -1
  324. package/lib/db/Models/subscription/service-payment-method.d.ts +0 -1
  325. package/lib/db/Models/subscription/service-payment.d.ts +0 -1
  326. package/lib/db/Models/subscription/service-price.d.ts +0 -1
  327. package/lib/db/Models/subscription/service-product.d.ts +2 -2
  328. package/lib/db/Models/subscription/service-subscription-item.d.ts +0 -1
  329. package/lib/db/Models/subscription/service-subscription.d.ts +2 -1
  330. package/lib/db/Models/tax-calculation.d.ts +0 -1
  331. package/lib/db/Models/tax-return/tax-return-category.d.ts +0 -1
  332. package/lib/db/Models/tax-return/tax-return-item.d.ts +0 -1
  333. package/lib/db/Models/tax-return/tax-return.d.ts +0 -1
  334. package/lib/db/Models/transaction/allocation-rule-condition.d.ts +0 -1
  335. package/lib/db/Models/transaction/allocation-rule-transaction-meta-field.d.ts +0 -1
  336. package/lib/db/Models/transaction/allocation-rule-transaction.d.ts +0 -1
  337. package/lib/db/Models/transaction/allocation-rule.d.ts +0 -1
  338. package/lib/db/Models/transaction/transaction-allocation.d.ts +0 -1
  339. package/lib/db/Models/transaction/transaction-meta-field.d.ts +0 -1
  340. package/lib/db/Models/transaction/transaction.d.ts +0 -1
  341. package/lib/db/Models/user/employee-details.d.ts +0 -1
  342. package/lib/db/Models/user/registration-invite.d.ts +0 -1
  343. package/lib/db/Models/user/user-event-setting.d.ts +0 -1
  344. package/lib/db/Models/user/user-event-type-category.d.ts +0 -1
  345. package/lib/db/Models/user/user-event-type.d.ts +0 -1
  346. package/lib/db/Models/user/user-event.d.ts +0 -1
  347. package/lib/db/Models/vehicle/vehicle-claim-details.d.ts +0 -1
  348. package/lib/db/Models/vehicle/vehicle-claim.d.ts +0 -1
  349. package/lib/db/Models/vehicle/vehicle-logbook.d.ts +0 -1
  350. package/lib/db/Models/vehicle/vehicle.d.ts +0 -1
  351. package/lib/services/http/bank/bank-connection/bank-connection.service.d.ts +1 -3
  352. package/lib/services/http/chat/chat.service.d.ts +2 -3
  353. package/lib/services/http/chat/message.service.d.ts +2 -3
  354. package/lib/services/http/firm/client-invite/client-invite-messages.enum.d.ts +5 -2
  355. package/lib/services/http/firm/client-invite/client-invite.service.d.ts +15 -14
  356. package/lib/services/http/firm/client-movement/client-movement.service.d.ts +19 -13
  357. package/lib/services/http/rest/rest.service.d.ts +13 -1
  358. package/lib/services/http/subscription/service-payment-method/service-payment-method.service.d.ts +2 -3
  359. package/lib/services/http/subscription/service-subscription/subscription.service.d.ts +2 -5
  360. package/package.json +12 -18
  361. package/esm2020/lib/collections/subscription/service-subscription.collection.mjs +0 -55
  362. package/esm2020/lib/collections/vehicle/best-vehicle-logbook.collection.mjs +0 -92
  363. package/esm2020/lib/collections/vehicle/vehicle-logbook.collection.mjs +0 -49
  364. package/esm2020/lib/db/Models/address.mjs +0 -4
  365. package/esm2020/lib/db/Models/bank/bank-account-balance.mjs +0 -9
  366. package/esm2020/lib/db/Models/bank/bank-account-property.mjs +0 -9
  367. package/esm2020/lib/db/Models/bank/bank-account.mjs +0 -9
  368. package/esm2020/lib/db/Models/bank/bank-connection.mjs +0 -4
  369. package/esm2020/lib/db/Models/bank/bank-transaction-import.mjs +0 -4
  370. package/esm2020/lib/db/Models/bank/bank-transaction.mjs +0 -4
  371. package/esm2020/lib/db/Models/bank/bank.mjs +0 -4
  372. package/esm2020/lib/db/Models/bank/basiq-job.mjs +0 -4
  373. package/esm2020/lib/db/Models/chart-accounts/chart-accounts-depreciation.mjs +0 -4
  374. package/esm2020/lib/db/Models/chart-accounts/chart-accounts-heading.mjs +0 -4
  375. package/esm2020/lib/db/Models/chart-accounts/chart-accounts-meta-field.mjs +0 -4
  376. package/esm2020/lib/db/Models/chart-accounts/chart-accounts-value.mjs +0 -4
  377. package/esm2020/lib/db/Models/chart-accounts/chart-accounts.mjs +0 -4
  378. package/esm2020/lib/db/Models/client/client-details.mjs +0 -4
  379. package/esm2020/lib/db/Models/client/client-income-types.mjs +0 -4
  380. package/esm2020/lib/db/Models/client/occupation.mjs +0 -4
  381. package/esm2020/lib/db/Models/country.mjs +0 -4
  382. package/esm2020/lib/db/Models/depreciation/depreciation-capital-project.mjs +0 -4
  383. package/esm2020/lib/db/Models/depreciation/depreciation-forecast.mjs +0 -4
  384. package/esm2020/lib/db/Models/depreciation/depreciation.mjs +0 -4
  385. package/esm2020/lib/db/Models/document/document-base.mjs +0 -4
  386. package/esm2020/lib/db/Models/document/document-folder.mjs +0 -4
  387. package/esm2020/lib/db/Models/document/document.mjs +0 -4
  388. package/esm2020/lib/db/Models/document/property-document.mjs +0 -4
  389. package/esm2020/lib/db/Models/file.mjs +0 -4
  390. package/esm2020/lib/db/Models/firm/chat.mjs +0 -4
  391. package/esm2020/lib/db/Models/firm/client-invite.mjs +0 -4
  392. package/esm2020/lib/db/Models/firm/client-movement.mjs +0 -4
  393. package/esm2020/lib/db/Models/firm/employee-invite.mjs +0 -4
  394. package/esm2020/lib/db/Models/firm/firm-invite.mjs +0 -4
  395. package/esm2020/lib/db/Models/firm/firm.mjs +0 -4
  396. package/esm2020/lib/db/Models/firm/message-document.mjs +0 -4
  397. package/esm2020/lib/db/Models/firm/message.mjs +0 -4
  398. package/esm2020/lib/db/Models/holding/holding-sale.mjs +0 -3
  399. package/esm2020/lib/db/Models/incomeSource/income-source-forecast.mjs +0 -4
  400. package/esm2020/lib/db/Models/incomeSource/income-source-type.mjs +0 -4
  401. package/esm2020/lib/db/Models/incomeSource/income-source.mjs +0 -4
  402. package/esm2020/lib/db/Models/incomeSource/salary-forecast.mjs +0 -4
  403. package/esm2020/lib/db/Models/loan/borrowing-expense-loan.mjs +0 -4
  404. package/esm2020/lib/db/Models/loan/borrowing-expense.mjs +0 -4
  405. package/esm2020/lib/db/Models/loan/loan-payout.mjs +0 -12
  406. package/esm2020/lib/db/Models/loan/loan.mjs +0 -21
  407. package/esm2020/lib/db/Models/phone.mjs +0 -4
  408. package/esm2020/lib/db/Models/property/borrowing-report.mjs +0 -4
  409. package/esm2020/lib/db/Models/property/property-category-movement.mjs +0 -4
  410. package/esm2020/lib/db/Models/property/property-category.mjs +0 -4
  411. package/esm2020/lib/db/Models/property/property-forecast.mjs +0 -4
  412. package/esm2020/lib/db/Models/property/property-sale/property-sale-tax-exemption-meta-field.mjs +0 -4
  413. package/esm2020/lib/db/Models/property/property-sale/property-sale.mjs +0 -4
  414. package/esm2020/lib/db/Models/property/property-sale/tax-exemption-meta-field.mjs +0 -4
  415. package/esm2020/lib/db/Models/property/property-sale/tax-exemption.mjs +0 -4
  416. package/esm2020/lib/db/Models/property/property-share.mjs +0 -9
  417. package/esm2020/lib/db/Models/property/property-subscription.mjs +0 -4
  418. package/esm2020/lib/db/Models/property/property-valuation.mjs +0 -4
  419. package/esm2020/lib/db/Models/property/property.mjs +0 -21
  420. package/esm2020/lib/db/Models/service-notification.mjs +0 -4
  421. package/esm2020/lib/db/Models/sole/bas-report.mjs +0 -4
  422. package/esm2020/lib/db/Models/sole/sole-business-activity.mjs +0 -4
  423. package/esm2020/lib/db/Models/sole/sole-business-allocation.mjs +0 -4
  424. package/esm2020/lib/db/Models/sole/sole-business-loss-offset-rule.mjs +0 -4
  425. package/esm2020/lib/db/Models/sole/sole-business-loss.mjs +0 -4
  426. package/esm2020/lib/db/Models/sole/sole-business.mjs +0 -4
  427. package/esm2020/lib/db/Models/sole/sole-contact.mjs +0 -4
  428. package/esm2020/lib/db/Models/sole/sole-depreciation-method.mjs +0 -4
  429. package/esm2020/lib/db/Models/sole/sole-details.mjs +0 -4
  430. package/esm2020/lib/db/Models/sole/sole-forecast.mjs +0 -4
  431. package/esm2020/lib/db/Models/sole/sole-invoice-item.mjs +0 -4
  432. package/esm2020/lib/db/Models/sole/sole-invoice-template.mjs +0 -4
  433. package/esm2020/lib/db/Models/sole/sole-invoice.mjs +0 -4
  434. package/esm2020/lib/db/Models/spare/spare-document-category.mjs +0 -4
  435. package/esm2020/lib/db/Models/spare/spare-document.mjs +0 -4
  436. package/esm2020/lib/db/Models/subscription/service-payment-method.mjs +0 -4
  437. package/esm2020/lib/db/Models/subscription/service-payment.mjs +0 -4
  438. package/esm2020/lib/db/Models/subscription/service-price.mjs +0 -4
  439. package/esm2020/lib/db/Models/subscription/service-product.mjs +0 -4
  440. package/esm2020/lib/db/Models/subscription/service-subscription-item.mjs +0 -4
  441. package/esm2020/lib/db/Models/subscription/service-subscription.mjs +0 -4
  442. package/esm2020/lib/db/Models/tax-calculation.mjs +0 -4
  443. package/esm2020/lib/db/Models/tax-return/tax-return-category.mjs +0 -4
  444. package/esm2020/lib/db/Models/tax-return/tax-return-item.mjs +0 -4
  445. package/esm2020/lib/db/Models/tax-return/tax-return.mjs +0 -4
  446. package/esm2020/lib/db/Models/transaction/allocation-rule-condition.mjs +0 -4
  447. package/esm2020/lib/db/Models/transaction/allocation-rule-transaction-meta-field.mjs +0 -4
  448. package/esm2020/lib/db/Models/transaction/allocation-rule-transaction.mjs +0 -4
  449. package/esm2020/lib/db/Models/transaction/allocation-rule.mjs +0 -4
  450. package/esm2020/lib/db/Models/transaction/transaction-allocation.mjs +0 -4
  451. package/esm2020/lib/db/Models/transaction/transaction-meta-field.mjs +0 -4
  452. package/esm2020/lib/db/Models/transaction/transaction.mjs +0 -4
  453. package/esm2020/lib/db/Models/user/employee-details.mjs +0 -4
  454. package/esm2020/lib/db/Models/user/registration-invite.mjs +0 -4
  455. package/esm2020/lib/db/Models/user/user-event-setting.mjs +0 -4
  456. package/esm2020/lib/db/Models/user/user-event-type-category.mjs +0 -4
  457. package/esm2020/lib/db/Models/user/user-event-type.mjs +0 -4
  458. package/esm2020/lib/db/Models/user/user-event.mjs +0 -4
  459. package/esm2020/lib/db/Models/vehicle/vehicle-claim-details.mjs +0 -4
  460. package/esm2020/lib/db/Models/vehicle/vehicle-claim.mjs +0 -4
  461. package/esm2020/lib/db/Models/vehicle/vehicle-logbook.mjs +0 -4
  462. package/esm2020/lib/db/Models/vehicle/vehicle.mjs +0 -4
  463. package/esm2020/lib/forms/address/address.form.mjs +0 -188
  464. package/esm2020/lib/forms/bank/bank-account/bank-account-add-manual.form.mjs +0 -46
  465. package/esm2020/lib/forms/bank/bank-account/bank-accounts-import.form.mjs +0 -50
  466. package/esm2020/lib/forms/loan/loan.form.mjs +0 -90
  467. package/esm2020/lib/forms/sole/sole-invoice-item.form.mjs +0 -16
  468. package/esm2020/lib/forms/vehicle/vehicle-logbook.form.mjs +0 -63
  469. package/esm2020/lib/forms/vehicle/vehicle.form.mjs +0 -17
  470. package/esm2020/lib/interceptors/basiq-client-id.interceptor.mjs +0 -31
  471. package/esm2020/lib/interceptors/basiq-token.interceptor.mjs +0 -33
  472. package/esm2020/lib/interceptors/corelogic-interceptor.mjs +0 -41
  473. package/esm2020/lib/interceptors/financial-year-interceptor.mjs +0 -42
  474. package/esm2020/lib/interceptors/interceptors.module.mjs +0 -96
  475. package/esm2020/lib/interceptors/jwt-interceptor.mjs +0 -138
  476. package/esm2020/lib/interceptors/preloader.interceptor.mjs +0 -32
  477. package/esm2020/lib/interceptors/user-switcher-interceptor.mjs +0 -40
  478. package/esm2020/lib/models/address/country.mjs +0 -18
  479. package/esm2020/lib/models/chart-accounts/chart-accounts.mjs +0 -234
  480. package/esm2020/lib/models/depreciation/depreciation.mjs +0 -188
  481. package/esm2020/lib/models/file/file.mjs +0 -12
  482. package/esm2020/lib/models/financial-year/financial-year.mjs +0 -55
  483. package/esm2020/lib/models/loan/loan.mjs +0 -84
  484. package/esm2020/lib/models/property/property.mjs +0 -265
  485. package/esm2020/lib/models/report/my-tax/my-tax-deductions/my-tax-deductions.mjs +0 -96
  486. package/esm2020/lib/models/service-subscription/service-payment.mjs +0 -22
  487. package/esm2020/lib/models/service-subscription/service-product.mjs +0 -27
  488. package/esm2020/lib/models/sole/sole-business.mjs +0 -57
  489. package/esm2020/lib/models/sole/sole-invoice.mjs +0 -149
  490. package/esm2020/lib/models/tax-return/tax-return-item.mjs +0 -40
  491. package/esm2020/lib/models/vehicle/vehicle-claim.mjs +0 -60
  492. package/esm2020/lib/pipes/app-currency.pipe.mjs +0 -23
  493. package/esm2020/lib/services/account-setup/account-setup.service.mjs +0 -169
  494. package/esm2020/lib/services/affiliate/rewardful/rewardful.service.mjs +0 -34
  495. package/esm2020/lib/services/asset/assets.service.mjs +0 -51
  496. package/esm2020/lib/services/auth/auth.service.mjs +0 -55
  497. package/esm2020/lib/services/auth/jwt.service.mjs +0 -48
  498. package/esm2020/lib/services/bank/bank-account-calculation.service.mjs +0 -36
  499. package/esm2020/lib/services/bank/bank-transaction-calculation.service.mjs +0 -61
  500. package/esm2020/lib/services/data.service.mjs +0 -45
  501. package/esm2020/lib/services/event/event-dispatcher.service.mjs +0 -41
  502. package/esm2020/lib/services/event/sse.service.mjs +0 -48
  503. package/esm2020/lib/services/export/export-formatter.service.mjs +0 -34
  504. package/esm2020/lib/services/header-title/header-title.service.mjs +0 -28
  505. package/esm2020/lib/services/http/address/address.service.mjs +0 -37
  506. package/esm2020/lib/services/http/bank/bank-account/bank-account.service.mjs +0 -79
  507. package/esm2020/lib/services/http/bank/bank-connection/bank-connection.service.mjs +0 -95
  508. package/esm2020/lib/services/http/bank/bank-transaction/bank-transaction.service.mjs +0 -72
  509. package/esm2020/lib/services/http/bank/bank.service.mjs +0 -27
  510. package/esm2020/lib/services/http/bank/basiq/basiq-token.service.mjs +0 -39
  511. package/esm2020/lib/services/http/bank/basiq/basiq.service.mjs +0 -142
  512. package/esm2020/lib/services/http/budget/budget.service.mjs +0 -24
  513. package/esm2020/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.mjs +0 -27
  514. package/esm2020/lib/services/http/chart-accounts/chart-accounts.service.mjs +0 -49
  515. package/esm2020/lib/services/http/chat/chat.service.mjs +0 -87
  516. package/esm2020/lib/services/http/chat/message-document.service.mjs +0 -76
  517. package/esm2020/lib/services/http/chat/message.service.mjs +0 -68
  518. package/esm2020/lib/services/http/client/capital-gain/annual-client-details.service.mjs +0 -24
  519. package/esm2020/lib/services/http/client/occupation/occupation.service.mjs +0 -43
  520. package/esm2020/lib/services/http/depreciation/depreciation-capital-project/depreciation-capital-project.service.mjs +0 -27
  521. package/esm2020/lib/services/http/depreciation/depreciation.service.mjs +0 -96
  522. package/esm2020/lib/services/http/document/document-folder/document-folder.service.mjs +0 -26
  523. package/esm2020/lib/services/http/document/document.service.mjs +0 -24
  524. package/esm2020/lib/services/http/facebook/facebook.service.mjs +0 -90
  525. package/esm2020/lib/services/http/file/file.service.mjs +0 -40
  526. package/esm2020/lib/services/http/firm/client-income/client-income-types.service.mjs +0 -24
  527. package/esm2020/lib/services/http/firm/client-invite/client-invite-messages.enum.mjs +0 -12
  528. package/esm2020/lib/services/http/firm/client-invite/client-invite.service.mjs +0 -120
  529. package/esm2020/lib/services/http/firm/client-movement/client-movement.service.mjs +0 -90
  530. package/esm2020/lib/services/http/firm/employee/employee.service.mjs +0 -70
  531. package/esm2020/lib/services/http/firm/employee-invite/employee-invite.service.mjs +0 -51
  532. package/esm2020/lib/services/http/firm/firm.service.mjs +0 -63
  533. package/esm2020/lib/services/http/firm/portfolio-report/client-portfolio-report.service.mjs +0 -37
  534. package/esm2020/lib/services/http/google/google.service.mjs +0 -80
  535. package/esm2020/lib/services/http/holding/holding-sale.service.mjs +0 -24
  536. package/esm2020/lib/services/http/holding/holding-type.service.mjs +0 -24
  537. package/esm2020/lib/services/http/holding/holding.service.mjs +0 -29
  538. package/esm2020/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.mjs +0 -79
  539. package/esm2020/lib/services/http/income-source/income-source.service.mjs +0 -88
  540. package/esm2020/lib/services/http/income-source/salary-forecast/salary-forecast.service.mjs +0 -81
  541. package/esm2020/lib/services/http/income-source/sole-forecast/sole-forecast.service.mjs +0 -88
  542. package/esm2020/lib/services/http/loan/borrowing-expense/borrowing-expense.service.mjs +0 -74
  543. package/esm2020/lib/services/http/loan/loan.service.mjs +0 -86
  544. package/esm2020/lib/services/http/property/borrowing-report/borrowing-report.service.mjs +0 -24
  545. package/esm2020/lib/services/http/property/property-category/property-category.service.mjs +0 -26
  546. package/esm2020/lib/services/http/property/property-category-movement/property-category-movement.service.mjs +0 -26
  547. package/esm2020/lib/services/http/property/property-document/property-document.service.mjs +0 -52
  548. package/esm2020/lib/services/http/property/property-sale/property-sale.service.mjs +0 -23
  549. package/esm2020/lib/services/http/property/property-share/property-share.service.mjs +0 -61
  550. package/esm2020/lib/services/http/property/property-valuation/property-valuation.service.mjs +0 -39
  551. package/esm2020/lib/services/http/property/property.service.mjs +0 -128
  552. package/esm2020/lib/services/http/rest/rest-old.service.mjs +0 -235
  553. package/esm2020/lib/services/http/rest/rest.service.mjs +0 -281
  554. package/esm2020/lib/services/http/service-notification/service-notification.service.mjs +0 -74
  555. package/esm2020/lib/services/http/setup-item/setup-item.service.mjs +0 -24
  556. package/esm2020/lib/services/http/sole/bas-report/bas-report.service.mjs +0 -21
  557. package/esm2020/lib/services/http/sole/sole-business/sole-business.service.mjs +0 -30
  558. package/esm2020/lib/services/http/sole/sole-business-activity/sole-business-activity.service.mjs +0 -21
  559. package/esm2020/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.mjs +0 -24
  560. package/esm2020/lib/services/http/sole/sole-business-loss/sole-business-loss.service.mjs +0 -33
  561. package/esm2020/lib/services/http/sole/sole-contact/sole-contact.service.mjs +0 -21
  562. package/esm2020/lib/services/http/sole/sole-depreciation-method/sole-depreciation-method.service.mjs +0 -73
  563. package/esm2020/lib/services/http/sole/sole-details/sole-details.service.mjs +0 -64
  564. package/esm2020/lib/services/http/sole/sole-invoice/sole-invoice.service.mjs +0 -82
  565. package/esm2020/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.mjs +0 -21
  566. package/esm2020/lib/services/http/subscription/service-payment/service-payment.service.mjs +0 -34
  567. package/esm2020/lib/services/http/subscription/service-payment-method/service-payment-method.service.mjs +0 -62
  568. package/esm2020/lib/services/http/subscription/service-price/service-price.service.mjs +0 -27
  569. package/esm2020/lib/services/http/subscription/service-product/service-product.service.mjs +0 -24
  570. package/esm2020/lib/services/http/subscription/service-subscription/subscription.service.mjs +0 -109
  571. package/esm2020/lib/services/http/tax-review/tax-review-history/tax-review-history.service.mjs +0 -40
  572. package/esm2020/lib/services/http/tax-review/tax-review.service.mjs +0 -101
  573. package/esm2020/lib/services/http/tax-summary/tax-summary.service.mjs +0 -71
  574. package/esm2020/lib/services/http/transaction/transaction-allocation/allocation-rule/allocation-rule.service.mjs +0 -23
  575. package/esm2020/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.mjs +0 -95
  576. package/esm2020/lib/services/http/transaction/transaction.service.mjs +0 -271
  577. package/esm2020/lib/services/http/tutorial-video/tutorial-video.service.mjs +0 -35
  578. package/esm2020/lib/services/http/user/financial-year/financial-year.service.mjs +0 -32
  579. package/esm2020/lib/services/http/user/user-event-setting/user-event-setting.service.mjs +0 -24
  580. package/esm2020/lib/services/http/user/user-event-type/user-event-type.service.mjs +0 -24
  581. package/esm2020/lib/services/http/user/user.service.mjs +0 -134
  582. package/esm2020/lib/services/http/user/users-invite/users-invite.service.mjs +0 -23
  583. package/esm2020/lib/services/http/vehicle/vehicle-claim-details.service.mjs +0 -75
  584. package/esm2020/lib/services/http/vehicle/vehicle-claim.service.mjs +0 -69
  585. package/esm2020/lib/services/http/vehicle/vehicle-logbook/vehicle-logbook.service.mjs +0 -25
  586. package/esm2020/lib/services/http/vehicle/vehicle.service.mjs +0 -25
  587. package/esm2020/lib/services/intercom/intercom.service.mjs +0 -41
  588. package/esm2020/lib/services/json/chart-accounts/chart-accounts-value.service.mjs +0 -31
  589. package/esm2020/lib/services/json/holding/holding-type-exchange.service.mjs +0 -23
  590. package/esm2020/lib/services/json/income-source/income-source-type.service.mjs +0 -23
  591. package/esm2020/lib/services/json/tax-exemption/tax-exemption.service.mjs +0 -23
  592. package/esm2020/lib/services/json/tax-return/tax-return-item.service.mjs +0 -23
  593. package/esm2020/lib/services/mixpanel/mixpanel.service.mjs +0 -53
  594. package/esm2020/lib/services/pdf/pdf-from-dom-element/pdf-from-dom-element.service.mjs +0 -47
  595. package/esm2020/lib/services/pdf/pdf-from-table/pdf-from-data-table/pdf-from-data-table.service.mjs +0 -46
  596. package/esm2020/lib/services/pdf/pdf-from-table/pdf-from-html-table/pdf-from-html-table.service.mjs +0 -42
  597. package/esm2020/lib/services/pdf/pdf-from-table/pdf-from-table.service.mjs +0 -63
  598. package/esm2020/lib/services/preloader/preloader.service.mjs +0 -30
  599. package/esm2020/lib/services/property/corelogic/corelogic.service.mjs +0 -42
  600. package/esm2020/lib/services/property/equity-position-chart/equity-position-chart.service.mjs +0 -39
  601. package/esm2020/lib/services/property/property-calculation/property-calculation.service.mjs +0 -159
  602. package/esm2020/lib/services/report/property/property-transaction-report.service.mjs +0 -65
  603. package/esm2020/lib/services/toast/toast.service.mjs +0 -59
  604. package/esm2020/lib/services/transaction/transaction-calculation.service.mjs +0 -77
  605. package/esm2020/lib/services/user/user-switcher.service.mjs +0 -37
  606. package/esm2020/lib/services/xlsx/xlsx.service.mjs +0 -84
  607. package/esm2020/lib/tt-core.module.mjs +0 -37
  608. package/esm2020/lib/validators/unique-email.validator.mjs +0 -20
  609. package/fesm2015/taxtank-core.mjs +0 -23786
  610. package/fesm2015/taxtank-core.mjs.map +0 -1
  611. package/fesm2020/taxtank-core.mjs +0 -23641
  612. package/fesm2020/taxtank-core.mjs.map +0 -1
  613. /package/{esm2020 → esm2022}/lib/collections/account-setup-item.collection.mjs +0 -0
  614. /package/{esm2020 → esm2022}/lib/collections/allocation-group.collection.mjs +0 -0
  615. /package/{esm2020 → esm2022}/lib/collections/allocation-rule.collection.mjs +0 -0
  616. /package/{esm2020 → esm2022}/lib/collections/asset-sale.collection.mjs +0 -0
  617. /package/{esm2020 → esm2022}/lib/collections/bank-account.collection.mjs +0 -0
  618. /package/{esm2020 → esm2022}/lib/collections/bank-transaction.collection.mjs +0 -0
  619. /package/{esm2020 → esm2022}/lib/collections/chart-accounts.collection.mjs +0 -0
  620. /package/{esm2020 → esm2022}/lib/collections/chat/chat.collection.mjs +0 -0
  621. /package/{esm2020 → esm2022}/lib/collections/chat/index.mjs +0 -0
  622. /package/{esm2020 → esm2022}/lib/collections/chat/message-document.collection.mjs +0 -0
  623. /package/{esm2020 → esm2022}/lib/collections/chat/message.collection.mjs +0 -0
  624. /package/{esm2020 → esm2022}/lib/collections/client-invite.collection.mjs +0 -0
  625. /package/{esm2020 → esm2022}/lib/collections/client-movement.collection.mjs +0 -0
  626. /package/{esm2020 → esm2022}/lib/collections/client-portfolio-report.collection.mjs +0 -0
  627. /package/{esm2020 → esm2022}/lib/collections/client.collection.mjs +0 -0
  628. /package/{esm2020 → esm2022}/lib/collections/collection-dictionary.mjs +0 -0
  629. /package/{esm2020 → esm2022}/lib/collections/collection.mjs +0 -0
  630. /package/{esm2020 → esm2022}/lib/collections/depreciation-forecast.collection.mjs +0 -0
  631. /package/{esm2020 → esm2022}/lib/collections/depreciation.collection.mjs +0 -0
  632. /package/{esm2020 → esm2022}/lib/collections/employee.collection.mjs +0 -0
  633. /package/{esm2020 → esm2022}/lib/collections/exportable.collection.mjs +0 -0
  634. /package/{esm2020 → esm2022}/lib/collections/holding/holding-sale.collection.mjs +0 -0
  635. /package/{esm2020 → esm2022}/lib/collections/holding/holding-type.collection.mjs +0 -0
  636. /package/{esm2020 → esm2022}/lib/collections/holding/holding.collection.mjs +0 -0
  637. /package/{esm2020 → esm2022}/lib/collections/holding/index.mjs +0 -0
  638. /package/{esm2020 → esm2022}/lib/collections/income-source/income-source-forecast.collection.mjs +0 -0
  639. /package/{esm2020 → esm2022}/lib/collections/income-source/income-source.collection.mjs +0 -0
  640. /package/{esm2020 → esm2022}/lib/collections/income-source/index.mjs +0 -0
  641. /package/{esm2020 → esm2022}/lib/collections/index.mjs +0 -0
  642. /package/{esm2020 → esm2022}/lib/collections/loan/index.mjs +0 -0
  643. /package/{esm2020 → esm2022}/lib/collections/loan/loan-payment.collection.mjs +0 -0
  644. /package/{esm2020 → esm2022}/lib/collections/loan/loan.collection.mjs +0 -0
  645. /package/{esm2020 → esm2022}/lib/collections/property/index.mjs +0 -0
  646. /package/{esm2020 → esm2022}/lib/collections/property/property-category-movement.collection.mjs +0 -0
  647. /package/{esm2020 → esm2022}/lib/collections/property/property-sale/index.mjs +0 -0
  648. /package/{esm2020 → esm2022}/lib/collections/property/property-sale/property-sale-tax-exemption-meta-field.collection.mjs +0 -0
  649. /package/{esm2020 → esm2022}/lib/collections/property/property-sale/property-sale.collection.mjs +0 -0
  650. /package/{esm2020 → esm2022}/lib/collections/property/property-share.collection.mjs +0 -0
  651. /package/{esm2020 → esm2022}/lib/collections/property/property.collection.mjs +0 -0
  652. /package/{esm2020 → esm2022}/lib/collections/report/depreciation/depreciation-lvp-report-item.collection.mjs +0 -0
  653. /package/{esm2020 → esm2022}/lib/collections/report/depreciation/depreciation-report-item.collection.mjs +0 -0
  654. /package/{esm2020 → esm2022}/lib/collections/report/index.mjs +0 -0
  655. /package/{esm2020 → esm2022}/lib/collections/report/property/property-report-item-depreciation.collection.mjs +0 -0
  656. /package/{esm2020 → esm2022}/lib/collections/report/property/property-report-item-transaction.collection.mjs +0 -0
  657. /package/{esm2020 → esm2022}/lib/collections/report/property/property-report-item.collection.mjs +0 -0
  658. /package/{esm2020 → esm2022}/lib/collections/report/vehicle-expense/vehicle-expense.collection.mjs +0 -0
  659. /package/{esm2020 → esm2022}/lib/collections/sole/index.mjs +0 -0
  660. /package/{esm2020 → esm2022}/lib/collections/sole/sole-business-losses.collection.mjs +0 -0
  661. /package/{esm2020 → esm2022}/lib/collections/sole/sole-invoice-item.collection.mjs +0 -0
  662. /package/{esm2020 → esm2022}/lib/collections/sole/sole-invoice.collection.mjs +0 -0
  663. /package/{esm2020 → esm2022}/lib/collections/subscription/index.mjs +0 -0
  664. /package/{esm2020 → esm2022}/lib/collections/subscription/service-price.collection.mjs +0 -0
  665. /package/{esm2020 → esm2022}/lib/collections/subscription/service-product.collection.mjs +0 -0
  666. /package/{esm2020 → esm2022}/lib/collections/subscription/subscription-item.collection.mjs +0 -0
  667. /package/{esm2020 → esm2022}/lib/collections/tax-review.collection.mjs +0 -0
  668. /package/{esm2020 → esm2022}/lib/collections/tax-summary/index.mjs +0 -0
  669. /package/{esm2020 → esm2022}/lib/collections/tax-summary/report-item.collection.mjs +0 -0
  670. /package/{esm2020 → esm2022}/lib/collections/tax-summary/tax-return-categories.const.mjs +0 -0
  671. /package/{esm2020 → esm2022}/lib/collections/transaction/index.mjs +0 -0
  672. /package/{esm2020 → esm2022}/lib/collections/transaction/transaction-allocation.collection.mjs +0 -0
  673. /package/{esm2020 → esm2022}/lib/collections/transaction/transaction.collection.mjs +0 -0
  674. /package/{esm2020 → esm2022}/lib/collections/user-event-setting.collection.mjs +0 -0
  675. /package/{esm2020 → esm2022}/lib/collections/user-event-type-collection.mjs +0 -0
  676. /package/{esm2020 → esm2022}/lib/collections/vehicle/index.mjs +0 -0
  677. /package/{esm2020 → esm2022}/lib/collections/vehicle/vehicle-claim.collection.mjs +0 -0
  678. /package/{esm2020 → esm2022}/lib/db/Enums/address-type.enum.mjs +0 -0
  679. /package/{esm2020 → esm2022}/lib/db/Enums/allocation-rule-condition-comparison-operator.enum.mjs +0 -0
  680. /package/{esm2020 → esm2022}/lib/db/Enums/allocation-rule-condition-field.enum.mjs +0 -0
  681. /package/{esm2020 → esm2022}/lib/db/Enums/allocation-rule-condition-operator.enum.mjs +0 -0
  682. /package/{esm2020 → esm2022}/lib/db/Enums/allocation-rule-type.enum.mjs +0 -0
  683. /package/{esm2020 → esm2022}/lib/db/Enums/annual-frequency.enum.mjs +0 -0
  684. /package/{esm2020 → esm2022}/lib/db/Enums/bank/bank-account-status.enum.mjs +0 -0
  685. /package/{esm2020 → esm2022}/lib/db/Enums/bank/bank-account-type.enum.mjs +0 -0
  686. /package/{esm2020 → esm2022}/lib/db/Enums/bank/bank-connection-status.enum.mjs +0 -0
  687. /package/{esm2020 → esm2022}/lib/db/Enums/bank/bank-popular.enum.mjs +0 -0
  688. /package/{esm2020 → esm2022}/lib/db/Enums/bank/bank-provider.enum.mjs +0 -0
  689. /package/{esm2020 → esm2022}/lib/db/Enums/bank/bank-transaction-type.enum.mjs +0 -0
  690. /package/{esm2020 → esm2022}/lib/db/Enums/bank/index.mjs +0 -0
  691. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/index.mjs +0 -0
  692. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-bank-type.enum.mjs +0 -0
  693. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-frequency.enum.mjs +0 -0
  694. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-interest-type-label.enum.mjs +0 -0
  695. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-interest-type.enum.mjs +0 -0
  696. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-payout-type.enum.mjs +0 -0
  697. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-repayment-frequency.enum.mjs +0 -0
  698. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-repayment-type-label.enum.mjs +0 -0
  699. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-repayment-type.enum.mjs +0 -0
  700. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-type.enum.mjs +0 -0
  701. /package/{esm2020 → esm2022}/lib/db/Enums/bank/loan/loan-vehicle-type.enum.mjs +0 -0
  702. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-category.enum.mjs +0 -0
  703. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-etp.enum.mjs +0 -0
  704. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-heading-list.enum.mjs +0 -0
  705. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-heading-tax-deductible.enum.mjs +0 -0
  706. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-heading-taxable.enum.mjs +0 -0
  707. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-heading-vehicle-list.enum.mjs +0 -0
  708. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-holding-untaxed-income-list.enum.mjs +0 -0
  709. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-invoice-expense.enum.mjs +0 -0
  710. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-keep-sign.enum.mjs +0 -0
  711. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-list.enum.mjs +0 -0
  712. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-meta-field-list.enum.mjs +0 -0
  713. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-meta-field-type.enum.mjs +0 -0
  714. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-salary-adjustments-list.enum.mjs +0 -0
  715. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-salary-included-list.enum.mjs +0 -0
  716. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/chart-accounts-type.enum.mjs +0 -0
  717. /package/{esm2020 → esm2022}/lib/db/Enums/chart-accounts/index.mjs +0 -0
  718. /package/{esm2020 → esm2022}/lib/db/Enums/chat-status.enum.mjs +0 -0
  719. /package/{esm2020 → esm2022}/lib/db/Enums/client-details-medicare-exemption.enum.mjs +0 -0
  720. /package/{esm2020 → esm2022}/lib/db/Enums/client-details-work-depreciation-calculation.enum.mjs +0 -0
  721. /package/{esm2020 → esm2022}/lib/db/Enums/client-details-working-holiday-maker.enum.mjs +0 -0
  722. /package/{esm2020 → esm2022}/lib/db/Enums/client-invite-status.enum.mjs +0 -0
  723. /package/{esm2020 → esm2022}/lib/db/Enums/client-invite-type.enum.mjs +0 -0
  724. /package/{esm2020 → esm2022}/lib/db/Enums/depreciation-calculation-percent.enum.mjs +0 -0
  725. /package/{esm2020 → esm2022}/lib/db/Enums/depreciation-calculation.enum.mjs +0 -0
  726. /package/{esm2020 → esm2022}/lib/db/Enums/depreciation-type.enum.mjs +0 -0
  727. /package/{esm2020 → esm2022}/lib/db/Enums/depreciation-write-off-amount.enum.mjs +0 -0
  728. /package/{esm2020 → esm2022}/lib/db/Enums/document-type.enum.mjs +0 -0
  729. /package/{esm2020 → esm2022}/lib/db/Enums/file-type.enum.mjs +0 -0
  730. /package/{esm2020 → esm2022}/lib/db/Enums/firm-type.enum.mjs +0 -0
  731. /package/{esm2020 → esm2022}/lib/db/Enums/holding/holding-type-category.enum.mjs +0 -0
  732. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/income-source-forecast-trust-type.enum.mjs +0 -0
  733. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/income-source-type-list-holding.enum.mjs +0 -0
  734. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/income-source-type-list-other.enum.mjs +0 -0
  735. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/income-source-type-list-sole.enum.mjs +0 -0
  736. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/income-source-type-list-work.enum.mjs +0 -0
  737. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/income-source-type.enum.mjs +0 -0
  738. /package/{esm2020 → esm2022}/lib/db/Enums/income-source/index.mjs +0 -0
  739. /package/{esm2020 → esm2022}/lib/db/Enums/index.mjs +0 -0
  740. /package/{esm2020 → esm2022}/lib/db/Enums/invite-status.enum.mjs +0 -0
  741. /package/{esm2020 → esm2022}/lib/db/Enums/phone-type.enum.mjs +0 -0
  742. /package/{esm2020 → esm2022}/lib/db/Enums/property/property-category-list.enum.mjs +0 -0
  743. /package/{esm2020 → esm2022}/lib/db/Enums/property/property-depreciation-calculation.enum.mjs +0 -0
  744. /package/{esm2020 → esm2022}/lib/db/Enums/property/property-sale/tax-exemption-meta-field.enum.mjs +0 -0
  745. /package/{esm2020 → esm2022}/lib/db/Enums/property/property-sale/tax-exemption.enum.mjs +0 -0
  746. /package/{esm2020 → esm2022}/lib/db/Enums/property/property-share-access.enum.mjs +0 -0
  747. /package/{esm2020 → esm2022}/lib/db/Enums/property/property-share-status.enum.mjs +0 -0
  748. /package/{esm2020 → esm2022}/lib/db/Enums/registration-invite-status.enum.mjs +0 -0
  749. /package/{esm2020 → esm2022}/lib/db/Enums/salary-forecast-frequency.enum.mjs +0 -0
  750. /package/{esm2020 → esm2022}/lib/db/Enums/service-notification-status.enum.mjs +0 -0
  751. /package/{esm2020 → esm2022}/lib/db/Enums/service-notification-type.enum.mjs +0 -0
  752. /package/{esm2020 → esm2022}/lib/db/Enums/setup-item-type.enum.mjs +0 -0
  753. /package/{esm2020 → esm2022}/lib/db/Enums/sole-depreciation-method.enum.mjs +0 -0
  754. /package/{esm2020 → esm2022}/lib/db/Enums/sole-invoice-statuses.enum.mjs +0 -0
  755. /package/{esm2020 → esm2022}/lib/db/Enums/sole-invoice-tax-type.enum.mjs +0 -0
  756. /package/{esm2020 → esm2022}/lib/db/Enums/sole-invoice-template-tax-type.enum.mjs +0 -0
  757. /package/{esm2020 → esm2022}/lib/db/Enums/spare-document-spare-type.enum.mjs +0 -0
  758. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-payment-method-card-brand.enum.mjs +0 -0
  759. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-payment-method-type.enum.mjs +0 -0
  760. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-payment-status.enum.mjs +0 -0
  761. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-price-recurring-interval.enum.mjs +0 -0
  762. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-price-type.enum.mjs +0 -0
  763. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-product-id.enum.mjs +0 -0
  764. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-product-status.enum.mjs +0 -0
  765. /package/{esm2020 → esm2022}/lib/db/Enums/subscription/service-subscription-status.enum.mjs +0 -0
  766. /package/{esm2020 → esm2022}/lib/db/Enums/tank-type.enum.mjs +0 -0
  767. /package/{esm2020 → esm2022}/lib/db/Enums/tax-calculation-medicare-exemption.enum.mjs +0 -0
  768. /package/{esm2020 → esm2022}/lib/db/Enums/tax-calculation-type.enum.mjs +0 -0
  769. /package/{esm2020 → esm2022}/lib/db/Enums/tax-return/index.mjs +0 -0
  770. /package/{esm2020 → esm2022}/lib/db/Enums/tax-return/tax-return-category-list.enum.mjs +0 -0
  771. /package/{esm2020 → esm2022}/lib/db/Enums/tax-return/tax-return-category-section.enum.mjs +0 -0
  772. /package/{esm2020 → esm2022}/lib/db/Enums/tax-return/tax-return-item.enum.mjs +0 -0
  773. /package/{esm2020 → esm2022}/lib/db/Enums/tax-review-status.enum.mjs +0 -0
  774. /package/{esm2020 → esm2022}/lib/db/Enums/tax-summary-list.enum.mjs +0 -0
  775. /package/{esm2020 → esm2022}/lib/db/Enums/tax-summary-section.enum.mjs +0 -0
  776. /package/{esm2020 → esm2022}/lib/db/Enums/tax-summary-tax-summary.enum.mjs +0 -0
  777. /package/{esm2020 → esm2022}/lib/db/Enums/ticket-feedback.enum.mjs +0 -0
  778. /package/{esm2020 → esm2022}/lib/db/Enums/ticket-status.enum.mjs +0 -0
  779. /package/{esm2020 → esm2022}/lib/db/Enums/ticket-types.enum.mjs +0 -0
  780. /package/{esm2020 → esm2022}/lib/db/Enums/transaction-operation.enum.mjs +0 -0
  781. /package/{esm2020 → esm2022}/lib/db/Enums/transaction-source.enum.mjs +0 -0
  782. /package/{esm2020 → esm2022}/lib/db/Enums/transaction-type.enum.mjs +0 -0
  783. /package/{esm2020 → esm2022}/lib/db/Enums/user-event-status.enum.mjs +0 -0
  784. /package/{esm2020 → esm2022}/lib/db/Enums/user-event-type-client-type.enum.mjs +0 -0
  785. /package/{esm2020 → esm2022}/lib/db/Enums/user-event-type-employee-type.enum.mjs +0 -0
  786. /package/{esm2020 → esm2022}/lib/db/Enums/user-event-type-frequency.enum.mjs +0 -0
  787. /package/{esm2020 → esm2022}/lib/db/Enums/user-event-type-type.enum.mjs +0 -0
  788. /package/{esm2020 → esm2022}/lib/db/Enums/user-event-type-user-type.enum.mjs +0 -0
  789. /package/{esm2020 → esm2022}/lib/db/Enums/user-medicare-exemption.enum.mjs +0 -0
  790. /package/{esm2020 → esm2022}/lib/db/Enums/user-roles.enum.mjs +0 -0
  791. /package/{esm2020 → esm2022}/lib/db/Enums/user-status.enum.mjs +0 -0
  792. /package/{esm2020 → esm2022}/lib/db/Enums/user-title.enum.mjs +0 -0
  793. /package/{esm2020 → esm2022}/lib/db/Enums/user-work-depreciation-calculation.enum.mjs +0 -0
  794. /package/{esm2020 → esm2022}/lib/db/Enums/user-working-holiday-maker.enum.mjs +0 -0
  795. /package/{esm2020 → esm2022}/lib/db/Enums/vehicle-claim-details-method.enum.mjs +0 -0
  796. /package/{esm2020 → esm2022}/lib/db/Enums/vehicle-logbook-purpose.enum.mjs +0 -0
  797. /package/{esm2020 → esm2022}/lib/db/Json/chart-accounts/chart-accounts-value.json +0 -0
  798. /package/{esm2020 → esm2022}/lib/db/Json/holding/holding-type-exchange.json +0 -0
  799. /package/{esm2020 → esm2022}/lib/db/Json/income-source/income_source_type.json +0 -0
  800. /package/{esm2020 → esm2022}/lib/db/Json/property/tax-exemption.json +0 -0
  801. /package/{esm2020 → esm2022}/lib/db/Json/tax-return/tax-return-item.json +0 -0
  802. /package/{esm2020 → esm2022}/lib/db/Models/abstract-model.mjs +0 -0
  803. /package/{esm2020 → esm2022}/lib/db/Models/bank/basiq-job-step.enum.mjs +0 -0
  804. /package/{esm2020 → esm2022}/lib/db/Models/budget/budget-rule.mjs +0 -0
  805. /package/{esm2020 → esm2022}/lib/db/Models/budget/budget.mjs +0 -0
  806. /package/{esm2020 → esm2022}/lib/db/Models/budget/index.mjs +0 -0
  807. /package/{esm2020 → esm2022}/lib/db/Models/client/annual-client-details.mjs +0 -0
  808. /package/{esm2020 → esm2022}/lib/db/Models/client/index.mjs +0 -0
  809. /package/{esm2020 → esm2022}/lib/db/Models/firm/accountant/tax-review.mjs +0 -0
  810. /package/{esm2020 → esm2022}/lib/db/Models/firm/accountant/ticket.mjs +0 -0
  811. /package/{esm2020 → esm2022}/lib/db/Models/holding/holding-type-exchange.mjs +0 -0
  812. /package/{esm2020 → esm2022}/lib/db/Models/holding/holding-type.mjs +0 -0
  813. /package/{esm2020 → esm2022}/lib/db/Models/holding/holding.mjs +0 -0
  814. /package/{esm2020 → esm2022}/lib/db/Models/holding/index.mjs +0 -0
  815. /package/{esm2020 → esm2022}/lib/db/Models/index.mjs +0 -0
  816. /package/{esm2020 → esm2022}/lib/db/Models/observable-model.mjs +0 -0
  817. /package/{esm2020 → esm2022}/lib/db/Models/setup-item.mjs +0 -0
  818. /package/{esm2020 → esm2022}/lib/db/Models/tax-return/index.mjs +0 -0
  819. /package/{esm2020 → esm2022}/lib/db/Models/transaction/transaction-base.mjs +0 -0
  820. /package/{esm2020 → esm2022}/lib/db/Models/user/user.mjs +0 -0
  821. /package/{esm2020 → esm2022}/lib/db-static/chart-accounts/chart-accounts-values.mjs +0 -0
  822. /package/{esm2020 → esm2022}/lib/forms/abstract.form.mjs +0 -0
  823. /package/{esm2020 → esm2022}/lib/forms/address/index.mjs +0 -0
  824. /package/{esm2020 → esm2022}/lib/forms/bank/bank-account/bank-account-allocation.form.mjs +0 -0
  825. /package/{esm2020 → esm2022}/lib/forms/bank/bank-account/bank-account-import.form.mjs +0 -0
  826. /package/{esm2020 → esm2022}/lib/forms/bank/bank-account/bank-account-properties.form.mjs +0 -0
  827. /package/{esm2020 → esm2022}/lib/forms/budget/budget.form.mjs +0 -0
  828. /package/{esm2020 → esm2022}/lib/forms/budget/index.mjs +0 -0
  829. /package/{esm2020 → esm2022}/lib/forms/client/annual-client-details.form.mjs +0 -0
  830. /package/{esm2020 → esm2022}/lib/forms/client/client-income-types.form.mjs +0 -0
  831. /package/{esm2020 → esm2022}/lib/forms/client/index.mjs +0 -0
  832. /package/{esm2020 → esm2022}/lib/forms/depreciation/depreciation.form.mjs +0 -0
  833. /package/{esm2020 → esm2022}/lib/forms/depreciation/index.mjs +0 -0
  834. /package/{esm2020 → esm2022}/lib/forms/document-folder/document-folder.form.mjs +0 -0
  835. /package/{esm2020 → esm2022}/lib/forms/document-folder/document.form.mjs +0 -0
  836. /package/{esm2020 → esm2022}/lib/forms/document-folder/index.mjs +0 -0
  837. /package/{esm2020 → esm2022}/lib/forms/firm/firm.form.mjs +0 -0
  838. /package/{esm2020 → esm2022}/lib/forms/firm/index.mjs +0 -0
  839. /package/{esm2020 → esm2022}/lib/forms/form-validations.enum.mjs +0 -0
  840. /package/{esm2020 → esm2022}/lib/forms/holding/holding-reinvest.form.mjs +0 -0
  841. /package/{esm2020 → esm2022}/lib/forms/holding/holding-sale.form.mjs +0 -0
  842. /package/{esm2020 → esm2022}/lib/forms/holding/holding-type.form.mjs +0 -0
  843. /package/{esm2020 → esm2022}/lib/forms/holding/holding.form.mjs +0 -0
  844. /package/{esm2020 → esm2022}/lib/forms/holding/index.mjs +0 -0
  845. /package/{esm2020 → esm2022}/lib/forms/index.mjs +0 -0
  846. /package/{esm2020 → esm2022}/lib/forms/loan/index.mjs +0 -0
  847. /package/{esm2020 → esm2022}/lib/forms/login/login.form.mjs +0 -0
  848. /package/{esm2020 → esm2022}/lib/forms/phone/index.mjs +0 -0
  849. /package/{esm2020 → esm2022}/lib/forms/phone/phone.form.mjs +0 -0
  850. /package/{esm2020 → esm2022}/lib/forms/property/borrowing-report.form.mjs +0 -0
  851. /package/{esm2020 → esm2022}/lib/forms/property/index.mjs +0 -0
  852. /package/{esm2020 → esm2022}/lib/forms/property/property-document.form.mjs +0 -0
  853. /package/{esm2020 → esm2022}/lib/forms/property/property-edit.form.mjs +0 -0
  854. /package/{esm2020 → esm2022}/lib/forms/property/property-sale/index.mjs +0 -0
  855. /package/{esm2020 → esm2022}/lib/forms/property/property-sale/property-sale-cost-base.form.mjs +0 -0
  856. /package/{esm2020 → esm2022}/lib/forms/property/property-sale/property-sale-cost-sale.form.mjs +0 -0
  857. /package/{esm2020 → esm2022}/lib/forms/property/property-sale/property-sale-exemptions.form.mjs +0 -0
  858. /package/{esm2020 → esm2022}/lib/forms/property/property-valuation.form.mjs +0 -0
  859. /package/{esm2020 → esm2022}/lib/forms/register/register-client.form.mjs +0 -0
  860. /package/{esm2020 → esm2022}/lib/forms/register/register-firm.form.mjs +0 -0
  861. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/index.mjs +0 -0
  862. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-details/my-tax-business-details.form.mjs +0 -0
  863. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-income/my-tax-business-income.form.mjs +0 -0
  864. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-income-or-losses.form.mjs +0 -0
  865. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-losses/my-tax-business-losses.form.mjs +0 -0
  866. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-cgt.form.mjs +0 -0
  867. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-deductions.form.mjs +0 -0
  868. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-dividends.form.mjs +0 -0
  869. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-income-statements.form.mjs +0 -0
  870. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-income-tests.form.mjs +0 -0
  871. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-interest.form.mjs +0 -0
  872. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-losses.form.mjs +0 -0
  873. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-medicare.form.mjs +0 -0
  874. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-offsets.form.mjs +0 -0
  875. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-other-income.form.mjs +0 -0
  876. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-partnerships-and-trusts.form.mjs +0 -0
  877. /package/{esm2020 → esm2022}/lib/forms/report/my-tax/my-tax-rent.form.mjs +0 -0
  878. /package/{esm2020 → esm2022}/lib/forms/sole/bas-report.form.mjs +0 -0
  879. /package/{esm2020 → esm2022}/lib/forms/sole/index.mjs +0 -0
  880. /package/{esm2020 → esm2022}/lib/forms/sole/sole-business-allocations.form.mjs +0 -0
  881. /package/{esm2020 → esm2022}/lib/forms/sole/sole-business-loss.form.mjs +0 -0
  882. /package/{esm2020 → esm2022}/lib/forms/sole/sole-business.form.mjs +0 -0
  883. /package/{esm2020 → esm2022}/lib/forms/sole/sole-contact.form.mjs +0 -0
  884. /package/{esm2020 → esm2022}/lib/forms/sole/sole-depreciation-method.form.mjs +0 -0
  885. /package/{esm2020 → esm2022}/lib/forms/sole/sole-details.form.mjs +0 -0
  886. /package/{esm2020 → esm2022}/lib/forms/sole/sole-invoice-template.form.mjs +0 -0
  887. /package/{esm2020 → esm2022}/lib/forms/sole/sole-invoice.form.mjs +0 -0
  888. /package/{esm2020 → esm2022}/lib/forms/transaction/allocation-rule-condition.form.mjs +0 -0
  889. /package/{esm2020 → esm2022}/lib/forms/transaction/allocation-rule-transaction-meta-field.form.mjs +0 -0
  890. /package/{esm2020 → esm2022}/lib/forms/transaction/allocation-rule-transaction.form.mjs +0 -0
  891. /package/{esm2020 → esm2022}/lib/forms/transaction/allocation-rule.form.mjs +0 -0
  892. /package/{esm2020 → esm2022}/lib/forms/transaction/holding/holding-income.form.mjs +0 -0
  893. /package/{esm2020 → esm2022}/lib/forms/transaction/index.mjs +0 -0
  894. /package/{esm2020 → esm2022}/lib/forms/transaction/messages.enum.mjs +0 -0
  895. /package/{esm2020 → esm2022}/lib/forms/transaction/sole/sole-income.form.mjs +0 -0
  896. /package/{esm2020 → esm2022}/lib/forms/transaction/sole/sole-transaction.form.mjs +0 -0
  897. /package/{esm2020 → esm2022}/lib/forms/transaction/transaction-base.form.mjs +0 -0
  898. /package/{esm2020 → esm2022}/lib/forms/transaction/transaction.form.mjs +0 -0
  899. /package/{esm2020 → esm2022}/lib/forms/transaction/work/work-expense.form.mjs +0 -0
  900. /package/{esm2020 → esm2022}/lib/forms/transaction/work/work-income.form.mjs +0 -0
  901. /package/{esm2020 → esm2022}/lib/forms/transaction/work/work-transaction.form.mjs +0 -0
  902. /package/{esm2020 → esm2022}/lib/forms/user/client-details.form.mjs +0 -0
  903. /package/{esm2020 → esm2022}/lib/forms/user/index.mjs +0 -0
  904. /package/{esm2020 → esm2022}/lib/forms/user/password.form.mjs +0 -0
  905. /package/{esm2020 → esm2022}/lib/forms/user/reset-password.form.mjs +0 -0
  906. /package/{esm2020 → esm2022}/lib/forms/user/user-invite.form.mjs +0 -0
  907. /package/{esm2020 → esm2022}/lib/forms/user/user.form.mjs +0 -0
  908. /package/{esm2020 → esm2022}/lib/forms/vehicle/index.mjs +0 -0
  909. /package/{esm2020 → esm2022}/lib/forms/vehicle/vehicle-claim-details.form.mjs +0 -0
  910. /package/{esm2020 → esm2022}/lib/forms/vehicle/vehicle-claim.form.mjs +0 -0
  911. /package/{esm2020 → esm2022}/lib/functions/array/index.mjs +0 -0
  912. /package/{esm2020 → esm2022}/lib/functions/array/replace.mjs +0 -0
  913. /package/{esm2020 → esm2022}/lib/functions/array/sort-deep.mjs +0 -0
  914. /package/{esm2020 → esm2022}/lib/functions/array/sort.mjs +0 -0
  915. /package/{esm2020 → esm2022}/lib/functions/array/to-array.mjs +0 -0
  916. /package/{esm2020 → esm2022}/lib/functions/clone-deep.mjs +0 -0
  917. /package/{esm2020 → esm2022}/lib/functions/create-date.mjs +0 -0
  918. /package/{esm2020 → esm2022}/lib/functions/enum-to-list.mjs +0 -0
  919. /package/{esm2020 → esm2022}/lib/functions/get-doc-icon.mjs +0 -0
  920. /package/{esm2020 → esm2022}/lib/functions/mat-options-functions.mjs +0 -0
  921. /package/{esm2020 → esm2022}/lib/functions/mat-sort-options.mjs +0 -0
  922. /package/{esm2020 → esm2022}/lib/functions/tax-review-filter-predicate.mjs +0 -0
  923. /package/{esm2020 → esm2022}/lib/interfaces/asset-entity-type.enum.mjs +0 -0
  924. /package/{esm2020 → esm2022}/lib/interfaces/asset-type.enum.mjs +0 -0
  925. /package/{esm2020 → esm2022}/lib/interfaces/asset.interface.mjs +0 -0
  926. /package/{esm2020 → esm2022}/lib/interfaces/auth-tokens.interface.mjs +0 -0
  927. /package/{esm2020 → esm2022}/lib/interfaces/chart-data.interface.mjs +0 -0
  928. /package/{esm2020 → esm2022}/lib/interfaces/chart-serie.interface.mjs +0 -0
  929. /package/{esm2020 → esm2022}/lib/interfaces/document.interface.mjs +0 -0
  930. /package/{esm2020 → esm2022}/lib/interfaces/documentable.interface.mjs +0 -0
  931. /package/{esm2020 → esm2022}/lib/interfaces/event-listener.interface.mjs +0 -0
  932. /package/{esm2020 → esm2022}/lib/interfaces/expense.interface.mjs +0 -0
  933. /package/{esm2020 → esm2022}/lib/interfaces/income-source-forecast.interface.mjs +0 -0
  934. /package/{esm2020 → esm2022}/lib/interfaces/index.mjs +0 -0
  935. /package/{esm2020 → esm2022}/lib/interfaces/mp-trackable.interface.mjs +0 -0
  936. /package/{esm2020 → esm2022}/lib/interfaces/option.interface.mjs +0 -0
  937. /package/{esm2020 → esm2022}/lib/interfaces/tank.interface.mjs +0 -0
  938. /package/{esm2020 → esm2022}/lib/interfaces/updatable.interface.mjs +0 -0
  939. /package/{esm2020 → esm2022}/lib/messages/index.mjs +0 -0
  940. /package/{esm2020 → esm2022}/lib/messages/messages.enum.mjs +0 -0
  941. /package/{esm2020 → esm2022}/lib/models/account-setup/account-setup-item.mjs +0 -0
  942. /package/{esm2020 → esm2022}/lib/models/account-setup/account-setup-items.enum.mjs +0 -0
  943. /package/{esm2020 → esm2022}/lib/models/address/address.mjs +0 -0
  944. /package/{esm2020 → esm2022}/lib/models/address/index.mjs +0 -0
  945. /package/{esm2020 → esm2022}/lib/models/address/states.enum.mjs +0 -0
  946. /package/{esm2020 → esm2022}/lib/models/asset-sale.mjs +0 -0
  947. /package/{esm2020 → esm2022}/lib/models/badge/badge-color.enum.mjs +0 -0
  948. /package/{esm2020 → esm2022}/lib/models/badge/badge.mjs +0 -0
  949. /package/{esm2020 → esm2022}/lib/models/bank/allocation-group.mjs +0 -0
  950. /package/{esm2020 → esm2022}/lib/models/bank/bank-account-chart-data.mjs +0 -0
  951. /package/{esm2020 → esm2022}/lib/models/bank/bank-account-property.mjs +0 -0
  952. /package/{esm2020 → esm2022}/lib/models/bank/bank-account-types.const.mjs +0 -0
  953. /package/{esm2020 → esm2022}/lib/models/bank/bank-account.mjs +0 -0
  954. /package/{esm2020 → esm2022}/lib/models/bank/bank-connection.mjs +0 -0
  955. /package/{esm2020 → esm2022}/lib/models/bank/bank-external-stats.mjs +0 -0
  956. /package/{esm2020 → esm2022}/lib/models/bank/bank-transaction-chart-data.mjs +0 -0
  957. /package/{esm2020 → esm2022}/lib/models/bank/bank-transaction-summary-fields.enum.mjs +0 -0
  958. /package/{esm2020 → esm2022}/lib/models/bank/bank-transaction.mjs +0 -0
  959. /package/{esm2020 → esm2022}/lib/models/bank/bank.mjs +0 -0
  960. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-config.mjs +0 -0
  961. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-connection-data.interface.mjs +0 -0
  962. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-connections-response.interface.mjs +0 -0
  963. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-job-response.mjs +0 -0
  964. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-job-step.mjs +0 -0
  965. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-job.mjs +0 -0
  966. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-token-response.interface.mjs +0 -0
  967. /package/{esm2020 → esm2022}/lib/models/bank/basiq/basiq-token.mjs +0 -0
  968. /package/{esm2020 → esm2022}/lib/models/bank/basiq/index.mjs +0 -0
  969. /package/{esm2020 → esm2022}/lib/models/bank/index.mjs +0 -0
  970. /package/{esm2020 → esm2022}/lib/models/bank/type-loan.const.mjs +0 -0
  971. /package/{esm2020 → esm2022}/lib/models/borrowing-expense/borrowing-expense-loan.mjs +0 -0
  972. /package/{esm2020 → esm2022}/lib/models/borrowing-expense/borrowing-expense.mjs +0 -0
  973. /package/{esm2020 → esm2022}/lib/models/borrowing-expense/index.mjs +0 -0
  974. /package/{esm2020 → esm2022}/lib/models/budget/budget-rule.mjs +0 -0
  975. /package/{esm2020 → esm2022}/lib/models/budget/budget.mjs +0 -0
  976. /package/{esm2020 → esm2022}/lib/models/budget/index.mjs +0 -0
  977. /package/{esm2020 → esm2022}/lib/models/chart/chart-data.mjs +0 -0
  978. /package/{esm2020 → esm2022}/lib/models/chart/chart-serie.mjs +0 -0
  979. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-categories.const.mjs +0 -0
  980. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-category.e-collection.mjs +0 -0
  981. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-depreciation.mjs +0 -0
  982. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-heading.mjs +0 -0
  983. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-meta-field.mjs +0 -0
  984. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-tax-labels.enum.mjs +0 -0
  985. /package/{esm2020 → esm2022}/lib/models/chart-accounts/chart-accounts-value.mjs +0 -0
  986. /package/{esm2020 → esm2022}/lib/models/chart-accounts/index.mjs +0 -0
  987. /package/{esm2020 → esm2022}/lib/models/chat/chat-view-type.enum.mjs +0 -0
  988. /package/{esm2020 → esm2022}/lib/models/chat/chat.mjs +0 -0
  989. /package/{esm2020 → esm2022}/lib/models/chat/index.mjs +0 -0
  990. /package/{esm2020 → esm2022}/lib/models/chat/message-document.mjs +0 -0
  991. /package/{esm2020 → esm2022}/lib/models/chat/message.mjs +0 -0
  992. /package/{esm2020 → esm2022}/lib/models/client/annual-client-details.mjs +0 -0
  993. /package/{esm2020 → esm2022}/lib/models/client/client-details.mjs +0 -0
  994. /package/{esm2020 → esm2022}/lib/models/client/client-income-types.mjs +0 -0
  995. /package/{esm2020 → esm2022}/lib/models/client/client-invite.mjs +0 -0
  996. /package/{esm2020 → esm2022}/lib/models/client/client-movement.mjs +0 -0
  997. /package/{esm2020 → esm2022}/lib/models/client/client-portfolio-chart-data.mjs +0 -0
  998. /package/{esm2020 → esm2022}/lib/models/client/client-portfolio-report.mjs +0 -0
  999. /package/{esm2020 → esm2022}/lib/models/client/index.mjs +0 -0
  1000. /package/{esm2020 → esm2022}/lib/models/color/alphabet-colors.enum.mjs +0 -0
  1001. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-capital-project.mjs +0 -0
  1002. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-forecast.mjs +0 -0
  1003. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-group-item.mjs +0 -0
  1004. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-group.enum.mjs +0 -0
  1005. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-group.mjs +0 -0
  1006. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-groups.const.mjs +0 -0
  1007. /package/{esm2020 → esm2022}/lib/models/depreciation/depreciation-lvp-rate.enum.mjs +0 -0
  1008. /package/{esm2020 → esm2022}/lib/models/depreciation/index.mjs +0 -0
  1009. /package/{esm2020 → esm2022}/lib/models/dictionary/dictionary.mjs +0 -0
  1010. /package/{esm2020 → esm2022}/lib/models/dictionary/index.mjs +0 -0
  1011. /package/{esm2020 → esm2022}/lib/models/document/document-api-url-prefix.enum.mjs +0 -0
  1012. /package/{esm2020 → esm2022}/lib/models/document/document-file-types.const.mjs +0 -0
  1013. /package/{esm2020 → esm2022}/lib/models/document/document-folder.mjs +0 -0
  1014. /package/{esm2020 → esm2022}/lib/models/document/document.mjs +0 -0
  1015. /package/{esm2020 → esm2022}/lib/models/document/index.mjs +0 -0
  1016. /package/{esm2020 → esm2022}/lib/models/employee/employee-details.mjs +0 -0
  1017. /package/{esm2020 → esm2022}/lib/models/employee/employee-invite.mjs +0 -0
  1018. /package/{esm2020 → esm2022}/lib/models/endpoint/endpoint.mjs +0 -0
  1019. /package/{esm2020 → esm2022}/lib/models/endpoint/endpoints.const.mjs +0 -0
  1020. /package/{esm2020 → esm2022}/lib/models/event/app-event-type.enum.mjs +0 -0
  1021. /package/{esm2020 → esm2022}/lib/models/event/app-event.mjs +0 -0
  1022. /package/{esm2020 → esm2022}/lib/models/event/index.mjs +0 -0
  1023. /package/{esm2020 → esm2022}/lib/models/export/export-cell-type.enum.mjs +0 -0
  1024. /package/{esm2020 → esm2022}/lib/models/export/export-cell.mjs +0 -0
  1025. /package/{esm2020 → esm2022}/lib/models/export/export-data-table.mjs +0 -0
  1026. /package/{esm2020 → esm2022}/lib/models/export/export-format.enum.mjs +0 -0
  1027. /package/{esm2020 → esm2022}/lib/models/file/icons-file.enum.mjs +0 -0
  1028. /package/{esm2020 → esm2022}/lib/models/file/index.mjs +0 -0
  1029. /package/{esm2020 → esm2022}/lib/models/financial-year/index.mjs +0 -0
  1030. /package/{esm2020 → esm2022}/lib/models/financial-year/month-name-short.enum.mjs +0 -0
  1031. /package/{esm2020 → esm2022}/lib/models/financial-year/month-number.enum.mjs +0 -0
  1032. /package/{esm2020 → esm2022}/lib/models/financial-year/months.const.mjs +0 -0
  1033. /package/{esm2020 → esm2022}/lib/models/firm/firm.mjs +0 -0
  1034. /package/{esm2020 → esm2022}/lib/models/holding/holding-reinvest.mjs +0 -0
  1035. /package/{esm2020 → esm2022}/lib/models/holding/holding-sale.mjs +0 -0
  1036. /package/{esm2020 → esm2022}/lib/models/holding/holding-type-exchange.mjs +0 -0
  1037. /package/{esm2020 → esm2022}/lib/models/holding/holding-type.mjs +0 -0
  1038. /package/{esm2020 → esm2022}/lib/models/holding/holding.mjs +0 -0
  1039. /package/{esm2020 → esm2022}/lib/models/holding/index.mjs +0 -0
  1040. /package/{esm2020 → esm2022}/lib/models/income-position/income-position.mjs +0 -0
  1041. /package/{esm2020 → esm2022}/lib/models/income-source/income-source-chart-data.mjs +0 -0
  1042. /package/{esm2020 → esm2022}/lib/models/income-source/income-source-forecast.mjs +0 -0
  1043. /package/{esm2020 → esm2022}/lib/models/income-source/income-source-type.mjs +0 -0
  1044. /package/{esm2020 → esm2022}/lib/models/income-source/income-source.mjs +0 -0
  1045. /package/{esm2020 → esm2022}/lib/models/income-source/index.mjs +0 -0
  1046. /package/{esm2020 → esm2022}/lib/models/income-source/salary-forecast.mjs +0 -0
  1047. /package/{esm2020 → esm2022}/lib/models/income-source/sole-forecast.mjs +0 -0
  1048. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  1049. /package/{esm2020 → esm2022}/lib/models/loan/index.mjs +0 -0
  1050. /package/{esm2020 → esm2022}/lib/models/loan/loan-max-number-of-payments.enum.mjs +0 -0
  1051. /package/{esm2020 → esm2022}/lib/models/loan/loan-payment.mjs +0 -0
  1052. /package/{esm2020 → esm2022}/lib/models/loan/loan-payout.mjs +0 -0
  1053. /package/{esm2020 → esm2022}/lib/models/notification/index.mjs +0 -0
  1054. /package/{esm2020 → esm2022}/lib/models/notification/notification.mjs +0 -0
  1055. /package/{esm2020 → esm2022}/lib/models/pdf/pdf-orientation.enum.mjs +0 -0
  1056. /package/{esm2020 → esm2022}/lib/models/pdf/pdf-settings.mjs +0 -0
  1057. /package/{esm2020 → esm2022}/lib/models/phone/phone.mjs +0 -0
  1058. /package/{esm2020 → esm2022}/lib/models/property/borrowing-report.mjs +0 -0
  1059. /package/{esm2020 → esm2022}/lib/models/property/calculation-form-item.mjs +0 -0
  1060. /package/{esm2020 → esm2022}/lib/models/property/calculation-form-type.enum.mjs +0 -0
  1061. /package/{esm2020 → esm2022}/lib/models/property/capital-costs-itmes.const.mjs +0 -0
  1062. /package/{esm2020 → esm2022}/lib/models/property/corelogic-suggestion.mjs +0 -0
  1063. /package/{esm2020 → esm2022}/lib/models/property/index.mjs +0 -0
  1064. /package/{esm2020 → esm2022}/lib/models/property/property-category-movement.mjs +0 -0
  1065. /package/{esm2020 → esm2022}/lib/models/property/property-category.mjs +0 -0
  1066. /package/{esm2020 → esm2022}/lib/models/property/property-document.mjs +0 -0
  1067. /package/{esm2020 → esm2022}/lib/models/property/property-equity-chart-data.mjs +0 -0
  1068. /package/{esm2020 → esm2022}/lib/models/property/property-equity-chart-item.mjs +0 -0
  1069. /package/{esm2020 → esm2022}/lib/models/property/property-equity-chart-type.enum.mjs +0 -0
  1070. /package/{esm2020 → esm2022}/lib/models/property/property-forecast.mjs +0 -0
  1071. /package/{esm2020 → esm2022}/lib/models/property/property-sale/index.mjs +0 -0
  1072. /package/{esm2020 → esm2022}/lib/models/property/property-sale/property-sale-cost-base.mjs +0 -0
  1073. /package/{esm2020 → esm2022}/lib/models/property/property-sale/property-sale-tax-exemption-meta-field.mjs +0 -0
  1074. /package/{esm2020 → esm2022}/lib/models/property/property-sale/property-sale.mjs +0 -0
  1075. /package/{esm2020 → esm2022}/lib/models/property/property-sale/tax-exemption-meta-field.mjs +0 -0
  1076. /package/{esm2020 → esm2022}/lib/models/property/property-sale/tax-exemption.mjs +0 -0
  1077. /package/{esm2020 → esm2022}/lib/models/property/property-share.mjs +0 -0
  1078. /package/{esm2020 → esm2022}/lib/models/property/property-subscription.mjs +0 -0
  1079. /package/{esm2020 → esm2022}/lib/models/property/property-valuation.mjs +0 -0
  1080. /package/{esm2020 → esm2022}/lib/models/property/share-filter-options.enum.mjs +0 -0
  1081. /package/{esm2020 → esm2022}/lib/models/registration-invite/registration-invite.mjs +0 -0
  1082. /package/{esm2020 → esm2022}/lib/models/report/depreciation/depreciation-lvp-asset-type.enum.mjs +0 -0
  1083. /package/{esm2020 → esm2022}/lib/models/report/depreciation/depreciation-lvp-report-item.mjs +0 -0
  1084. /package/{esm2020 → esm2022}/lib/models/report/depreciation/depreciation-report-item.mjs +0 -0
  1085. /package/{esm2020 → esm2022}/lib/models/report/depreciation/index.mjs +0 -0
  1086. /package/{esm2020 → esm2022}/lib/models/report/index.mjs +0 -0
  1087. /package/{esm2020 → esm2022}/lib/models/report/my-tax/ato-links.mjs +0 -0
  1088. /package/{esm2020 → esm2022}/lib/models/report/my-tax/index.mjs +0 -0
  1089. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-business-income-or-losses/business-income-or-losses-categories.const.mjs +0 -0
  1090. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-business-income-or-losses/business-type.enum.mjs +0 -0
  1091. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-business-income-or-losses/loss-type.enum.mjs +0 -0
  1092. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-business-income-or-losses/my-tax-business-details/my-tax-business-details.mjs +0 -0
  1093. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-business-income-or-losses/my-tax-business-income/my-tax-business-income.mjs +0 -0
  1094. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-business-income-or-losses/my-tax-business-losses/my-tax-business-losses.mjs +0 -0
  1095. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-cgt/cgt-exemption-and-rollover-code.enum.mjs +0 -0
  1096. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-cgt/my-tax-cgt.mjs +0 -0
  1097. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-deductions/deduction-clothing-type.enum.mjs +0 -0
  1098. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-deductions/deduction-fields.const.mjs +0 -0
  1099. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-deductions/deduction-self-education-type.enum.mjs +0 -0
  1100. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-dividends/my-tax-dividends.mjs +0 -0
  1101. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-estimate/my-tax-estimate.mjs +0 -0
  1102. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-income-statements/my-tax-income-statements.mjs +0 -0
  1103. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-income-tests/my-tax-income-tests.mjs +0 -0
  1104. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-interest/my-tax-interest.mjs +0 -0
  1105. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-losses/my-tax-losses.mjs +0 -0
  1106. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-offsets/my-tax-offsets.mjs +0 -0
  1107. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-other-income/my-tax-other-income.mjs +0 -0
  1108. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-partnerships-and-trusts/my-tax-partnerships-and-trusts.mjs +0 -0
  1109. /package/{esm2020 → esm2022}/lib/models/report/my-tax/my-tax-rent/my-tax-rent.mjs +0 -0
  1110. /package/{esm2020 → esm2022}/lib/models/report/property/index.mjs +0 -0
  1111. /package/{esm2020 → esm2022}/lib/models/report/property/property-report-item-depreciation.mjs +0 -0
  1112. /package/{esm2020 → esm2022}/lib/models/report/property/property-report-item-transaction.mjs +0 -0
  1113. /package/{esm2020 → esm2022}/lib/models/report/property/property-report-item.mjs +0 -0
  1114. /package/{esm2020 → esm2022}/lib/models/report/sole/index.mjs +0 -0
  1115. /package/{esm2020 → esm2022}/lib/models/report/sole/sole-business/sole-business-loss-report.mjs +0 -0
  1116. /package/{esm2020 → esm2022}/lib/models/report/vehicle-expense/vehicle-expense.mjs +0 -0
  1117. /package/{esm2020 → esm2022}/lib/models/service-subscription/index.mjs +0 -0
  1118. /package/{esm2020 → esm2022}/lib/models/service-subscription/module-url-list.const.mjs +0 -0
  1119. /package/{esm2020 → esm2022}/lib/models/service-subscription/payment-method-brand.enum.mjs +0 -0
  1120. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-payment-method.mjs +0 -0
  1121. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-price.mjs +0 -0
  1122. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-product-icons.enum.mjs +0 -0
  1123. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-product-roles.const.mjs +0 -0
  1124. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-promo-code-duration.enum.mjs +0 -0
  1125. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-promo-code.mjs +0 -0
  1126. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-subscription-item.mjs +0 -0
  1127. /package/{esm2020 → esm2022}/lib/models/service-subscription/service-subscription.mjs +0 -0
  1128. /package/{esm2020 → esm2022}/lib/models/sole/bas-report.mjs +0 -0
  1129. /package/{esm2020 → esm2022}/lib/models/sole/index.mjs +0 -0
  1130. /package/{esm2020 → esm2022}/lib/models/sole/sole-business-activity.mjs +0 -0
  1131. /package/{esm2020 → esm2022}/lib/models/sole/sole-business-allocation.mjs +0 -0
  1132. /package/{esm2020 → esm2022}/lib/models/sole/sole-business-loss-offset-rule.mjs +0 -0
  1133. /package/{esm2020 → esm2022}/lib/models/sole/sole-business-loss.mjs +0 -0
  1134. /package/{esm2020 → esm2022}/lib/models/sole/sole-contact.mjs +0 -0
  1135. /package/{esm2020 → esm2022}/lib/models/sole/sole-depreciation-method.mjs +0 -0
  1136. /package/{esm2020 → esm2022}/lib/models/sole/sole-details.mjs +0 -0
  1137. /package/{esm2020 → esm2022}/lib/models/sole/sole-invoice-item.mjs +0 -0
  1138. /package/{esm2020 → esm2022}/lib/models/sole/sole-invoice-template.mjs +0 -0
  1139. /package/{esm2020 → esm2022}/lib/models/tax-return/index.mjs +0 -0
  1140. /package/{esm2020 → esm2022}/lib/models/tax-return/tax-return-category.mjs +0 -0
  1141. /package/{esm2020 → esm2022}/lib/models/tax-return/tax-return.mjs +0 -0
  1142. /package/{esm2020 → esm2022}/lib/models/tax-review/tax-review.mjs +0 -0
  1143. /package/{esm2020 → esm2022}/lib/models/tax-summary/report-item-details.mjs +0 -0
  1144. /package/{esm2020 → esm2022}/lib/models/tax-summary/report-item.mjs +0 -0
  1145. /package/{esm2020 → esm2022}/lib/models/tax-summary/tax-summary-section.mjs +0 -0
  1146. /package/{esm2020 → esm2022}/lib/models/tax-summary/tax-summary-type.enum.mjs +0 -0
  1147. /package/{esm2020 → esm2022}/lib/models/tax-summary/tax-summary.mjs +0 -0
  1148. /package/{esm2020 → esm2022}/lib/models/toast/toast-type.enum.mjs +0 -0
  1149. /package/{esm2020 → esm2022}/lib/models/toast/toast.mjs +0 -0
  1150. /package/{esm2020 → esm2022}/lib/models/transaction/allocation-rule-condition.mjs +0 -0
  1151. /package/{esm2020 → esm2022}/lib/models/transaction/allocation-rule-transaction-meta-field.mjs +0 -0
  1152. /package/{esm2020 → esm2022}/lib/models/transaction/allocation-rule-transaction.mjs +0 -0
  1153. /package/{esm2020 → esm2022}/lib/models/transaction/allocation-rule.mjs +0 -0
  1154. /package/{esm2020 → esm2022}/lib/models/transaction/income-amount-type.enum.mjs +0 -0
  1155. /package/{esm2020 → esm2022}/lib/models/transaction/index.mjs +0 -0
  1156. /package/{esm2020 → esm2022}/lib/models/transaction/transaction-allocation.mjs +0 -0
  1157. /package/{esm2020 → esm2022}/lib/models/transaction/transaction-category.enum.mjs +0 -0
  1158. /package/{esm2020 → esm2022}/lib/models/transaction/transaction-meta-field.mjs +0 -0
  1159. /package/{esm2020 → esm2022}/lib/models/transaction/transaction.mjs +0 -0
  1160. /package/{esm2020 → esm2022}/lib/models/user/index.mjs +0 -0
  1161. /package/{esm2020 → esm2022}/lib/models/user/my-account-history-initiated-by.enum.mjs +0 -0
  1162. /package/{esm2020 → esm2022}/lib/models/user/my-account-history-status.enum.mjs +0 -0
  1163. /package/{esm2020 → esm2022}/lib/models/user/my-account-history-type.enum.mjs +0 -0
  1164. /package/{esm2020 → esm2022}/lib/models/user/my-account-history.mjs +0 -0
  1165. /package/{esm2020 → esm2022}/lib/models/user/occupation.mjs +0 -0
  1166. /package/{esm2020 → esm2022}/lib/models/user/user-roles.const.mjs +0 -0
  1167. /package/{esm2020 → esm2022}/lib/models/user/user-to-register.mjs +0 -0
  1168. /package/{esm2020 → esm2022}/lib/models/user/user-work-position.const.mjs +0 -0
  1169. /package/{esm2020 → esm2022}/lib/models/user/user.mjs +0 -0
  1170. /package/{esm2020 → esm2022}/lib/models/user-event/user-event-setting-field.enum.mjs +0 -0
  1171. /package/{esm2020 → esm2022}/lib/models/user-event/user-event-setting.mjs +0 -0
  1172. /package/{esm2020 → esm2022}/lib/models/user-event/user-event-type-category.mjs +0 -0
  1173. /package/{esm2020 → esm2022}/lib/models/user-event/user-event-type.mjs +0 -0
  1174. /package/{esm2020 → esm2022}/lib/models/vehicle/index.mjs +0 -0
  1175. /package/{esm2020 → esm2022}/lib/models/vehicle/vehicle-claim-details.mjs +0 -0
  1176. /package/{esm2020 → esm2022}/lib/models/vehicle/vehicle-logbook.mjs +0 -0
  1177. /package/{esm2020 → esm2022}/lib/models/vehicle/vehicle.mjs +0 -0
  1178. /package/{esm2020 → esm2022}/lib/pipes/index.mjs +0 -0
  1179. /package/{esm2020 → esm2022}/lib/services/account-setup/index.mjs +0 -0
  1180. /package/{esm2020 → esm2022}/lib/services/affiliate/index.mjs +0 -0
  1181. /package/{esm2020 → esm2022}/lib/services/affiliate/rewardful/index.mjs +0 -0
  1182. /package/{esm2020 → esm2022}/lib/services/asset/index.mjs +0 -0
  1183. /package/{esm2020 → esm2022}/lib/services/auth/index.mjs +0 -0
  1184. /package/{esm2020 → esm2022}/lib/services/bank/index.mjs +0 -0
  1185. /package/{esm2020 → esm2022}/lib/services/event/index.mjs +0 -0
  1186. /package/{esm2020 → esm2022}/lib/services/export/index.mjs +0 -0
  1187. /package/{esm2020 → esm2022}/lib/services/header-title/index.mjs +0 -0
  1188. /package/{esm2020 → esm2022}/lib/services/http/address/index.mjs +0 -0
  1189. /package/{esm2020 → esm2022}/lib/services/http/bank/bank-account/index.mjs +0 -0
  1190. /package/{esm2020 → esm2022}/lib/services/http/bank/bank-connection/bank-connection-messages.enum.mjs +0 -0
  1191. /package/{esm2020 → esm2022}/lib/services/http/bank/bank-connection/index.mjs +0 -0
  1192. /package/{esm2020 → esm2022}/lib/services/http/bank/bank-transaction/index.mjs +0 -0
  1193. /package/{esm2020 → esm2022}/lib/services/http/bank/basiq/basiq-messages.enum.mjs +0 -0
  1194. /package/{esm2020 → esm2022}/lib/services/http/bank/basiq/index.mjs +0 -0
  1195. /package/{esm2020 → esm2022}/lib/services/http/bank/index.mjs +0 -0
  1196. /package/{esm2020 → esm2022}/lib/services/http/budget/budget-messages.enum.mjs +0 -0
  1197. /package/{esm2020 → esm2022}/lib/services/http/budget/index.mjs +0 -0
  1198. /package/{esm2020 → esm2022}/lib/services/http/chart-accounts/chart-accounts-depreciations/index.mjs +0 -0
  1199. /package/{esm2020 → esm2022}/lib/services/http/chart-accounts/index.mjs +0 -0
  1200. /package/{esm2020 → esm2022}/lib/services/http/chat/index.mjs +0 -0
  1201. /package/{esm2020 → esm2022}/lib/services/http/client/index.mjs +0 -0
  1202. /package/{esm2020 → esm2022}/lib/services/http/depreciation/depreciation-capital-project/index.mjs +0 -0
  1203. /package/{esm2020 → esm2022}/lib/services/http/depreciation/index.mjs +0 -0
  1204. /package/{esm2020 → esm2022}/lib/services/http/document/document-folder/document-folder-messages.enum.mjs +0 -0
  1205. /package/{esm2020 → esm2022}/lib/services/http/document/document-folder/index.mjs +0 -0
  1206. /package/{esm2020 → esm2022}/lib/services/http/document/document-messages.enum.mjs +0 -0
  1207. /package/{esm2020 → esm2022}/lib/services/http/document/index.mjs +0 -0
  1208. /package/{esm2020 → esm2022}/lib/services/http/facebook/facebook-auth-options.interface.mjs +0 -0
  1209. /package/{esm2020 → esm2022}/lib/services/http/facebook/facebook-auth-response.interface.mjs +0 -0
  1210. /package/{esm2020 → esm2022}/lib/services/http/facebook/facebook-status-response.interface.mjs +0 -0
  1211. /package/{esm2020 → esm2022}/lib/services/http/facebook/index.mjs +0 -0
  1212. /package/{esm2020 → esm2022}/lib/services/http/file/index.mjs +0 -0
  1213. /package/{esm2020 → esm2022}/lib/services/http/firm/client-income/index.mjs +0 -0
  1214. /package/{esm2020 → esm2022}/lib/services/http/firm/client-invite/index.mjs +0 -0
  1215. /package/{esm2020 → esm2022}/lib/services/http/firm/client-movement/index.mjs +0 -0
  1216. /package/{esm2020 → esm2022}/lib/services/http/firm/employee/employee-messages.enum.mjs +0 -0
  1217. /package/{esm2020 → esm2022}/lib/services/http/firm/employee/index.mjs +0 -0
  1218. /package/{esm2020 → esm2022}/lib/services/http/firm/employee-invite/index.mjs +0 -0
  1219. /package/{esm2020 → esm2022}/lib/services/http/firm/firm-messages.enum.mjs +0 -0
  1220. /package/{esm2020 → esm2022}/lib/services/http/firm/index.mjs +0 -0
  1221. /package/{esm2020 → esm2022}/lib/services/http/firm/portfolio-report/index.mjs +0 -0
  1222. /package/{esm2020 → esm2022}/lib/services/http/google/index.mjs +0 -0
  1223. /package/{esm2020 → esm2022}/lib/services/http/holding/holding-messages.enum.mjs +0 -0
  1224. /package/{esm2020 → esm2022}/lib/services/http/holding/holding-sale-messages.enum.mjs +0 -0
  1225. /package/{esm2020 → esm2022}/lib/services/http/holding/holding-type-messages.enum.mjs +0 -0
  1226. /package/{esm2020 → esm2022}/lib/services/http/holding/index.mjs +0 -0
  1227. /package/{esm2020 → esm2022}/lib/services/http/income-source/income-source-forecast/index.mjs +0 -0
  1228. /package/{esm2020 → esm2022}/lib/services/http/income-source/income-source-messages.enum.mjs +0 -0
  1229. /package/{esm2020 → esm2022}/lib/services/http/income-source/index.mjs +0 -0
  1230. /package/{esm2020 → esm2022}/lib/services/http/income-source/salary-forecast/index.mjs +0 -0
  1231. /package/{esm2020 → esm2022}/lib/services/http/income-source/sole-forecast/index.mjs +0 -0
  1232. /package/{esm2020 → esm2022}/lib/services/http/index.mjs +0 -0
  1233. /package/{esm2020 → esm2022}/lib/services/http/loan/borrowing-expense/index.mjs +0 -0
  1234. /package/{esm2020 → esm2022}/lib/services/http/loan/index.mjs +0 -0
  1235. /package/{esm2020 → esm2022}/lib/services/http/property/borrowing-report/borrowing-report-messages.enum.mjs +0 -0
  1236. /package/{esm2020 → esm2022}/lib/services/http/property/borrowing-report/index.mjs +0 -0
  1237. /package/{esm2020 → esm2022}/lib/services/http/property/index.mjs +0 -0
  1238. /package/{esm2020 → esm2022}/lib/services/http/property/property-category/index.mjs +0 -0
  1239. /package/{esm2020 → esm2022}/lib/services/http/property/property-category-movement/index.mjs +0 -0
  1240. /package/{esm2020 → esm2022}/lib/services/http/property/property-document/index.mjs +0 -0
  1241. /package/{esm2020 → esm2022}/lib/services/http/property/property-document/property-document-messages.enum.mjs +0 -0
  1242. /package/{esm2020 → esm2022}/lib/services/http/property/property-messages.enum.mjs +0 -0
  1243. /package/{esm2020 → esm2022}/lib/services/http/property/property-sale/index.mjs +0 -0
  1244. /package/{esm2020 → esm2022}/lib/services/http/property/property-share/index.mjs +0 -0
  1245. /package/{esm2020 → esm2022}/lib/services/http/property/property-valuation/index.mjs +0 -0
  1246. /package/{esm2020 → esm2022}/lib/services/http/property/property-valuation/property-valuation-messages.enum.mjs +0 -0
  1247. /package/{esm2020 → esm2022}/lib/services/http/rest/http-method.type.mjs +0 -0
  1248. /package/{esm2020 → esm2022}/lib/services/http/rest/index.mjs +0 -0
  1249. /package/{esm2020 → esm2022}/lib/services/http/rest/rest-method.type.mjs +0 -0
  1250. /package/{esm2020 → esm2022}/lib/services/http/service-notification/index.mjs +0 -0
  1251. /package/{esm2020 → esm2022}/lib/services/http/sole/index.mjs +0 -0
  1252. /package/{esm2020 → esm2022}/lib/services/http/sole/sole-business/index.mjs +0 -0
  1253. /package/{esm2020 → esm2022}/lib/services/http/sole/sole-business/sole-business-messages.enum.mjs +0 -0
  1254. /package/{esm2020 → esm2022}/lib/services/http/subscription/index.mjs +0 -0
  1255. /package/{esm2020 → esm2022}/lib/services/http/subscription/service-subscription/subscription-messages.enum.mjs +0 -0
  1256. /package/{esm2020 → esm2022}/lib/services/http/tax-review/index.mjs +0 -0
  1257. /package/{esm2020 → esm2022}/lib/services/http/tax-review/tax-review-messages.enum.mjs +0 -0
  1258. /package/{esm2020 → esm2022}/lib/services/http/tax-summary/index.mjs +0 -0
  1259. /package/{esm2020 → esm2022}/lib/services/http/transaction/index.mjs +0 -0
  1260. /package/{esm2020 → esm2022}/lib/services/http/tutorial-video/index.mjs +0 -0
  1261. /package/{esm2020 → esm2022}/lib/services/http/tutorial-video/tutorial-video-response.interface.mjs +0 -0
  1262. /package/{esm2020 → esm2022}/lib/services/http/tutorial-video/video-source.interface.mjs +0 -0
  1263. /package/{esm2020 → esm2022}/lib/services/http/user/index.mjs +0 -0
  1264. /package/{esm2020 → esm2022}/lib/services/http/user/user-messages.enum.mjs +0 -0
  1265. /package/{esm2020 → esm2022}/lib/services/http/vehicle/index.mjs +0 -0
  1266. /package/{esm2020 → esm2022}/lib/services/http/vehicle/vehicle-logbook/index.mjs +0 -0
  1267. /package/{esm2020 → esm2022}/lib/services/http/vehicle/vehicle-logbook/vehicle-logbook-messages.enum.mjs +0 -0
  1268. /package/{esm2020 → esm2022}/lib/services/http/vehicle/vehicle-messages.enum.mjs +0 -0
  1269. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  1270. /package/{esm2020 → esm2022}/lib/services/intercom/index.mjs +0 -0
  1271. /package/{esm2020 → esm2022}/lib/services/json/index.mjs +0 -0
  1272. /package/{esm2020 → esm2022}/lib/services/pdf/index.mjs +0 -0
  1273. /package/{esm2020 → esm2022}/lib/services/pdf/js-pdf.mjs +0 -0
  1274. /package/{esm2020 → esm2022}/lib/services/pdf/pdf-from-dom-element/file-settings.mjs +0 -0
  1275. /package/{esm2020 → esm2022}/lib/services/pdf/pdf-from-table/file-settings.mjs +0 -0
  1276. /package/{esm2020 → esm2022}/lib/services/preloader/index.mjs +0 -0
  1277. /package/{esm2020 → esm2022}/lib/services/property/corelogic/index.mjs +0 -0
  1278. /package/{esm2020 → esm2022}/lib/services/property/equity-position-chart/index.mjs +0 -0
  1279. /package/{esm2020 → esm2022}/lib/services/property/index.mjs +0 -0
  1280. /package/{esm2020 → esm2022}/lib/services/property/property-calculation/index.mjs +0 -0
  1281. /package/{esm2020 → esm2022}/lib/services/report/index.mjs +0 -0
  1282. /package/{esm2020 → esm2022}/lib/services/toast/index.mjs +0 -0
  1283. /package/{esm2020 → esm2022}/lib/services/transaction/index.mjs +0 -0
  1284. /package/{esm2020 → esm2022}/lib/services/user/index.mjs +0 -0
  1285. /package/{esm2020 → esm2022}/lib/services/xlsx/index.mjs +0 -0
  1286. /package/{esm2020 → esm2022}/lib/validators/address-corelogic.validator.mjs +0 -0
  1287. /package/{esm2020 → esm2022}/lib/validators/at-least-one-enabled.validator.mjs +0 -0
  1288. /package/{esm2020 → esm2022}/lib/validators/at-least-one.validator.mjs +0 -0
  1289. /package/{esm2020 → esm2022}/lib/validators/autocomplete.validator.mjs +0 -0
  1290. /package/{esm2020 → esm2022}/lib/validators/conditional.validator.mjs +0 -0
  1291. /package/{esm2020 → esm2022}/lib/validators/current-fin-year.validator.mjs +0 -0
  1292. /package/{esm2020 → esm2022}/lib/validators/date-range.validator.mjs +0 -0
  1293. /package/{esm2020 → esm2022}/lib/validators/fields-sum.validator.mjs +0 -0
  1294. /package/{esm2020 → esm2022}/lib/validators/file.validator.mjs +0 -0
  1295. /package/{esm2020 → esm2022}/lib/validators/greater-than.validator.mjs +0 -0
  1296. /package/{esm2020 → esm2022}/lib/validators/index.mjs +0 -0
  1297. /package/{esm2020 → esm2022}/lib/validators/min-date/messages.enum.mjs +0 -0
  1298. /package/{esm2020 → esm2022}/lib/validators/min-date/min-date.validator.mjs +0 -0
  1299. /package/{esm2020 → esm2022}/lib/validators/password-match.validator.mjs +0 -0
  1300. /package/{esm2020 → esm2022}/lib/validators/password.validator.mjs +0 -0
  1301. /package/{esm2020 → esm2022}/lib/validators/phone-number.validator.mjs +0 -0
  1302. /package/{esm2020 → esm2022}/lib/validators/required-length.validator.mjs +0 -0
  1303. /package/{esm2020 → esm2022}/lib/validators/transactions-meta-fields.validator.mjs +0 -0
  1304. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  1305. /package/{esm2020 → esm2022}/taxtank-core.mjs +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxtank-core.mjs","sources":["../../../projects/tt-core/src/lib/models/property/corelogic-suggestion.ts","../../../projects/tt-core/src/lib/services/property/corelogic/corelogic.service.ts","../../../projects/tt-core/src/lib/interceptors/corelogic-interceptor.ts","../../../projects/tt-core/src/lib/interceptors/financial-year-interceptor.ts","../../../projects/tt-core/src/lib/db/Models/abstract-model.ts","../../../projects/tt-core/src/lib/db/Models/country.ts","../../../projects/tt-core/src/lib/models/address/country.ts","../../../projects/tt-core/src/lib/services/http/address/address.service.ts","../../../projects/tt-core/src/lib/db/Models/address.ts","../../../projects/tt-core/src/lib/db/Enums/address-type.enum.ts","../../../projects/tt-core/src/lib/models/address/address.ts","../../../projects/tt-core/src/lib/models/address/states.enum.ts","../../../projects/tt-core/src/lib/models/bank/basiq/basiq-config.ts","../../../projects/tt-core/src/lib/db/Models/bank/basiq-job.ts","../../../projects/tt-core/src/lib/models/bank/basiq/basiq-job.ts","../../../projects/tt-core/src/lib/models/bank/basiq/basiq-job-step.ts","../../../projects/tt-core/src/lib/models/bank/basiq/basiq-job-response.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-account-balance.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-account-property.ts","../../../projects/tt-core/src/lib/db/Models/observable-model.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-account.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-connection.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-transaction-import.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-transaction.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-depreciation.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-heading.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-meta-field.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-value.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-capital-project.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-forecast.ts","../../../projects/tt-core/src/lib/db/Enums/tank-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-base.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation.ts","../../../projects/tt-core/src/lib/db/Models/document/document-base.ts","../../../projects/tt-core/src/lib/db/Models/document/document-folder.ts","../../../projects/tt-core/src/lib/db/Models/document/document.ts","../../../projects/tt-core/src/lib/db/Models/document/property-document.ts","../../../projects/tt-core/src/lib/db/Models/firm/accountant/tax-review.ts","../../../projects/tt-core/src/lib/db/Models/firm/accountant/ticket.ts","../../../projects/tt-core/src/lib/db/Models/firm/chat.ts","../../../projects/tt-core/src/lib/db/Models/firm/client-invite.ts","../../../projects/tt-core/src/lib/db/Models/firm/client-movement.ts","../../../projects/tt-core/src/lib/db/Models/firm/employee-invite.ts","../../../projects/tt-core/src/lib/db/Models/firm/firm-invite.ts","../../../projects/tt-core/src/lib/db/Models/firm/firm.ts","../../../projects/tt-core/src/lib/db/Models/firm/message-document.ts","../../../projects/tt-core/src/lib/db/Models/firm/message.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source-forecast.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source-type.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/salary-forecast.ts","../../../projects/tt-core/src/lib/db/Models/loan/borrowing-expense-loan.ts","../../../projects/tt-core/src/lib/db/Models/loan/borrowing-expense.ts","../../../projects/tt-core/src/lib/db/Models/loan/loan-payout.ts","../../../projects/tt-core/src/lib/db/Models/loan/loan.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/property-sale-tax-exemption-meta-field.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/property-sale.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/tax-exemption-meta-field.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/tax-exemption.ts","../../../projects/tt-core/src/lib/db/Models/property/property-category-movement.ts","../../../projects/tt-core/src/lib/db/Models/property/property-category.ts","../../../projects/tt-core/src/lib/db/Models/property/property-forecast.ts","../../../projects/tt-core/src/lib/db/Models/property/property-share.ts","../../../projects/tt-core/src/lib/db/Models/property/property-subscription.ts","../../../projects/tt-core/src/lib/db/Models/property/property-valuation.ts","../../../projects/tt-core/src/lib/db/Models/property/property.ts","../../../projects/tt-core/src/lib/db/Models/sole/bas-report.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-business-activity.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-business-allocation.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-business-loss-offset-rule.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-business-loss.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-business.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-contact.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-depreciation-method.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-details.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-forecast.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-invoice-item.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-invoice-template.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-invoice.ts","../../../projects/tt-core/src/lib/db/Models/spare/spare-document-category.ts","../../../projects/tt-core/src/lib/db/Models/spare/spare-document.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-payment.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-price.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-product.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-subscription-item.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-subscription.ts","../../../projects/tt-core/src/lib/db/Models/tax-return/tax-return.ts","../../../projects/tt-core/src/lib/db/Models/tax-return/tax-return-category.ts","../../../projects/tt-core/src/lib/db/Models/tax-return/tax-return-item.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-allocation.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-meta-field.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction.ts","../../../projects/tt-core/src/lib/db/Models/client/annual-client-details.ts","../../../projects/tt-core/src/lib/db/Models/client/client-details.ts","../../../projects/tt-core/src/lib/db/Models/client/client-income-types.ts","../../../projects/tt-core/src/lib/db/Models/client/occupation.ts","../../../projects/tt-core/src/lib/db/Models/user/employee-details.ts","../../../projects/tt-core/src/lib/db/Models/user/registration-invite.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-setting.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-type-category.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-type.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event.ts","../../../projects/tt-core/src/lib/db/Models/user/user.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-claim-details.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-claim.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-logbook.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle.ts","../../../projects/tt-core/src/lib/db/Models/file.ts","../../../projects/tt-core/src/lib/db/Models/phone.ts","../../../projects/tt-core/src/lib/db/Models/service-notification.ts","../../../projects/tt-core/src/lib/db/Models/tax-calculation.ts","../../../projects/tt-core/src/lib/db/Models/holding/holding.ts","../../../projects/tt-core/src/lib/db/Models/holding/holding-type.ts","../../../projects/tt-core/src/lib/db/Models/holding/holding-sale.ts","../../../projects/tt-core/src/lib/db/Models/holding/holding-type-exchange.ts","../../../projects/tt-core/src/lib/db/Models/budget/budget.ts","../../../projects/tt-core/src/lib/db/Models/budget/budget-rule.ts","../../../projects/tt-core/src/lib/models/bank/basiq/basiq-token.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-operation.enum.ts","../../../projects/tt-core/src/lib/models/bank/allocation-group.ts","../../../projects/tt-core/src/lib/db/Enums/allocation-rule-condition-comparison-operator.enum.ts","../../../projects/tt-core/src/lib/db/Enums/allocation-rule-condition-field.enum.ts","../../../projects/tt-core/src/lib/db/Enums/allocation-rule-condition-operator.enum.ts","../../../projects/tt-core/src/lib/db/Enums/allocation-rule-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/bank-account-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/bank-account-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/bank-connection-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/bank-popular.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/bank-provider.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/bank-transaction-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/annual-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-category.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-etp.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-heading-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-heading-tax-deductible.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-heading-taxable.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-heading-vehicle-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-meta-field-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-meta-field-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-salary-adjustments-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-salary-included-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-keep-sign.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-holding-untaxed-income-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts/chart-accounts-invoice-expense.enum.ts","../../../projects/tt-core/src/lib/db/Enums/document-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/holding/holding-type-category.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-return/tax-return-category-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-return/tax-return-category-section.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-return/tax-return-item.enum.ts","../../../projects/tt-core/src/lib/db/Enums/index.ts","../../../projects/tt-core/src/lib/models/bank/bank-external-stats.ts","../../../projects/tt-core/src/lib/models/file/file.ts","../../../projects/tt-core/src/lib/models/bank/bank.ts","../../../projects/tt-core/src/lib/models/loan/loan-max-number-of-payments.enum.ts","../../../projects/tt-core/src/lib/models/loan/loan-payment.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-payout-type.enum.ts","../../../projects/tt-core/src/lib/models/loan/loan-payout.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-bank-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-interest-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-repayment-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-repayment-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-repayment-type-label.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-vehicle-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank/loan/loan-interest-type-label.enum.ts","../../../projects/tt-core/src/lib/models/financial-year/financial-year.ts","../../../projects/tt-core/src/lib/models/financial-year/month-name-short.enum.ts","../../../projects/tt-core/src/lib/models/financial-year/month-number.enum.ts","../../../projects/tt-core/src/lib/models/financial-year/months.const.ts","../../../projects/tt-core/src/lib/collections/collection-dictionary.ts","../../../projects/tt-core/src/lib/collections/collection.ts","../../../projects/tt-core/src/lib/collections/chat/message.collection.ts","../../../projects/tt-core/src/lib/db/Enums/chat-status.enum.ts","../../../projects/tt-core/src/lib/collections/chat/chat.collection.ts","../../../projects/tt-core/src/lib/collections/chat/message-document.collection.ts","../../../projects/tt-core/src/lib/models/export/export-data-table.ts","../../../projects/tt-core/src/lib/collections/exportable.collection.ts","../../../projects/tt-core/src/lib/models/export/export-cell.ts","../../../projects/tt-core/src/lib/models/export/export-cell-type.enum.ts","../../../projects/tt-core/src/lib/collections/loan/loan-payment.collection.ts","../../../projects/tt-core/src/lib/collections/loan/loan.collection.ts","../../../projects/tt-core/src/lib/collections/property/property-sale/property-sale.collection.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-sale/tax-exemption-meta-field.enum.ts","../../../projects/tt-core/src/lib/collections/property/property-sale/property-sale-tax-exemption-meta-field.collection.ts","../../../projects/tt-core/src/lib/collections/property/property.collection.ts","../../../projects/tt-core/src/lib/collections/property/property-category-movement.collection.ts","../../../projects/tt-core/src/lib/collections/property/property-share.collection.ts","../../../projects/tt-core/src/lib/models/report/depreciation/depreciation-lvp-asset-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/depreciation-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/depreciation-calculation.enum.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-capital-project.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-forecast.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-categories.const.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-category.e-collection.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-heading.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-meta-field.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-value.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-tax-labels.enum.ts","../../../projects/tt-core/src/lib/functions/enum-to-list.ts","../../../projects/tt-core/src/lib/db-static/chart-accounts/chart-accounts-values.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-depreciation.ts","../../../projects/tt-core/src/lib/db/Models/transaction/allocation-rule.ts","../../../projects/tt-core/src/lib/db/Models/transaction/allocation-rule-condition.ts","../../../projects/tt-core/src/lib/models/transaction/allocation-rule-condition.ts","../../../projects/tt-core/src/lib/db/Models/transaction/allocation-rule-transaction.ts","../../../projects/tt-core/src/lib/db/Models/transaction/allocation-rule-transaction-meta-field.ts","../../../projects/tt-core/src/lib/models/transaction/allocation-rule-transaction-meta-field.ts","../../../projects/tt-core/src/lib/db/Enums/income-source/income-source-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/salary-forecast-frequency.enum.ts","../../../projects/tt-core/src/lib/models/income-source/salary-forecast.ts","../../../projects/tt-core/src/lib/models/income-source/sole-forecast.ts","../../../projects/tt-core/src/lib/db/Enums/income-source/income-source-forecast-trust-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/income-source/income-source-type-list-other.enum.ts","../../../projects/tt-core/src/lib/db/Enums/income-source/income-source-type-list-sole.enum.ts","../../../projects/tt-core/src/lib/db/Enums/income-source/income-source-type-list-work.enum.ts","../../../projects/tt-core/src/lib/db/Enums/income-source/income-source-type-list-holding.enum.ts","../../../projects/tt-core/src/lib/models/income-source/income-source-type.ts","../../../projects/tt-core/src/lib/models/income-source/income-source-forecast.ts","../../../projects/tt-core/src/lib/models/income-source/income-source.ts","../../../projects/tt-core/src/lib/models/income-source/income-source-chart-data.ts","../../../projects/tt-core/src/lib/models/transaction/allocation-rule-transaction.ts","../../../projects/tt-core/src/lib/models/transaction/allocation-rule.ts","../../../projects/tt-core/src/lib/models/transaction/income-amount-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-source.enum.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-sale/tax-exemption.enum.ts","../../../projects/tt-core/src/lib/models/property/property-sale/tax-exemption.ts","../../../projects/tt-core/src/lib/models/asset-sale.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale.ts","../../../projects/tt-core/src/lib/models/user/my-account-history-initiated-by.enum.ts","../../../projects/tt-core/src/lib/models/user/my-account-history-status.enum.ts","../../../projects/tt-core/src/lib/models/user/my-account-history-type.enum.ts","../../../projects/tt-core/src/lib/models/user/my-account-history.ts","../../../projects/tt-core/src/lib/models/user/occupation.ts","../../../projects/tt-core/src/lib/db/Enums/user-roles.enum.ts","../../../projects/tt-core/src/lib/models/user/user-roles.const.ts","../../../projects/tt-core/src/lib/models/user/user-to-register.ts","../../../projects/tt-core/src/lib/models/user/user-work-position.const.ts","../../../projects/tt-core/src/lib/db/Enums/user-status.enum.ts","../../../projects/tt-core/src/lib/models/client/client-details.ts","../../../projects/tt-core/src/lib/models/client/annual-client-details.ts","../../../projects/tt-core/src/lib/models/client/client-income-types.ts","../../../projects/tt-core/src/lib/db/Enums/client-invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/client-invite-type.enum.ts","../../../projects/tt-core/src/lib/models/registration-invite/registration-invite.ts","../../../projects/tt-core/src/lib/db/Enums/phone-type.enum.ts","../../../projects/tt-core/src/lib/models/phone/phone.ts","../../../projects/tt-core/src/lib/db/Enums/firm-type.enum.ts","../../../projects/tt-core/src/lib/models/firm/firm.ts","../../../projects/tt-core/src/lib/models/client/client-invite.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-product-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-product-id.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-product.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-price-type.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-price.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-subscription-item.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-subscription-status.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-promo-code-duration.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-promo-code.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-subscription.ts","../../../projects/tt-core/src/lib/models/client/client-movement.ts","../../../projects/tt-core/src/lib/models/chart/chart-serie.ts","../../../projects/tt-core/src/lib/models/chart/chart-data.ts","../../../projects/tt-core/src/lib/models/client/client-portfolio-chart-data.ts","../../../projects/tt-core/src/lib/models/client/client-portfolio-report.ts","../../../projects/tt-core/src/lib/models/employee/employee-details.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-payment.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-payment-method.ts","../../../projects/tt-core/src/lib/models/service-subscription/payment-method-brand.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-payment-method-card-brand.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-payment-method-type.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-payment-method.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-product-icons.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-product-roles.const.ts","../../../projects/tt-core/src/lib/models/sole/sole-business-allocation.ts","../../../projects/tt-core/src/lib/models/sole/sole-business-loss-offset-rule.ts","../../../projects/tt-core/src/lib/models/sole/sole-business-loss.ts","../../../projects/tt-core/src/lib/models/sole/sole-invoice-item.ts","../../../projects/tt-core/src/lib/models/sole/sole-contact.ts","../../../projects/tt-core/src/lib/db/Enums/sole-invoice-statuses.enum.ts","../../../projects/tt-core/src/lib/db/Enums/sole-invoice-tax-type.enum.ts","../../../projects/tt-core/src/lib/models/sole/sole-invoice.ts","../../../projects/tt-core/src/lib/db/Enums/sole-invoice-template-tax-type.enum.ts","../../../projects/tt-core/src/lib/models/sole/sole-invoice-template.ts","../../../projects/tt-core/src/lib/models/vehicle/vehicle-logbook.ts","../../../projects/tt-core/src/lib/models/vehicle/vehicle.ts","../../../projects/tt-core/src/lib/db/Enums/vehicle-claim-details-method.enum.ts","../../../projects/tt-core/src/lib/models/vehicle/vehicle-claim-details.ts","../../../projects/tt-core/src/lib/models/vehicle/vehicle-claim.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-group.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-group-item.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-group.enum.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-groups.const.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-lvp-rate.enum.ts","../../../projects/tt-core/src/lib/models/sole/sole-business.ts","../../../projects/tt-core/src/lib/models/sole/sole-business-activity.ts","../../../projects/tt-core/src/lib/db/Enums/sole-depreciation-method.enum.ts","../../../projects/tt-core/src/lib/models/sole/sole-depreciation-method.ts","../../../projects/tt-core/src/lib/models/sole/sole-details.ts","../../../projects/tt-core/src/lib/models/sole/bas-report.ts","../../../projects/tt-core/src/lib/db/Models/setup-item.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-items.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-item.ts","../../../projects/tt-core/src/lib/models/user/user.ts","../../../projects/tt-core/src/lib/models/property/property-subscription.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-category-list.enum.ts","../../../projects/tt-core/src/lib/models/property/property-category.ts","../../../projects/tt-core/src/lib/models/property/property-document.ts","../../../projects/tt-core/src/lib/models/property/property-valuation.ts","../../../projects/tt-core/src/lib/models/property/property-forecast.ts","../../../projects/tt-core/src/lib/models/property/property-category-movement.ts","../../../projects/tt-core/src/lib/models/property/property.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale-cost-base.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale-tax-exemption-meta-field.ts","../../../projects/tt-core/src/lib/models/property/property-sale/tax-exemption-meta-field.ts","../../../projects/tt-core/src/lib/models/property/calculation-form-type.enum.ts","../../../projects/tt-core/src/lib/models/property/calculation-form-item.ts","../../../projects/tt-core/src/lib/models/property/capital-costs-itmes.const.ts","../../../projects/tt-core/src/lib/models/property/property-equity-chart-item.ts","../../../projects/tt-core/src/lib/models/property/property-equity-chart-type.enum.ts","../../../projects/tt-core/src/lib/models/property/property-equity-chart-data.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-share-status.enum.ts","../../../projects/tt-core/src/lib/models/property/property-share.ts","../../../projects/tt-core/src/lib/db/Models/property/borrowing-report.ts","../../../projects/tt-core/src/lib/models/property/borrowing-report.ts","../../../projects/tt-core/src/lib/models/property/share-filter-options.enum.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-meta-field.ts","../../../projects/tt-core/src/lib/models/bank/bank-transaction.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-allocation.ts","../../../projects/tt-core/src/lib/models/transaction/transaction.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-category.enum.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation.ts","../../../projects/tt-core/src/lib/models/report/depreciation/depreciation-lvp-report-item.ts","../../../projects/tt-core/src/lib/collections/transaction/transaction.collection.ts","../../../projects/tt-core/src/lib/collections/transaction/transaction-allocation.collection.ts","../../../projects/tt-core/src/lib/collections/depreciation.collection.ts","../../../projects/tt-core/src/lib/collections/report/depreciation/depreciation-lvp-report-item.collection.ts","../../../projects/tt-core/src/lib/models/report/depreciation/depreciation-report-item.ts","../../../projects/tt-core/src/lib/collections/report/depreciation/depreciation-report-item.collection.ts","../../../projects/tt-core/src/lib/models/report/property/property-report-item.ts","../../../projects/tt-core/src/lib/models/report/property/property-report-item-depreciation.ts","../../../projects/tt-core/src/lib/collections/report/property/property-report-item.collection.ts","../../../projects/tt-core/src/lib/collections/report/property/property-report-item-depreciation.collection.ts","../../../projects/tt-core/src/lib/models/report/property/property-report-item-transaction.ts","../../../projects/tt-core/src/lib/collections/report/property/property-report-item-transaction.collection.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-business-income-or-losses/business-type.enum.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-business-income-or-losses/loss-type.enum.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-business-income-or-losses/my-tax-business-details/my-tax-business-details.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-business-income-or-losses/business-income-or-losses-categories.const.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-business-income-or-losses/my-tax-business-income/my-tax-business-income.ts","../../../projects/tt-core/src/lib/collections/tax-summary/tax-return-categories.const.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-section.enum.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-business-income-or-losses/my-tax-business-losses/my-tax-business-losses.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-cgt/my-tax-cgt.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-cgt/cgt-exemption-and-rollover-code.enum.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-deductions/deduction-fields.const.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-deductions/deduction-clothing-type.enum.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-deductions/deduction-self-education-type.enum.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-deductions/my-tax-deductions.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-dividends/my-tax-dividends.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-estimate/my-tax-estimate.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-income-statements/my-tax-income-statements.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-income-tests/my-tax-income-tests.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-interest/my-tax-interest.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-losses/my-tax-losses.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-offsets/my-tax-offsets.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-other-income/my-tax-other-income.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-partnerships-and-trusts/my-tax-partnerships-and-trusts.ts","../../../projects/tt-core/src/lib/models/report/my-tax/my-tax-rent/my-tax-rent.ts","../../../projects/tt-core/src/lib/models/report/my-tax/ato-links.ts","../../../projects/tt-core/src/lib/models/report/my-tax/index.ts","../../../projects/tt-core/src/lib/models/report/sole/sole-business/sole-business-loss-report.ts","../../../projects/tt-core/src/lib/models/report/vehicle-expense/vehicle-expense.ts","../../../projects/tt-core/src/lib/collections/report/vehicle-expense/vehicle-expense.collection.ts","../../../projects/tt-core/src/lib/models/dictionary/dictionary.ts","../../../projects/tt-core/src/lib/collections/sole/sole-business-losses.collection.ts","../../../projects/tt-core/src/lib/collections/sole/sole-invoice-item.collection.ts","../../../projects/tt-core/src/lib/collections/sole/sole-invoice.collection.ts","../../../projects/tt-core/src/lib/collections/subscription/service-product.collection.ts","../../../projects/tt-core/src/lib/collections/subscription/service-price.collection.ts","../../../projects/tt-core/src/lib/collections/subscription/subscription-item.collection.ts","../../../projects/tt-core/src/lib/collections/subscription/service-subscription.collection.ts","../../../projects/tt-core/src/lib/collections/tax-summary/report-item.collection.ts","../../../projects/tt-core/src/lib/collections/vehicle/vehicle-logbook.collection.ts","../../../projects/tt-core/src/lib/collections/vehicle/best-vehicle-logbook.collection.ts","../../../projects/tt-core/src/lib/collections/vehicle/vehicle-claim.collection.ts","../../../projects/tt-core/src/lib/collections/allocation-group.collection.ts","../../../projects/tt-core/src/lib/collections/allocation-rule.collection.ts","../../../projects/tt-core/src/lib/collections/account-setup-item.collection.ts","../../../projects/tt-core/src/lib/collections/bank-account.collection.ts","../../../projects/tt-core/src/lib/collections/bank-transaction.collection.ts","../../../projects/tt-core/src/lib/collections/chart-accounts.collection.ts","../../../projects/tt-core/src/lib/collections/client-invite.collection.ts","../../../projects/tt-core/src/lib/collections/employee.collection.ts","../../../projects/tt-core/src/lib/collections/client-movement.collection.ts","../../../projects/tt-core/src/lib/collections/client-portfolio-report.collection.ts","../../../projects/tt-core/src/lib/collections/client.collection.ts","../../../projects/tt-core/src/lib/collections/depreciation-forecast.collection.ts","../../../projects/tt-core/src/lib/collections/income-source/income-source.collection.ts","../../../projects/tt-core/src/lib/collections/income-source/income-source-forecast.collection.ts","../../../projects/tt-core/src/lib/collections/tax-review.collection.ts","../../../projects/tt-core/src/lib/collections/user-event-setting.collection.ts","../../../projects/tt-core/src/lib/collections/user-event-type-collection.ts","../../../projects/tt-core/src/lib/collections/holding/holding.collection.ts","../../../projects/tt-core/src/lib/collections/holding/holding-sale.collection.ts","../../../projects/tt-core/src/lib/collections/holding/holding-type.collection.ts","../../../projects/tt-core/src/lib/collections/asset-sale.collection.ts","../../../projects/tt-core/src/lib/collections/index.ts","../../../projects/tt-core/src/lib/models/loan/loan.ts","../../../projects/tt-core/src/lib/models/bank/bank-account-property.ts","../../../projects/tt-core/src/lib/db/Models/bank/basiq-job-step.enum.ts","../../../projects/tt-core/src/lib/models/bank/bank-connection.ts","../../../projects/tt-core/src/lib/models/bank/bank-account.ts","../../../projects/tt-core/src/lib/models/bank/bank-account-chart-data.ts","../../../projects/tt-core/src/lib/models/bank/bank-account-types.const.ts","../../../projects/tt-core/src/lib/models/bank/bank-transaction-chart-data.ts","../../../projects/tt-core/src/lib/models/bank/bank-transaction-summary-fields.enum.ts","../../../projects/tt-core/src/lib/models/bank/type-loan.const.ts","../../../projects/tt-core/src/lib/models/borrowing-expense/borrowing-expense-loan.ts","../../../projects/tt-core/src/lib/models/borrowing-expense/borrowing-expense.ts","../../../projects/tt-core/src/lib/models/chat/chat-view-type.enum.ts","../../../projects/tt-core/src/lib/models/chat/chat.ts","../../../projects/tt-core/src/lib/interfaces/asset-entity-type.enum.ts","../../../projects/tt-core/src/lib/interfaces/asset-type.enum.ts","../../../projects/tt-core/src/lib/models/chat/message-document.ts","../../../projects/tt-core/src/lib/models/chat/message.ts","../../../projects/tt-core/src/lib/models/event/app-event-type.enum.ts","../../../projects/tt-core/src/lib/models/event/app-event.ts","../../../projects/tt-core/src/lib/models/notification/notification.ts","../../../projects/tt-core/src/lib/models/document/document-folder.ts","../../../projects/tt-core/src/lib/models/document/document.ts","../../../projects/tt-core/src/lib/models/document/document-api-url-prefix.enum.ts","../../../projects/tt-core/src/lib/models/document/document-file-types.const.ts","../../../projects/tt-core/src/lib/models/holding/holding-type-exchange.ts","../../../projects/tt-core/src/lib/models/holding/holding-type.ts","../../../projects/tt-core/src/lib/models/holding/holding-sale.ts","../../../projects/tt-core/src/lib/models/holding/holding.ts","../../../projects/tt-core/src/lib/models/holding/holding-reinvest.ts","../../../projects/tt-core/src/lib/models/budget/budget-rule.ts","../../../projects/tt-core/src/lib/models/budget/budget.ts","../../../projects/tt-core/src/lib/models/tax-return/tax-return-category.ts","../../../projects/tt-core/src/lib/models/tax-return/tax-return-item.ts","../../../projects/tt-core/src/lib/models/tax-return/tax-return.ts","../../../projects/tt-core/src/lib/services/event/event-dispatcher.service.ts","../../../projects/tt-core/src/lib/services/mixpanel/mixpanel.service.ts","../../../projects/tt-core/src/lib/services/auth/jwt.service.ts","../../../projects/tt-core/src/lib/services/event/sse.service.ts","../../../projects/tt-core/src/lib/functions/array/replace.ts","../../../projects/tt-core/src/lib/functions/array/sort.ts","../../../projects/tt-core/src/lib/functions/array/sort-deep.ts","../../../projects/tt-core/src/lib/functions/array/to-array.ts","../../../projects/tt-core/src/lib/services/data.service.ts","../../../projects/tt-core/src/lib/models/toast/toast.ts","../../../projects/tt-core/src/lib/models/toast/toast-type.enum.ts","../../../projects/tt-core/src/lib/services/toast/toast.service.ts","../../../projects/tt-core/src/lib/services/http/rest/rest.service.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-account/bank-account.service.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-connection/bank-connection-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-connection/bank-connection.service.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-type-type.enum.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-transaction/bank-transaction.service.ts","../../../projects/tt-core/src/lib/services/http/bank/basiq/basiq-token.service.ts","../../../projects/tt-core/src/lib/services/http/bank/basiq/basiq.service.ts","../../../projects/tt-core/src/lib/services/http/bank/basiq/basiq-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/bank/bank.service.ts","../../../projects/tt-core/src/lib/services/http/budget/budget.service.ts","../../../projects/tt-core/src/lib/services/http/budget/budget-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.ts","../../../projects/tt-core/src/lib/services/http/chart-accounts/chart-accounts.service.ts","../../../projects/tt-core/src/lib/services/http/chat/chat.service.ts","../../../projects/tt-core/src/lib/services/http/chat/message.service.ts","../../../projects/tt-core/src/lib/services/http/chat/message-document.service.ts","../../../projects/tt-core/src/lib/services/http/depreciation/depreciation.service.ts","../../../projects/tt-core/src/lib/services/http/depreciation/depreciation-capital-project/depreciation-capital-project.service.ts","../../../projects/tt-core/src/lib/services/http/document/document-folder/document-folder-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/document/document-folder/document-folder.service.ts","../../../projects/tt-core/src/lib/services/http/document/document.service.ts","../../../projects/tt-core/src/lib/services/http/document/document-messages.enum.ts","../../../projects/tt-core/src/lib/services/auth/auth.service.ts","../../../projects/tt-core/src/lib/services/http/facebook/facebook.service.ts","../../../projects/tt-core/src/lib/services/http/google/google.service.ts","../../../projects/tt-core/src/lib/services/http/file/file.service.ts","../../../projects/tt-core/src/lib/services/http/firm/client-income/client-income-types.service.ts","../../../projects/tt-core/src/lib/services/http/firm/client-invite/client-invite.service.ts","../../../projects/tt-core/src/lib/services/http/firm/client-invite/client-invite-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/firm/client-movement/client-movement.service.ts","../../../projects/tt-core/src/lib/services/http/rest/rest-old.service.ts","../../../projects/tt-core/src/lib/services/http/firm/employee/employee-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/firm/employee/employee.service.ts","../../../projects/tt-core/src/lib/models/employee/employee-invite.ts","../../../projects/tt-core/src/lib/services/http/firm/employee-invite/employee-invite.service.ts","../../../projects/tt-core/src/lib/services/http/firm/portfolio-report/client-portfolio-report.service.ts","../../../projects/tt-core/src/lib/services/http/firm/firm-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/firm/firm.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/salary-forecast/salary-forecast.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/sole-forecast/sole-forecast.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/income-source.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/income-source-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/loan/borrowing-expense/borrowing-expense.service.ts","../../../projects/tt-core/src/lib/services/http/loan/loan.service.ts","../../../projects/tt-core/src/lib/services/http/property/borrowing-report/borrowing-report.service.ts","../../../projects/tt-core/src/lib/services/http/property/borrowing-report/borrowing-report-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/property/property-category/property-category.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-category-movement/property-category-movement.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-document/property-document-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/property/property-document/property-document.service.ts","../../../projects/tt-core/src/lib/services/json/tax-exemption/tax-exemption.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-sale/property-sale.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-share/property-share.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-valuation/property-valuation.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-valuation/property-valuation-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/property/property-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/property/property.service.ts","../../../projects/tt-core/src/lib/services/http/service-notification/service-notification.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-business/sole-business-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-business/sole-business.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-business-activity/sole-business-activity.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-business-loss/sole-business-loss.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-contact/sole-contact.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-depreciation-method/sole-depreciation-method.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-details/sole-details.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-invoice/sole-invoice.service.ts","../../../projects/tt-core/src/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.ts","../../../projects/tt-core/src/lib/services/http/sole/bas-report/bas-report.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-payment/service-payment.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-payment-method/service-payment-method.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-price/service-price.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-subscription/subscription-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-subscription/subscription.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-product/service-product.service.ts","../../../projects/tt-core/src/lib/db/Enums/tax-review-status.enum.ts","../../../projects/tt-core/src/lib/models/tax-review/tax-review.ts","../../../projects/tt-core/src/lib/services/http/tax-review/tax-review-history/tax-review-history.service.ts","../../../projects/tt-core/src/lib/services/http/tax-review/tax-review.service.ts","../../../projects/tt-core/src/lib/services/http/tax-review/tax-review-messages.enum.ts","../../../projects/tt-core/src/lib/models/tax-summary/report-item-details.ts","../../../projects/tt-core/src/lib/models/tax-summary/report-item.ts","../../../projects/tt-core/src/lib/models/tax-summary/tax-summary-section.ts","../../../projects/tt-core/src/lib/models/tax-summary/tax-summary.ts","../../../projects/tt-core/src/lib/models/tax-summary/tax-summary-type.enum.ts","../../../projects/tt-core/src/lib/services/http/tax-summary/tax-summary.service.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction-allocation/allocation-rule/allocation-rule.service.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction.service.ts","../../../projects/tt-core/src/lib/services/http/tutorial-video/tutorial-video.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-claim.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-claim-details.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-logbook/vehicle-logbook.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-logbook/vehicle-logbook-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/client/capital-gain/annual-client-details.service.ts","../../../projects/tt-core/src/lib/services/http/client/occupation/occupation.service.ts","../../../projects/tt-core/src/lib/models/user-event/user-event-type-category.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-type-frequency.enum.ts","../../../projects/tt-core/src/lib/models/user-event/user-event-type.ts","../../../projects/tt-core/src/lib/models/user-event/user-event-setting.ts","../../../projects/tt-core/src/lib/services/http/user/user-event-setting/user-event-setting.service.ts","../../../projects/tt-core/src/lib/services/http/user/user-event-type/user-event-type.service.ts","../../../projects/tt-core/src/lib/services/http/user/user-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/user/users-invite/users-invite.service.ts","../../../projects/tt-core/src/lib/services/http/user/user.service.ts","../../../projects/tt-core/src/lib/services/http/user/financial-year/financial-year.service.ts","../../../projects/tt-core/src/lib/services/http/holding/holding.service.ts","../../../projects/tt-core/src/lib/services/http/holding/holding-type.service.ts","../../../projects/tt-core/src/lib/services/http/holding/holding-sale.service.ts","../../../projects/tt-core/src/lib/services/json/holding/holding-type-exchange.service.ts","../../../projects/tt-core/src/lib/services/http/holding/holding-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/holding/holding-sale-messages.enum.ts","../../../projects/tt-core/src/lib/services/http/holding/holding-type-messages.enum.ts","../../../projects/tt-core/src/lib/services/json/income-source/income-source-type.service.ts","../../../projects/tt-core/src/lib/services/json/chart-accounts/chart-accounts-value.service.ts","../../../projects/tt-core/src/lib/services/json/tax-return/tax-return-item.service.ts","../../../projects/tt-core/src/lib/db/Enums/setup-item-type.enum.ts","../../../projects/tt-core/src/lib/services/http/setup-item/setup-item.service.ts","../../../projects/tt-core/src/lib/services/account-setup/account-setup.service.ts","../../../projects/tt-core/src/lib/services/affiliate/rewardful/rewardful.service.ts","../../../projects/tt-core/src/lib/services/user/user-switcher.service.ts","../../../projects/tt-core/src/lib/services/asset/assets.service.ts","../../../projects/tt-core/src/lib/services/bank/bank-transaction-calculation.service.ts","../../../projects/tt-core/src/lib/services/bank/bank-account-calculation.service.ts","../../../projects/tt-core/src/lib/services/export/export-formatter.service.ts","../../../projects/tt-core/src/lib/services/header-title/header-title.service.ts","../../../projects/tt-core/src/lib/services/intercom/intercom.service.ts","../../../projects/tt-core/src/lib/services/pdf/js-pdf.ts","../../../projects/tt-core/src/lib/services/pdf/pdf-from-dom-element/file-settings.ts","../../../projects/tt-core/src/lib/services/pdf/pdf-from-dom-element/pdf-from-dom-element.service.ts","../../../projects/tt-core/src/lib/services/pdf/pdf-from-table/file-settings.ts","../../../projects/tt-core/src/lib/services/pdf/pdf-from-table/pdf-from-table.service.ts","../../../projects/tt-core/src/lib/services/pdf/pdf-from-table/pdf-from-data-table/pdf-from-data-table.service.ts","../../../projects/tt-core/src/lib/services/pdf/pdf-from-table/pdf-from-html-table/pdf-from-html-table.service.ts","../../../projects/tt-core/src/lib/services/preloader/preloader.service.ts","../../../projects/tt-core/src/lib/services/property/equity-position-chart/equity-position-chart.service.ts","../../../projects/tt-core/src/lib/models/badge/badge-color.enum.ts","../../../projects/tt-core/src/lib/models/badge/badge.ts","../../../projects/tt-core/src/lib/services/property/property-calculation/property-calculation.service.ts","../../../projects/tt-core/src/lib/services/report/property/property-transaction-report.service.ts","../../../projects/tt-core/src/lib/services/transaction/transaction-calculation.service.ts","../../../projects/tt-core/src/lib/services/xlsx/xlsx.service.ts","../../../projects/tt-core/src/lib/interceptors/jwt-interceptor.ts","../../../projects/tt-core/src/lib/interceptors/user-switcher-interceptor.ts","../../../projects/tt-core/src/lib/models/endpoint/endpoint.ts","../../../projects/tt-core/src/lib/models/endpoint/endpoints.const.ts","../../../projects/tt-core/src/lib/interceptors/preloader.interceptor.ts","../../../projects/tt-core/src/lib/interceptors/basiq-token.interceptor.ts","../../../projects/tt-core/src/lib/interceptors/basiq-client-id.interceptor.ts","../../../projects/tt-core/src/lib/interceptors/interceptors.module.ts","../../../projects/tt-core/src/lib/tt-core.module.ts","../../../projects/tt-core/src/lib/pipes/app-currency.pipe.ts","../../../projects/tt-core/src/lib/db/Enums/client-details-medicare-exemption.enum.ts","../../../projects/tt-core/src/lib/db/Enums/client-details-work-depreciation-calculation.enum.ts","../../../projects/tt-core/src/lib/db/Enums/client-details-working-holiday-maker.enum.ts","../../../projects/tt-core/src/lib/db/Enums/depreciation-calculation-percent.enum.ts","../../../projects/tt-core/src/lib/db/Enums/depreciation-write-off-amount.enum.ts","../../../projects/tt-core/src/lib/db/Enums/invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-depreciation-calculation.enum.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-share-access.enum.ts","../../../projects/tt-core/src/lib/db/Enums/registration-invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/service-notification-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/service-notification-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-payment-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-price-recurring-interval.enum.ts","../../../projects/tt-core/src/lib/db/Enums/spare-document-spare-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-calculation-medicare-exemption.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-calculation-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-tax-summary.enum.ts","../../../projects/tt-core/src/lib/db/Enums/ticket-feedback.enum.ts","../../../projects/tt-core/src/lib/db/Enums/ticket-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/ticket-types.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-type-user-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-type-employee-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-type-client-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-medicare-exemption.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-title.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-work-depreciation-calculation.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-working-holiday-maker.enum.ts","../../../projects/tt-core/src/lib/db/Enums/vehicle-logbook-purpose.enum.ts","../../../projects/tt-core/src/lib/models/color/alphabet-colors.enum.ts","../../../projects/tt-core/src/lib/models/export/export-format.enum.ts","../../../projects/tt-core/src/lib/models/file/icons-file.enum.ts","../../../projects/tt-core/src/lib/models/income-position/income-position.ts","../../../projects/tt-core/src/lib/models/pdf/pdf-orientation.enum.ts","../../../projects/tt-core/src/lib/models/pdf/pdf-settings.ts","../../../projects/tt-core/src/lib/models/service-subscription/module-url-list.const.ts","../../../projects/tt-core/src/lib/models/user-event/user-event-setting-field.enum.ts","../../../projects/tt-core/src/lib/services/http/tutorial-video/video-source.interface.ts","../../../projects/tt-core/src/lib/functions/clone-deep.ts","../../../projects/tt-core/src/lib/functions/create-date.ts","../../../projects/tt-core/src/lib/functions/get-doc-icon.ts","../../../projects/tt-core/src/lib/functions/mat-options-functions.ts","../../../projects/tt-core/src/lib/functions/mat-sort-options.ts","../../../projects/tt-core/src/lib/functions/tax-review-filter-predicate.ts","../../../projects/tt-core/src/lib/forms/abstract.form.ts","../../../projects/tt-core/src/lib/forms/address/address.form.ts","../../../projects/tt-core/src/lib/forms/budget/budget.form.ts","../../../projects/tt-core/src/lib/forms/form-validations.enum.ts","../../../projects/tt-core/src/lib/forms/document-folder/document-folder.form.ts","../../../projects/tt-core/src/lib/forms/document-folder/document.form.ts","../../../projects/tt-core/src/lib/forms/loan/loan.form.ts","../../../projects/tt-core/src/lib/validators/at-least-one.validator.ts","../../../projects/tt-core/src/lib/validators/autocomplete.validator.ts","../../../projects/tt-core/src/lib/validators/conditional.validator.ts","../../../projects/tt-core/src/lib/validators/password.validator.ts","../../../projects/tt-core/src/lib/validators/password-match.validator.ts","../../../projects/tt-core/src/lib/validators/min-date/messages.enum.ts","../../../projects/tt-core/src/lib/validators/min-date/min-date.validator.ts","../../../projects/tt-core/src/lib/validators/fields-sum.validator.ts","../../../projects/tt-core/src/lib/validators/current-fin-year.validator.ts","../../../projects/tt-core/src/lib/validators/file.validator.ts","../../../projects/tt-core/src/lib/validators/greater-than.validator.ts","../../../projects/tt-core/src/lib/validators/unique-email.validator.ts","../../../projects/tt-core/src/lib/forms/firm/firm.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account/bank-account-properties.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-business.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-business-allocations.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-business-loss.form.ts","../../../projects/tt-core/src/lib/validators/required-length.validator.ts","../../../projects/tt-core/src/lib/forms/sole/sole-contact.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-depreciation-method.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-details.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-invoice-item.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-invoice.form.ts","../../../projects/tt-core/src/lib/forms/sole/sole-invoice-template.form.ts","../../../projects/tt-core/src/lib/forms/sole/bas-report.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account/bank-account-allocation.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account/bank-account-import.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account/bank-account-add-manual.form.ts","../../../projects/tt-core/src/lib/validators/date-range.validator.ts","../../../projects/tt-core/src/lib/validators/at-least-one-enabled.validator.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account/bank-accounts-import.form.ts","../../../projects/tt-core/src/lib/forms/client/annual-client-details.form.ts","../../../projects/tt-core/src/lib/forms/client/client-income-types.form.ts","../../../projects/tt-core/src/lib/forms/login/login.form.ts","../../../projects/tt-core/src/lib/validators/phone-number.validator.ts","../../../projects/tt-core/src/lib/forms/phone/phone.form.ts","../../../projects/tt-core/src/lib/forms/user/password.form.ts","../../../projects/tt-core/src/lib/forms/user/reset-password.form.ts","../../../projects/tt-core/src/lib/forms/user/user-invite.form.ts","../../../projects/tt-core/src/lib/forms/user/user.form.ts","../../../projects/tt-core/src/lib/forms/user/client-details.form.ts","../../../projects/tt-core/src/lib/forms/register/register-client.form.ts","../../../projects/tt-core/src/lib/forms/register/register-firm.form.ts","../../../projects/tt-core/src/lib/forms/property/borrowing-report.form.ts","../../../projects/tt-core/src/lib/forms/property/property-sale/property-sale-cost-base.form.ts","../../../projects/tt-core/src/lib/forms/property/property-sale/property-sale-cost-sale.form.ts","../../../projects/tt-core/src/lib/forms/property/property-sale/property-sale-exemptions.form.ts","../../../projects/tt-core/src/lib/forms/property/property-edit.form.ts","../../../projects/tt-core/src/lib/forms/property/property-document.form.ts","../../../projects/tt-core/src/lib/forms/property/property-valuation.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-details/my-tax-business-details.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-income/my-tax-business-income.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-losses/my-tax-business-losses.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-business-income-or-losses/my-tax-business-income-or-losses.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-cgt.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-deductions.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-dividends.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-income-statements.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-income-tests.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-interest.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-losses.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-medicare.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-offsets.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-other-income.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-partnerships-and-trusts.form.ts","../../../projects/tt-core/src/lib/forms/report/my-tax/my-tax-rent.form.ts","../../../projects/tt-core/src/lib/forms/vehicle/vehicle.form.ts","../../../projects/tt-core/src/lib/forms/vehicle/vehicle-claim.form.ts","../../../projects/tt-core/src/lib/forms/vehicle/vehicle-claim-details.form.ts","../../../projects/tt-core/src/lib/forms/vehicle/vehicle-logbook.form.ts","../../../projects/tt-core/src/lib/forms/transaction/allocation-rule-condition.form.ts","../../../projects/tt-core/src/lib/forms/transaction/allocation-rule-transaction-meta-field.form.ts","../../../projects/tt-core/src/lib/forms/transaction/allocation-rule-transaction.form.ts","../../../projects/tt-core/src/lib/forms/transaction/allocation-rule.form.ts","../../../projects/tt-core/src/lib/forms/transaction/transaction-base.form.ts","../../../projects/tt-core/src/lib/forms/transaction/messages.enum.ts","../../../projects/tt-core/src/lib/forms/transaction/transaction.form.ts","../../../projects/tt-core/src/lib/forms/transaction/sole/sole-transaction.form.ts","../../../projects/tt-core/src/lib/forms/transaction/sole/sole-income.form.ts","../../../projects/tt-core/src/lib/validators/transactions-meta-fields.validator.ts","../../../projects/tt-core/src/lib/forms/transaction/work/work-transaction.form.ts","../../../projects/tt-core/src/lib/forms/transaction/work/work-income.form.ts","../../../projects/tt-core/src/lib/forms/transaction/work/work-expense.form.ts","../../../projects/tt-core/src/lib/forms/transaction/holding/holding-income.form.ts","../../../projects/tt-core/src/lib/forms/depreciation/depreciation.form.ts","../../../projects/tt-core/src/lib/forms/holding/holding-sale.form.ts","../../../projects/tt-core/src/lib/forms/holding/holding-type.form.ts","../../../projects/tt-core/src/lib/forms/holding/holding.form.ts","../../../projects/tt-core/src/lib/forms/holding/holding-reinvest.form.ts","../../../projects/tt-core/src/lib/messages/messages.enum.ts","../../../projects/tt-core/src/public-api.ts","../../../projects/tt-core/src/taxtank-core.ts"],"sourcesContent":["/**\r\n * https://api-uat.corelogic.asia/property/au/v2/suggest.json\r\n * address suggestion from corelogic service\r\n */\r\nexport class CorelogicSuggestion {\r\n councilAreaId: number;\r\n countryId: number;\r\n isActiveProperty: boolean;\r\n isBodyCorporate: boolean;\r\n isUnit: boolean;\r\n localityId: number;\r\n postcodeId: number;\r\n propertyId: number;\r\n stateId: number;\r\n streetId: number;\r\n suggestion: string;\r\n suggestionType: string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { CorelogicSuggestion } from '../../../models/property/corelogic-suggestion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CorelogicService {\n _accessToken: string;\n accessTokenSubject: ReplaySubject<string> = new ReplaySubject<string>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n getAccessToken(force = false): Observable<string> {\n if (!this._accessToken || force) {\n this.http.get(`${this.environment.coreLogicUrl}/access/oauth/token?grant_type=client_credentials&client_id=${this.environment.coreLogicId}&client_secret=${this.environment.coreLogicSecret}`)\n .pipe(\n map((response: any) => response.access_token)\n )\n .subscribe((token: string) => {\n this._accessToken = token;\n this.accessTokenSubject.next(this._accessToken);\n });\n }\n\n return this.accessTokenSubject.asObservable();\n }\n\n getSuggestions(query: string, country = 'au'): Observable<CorelogicSuggestion[]> {\n // @TODO handle different countries in future\n return this.http.get(`${this.environment.coreLogicUrl}/property/${country}/v2/suggest.json?q=${query}`)\n .pipe(\n map((response: any) => response.suggestions.map((item: object) => plainToClass(CorelogicSuggestion, item)))\n );\n }\n}\n","import { Observable } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest\r\n} from '@angular/common/http';\r\nimport { CorelogicService } from '../services/property/corelogic/corelogic.service';\r\nimport { mergeMap } from 'rxjs/operators';\r\n\r\n/**\r\n * Corelogic interceptor add Core Logic access token for each search requests related with Core Logic API\r\n */\r\n@Injectable()\r\nexport class CorelogicInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private corelogicService: CorelogicService,\r\n @Inject('environment') private environment: any\r\n ) {\r\n }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // skip non-corelogic requests\r\n if (!request.url.includes(this.environment.coreLogicUrl)) {\r\n return next.handle(request);\r\n }\r\n\r\n // don't need token for this endpoint\r\n if (request.url.includes(`${this.environment.coreLogicUrl}/access/oauth/token`)) {\r\n return next.handle(request);\r\n }\r\n\r\n return this.corelogicService.getAccessToken()\r\n .pipe(\r\n mergeMap((token: string) => next.handle(this.addToken(request, token)))\r\n )\r\n }\r\n\r\n private addToken(request: HttpRequest<any>, token: string): HttpRequest<any> {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: 'Bearer ' + token\r\n }\r\n });\r\n }\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpParams,\r\n HttpRequest\r\n} from '@angular/common/http';\r\n\r\n/**\r\n * Financial Year interceptor add financialYear parameter to requests because a lot of POST and GET requests require this parameter\r\n * @TODO now we can get current fin year from user on backend. So we can remove this interceptor\r\n */\r\n@Injectable()\r\nexport class FinancialYearInterceptor implements HttpInterceptor {\r\n constructor(@Inject('environment') private environment: any) {}\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // skip third party requests\r\n // @TODO Alex: Also check and ignore requests we don't need financial year\r\n if (!request.url.includes(this.environment.api_uri)) {\r\n return next.handle(request);\r\n }\r\n\r\n // Set financial year parameter to requests\r\n let params: HttpParams = new HttpParams({\r\n fromString: request.params.toString()\r\n });\r\n\r\n // clone request to add new parameters\r\n let clonedReq: HttpRequest<any> = request.clone();\r\n\r\n // @TODO query params should be passed using second param of get request and HttpParams object\r\n if (!params.get('financialYear') && !request.urlWithParams.includes('?financialYear') && !request.urlWithParams.includes('&financialYear')) {\r\n params = params.set('financialYear', localStorage.getItem('financialYear'));\r\n clonedReq = request.clone({\r\n params: params\r\n });\r\n }\r\n\r\n return next.handle(clonedReq);\r\n }\r\n}\r\n","import get from 'lodash/get';\nimport { formatDate } from '@angular/common';\n\n/**\n * @TODO move from db folder when refactored base models\n */\nexport abstract class AbstractModel {\n id?: any;\n\n hasValue(value: any, path = 'id'): boolean {\n return get(path) === value;\n }\n\n formatDate(date: Date, format = 'MMM d, y'): string {\n return formatDate(date, format, 'en-AU');\n }\n}\n","import {AbstractModel} from './abstract-model';\n\nexport class Country extends AbstractModel {\n name?: string;\n callingCode?: string;\n}\n","import { plainToClass } from 'class-transformer';\r\nimport { Country as CountryBase } from '../../db/Models/country';\r\n\r\nexport class Country extends CountryBase {\r\n static australia: Country = plainToClass(Country, {id: 14, name: 'Australia', callingCode: '61'});\r\n\r\n /**\r\n * Return country name with phone code\r\n */\r\n get countryWithCode(): string {\r\n return `${this.name} (+${this.callingCode})`;\r\n }\r\n\r\n /**\r\n * Check if country calling code is Australian or not\r\n */\r\n isAustralianCode(): boolean {\r\n return this.callingCode === '61';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { Country } from '../../../models/address/country';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressService {\n _countries: Country[];\n countriesSubject: ReplaySubject<Country[]> = new ReplaySubject<Country[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) { }\n\n getCountries(): Observable<Country[]> {\n if (!this._countries) {\n this.http.get(`${this.environment.apiV2}/countries`)\n .pipe(\n map((response: object) => response['hydra:member'].map((item: object) => plainToClass(Country, item)))\n )\n .subscribe((countries: Country[]) => {\n this._countries = countries;\n this.countriesSubject.next(countries);\n });\n }\n\n return this.countriesSubject.asObservable();\n }\n}\n","import { AddressTypeEnum } from '../Enums/address-type.enum';\nimport { Country } from './country';\nimport {AbstractModel} from './abstract-model';\n\nexport class Address extends AbstractModel {\n address?: string;\n city?: string;\n state?: string;\n postcode?: string;\n type?: AddressTypeEnum;\n corelogicRefId?: number;\n corelogicLocId?: number;\n unitNumber?: boolean;\n latitude?: number;\n longitude?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n country?: Country;\n}\n","export enum AddressTypeEnum {\n\tSTREET = 1,\n\tPOSTAL = 2,\n}\n","import { Address as AddressBase } from '../../db/Models/address';\r\nimport { Country } from './country';\r\nimport { AddressTypeEnum } from '../../db/Enums/address-type.enum';\r\nimport { Type } from 'class-transformer';\r\n\r\nexport class Address extends AddressBase {\r\n @Type((() => Country))\r\n country: Country;\r\n\r\n suggestion: string;\r\n type: AddressTypeEnum = AddressTypeEnum.STREET;\r\n\r\n toString(): string {\r\n return [this.unitNumber, this.address, this.city, this.state, this.postcode].filter(Boolean).join(', ');\r\n }\r\n\r\n /**\r\n * Short address string\r\n * 12/23 Jackson avenue\r\n */\r\n get name(): string {\r\n return `${this.unitNumber ? this.unitNumber + '/' : ''}${this.address}`;\r\n }\r\n\r\n /**\r\n * Full address string in corelogic format\r\n * 12/23 Jackson avenue Sydney QLD 1212\r\n */\r\n get nameLong(): string {\r\n return `${this.name} ${this.city} ${this.state} ${this.postcode}`;\r\n }\r\n\r\n /**\r\n * Street number may contain digits, letters, symbols '/' and '-', but not spaces\r\n */\r\n get streetNumber(): string {\r\n if (!this.address) {\r\n return null;\r\n }\r\n\r\n return this.address.split(' ')[0];\r\n }\r\n\r\n /**\r\n * Street name without number\r\n */\r\n get street(): string {\r\n if (!this.address) {\r\n return null;\r\n }\r\n\r\n return this.address.split(' ').slice(1).join(' ');\r\n }\r\n}\r\n","export enum StatesEnum {\n ACT = 'ACT (The Australian Capital Territory)',\n NSW = 'NSW (New South Wales)',\n NT = 'NT (Northern Territory)',\n SA = 'SA (South Australia)',\n TAS = 'TAS (Tasmania)',\n VIC = 'VIC (Victoria)',\n QLD = 'QLD (Queensland)',\n WA = 'WA (Western Australia)'\n}\n","/**\n * Class describe configuration options for basiq connect control\n * https://www.npmjs.com/package/@basiq/basiq-connect-control\n */\nexport class BasiqConfig {\n // ID of the DOM element to which Basiq Connect Control will be rendered;\n containerId = 'basiq-control';\n\n // CLIENT_ACCESS scope\n token: string;\n userID: string;\n // or\n connectLinkId: string;\n\n // optional fields\n // should uploading statements be enabled\n upload: boolean;\n // should connecting to bank with credentials be enabled\n connect: boolean;\n // company name to be shown, will default to Basiq Dashboard name\n companyName: string;\n // valid values: Australia, New Zealand\n regionOfInstitutions: string;\n // should test banks (Basiq, Hooli) be hidden from user\n hideTestBanks: boolean;\n // should beta banks be hidden from user\n hideBetaBanks: boolean;\n\n constructor(\n options: object\n ) {\n Object.assign(this, options);\n }\n}\n","import { BankConnection } from './bank-connection';\nimport { AbstractModel } from '../abstract-model';\nimport { BasiqJobStepEnum } from './basiq-job-step.enum';\n\nexport class BasiqJob extends AbstractModel {\n externalId?: string;\n createdAt?: Date;\n updatedAt?: Date;\n bankConnection?: BankConnection;\n step: BasiqJobStepEnum;\n}\n","import { BasiqJob as BasiqJobBase } from '../../../db/Models/bank/basiq-job';\n\nexport class BasiqJob extends BasiqJobBase {\n}\n","export class BasiqJobStep {\n title: 'verify-credentials' | 'retrieve-accounts' | 'retrieve-transactions';\n status: 'pending' | 'in-progress' | 'failed' | 'success';\n\n isVerifyCredentials(): boolean {\n return this.title === 'verify-credentials';\n }\n\n isRetrieveAccounts(): boolean {\n return this.title === 'retrieve-accounts';\n }\n\n isInProgress(): boolean {\n return this.status === 'in-progress';\n }\n\n isSuccess(): boolean {\n return this.status === 'success';\n }\n\n isFailed(): boolean {\n return this.status === 'failed';\n }\n}\n","import { Type } from 'class-transformer';\nimport { BasiqJobStep } from './basiq-job-step';\n\nexport class BasiqJobResponse {\n id: string;\n\n @Type(() => BasiqJobStep)\n steps: BasiqJobStep[];\n\n getVerifyCredentialsStep(): BasiqJobStep {\n return this.steps.find((step: BasiqJobStep) => step.isVerifyCredentials());\n }\n\n getRetrieveAccountsStep(): BasiqJobStep {\n return this.steps.find((step: BasiqJobStep) => step.isRetrieveAccounts());\n }\n}\n","import { BankAccount } from './bank-account';\nimport { AbstractModel } from '../abstract-model';\nimport { Type } from 'class-transformer';\n\nexport class BankAccountBalance extends AbstractModel {\n financialYear?: number;\n @Type(() => Number)\n openingBalance?: number;\n closingBalance?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n bankAccount?: BankAccount;\n isManual?: boolean;\n}\n","import { BankAccount } from './bank-account';\nimport { Property } from '../property/property';\nimport {AbstractModel} from '../abstract-model';\nimport { Type } from 'class-transformer';\n\nexport class BankAccountProperty extends AbstractModel {\n @Type(() => Number)\n percent?: number;\n\n bankAccount?: BankAccount;\n property?: Property;\n}\n","import { RestMethod } from '../../services';\nimport { AbstractModel } from './abstract-model';\n\n/**\n * @TODO move from db folder when refactored base models\n * Model, which children should be listened via event dispatcher service ising automatic events\n */\nexport class ObservableModel extends AbstractModel {\n static getEventName(method: RestMethod): string {\n return `${this.name}_${method}`;\n }\n\n static getEventNames(...methods: RestMethod[]): string[] {\n return methods.map((method) => this.getEventName(method));\n }\n}\n","import { BankAccountStatusEnum } from '../../Enums/bank/bank-account-status.enum';\nimport { BankAccountTypeEnum } from '../../Enums/bank/bank-account-type.enum';\nimport { BankConnection } from './bank-connection';\nimport { BankAccountProperty } from './bank-account-property';\nimport { BankTransaction } from './bank-transaction';\nimport { BankAccountBalance } from './bank-account-balance';\nimport { Loan } from '../loan/loan';\nimport { SoleBusinessAllocation } from '../sole/sole-business-allocation';\nimport { ObservableModel } from '../observable-model';\nimport { Type } from 'class-transformer';\n\nexport class BankAccount extends ObservableModel {\n status?: BankAccountStatusEnum;\n accountId?: string;\n type?: BankAccountTypeEnum;\n accountName?: string;\n nickname?: string;\n accountNumber?: string;\n\n @Type(() => Number)\n currentBalance?: number;\n\n currency?: string;\n isManual?: boolean;\n migrateFrom?: Date;\n migrateTo?: Date;\n lastTransactionDate?: Date;\n balanceInitDate?: Date;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n bankConnection?: BankConnection;\n bankAccountProperties?: BankAccountProperty[];\n businessAllocations?: SoleBusinessAllocation[];\n bankTransactions?: BankTransaction[];\n balances?: BankAccountBalance[];\n loan?: Loan;\n}\n","import { BankConnectionStatusEnum, BankProviderEnum } from '../../Enums';\nimport { User } from '../user/user';\nimport { Bank } from './bank';\nimport { BankAccount } from './bank-account';\nimport { BasiqJob } from './basiq-job';\nimport { ObservableModel } from '../observable-model';\n\nexport class BankConnection extends ObservableModel {\n externalId?: string;\n status?: BankConnectionStatusEnum;\n user?: User;\n bank?: Bank;\n bankAccounts?: BankAccount[];\n basiqJob?: BasiqJob;\n lastSuccessImportDate?: Date;\n provider?: BankProviderEnum;\n}\n","import { BankAccount } from './bank-account';\nimport { BankTransaction } from './bank-transaction';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankTransactionImport extends AbstractModel {\n fileName?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n bankAccount?: BankAccount;\n bankTransactions?: BankTransaction[];\n}\n","import { BankTransactionTypeEnum } from '../../Enums/bank/bank-transaction-type.enum';\nimport { BankAccount } from './bank-account';\nimport { BankTransactionImport } from './bank-transaction-import';\nimport { TransactionAllocation } from '../transaction/transaction-allocation';\nimport { ObservableModel } from '../observable-model';\n\nexport class BankTransaction extends ObservableModel {\n externalId?: string;\n type?: BankTransactionTypeEnum;\n amount?: number;\n currency?: string;\n date?: Date;\n description?: string;\n bankAccount?: BankAccount;\n bankTransactionImport?: BankTransactionImport;\n allocations?: TransactionAllocation[];\n}\n","import { AbstractModel } from '../abstract-model';\nimport {BankProviderEnum} from '../../Enums';\n\nexport class Bank extends AbstractModel {\n name?: string;\n shortName?: string;\n externalId?: string;\n externalStats?: object;\n logo?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n provider?: BankProviderEnum;\n}\n","import { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsDepreciation extends AbstractModel {\n effectiveYear?: number;\n effectiveLife?: number;\n limit?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts;\n}\n","import { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsHeading extends AbstractModel {\n name?: string;\n chartAccounts?: ChartAccounts[];\n order: number;\n}\n","import { ChartAccountsMetaFieldListEnum, ChartAccountsMetaFieldTypeEnum } from '../../Enums';\nimport { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsMetaField extends AbstractModel {\n label?: ChartAccountsMetaFieldListEnum;\n type?: ChartAccountsMetaFieldTypeEnum;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts[];\n}\n","import { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsValue extends AbstractModel {\n financialYear?: number;\n startDate?: Date;\n endDate?: Date;\n value?: number;\n unitOfMeasure?: string;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts;\n}\n","import { ChartAccountsCategoryEnum, ChartAccountsTypeEnum } from '../../Enums';\nimport { ChartAccountsHeading } from './chart-accounts-heading';\nimport { TaxReturnItem } from '../tax-return/tax-return-item';\nimport { ChartAccountsValue } from './chart-accounts-value';\nimport { ChartAccountsMetaField } from './chart-accounts-meta-field';\nimport { ChartAccountsDepreciation } from './chart-accounts-depreciation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccounts extends AbstractModel {\n name?: string;\n shortName?: string;\n type?: ChartAccountsTypeEnum;\n taxablePercent?: number;\n category?: ChartAccountsCategoryEnum;\n isActive?: boolean;\n createdAt?: Date;\n updatedAt?: Date;\n heading?: ChartAccountsHeading;\n taxReturnItem?: TaxReturnItem;\n values?: ChartAccountsValue[];\n metaFields?: ChartAccountsMetaField[];\n depreciations?: ChartAccountsDepreciation[];\n isGST?: boolean;\n}\n","import { Property } from '../property/property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DepreciationCapitalProject extends AbstractModel {\n projectName?: string;\n effectiveDate?: Date;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { Depreciation } from './depreciation';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DepreciationForecast extends AbstractModel {\n fromDate?: Date;\n toDate?: Date;\n financialYear?: number;\n openBalance?: number;\n closeBalance?: number;\n amount?: number;\n claimPercent?: number;\n createdAt?: Date;\n updatedAt?: Date;\n depreciation?: Depreciation;\n createdBy?: User;\n updatedBy?: User;\n}\n","export enum TankTypeEnum {\n PROPERTY = 1,\n WORK = 2,\n OTHER = 3,\n SOLE = 4,\n HOLDING = 5,\n PERSONAL = 6,\n}\n","import { Property } from '../property/property';\nimport { ChartAccounts as ChartAccountsBase } from '../chart-accounts/chart-accounts';\nimport { AppFile, CHART_ACCOUNTS_CATEGORIES, ChartAccounts } from '../../../models';\nimport { SoleBusiness } from '../sole/sole-business';\nimport { Exclude, Transform, Type } from 'class-transformer';\nimport { TankTypeEnum } from '../../Enums/tank-type.enum';\nimport { ObservableModel } from '../observable-model';\nimport round from 'lodash/round';\n\nexport class TransactionBase extends ObservableModel {\n @Transform(({ value }) => +value)\n amount?: number;\n\n @Type(() => AppFile)\n file: AppFile;\n\n property?: Property;\n business?: SoleBusiness;\n date?: Date;\n chartAccounts?: ChartAccountsBase;\n description?: string;\n\n /**\n * gst applies to sole trader expense/income, if he is registered and chartAccounts is eligible\n */\n isGST?: boolean;\n claimPercent?: number;\n\n @Transform(({ value }) => +value)\n sharedClaimPercent?: number;\n\n get claimRatio(): number {\n return this.sharedClaimPercent / 100;\n }\n\n get tankType(): TankTypeEnum {\n switch (true) {\n case this.isPropertyTank():\n return TankTypeEnum.PROPERTY;\n case this.isWorkTank():\n return TankTypeEnum.WORK;\n case this.isSoleTank():\n return TankTypeEnum.SOLE;\n case this.isHoldingTank():\n return TankTypeEnum.HOLDING;\n case this.isOtherTank():\n return TankTypeEnum.OTHER;\n default:\n return TankTypeEnum.PERSONAL;\n }\n }\n\n /**\n * @TODO remove when AllocateForm is refactored and not merging with Transaction class which cause the issue\n */\n set tankType(tankType: TankTypeEnum) { }\n\n /**\n * Check if current tank is Property\n */\n isPropertyTank(): boolean {\n // chart accounts may be empty for new instances\n if (this.chartAccounts) {\n return CHART_ACCOUNTS_CATEGORIES.property.includes(this.chartAccounts.category);\n }\n\n return !!this.property;\n }\n\n /**\n * Check if current tank is Work\n */\n isWorkTank(): boolean {\n // chart accounts may be empty for new instances\n if (this.chartAccounts) {\n return CHART_ACCOUNTS_CATEGORIES.work.includes(this.chartAccounts?.category);\n }\n\n return !this.isPropertyTank() && !this.isSoleTank();\n }\n\n /**\n * Check if current tank is Sole\n */\n isSoleTank(): boolean {\n // chart accounts may be empty for new instances\n if (this.chartAccounts) {\n return CHART_ACCOUNTS_CATEGORIES.sole.includes(this.chartAccounts?.category);\n }\n\n return !!this.business;\n }\n\n isHoldingTank(): boolean {\n // chart accounts may be empty for new instances\n if (this.chartAccounts) {\n return CHART_ACCOUNTS_CATEGORIES.holding.includes(this.chartAccounts?.category);\n }\n\n // @TODO Alex we need another way to distinguish work/holding\n return !this.isPropertyTank() && !this.isSoleTank();\n }\n\n isOtherTank(): boolean {\n // chart accounts may be empty for new instances\n if (!this.chartAccounts) {\n return false;\n }\n\n return CHART_ACCOUNTS_CATEGORIES.other.includes(this.chartAccounts?.category);\n }\n\n isPersonalTank(): boolean {\n if (!this.chartAccounts) {\n return false;\n }\n\n return CHART_ACCOUNTS_CATEGORIES.personal.includes(this.chartAccounts?.category);\n }\n\n @Exclude()\n get amountWithGst(): number {\n return this.isGST ? round(this.amount * ChartAccounts.GSTCoefficient, 2) : this.amount;\n }\n\n @Exclude()\n get gstAmount(): number {\n return round(this.amountWithGst - this.amount, 2);\n }\n\n @Exclude()\n get gstClaimAmount(): number {\n return this.gstAmount * this.claimRatio;\n }\n\n /**\n * base grossAmount, extends in child classes\n */\n get grossAmount(): number {\n return this.amount + this.gstAmount;\n }\n\n get grossClaimAmount(): number {\n return this.grossAmount * this.claimRatio;\n }\n}\n","import { DepreciationTypeEnum } from '../../Enums/depreciation-type.enum';\nimport { DepreciationCalculationEnum } from '../../Enums/depreciation-calculation.enum';\nimport { DepreciationCalculationPercentEnum } from '../../Enums/depreciation-calculation-percent.enum';\nimport { User } from '../user/user';\nimport { Property } from '../property/property';\nimport { BankTransaction } from '../bank/bank-transaction';\nimport { DepreciationCapitalProject } from './depreciation-capital-project';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { DepreciationForecast } from './depreciation-forecast';\nimport { Loan } from '../loan/loan';\nimport { TransactionBase } from '../transaction/transaction-base';\nimport {SoleBusiness} from '../sole/sole-business';\n\nexport class Depreciation extends TransactionBase {\n createdAt?: Date;\n updatedAt?: Date;\n date?: Date;\n amount?: number;\n description?: string;\n type?: DepreciationTypeEnum;\n calculation?: DepreciationCalculationEnum;\n effectiveLife?: number;\n calculationPercent?: DepreciationCalculationPercentEnum;\n claimPercent?: number;\n writeOffManualDate?: Date;\n writeOffDate?: Date;\n lowValuePoolDate?: Date;\n financialYear?: number;\n closeBalance?: number;\n deletedAt?: Date;\n user?: User;\n property?: Property;\n bankTransaction?: BankTransaction;\n depreciationCapitalProject?: DepreciationCapitalProject;\n chartAccounts?: ChartAccounts;\n replace?: Depreciation;\n forecasts?: DepreciationForecast[];\n loan?: Loan;\n createdBy?: User;\n updatedBy?: User;\n business?: SoleBusiness;\n isGST?: boolean;\n}\n","import {AbstractModel} from '../abstract-model';\n\nexport class DocumentBase extends AbstractModel {\n name?: string;\n originalName?: string;\n size?: number;\n file?: File;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n}\n","import { User } from '../user/user';\nimport { Document } from './document';\nimport { AbstractModel } from '../abstract-model';\n\nexport class DocumentFolder extends AbstractModel {\n name?: string;\n deletedAt?: Date;\n user?: User;\n parent?: DocumentFolder;\n}\n","import { DocumentFolder } from './document-folder';\nimport { AbstractModel } from '../abstract-model';\nimport { File } from '../file';\n\nexport class Document extends AbstractModel {\n file?: File;\n folder?: DocumentFolder;\n}\n","import { Property } from '../property/property';\nimport { User } from '../user/user';\nimport { AbstractModel } from '../abstract-model';\nimport { File } from '../file';\n\nexport class PropertyDocument extends AbstractModel {\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n deletedAt?: Date;\n property?: Property;\n user?: User;\n file?: File;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { TaxReviewStatusEnum } from '../../../Enums/tax-review-status.enum';\nimport { User } from '../../user/user';\nimport { Firm } from '../firm';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxReview extends AbstractModel {\n id?: number;\n financialYear?: number;\n status?: TaxReviewStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n client?: User;\n employee?: User;\n firm?: Firm;\n}\n","import { TicketStatusEnum } from '../../../Enums/ticket-status.enum';\nimport { TicketFeedbackEnum } from '../../../Enums/ticket-feedback.enum';\nimport { Firm } from '../firm';\nimport { User } from '../../user/user';\nimport { Message } from '../message';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class Ticket extends AbstractModel {\n id?: number;\n description?: string;\n status?: TicketStatusEnum;\n type?: number;\n timeInProgress?: number;\n feedback?: TicketFeedbackEnum;\n createdAt?: Date;\n updatedAt?: Date;\n firm?: Firm;\n employee?: User;\n client?: User;\n messages?: Message[];\n}\n","import { ChatStatusEnum } from '../../Enums/chat-status.enum';\nimport { Firm } from './firm';\nimport { User } from '../user/user';\nimport { Message } from './message';\nimport { MessageDocument } from './message-document';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Chat extends AbstractModel {\n status?: ChatStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n firm?: Firm;\n employee?: User;\n typingUser?: User;\n client?: User;\n messages?: Message[];\n documents?: MessageDocument[];\n}\n","import { ClientInviteTypeEnum } from '../../Enums/client-invite-type.enum';\nimport { ClientInviteStatusEnum } from '../../Enums/client-invite-status.enum';\nimport { User } from '../user/user';\nimport { Firm } from './firm';\nimport { RegistrationInvite } from '../user/registration-invite';\nimport { ObservableModel } from '../observable-model';\n\nexport class ClientInvite extends ObservableModel {\n type?: ClientInviteTypeEnum;\n status?: ClientInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n employee?: User;\n client?: User;\n firm?: Firm;\n registrationInvite?: RegistrationInvite;\n}\n","import {Firm} from './firm';\nimport {User} from '../user/user';\nimport {ServiceSubscription} from '../subscription/service-subscription';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ClientMovement extends AbstractModel {\n dateFrom?: Date;\n dateTo?: Date;\n firm?: Firm;\n client?: User;\n employee?: User;\n subscription?: ServiceSubscription;\n}\n","import { User } from '../user/user';\nimport { Firm } from './firm';\nimport { RegistrationInvite } from '../user/registration-invite';\nimport {AbstractModel} from '../abstract-model';\n\nexport class EmployeeInvite extends AbstractModel {\n employee?: User;\n firm?: Firm;\n registrationInvite?: RegistrationInvite;\n}\n","import { RegistrationInviteStatusEnum } from '../../Enums/registration-invite-status.enum';\nimport { User } from '../user/user';\nimport { Firm } from './firm';\nimport {AbstractModel} from '../abstract-model';\n\nexport class FirmInvite extends AbstractModel {\n email?: string;\n firstName?: string;\n message?: string;\n status?: RegistrationInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n firm: Firm;\n}\n","import { FirmTypeEnum } from '../../Enums/firm-type.enum';\nimport { Address } from '../address';\nimport { Phone } from '../phone';\nimport { User } from '../user/user';\nimport { ClientMovement } from './client-movement';\nimport { EmployeeDetails } from '../user/employee-details';\nimport {AbstractModel} from '../abstract-model';\nimport { File } from '../file';\n\nexport class Firm extends AbstractModel {\n type?: FirmTypeEnum;\n name?: string;\n shortName?: string;\n website?: string;\n photo?: string;\n abn?: string;\n tan?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n address?: Address;\n phone?: Phone;\n owner?: User;\n employees?: User[];\n clients?: User[];\n clientMovements?: ClientMovement[];\n employeesDetails?: EmployeeDetails[];\n phones?: Phone[];\n addresses?: Address[];\n file: File;\n}\n","import { Chat } from './chat';\nimport { Message } from './message';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class MessageDocument extends AbstractModel {\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n chat?: Chat;\n message?: Message;\n user?: User;\n}\n","import { Chat } from './chat';\nimport { MessageDocument } from './message-document';\nimport { User } from '../user/user';\nimport { Ticket } from './accountant/ticket';\nimport { ObservableModel } from '../observable-model';\n\nexport class Message extends ObservableModel {\n content?: string;\n readAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n chat?: Chat;\n documents?: MessageDocument[];\n employee?: User;\n ticket?: Ticket;\n}\n","import { IncomeSourceForecastTrustTypeEnum } from '../../Enums/income-source/income-source-forecast-trust-type.enum';\nimport { IncomeSource } from './income-source';\nimport { IncomeSourceType } from './income-source-type';\nimport { AbstractModel } from '../abstract-model';\n\nexport class IncomeSourceForecast extends AbstractModel {\n financialYear?: number;\n amount?: number;\n tax?: number;\n taxInstalments?: number;\n frankingCredits?: number;\n trustType?: IncomeSourceForecastTrustTypeEnum;\n incomeSource?: IncomeSource;\n incomeSourceType?: IncomeSourceType;\n}\n","import { TaxReturnItem } from '../tax-return/tax-return-item';\nimport { IncomeSourceForecast } from './income-source-forecast';\nimport {AbstractModel} from '../abstract-model';\n\nexport class IncomeSourceType extends AbstractModel {\n name?: string;\n taxReturnItem?: TaxReturnItem;\n incomeSourceForecasts?: IncomeSourceForecast[];\n}\n","import { User } from '../user/user';\nimport { SalaryForecast } from './salary-forecast';\nimport { SoleForecast } from '../sole/sole-forecast';\nimport { IncomeSourceForecast } from './income-source-forecast';\nimport { IncomeSourceTypeEnum } from '../../Enums/income-source/income-source-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class IncomeSource extends AbstractModel {\n name?: string;\n type?: IncomeSourceTypeEnum;\n dateFrom?: Date;\n dateTo?: Date;\n closeReason?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n salaryForecasts?: SalaryForecast[];\n incomeSourceForecasts?: IncomeSourceForecast[];\n soleForecasts?: SoleForecast[];\n createdBy?: User;\n updatedBy?: User;\n}\n","import { SalaryForecastFrequencyEnum } from '../../Enums/salary-forecast-frequency.enum';\nimport { IncomeSource } from './income-source';\nimport {AbstractModel} from '../abstract-model';\n\nexport class SalaryForecast extends AbstractModel {\n financialYear?: number;\n paygIncome?: number;\n frequency?: SalaryForecastFrequencyEnum;\n netPay?: number;\n tax?: number;\n isTaxFree?: boolean;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n incomeSource?: IncomeSource;\n}\n","import { BorrowingExpense } from './borrowing-expense';\nimport { Loan } from './loan';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BorrowingExpenseLoan extends AbstractModel {\n amount?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n borrowingExpense?: BorrowingExpense;\n loan?: Loan;\n createdBy?: User;\n updatedBy?: User;\n}\n","import {AbstractModel} from '../abstract-model';\n\nexport class BorrowingExpense extends AbstractModel {\n name?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n}\n","import { LoanPayoutTypeEnum } from '../../Enums/bank/loan/loan-payout-type.enum';\nimport { Loan } from './loan';\nimport { ObservableModel } from '../observable-model';\nimport { Type } from 'class-transformer';\n\nexport class LoanPayout extends ObservableModel {\n type?: LoanPayoutTypeEnum;\n date?: Date;\n\n @Type(() => Number)\n payoutAmount?: number;\n\n @Type(() => Number)\n fees?: number;\n\n createdAt?: Date;\n updatedAt?: Date;\n loan?: Loan;\n}\n","import { LoanTypeEnum } from '../../Enums/bank/loan/loan-type.enum';\nimport { LoanInterestTypeEnum } from '../../Enums/bank/loan/loan-interest-type.enum';\nimport { LoanRepaymentFrequencyEnum } from '../../Enums/bank/loan/loan-repayment-frequency.enum';\nimport { LoanRepaymentTypeEnum } from '../../Enums/bank/loan/loan-repayment-type.enum';\nimport { User } from '../user/user';\nimport { BankAccount } from '../bank/bank-account';\nimport { BorrowingExpenseLoan } from './borrowing-expense-loan';\nimport { LoanPayout } from './loan-payout';\nimport { Transaction } from '../transaction/transaction';\nimport { ObservableModel } from '../observable-model';\nimport { Type } from 'class-transformer';\n\nexport class Loan extends ObservableModel {\n\n @Type(() => Number)\n amount?: number;\n\n @Type(() => Number)\n availableRedraw?: number;\n\n type?: LoanTypeEnum;\n interestType?: LoanInterestTypeEnum;\n\n @Type(() => Number)\n interestRate?: number;\n\n commencementDate?: Date;\n\n @Type(() => Number)\n term?: number;\n\n @Type(() => Number)\n repaymentAmount?: number;\n\n repaymentFrequency?: LoanRepaymentFrequencyEnum;\n repaymentType?: LoanRepaymentTypeEnum;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n bankAccount?: BankAccount;\n borrowingExpenses?: BorrowingExpenseLoan[];\n payout?: LoanPayout;\n transactions?: Transaction[];\n createdBy?: User;\n updatedBy?: User;\n payments?: object[];\n}\n","import {PropertySale} from './property-sale';\nimport {TaxExemptionMetaField} from './tax-exemption-meta-field';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class PropertySaleTaxExemptionMetaField extends AbstractModel {\n value?: number;\n propertySale?: PropertySale;\n metaField?: TaxExemptionMetaField;\n}\n","import {TaxExemption} from './tax-exemption';\nimport {TaxExemptionMetaField} from './tax-exemption-meta-field';\nimport {PropertyShare} from '../property-share';\nimport { ObservableModel } from '../../observable-model';\n\nexport class PropertySale extends ObservableModel {\n holdingCosts?: number;\n structuralImprovementsWDV?: number;\n buildingAtCostClaimed?: number;\n settlementDate?: Date;\n date?: Date;\n price?: number;\n commission?: number;\n legalFees?: number;\n otherCost?: number;\n grossCapitalGain?: number;\n netCapitalGain?: number;\n createdAt?: Date;\n updatedAt?: Date;\n share?: PropertyShare;\n taxExemption?: TaxExemption;\n taxExemptionMetaFields?: TaxExemptionMetaField[];\n}\n","import {TaxExemption} from './tax-exemption';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxExemptionMetaField extends AbstractModel {\n name?: string;\n taxExemption?: TaxExemption;\n}\n","import {TaxExemptionMetaField} from './tax-exemption-meta-field';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxExemption extends AbstractModel {\n name?: string;\n description?: string;\n metaFields?: TaxExemptionMetaField[];\n}\n","import { Property } from './property';\nimport { PropertyCategory } from './property-category';\nimport { PropertyValuation } from './property-valuation';\nimport { User } from '../user/user';\nimport { ObservableModel } from '../observable-model';\n\nexport class PropertyCategoryMovement extends ObservableModel {\n fromDate?: Date;\n toDate?: Date;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n propertyCategory?: PropertyCategory;\n valuation?: PropertyValuation;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { User } from '../user/user';\nimport { Property } from './property';\nimport { ObservableModel } from '../observable-model';\n\nexport class PropertyCategory extends ObservableModel {\n name?: string;\n isTaxInclusive?: boolean;\n isPropertyShare?: boolean;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n properties?: Property[];\n}\n","import { Property } from './property';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyForecast extends AbstractModel {\n financialYear?: number;\n marketValue?: number;\n expense?: number;\n income?: number;\n depreciation?: number;\n interest?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n claimPercent?: number;\n}\n","import { PropertyShareStatusEnum } from '../../Enums/property/property-share-status.enum';\nimport { PropertyShareAccessEnum } from '../../Enums/property/property-share-access.enum';\nimport { Property } from './property';\nimport { User } from '../user/user';\nimport { RegistrationInvite } from '../user/registration-invite';\nimport { PropertySale } from './property-sale/property-sale';\nimport { ObservableModel } from '../observable-model';\nimport { Type } from 'class-transformer';\n\nexport class PropertyShare extends ObservableModel {\n email?: string;\n firstName?: string;\n\n @Type(() => Number)\n percent?: number;\n\n fromDate?: Date;\n toDate?: Date;\n status?: PropertyShareStatusEnum;\n access?: PropertyShareAccessEnum;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n user?: User;\n invite?: RegistrationInvite;\n sale?: PropertySale;\n}\n","import { Property } from './property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertySubscription extends AbstractModel {\n createdAt?: Date;\n deletedAt?: Date;\n property?: Property;\n user?: User;\n}\n","import { Property } from './property';\nimport { PropertyDocument } from '../document/property-document';\nimport { ObservableModel } from '../observable-model';\n\nexport class PropertyValuation extends ObservableModel {\n date?: Date;\n marketValue?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n document?: PropertyDocument;\n}\n","import { PropertyDepreciationCalculationEnum } from '../../Enums/property/property-depreciation-calculation.enum';\nimport { User } from '../user/user';\nimport { Address } from '../address';\nimport { PropertyCategory } from './property-category';\nimport { PropertyForecast } from './property-forecast';\nimport { PropertyShare } from './property-share';\nimport { PropertyValuation } from './property-valuation';\nimport { PropertyCategoryMovement } from './property-category-movement';\nimport { BankAccountProperty } from '../bank/bank-account-property';\nimport { PropertyDocument } from '../document/property-document';\nimport { Depreciation } from '../depreciation/depreciation';\nimport { PropertySubscription } from './property-subscription';\nimport { ObservableModel } from '../observable-model';\nimport { Type } from 'class-transformer';\nimport { File } from '../file';\n\nexport class Property extends ObservableModel {\n photo?: string;\n\n @Type(() => Number)\n purchasePrice?: number;\n\n contractDate?: Date;\n settlementDate?: Date;\n depreciationCalculation?: PropertyDepreciationCalculationEnum;\n shareWith?: string;\n\n @Type(() => Number)\n growthPercent?: number;\n\n subscriptions?: PropertySubscription[];\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n address?: Address;\n category?: PropertyCategory;\n forecasts?: PropertyForecast[];\n shares?: PropertyShare[];\n valuations?: PropertyValuation[];\n categoryMovements?: PropertyCategoryMovement[];\n\n @Type(() => Number)\n stampDuty?: number;\n\n @Type(() => Number)\n legalFees?: number;\n\n @Type(() => Number)\n otherCapitalCosts?: number;\n\n propertyBankAccounts?: BankAccountProperty[];\n createdBy?: User;\n updatedBy?: User;\n documents?: PropertyDocument[];\n depreciations?: Depreciation[];\n file: File;\n}\n","import { AbstractModel } from '../abstract-model';\nimport {User} from '../user/user';\n\nexport class BasReport extends AbstractModel {\n dateFrom?: Date;\n dateTo?: Date;\n income?: number;\n incomeGST?: number;\n expenseGST?: number;\n salary?: number;\n taxWithheldSalary?: number;\n taxWithheldNoABN?: number;\n paygTaxInstalment?: number;\n fuelTaxCredit?: number;\n user?: User;\n}\n","import { AbstractModel } from '../abstract-model';\n\nexport class SoleBusinessActivity extends AbstractModel {\n name?: string;\n code?: number;\n}\n","import {BankAccount} from '../bank/bank-account';\nimport {SoleBusiness} from './sole-business';\nimport {AbstractModel} from '../abstract-model';\n\nexport class SoleBusinessAllocation extends AbstractModel {\n percent?: number;\n bankAccount?: BankAccount;\n business?: SoleBusiness;\n}\n","import { AbstractModel } from '../abstract-model';\n\nexport class SoleBusinessLossOffsetRule extends AbstractModel {\n name?: string;\n description?: string;\n parent?: SoleBusinessLossOffsetRule;\n}\n","import { SoleBusiness } from './sole-business';\nimport { SoleBusinessLossOffsetRule } from './sole-business-loss-offset-rule';\nimport { AbstractModel } from '../abstract-model';\n\nexport class SoleBusinessLoss extends AbstractModel {\n openBalance?: number;\n financialYear?: number;\n business?: SoleBusiness;\n offsetRule?: SoleBusinessLossOffsetRule;\n}\n","import { User } from '../user/user';\nimport { SoleBusinessAllocation } from './sole-business-allocation';\nimport { SoleBusinessLoss } from './sole-business-loss';\nimport { SoleInvoice } from './sole-invoice';\nimport { SoleInvoiceTemplate } from './sole-invoice-template';\nimport { VehicleClaim } from '../vehicle/vehicle-claim';\nimport { Transaction } from '../transaction/transaction';\nimport { Depreciation } from '../depreciation/depreciation';\nimport { AbstractModel } from '../abstract-model';\nimport { VehicleLogbook } from '../vehicle/vehicle-logbook';\nimport { SoleBusinessActivity } from './sole-business-activity';\nimport { IncomeSource } from '../incomeSource/income-source';\nimport { File } from '../file';\n\nexport class SoleBusiness extends AbstractModel {\n name?: string;\n description?: string;\n website?: string;\n logo?: string;\n deletedAt?: Date;\n user?: User;\n activity?: SoleBusinessActivity;\n isPrimaryProduction?: boolean;\n allocations?: SoleBusinessAllocation[];\n losses?: SoleBusinessLoss[];\n invoices?: SoleInvoice[];\n invoiceTemplates?: SoleInvoiceTemplate[];\n incomeSource?: IncomeSource;\n vehicleClaims?: VehicleClaim[];\n vehicleLogbooks?: VehicleLogbook[];\n transactions?: Transaction[];\n depreciations?: Depreciation[];\n file: File;\n}\n","import {User} from '../user/user';\nimport {Phone} from '../phone';\nimport {Address} from '../address';\nimport {SoleInvoice} from './sole-invoice';\nimport {AbstractModel} from '../abstract-model';\n\nexport class SoleContact extends AbstractModel {\n name?: string;\n abn?: number;\n firstName?: string;\n lastName?: string;\n email?: string;\n user?: User;\n phone?: Phone;\n address?: Address;\n invoices?: SoleInvoice[];\n}\n","import { User } from '../user/user';\nimport { SoleDepreciationMethodEnum } from '../../Enums/sole-depreciation-method.enum';\nimport { AbstractModel } from '../abstract-model';\n\nexport class SoleDepreciationMethod extends AbstractModel {\n method?: SoleDepreciationMethodEnum;\n closeBalance?: number;\n financialYear?: number;\n user?: User;\n}\n","import {User} from '../user/user';\nimport {AbstractModel} from '../abstract-model';\nimport {AnnualFrequencyEnum} from '../../Enums/annual-frequency.enum';\n\nexport class SoleDetails extends AbstractModel {\n abn?: string;\n isGST?: boolean;\n createdAt?: Date;\n updatedAt?: Date;\n deletedAt?: Date;\n user?: User;\n // @TODO use in form\n reportingFrequency?: AnnualFrequencyEnum;\n}\n","import {IncomeSource} from '../incomeSource/income-source';\nimport {AbstractModel} from '../abstract-model';\n\nexport class SoleForecast extends AbstractModel {\n financialYear?: number;\n amount?: number;\n taxInstalments?: number;\n incomeSource?: IncomeSource;\n}\n","import {SoleInvoice} from './sole-invoice';\nimport {ChartAccounts} from '../chart-accounts/chart-accounts';\nimport {AbstractModel} from '../abstract-model';\nimport { Transaction } from '../transaction/transaction';\n\nexport class SoleInvoiceItem extends AbstractModel {\n isGST?: boolean;\n description?: string;\n quantity?: number;\n price?: number;\n invoice?: SoleInvoice;\n chartAccounts?: ChartAccounts;\n transaction?: Transaction;\n}\n","import { SoleBusiness } from './sole-business';\nimport { BankAccount } from '../bank/bank-account';\nimport { AbstractModel } from '../abstract-model';\nimport { SoleInvoiceTemplateTaxTypeEnum } from '../../Enums/sole-invoice-template-tax-type.enum';\n\nexport class SoleInvoiceTemplate extends AbstractModel {\n name?: string;\n taxType?: SoleInvoiceTemplateTaxTypeEnum;\n term?: number;\n business?: SoleBusiness;\n bankAccount?: BankAccount;\n}\n","import { User } from '../user/user';\nimport { SoleInvoiceItem } from './sole-invoice-item';\nimport { SoleContact } from './sole-contact';\nimport { AbstractModel } from '../abstract-model';\nimport { SoleInvoiceStatusesEnum } from '../../Enums/sole-invoice-statuses.enum';\nimport { SoleInvoiceTaxTypeEnum } from '../../Enums/sole-invoice-tax-type.enum';\nimport { SoleBusiness } from './sole-business';\nimport { BankAccount } from '../bank/bank-account';\n\nexport class SoleInvoice extends AbstractModel {\n status?: SoleInvoiceStatusesEnum;\n number?: number;\n reference?: string;\n dateFrom?: Date;\n dateTo?: Date;\n taxType?: SoleInvoiceTaxTypeEnum;\n user?: User;\n business?: SoleBusiness;\n items?: SoleInvoiceItem[];\n payer?: SoleContact;\n bankAccount?: BankAccount;\n}\n","import {AbstractModel} from '../abstract-model';\n\nexport class SpareDocumentCategory extends AbstractModel {\n name?: string;\n createdAt?: Date;\n updatedAt?: Date;\n}\n","import { SpareDocumentSpareTypeEnum } from '../../Enums/spare-document-spare-type.enum';\nimport { User } from '../user/user';\nimport { SpareDocumentCategory } from './spare-document-category';\nimport {AbstractModel} from '../abstract-model';\n\nexport class SpareDocument extends AbstractModel {\n spareType?: SpareDocumentSpareTypeEnum;\n name?: string;\n description?: string;\n originalName?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n spareDocumentCategory?: SpareDocumentCategory;\n}\n","import { ServicePaymentStatusEnum } from '../../Enums/subscription/service-payment-status.enum';\nimport { ServiceSubscription } from './service-subscription';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ServicePayment extends AbstractModel {\n amount?: number;\n status?: ServicePaymentStatusEnum;\n stripeId?: string;\n date?: Date;\n receipt?: string;\n subscription?: ServiceSubscription;\n}\n","import { ServicePriceTypeEnum } from '../../Enums/subscription/service-price-type.enum';\nimport { ServicePriceRecurringIntervalEnum } from '../../Enums/subscription/service-price-recurring-interval.enum';\nimport { ServiceProduct } from './service-product';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ServicePrice extends AbstractModel {\n stripeId?: string;\n amount?: number;\n isRecurring?: boolean;\n type?: ServicePriceTypeEnum;\n recurringInterval?: ServicePriceRecurringIntervalEnum;\n recurringIntervalCount?: number;\n isActive?: boolean;\n createdAt?: Date;\n updatedAt?: Date;\n product?: ServiceProduct;\n}\n","import { ServicePrice } from './service-price';\nimport {ServiceProductStatusEnum} from '../../Enums/subscription/service-product-status.enum';\nimport {AbstractModel} from '../abstract-model';\nimport { UserRolesEnum } from '../../Enums/user-roles.enum';\n\nexport class ServiceProduct extends AbstractModel {\n stripeId?: string;\n title?: string;\n role?: UserRolesEnum;\n description?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n prices?: ServicePrice[];\n status?: ServiceProductStatusEnum;\n isAddon?: boolean;\n isCountable?: boolean;\n minQty?: number;\n maxQty?: number;\n}\n","import { ServicePrice } from './service-price';\nimport { ServiceSubscription } from './service-subscription';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ServiceSubscriptionItem extends AbstractModel {\n stripeId?: string;\n quantity?: number;\n price?: ServicePrice;\n subscription?: ServiceSubscription;\n}\n","import { ServiceSubscriptionStatusEnum } from '../../Enums/subscription/service-subscription-status.enum';\nimport { User } from '../user/user';\nimport { ServiceSubscriptionItem } from './service-subscription-item';\nimport { ServicePayment } from './service-payment';\nimport { ObservableModel } from '../observable-model';\nimport { ServicePromoCode } from '../../../models';\nimport { UserRolesEnum } from '../../Enums/user-roles.enum';\n\nexport class ServiceSubscription extends ObservableModel {\n stripeId?: string;\n startDate?: Date;\n endDate?: Date;\n status?: ServiceSubscriptionStatusEnum;\n isCancelAtPeriodEnd?: boolean;\n scheduleStripeId?: string;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n promoCode?: ServicePromoCode;\n items?: ServiceSubscriptionItem[];\n payments?: ServicePayment[];\n roles?: UserRolesEnum[];\n}\n","import { TaxReturnItem } from './tax-return-item';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TaxReturn extends AbstractModel {\n financialYear?: number;\n createdAt?: Date;\n updatedAt?: Date;\n taxReturnItems?: TaxReturnItem[];\n}\n","import { TaxSummarySectionEnum } from '../../Enums/tax-summary-section.enum';\nimport { TaxReturnItem } from './tax-return-item';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TaxReturnCategory extends AbstractModel {\n section?: TaxSummarySectionEnum;\n name?: string;\n seq?: number;\n createdAt?: Date;\n updatedAt?: Date;\n taxReturnItems?: TaxReturnItem[];\n parent?: TaxReturnCategory;\n}\n","import { TaxReturnCategory } from './tax-return-category';\nimport { TaxReturn } from './tax-return';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TaxReturnItem extends AbstractModel {\n code?: string;\n subCode?: string;\n taxReturnCode?: string;\n name?: string;\n seq?: number;\n isOtherIncome?: boolean;\n createdAt?: Date;\n updatedAt?: Date;\n taxReturnCategory?: TaxReturnCategory;\n taxReturns?: TaxReturn[];\n}\n","import { BankTransaction } from '../bank/bank-transaction';\nimport { Transaction } from './transaction';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionAllocation extends AbstractModel {\n amount?: number;\n bankTransaction?: BankTransaction;\n transaction?: Transaction;\n}\n","import { Transaction } from './transaction';\nimport { ChartAccountsMetaField } from '../chart-accounts/chart-accounts-meta-field';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionMetaField extends AbstractModel {\n value?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n transaction?: Transaction;\n chartAccountsMetaField?: ChartAccountsMetaField;\n}\n","import { TransactionTypeEnum } from '../../Enums/transaction-type.enum';\nimport { TransactionSourceEnum } from '../../Enums/transaction-source.enum';\nimport { TransactionOperationEnum } from '../../Enums/transaction-operation.enum';\nimport { User } from '../user/user';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { IncomeSource } from '../incomeSource/income-source';\nimport { TransactionMetaField } from './transaction-meta-field';\nimport { TransactionAllocation } from './transaction-allocation';\nimport { Loan } from '../loan/loan';\nimport { TransactionBase } from './transaction-base';\nimport { Property } from '../property/property';\nimport { Depreciation } from '../depreciation/depreciation';\nimport { SoleBusiness } from '../sole/sole-business';\nimport { SoleInvoiceItem } from '../sole/sole-invoice-item';\n\nexport class Transaction extends TransactionBase {\n type?: TransactionTypeEnum;\n source?: TransactionSourceEnum;\n date?: Date;\n amount?: number;\n description?: string;\n tax?: number;\n claimPercent?: number;\n claimAmount?: number;\n taxPayable?: number;\n operation?: TransactionOperationEnum;\n createdAt?: Date;\n updatedAt?: Date;\n deletedAt?: Date;\n user?: User;\n chartAccounts?: ChartAccounts;\n incomeSource?: IncomeSource;\n parentTransaction?: Transaction;\n childTransactions?: Transaction[];\n property?: Property;\n metaFields?: TransactionMetaField[];\n transfer?: Transaction;\n allocations?: TransactionAllocation[];\n loan?: Loan;\n depreciation?: Depreciation;\n createdBy?: User;\n updatedBy?: User;\n business?: SoleBusiness;\n isGST?: boolean;\n soleInvoiceItem?: SoleInvoiceItem;\n}\n","import { ClientDetails } from './client-details';\n\nexport class AnnualClientDetails {\n capitalLoss?: number;\n privateHealthCare?: boolean;\n spouse?: boolean;\n spouseAnnualIncome?: number;\n dependants?: number;\n studentLoanAmount?: number;\n id?: number;\n financialYear?: number;\n clientDetails?: ClientDetails;\n reportableFringeBenefits?: number;\n exemptForeignEmploymentIncome?: number;\n}\n","import { ClientDetailsWorkDepreciationCalculationEnum } from '../../Enums/client-details-work-depreciation-calculation.enum';\nimport { ClientDetailsMedicareExemptionEnum } from '../../Enums/client-details-medicare-exemption.enum';\nimport { ClientDetailsWorkingHolidayMakerEnum } from '../../Enums/client-details-working-holiday-maker.enum';\nimport { User } from '../user/user';\nimport { Occupation } from './occupation';\nimport { Address } from '../address';\nimport { Phone } from '../phone';\nimport { ClientIncomeTypes } from './client-income-types';\nimport { AbstractModel } from '../abstract-model';\n\nexport class ClientDetails extends AbstractModel {\n isAustralianResident?: boolean;\n taxFileNumber?: string;\n workDepreciationCalculation?: ClientDetailsWorkDepreciationCalculationEnum;\n medicareExemption?: ClientDetailsMedicareExemptionEnum;\n pensionersTax?: boolean;\n workingHolidayMaker?: ClientDetailsWorkingHolidayMakerEnum;\n dateOfBirth?: Date;\n isGST?: boolean;\n basiqConsentId?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n occupation?: Occupation;\n addresses?: Address[];\n phones?: Phone[];\n incomeTypes?: ClientIncomeTypes;\n}\n","import {ClientDetails} from './client-details';\nimport {ObservableModel} from '../observable-model';\n\nexport class ClientIncomeTypes extends ObservableModel {\n clientDetails?: ClientDetails;\n work?: boolean;\n property?: boolean;\n sole?: boolean;\n holdings?: boolean;\n deletedAt?: Date;\n}\n","import {AbstractModel} from '../abstract-model';\n\nexport class Occupation extends AbstractModel {\n name?: string;\n code?: string;\n}\n","import { User } from './user';\nimport { Firm } from '../firm/firm';\nimport {AbstractModel} from '../abstract-model';\n\nexport class EmployeeDetails extends AbstractModel {\n user?: User;\n firm?: Firm;\n}\n","import { RegistrationInviteStatusEnum } from '../../Enums/registration-invite-status.enum';\nimport { User } from './user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class RegistrationInvite extends AbstractModel {\n email?: string;\n firstName?: string;\n message?: string;\n status?: RegistrationInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n}\n","import {User} from './user';\nimport {UserEventType} from './user-event-type';\nimport {AbstractModel} from '../abstract-model';\n\nexport class UserEventSetting extends AbstractModel {\n byEmail?: boolean;\n byNotification?: boolean;\n frequency?: number;\n user?: User;\n type?: UserEventType;\n}\n","import {AbstractModel} from '../abstract-model';\n\nexport class UserEventTypeCategory extends AbstractModel {\n name?: string;\n}\n","import {UserEventTypeFrequencyEnum} from '../../Enums/user-event-type-frequency.enum';\nimport {UserEventTypeCategory} from './user-event-type-category';\nimport {UserEventSetting} from './user-event-setting';\nimport {AbstractModel} from '../abstract-model';\n\nexport class UserEventType extends AbstractModel {\n type?: number;\n name?: string;\n byEmail?: boolean;\n byNotification?: boolean;\n frequency?: UserEventTypeFrequencyEnum;\n counter?: number;\n status?: number;\n roles?: unknown;\n configurable?: boolean;\n category?: UserEventTypeCategory;\n settings?: UserEventSetting[];\n}\n","import {UserEventStatusEnum} from '../../Enums/user-event-status.enum';\nimport {User} from './user';\nimport {UserEventType} from './user-event-type';\nimport {AbstractModel} from '../abstract-model';\n\nexport class UserEvent extends AbstractModel {\n status?: UserEventStatusEnum;\n counter?: number;\n entityId?: number;\n email?: string;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n initiator?: User;\n type?: UserEventType;\n}\n","import { UserTitleEnum } from '../../Enums/user-title.enum';\nimport { UserStatusEnum } from '../../Enums/user-status.enum';\nimport { UserRolesEnum } from '../../Enums/user-roles.enum';\nimport { Property } from '../property/property';\nimport { PropertySubscription } from '../property/property-subscription';\nimport { ServiceSubscription } from '../subscription/service-subscription';\nimport { UserEventSetting } from './user-event-setting';\nimport { BankConnection } from '../bank/bank-connection';\nimport { TaxReview } from '../firm/accountant/tax-review';\nimport { PropertyShare } from '../property/property-share';\nimport { Address } from '../address';\nimport { Phone } from '../phone';\nimport { ClientMovement } from '../firm/client-movement';\nimport { ClientDetails } from '../client';\nimport { EmployeeDetails } from './employee-details';\nimport { SoleDetails } from '../sole/sole-details';\nimport { File } from '../file';\nimport { ObservableModel } from '../observable-model';\nimport { SetupItem } from '../setup-item';\n\nexport class User extends ObservableModel {\n intercomId?: number;\n createdAt?: Date;\n updatedAt?: Date;\n email?: string;\n hashedEmail?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n title?: UserTitleEnum;\n photo?: string;\n status?: UserStatusEnum;\n isConfirmed?: boolean;\n verificationCode?: string;\n referer?: User;\n referenceCode?: string;\n rewardfulReferralKey?: string;\n stripeId?: string;\n basiqId?: string;\n roles?: UserRolesEnum[];\n financialYear?: number;\n dateOfBirth?: Date;\n lastSeen?: Date;\n deletedAt?: Date;\n properties?: Property[];\n propertySubscriptions?: PropertySubscription[];\n subscriptions?: ServiceSubscription[];\n eventSettings?: UserEventSetting[];\n bankConnections?: BankConnection[];\n taxReviews?: TaxReview[];\n propertyShares?: PropertyShare[];\n address?: Address;\n phone?: Phone;\n clientMovements?: ClientMovement[];\n clientDetails?: ClientDetails;\n employeeDetails?: EmployeeDetails;\n soleDetails?: SoleDetails;\n file: File;\n blacklistSetupItems: SetupItem[];\n}\n","import { VehicleClaimDetailsMethodEnum } from '../../Enums/vehicle-claim-details-method.enum';\nimport { User } from '../user/user';\nimport { AbstractModel } from '../abstract-model';\n\nexport class VehicleClaimDetails extends AbstractModel {\n financialYear?: number;\n method?: VehicleClaimDetailsMethodEnum;\n isManual?: boolean;\n user?: User;\n}\n","import { User } from '../user/user';\nimport { AbstractModel } from '../abstract-model';\nimport { SoleBusiness } from '../sole/sole-business';\nimport { VehicleClaimDetails } from './vehicle-claim-details';\n\nexport class VehicleClaim extends AbstractModel {\n kilometers?: number;\n workUsage?: number;\n details?: VehicleClaimDetails;\n user?: User;\n business?: SoleBusiness;\n}\n","import { VehicleLogbookPurposeEnum } from '../../Enums/vehicle-logbook-purpose.enum';\nimport { Vehicle } from './vehicle';\nimport { User } from '../user/user';\nimport { SoleBusiness } from '../sole/sole-business';\nimport { AbstractModel } from '../abstract-model';\n\nexport class VehicleLogbook extends AbstractModel {\n date?: Date;\n odometerStart?: number;\n odometerEnd?: number;\n isPersonal?: boolean;\n description?: string;\n createdAt?: Date;\n updatedAt?: Date;\n business?: SoleBusiness;\n vehicle?: Vehicle;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { User } from '../user/user';\nimport { VehicleLogbook } from './vehicle-logbook';\nimport { AbstractModel } from '../abstract-model';\n\nexport class Vehicle extends AbstractModel {\n name?: string;\n user?: User;\n logbook?: VehicleLogbook[];\n}\n","import { FileTypeEnum } from '../Enums/file-type.enum';\nimport { AbstractModel } from './abstract-model';\nimport { User } from './user/user';\n\nexport class File extends AbstractModel {\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n type?: FileTypeEnum;\n publicUrl?: string;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n}\n","import { PhoneTypeEnum } from '../Enums/phone-type.enum';\nimport { Country } from './country';\nimport {AbstractModel} from './abstract-model';\n\nexport class Phone extends AbstractModel {\n number?: string;\n type?: PhoneTypeEnum;\n isConfirmed?: boolean;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n country?: Country;\n}\n","import { User } from './user/user';\nimport { UserEvent } from './user/user-event';\nimport {AbstractModel} from './abstract-model';\n\nexport class ServiceNotification extends AbstractModel {\n message?: string;\n isRead?: boolean;\n createdAt?: Date;\n updatedAt?: Date;\n deletedAt?: Date;\n sender?: User;\n recipient?: User;\n userEvent?: UserEvent;\n}\n","import { TaxCalculationTypeEnum } from '../Enums/tax-calculation-type.enum';\nimport { TaxCalculationMedicareExemptionEnum } from '../Enums/tax-calculation-medicare-exemption.enum';\nimport {AbstractModel} from './abstract-model';\n\nexport class TaxCalculation extends AbstractModel {\n type?: TaxCalculationTypeEnum;\n financialYear?: number;\n fromDate?: Date;\n amount?: number;\n percent?: number;\n limit?: number;\n isAustralianResident?: boolean;\n isTaxFreeThreshold?: boolean;\n medicareExemption?: TaxCalculationMedicareExemptionEnum;\n isUnderPreservationAge?: boolean;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n}\n","import {User} from '../user/user';\nimport {HoldingType} from './holding-type';\nimport {File} from '../file';\nimport {HoldingSale} from './holding-sale';\n\nexport class Holding {\n isTaxFree?: boolean;\n date?: Date;\n quantity?: number;\n price?: number;\n fee?: number;\n ownershipPercent?: number;\n id?: number;\n user?: User;\n type?: HoldingType;\n file?: File;\n sales?: HoldingSale[];\n}\n","import {HoldingTypeCategoryEnum} from '../../Enums';\nimport {User} from '../user/user';\nimport {HoldingTypeExchange} from './holding-type-exchange';\n\nexport class HoldingType {\n category?: HoldingTypeCategoryEnum;\n name?: string;\n ticker?: string;\n price?: number;\n openPrice?: number;\n highPrice?: number;\n lowPrice?: number;\n volume?: number;\n ema50d?: number;\n ema200d?: number;\n highPrice250d?: number;\n lowPrice250d?: number;\n avgVolume14d?: number;\n avgVolume50d?: number;\n avgVolume200d?: number;\n marketCap?: number;\n beta?: number;\n adjustedPrice?: number;\n isDelisted?: boolean;\n peRatio?: number;\n description?: string;\n dividendPercent?: number;\n id?: number;\n user?: User;\n exchange?: HoldingTypeExchange;\n file?: File;\n}\n","import {Holding} from './holding';\nimport {File} from '../file';\n\nexport class HoldingSale {\n date?: Date;\n quantity?: number;\n price?: number;\n fee?: number;\n total?: number;\n totalCapitalGain?: number;\n grossCapitalGain?: number;\n netCapitalGain?: number;\n id?: number;\n holding?: Holding;\n file?: File;\n}\n","import {HoldingType} from './holding-type';\n\nexport class HoldingTypeExchange {\n code?: string;\n name?: string;\n currency?: string;\n closeTime?: string;\n timezone?: string;\n minMarketCap?: number;\n minAvgVolume50d?: number;\n exchangeUpdatedAt?: Date;\n id?: number;\n holdingTypes?: HoldingType[];\n}\n","import { User } from '../user/user';\nimport { BudgetRule } from './budget-rule';\nimport { AbstractModel } from '../abstract-model';\n\nexport class Budget extends AbstractModel {\n\tuser?: User;\n\trules?: BudgetRule[];\n}\n","import {Budget} from './budget';\nimport {ChartAccounts} from '../chart-accounts/chart-accounts';\nimport { AbstractModel } from '../abstract-model';\n\nexport class BudgetRule extends AbstractModel {\n\tamount?: number;\n\tbudget?: Budget;\n\tchartAccounts?: ChartAccounts;\n}\n","import { AbstractModel } from '../../../db/Models';\n\n/**\n * access token, needed to access basiq connect ui (https://github.com/basiqio/basiq-connect-ui)\n */\nexport class BasiqToken extends AbstractModel {\n value: string;\n expiresAt: Date;\n\n constructor(\n value: string,\n expiresAt: Date\n ) {\n super();\n this.value = value;\n this.expiresAt = expiresAt;\n }\n\n isExpired(): boolean {\n return this.expiresAt < new Date();\n }\n}\n","export enum TransactionOperationEnum {\n\tALLOCATE = 1,\n\tFIND_AND_MATCH = 2,\n\tTRANSFER = 3,\n\tMATCH_INVOICE = 5\n}\n","import { SoleInvoice } from '../sole';\nimport { plainToClass } from 'class-transformer';\nimport { Transaction } from '../transaction';\nimport { AbstractModel } from '../../db/Models';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { BankTransactionCollection, TransactionAllocationCollection, TransactionCollection } from '../../collections';\n\n/**\n * User knows nothing about invoiceItem transaction/allocation, it's encapsulated. That's why we need an extra model to hide technical complication from user\n * @TODO Alex: we use category and invoice number in the same place: think about common name and unite 2 fields in 1\n * @TODO Alex: think: move check operation methods to some common class (with transaction)\n * @TODO Alex: isTransactionChangeable method's name is breaking abstraction\n */\nexport class AllocationGroup extends AbstractModel {\n // type of reconcile operation\n operation: TransactionOperationEnum;\n date: Date;\n amount: number;\n description: string;\n category?: string;\n // we need to show tank type to user\n tankType: TankTypeEnum;\n // because of Allocated group could be based on transaction it could have child transactions\n childTransactions?: TransactionCollection;\n invoiceNumber?: number;\n allocations: TransactionAllocationCollection;\n bankTransactions: BankTransactionCollection;\n\n static fromInvoice(invoice: SoleInvoice, bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): AllocationGroup {\n return plainToClass(AllocationGroup, {\n date: invoice.dateFrom,\n operation: TransactionOperationEnum.MATCH_INVOICE,\n description: invoice.reference,\n invoiceNumber: invoice.getNumber(),\n tankType: TankTypeEnum.SOLE,\n amount: invoice.grossPrice,\n allocations,\n bankTransactions\n });\n }\n\n static fromTransaction(transaction: Transaction, bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): AllocationGroup {\n return plainToClass(AllocationGroup, {\n id: transaction.id,\n date: transaction.date,\n operation: transaction.operation,\n description: transaction.description,\n category: transaction.chartAccounts.name,\n tankType: transaction.tankType,\n amount: transaction.netAmount,\n childTransactions: transaction.transactions,\n allocations,\n bankTransactions\n });\n }\n\n isFindMatch(): boolean {\n return this.operation === TransactionOperationEnum.FIND_AND_MATCH;\n }\n\n isMatchInvoice(): boolean {\n return this.operation === TransactionOperationEnum.MATCH_INVOICE;\n }\n\n isTransfer(): boolean {\n return this.operation === TransactionOperationEnum.TRANSFER;\n }\n\n isAllocate(): boolean {\n return this.operation === TransactionOperationEnum.ALLOCATE;\n }\n\n /**\n * user can edit/delete (via redo all) transaction only for allocate and find and match operations\n */\n isTransactionChangeable(): boolean {\n return this.isAllocate() || this.isFindMatch();\n }\n}\n","export enum AllocationRuleConditionComparisonOperatorEnum {\n\tEQUALS = 1,\n\tCONTAINS = 2,\n\tSTARTS = 3,\n\tEQUALS_OR_GREATER = 4,\n\tEQUALS_OR_LESS = 5,\n}\n","export enum AllocationRuleConditionFieldEnum {\n\tAMOUNT = 1,\n\tDESCRIPTION = 2,\n}\n","export enum AllocationRuleConditionOperatorEnum {\n\tAND = 1,\n\tOR = 2,\n}\n","export enum AllocationRuleTypeEnum {\n\tEXPENSE = 1,\n\tINCOME = 2,\n\tTRANSFER = 3,\n}\n","export enum BankAccountStatusEnum {\n\tINACTIVE = 0,\n\tACTIVE = 1,\n}\n","export enum BankAccountTypeEnum {\n TRANSACTION = 1,\n SAVINGS = 2,\n CREDIT_CARD = 3,\n // @TODO Alex: should be removed by backend (TT-2107)\n // MORTGAGE = 4,\n LOAN = 5,\n INVESTMENT = 6,\n TERM_DEPOSIT = 7,\n OFFSET = 10,\n}\n","export enum BankConnectionStatusEnum {\n\tPENDING = 1,\n\tACTIVE = 2,\n RECONNECTING = 4,\n}\n","export enum BankPopularEnum {\n BANKWEST = 'Bank of Western Australia trading as BankWest',\n ANZ = 'Australia and New Zealand Banking Group Limited',\n CBA = 'Commonwealth Bank Australia',\n WESTPAC = 'Westpac Banking Corporation',\n BENDIGO = 'Bendigo and Adelaide Bank Limited',\n ING_DIRECT = 'ING Bank (Australia) Limited (trading as ING Direct)',\n ST_GEORGE = 'St. George Bank (a subsidiary of Westpac)',\n SUNCORP = 'Suncorp-Metway Limited',\n CITIBANK = 'Citibank',\n BOQ = 'Bank of Queensland Limited',\n}\n","export enum BankProviderEnum {\n\tMANUAL = 0,\n\tWEB_SCRAPPER = 1,\n\tOPEN_BANKING = 2,\n}","export enum BankTransactionTypeEnum {\n\tDEBIT = 1,\n\tCREDIT = 2,\n}\n","export enum AnnualFrequencyEnum {\n ANNUAL = 1,\n QUARTERLY = 3,\n MONTHLY = 12,\n FORTNIGHTLY = 26,\n WEEKLY = 52,\n}\n","export enum ChartAccountsCategoryEnum {\n PROPERTY_INCOME = 1,\n PROPERTY_EXPENSE = 2,\n PROPERTY_DEPRECIATION = 3,\n PROPERTY_CAPITAL_WORKS = 4,\n WORK_DEPRECIATION = 5,\n WORK_INCOME = 6,\n WORK_EXPENSE = 7,\n OTHER_INCOME = 8,\n OTHER_EXPENSE = 9,\n PERSONAL_INCOME = 10,\n PERSONAL_EXPENSE = 11,\n SOLE_INCOME = 12,\n SOLE_EXPENSE = 13,\n SOLE_DEPRECIATION = 14,\n HOLDING_INCOME = 15,\n HOLDING_EXPENSE = 16,\n}\n","export enum ChartAccountsEtpEnum {\n\tETP_R = 549,\n\tETP_S = 550,\n\tETP_O = 551,\n\tETP_D = 552,\n\tETP_B = 553,\n}\n","export enum ChartAccountsHeadingListEnum {\n ALLOWANCES_EARNINGS_TIPS_DIRECTOR_FEES = 2,\n AUSTRALIAN_GOVERNMENT_ALLOWANCES_PAYMENTS = 4,\n AUSTRALIAN_GOVERNMENT_PENSIONS_ALLOWANCES = 5,\n WORK_RELATED_CAR_EXPENSES = 8,\n DEPRECIATION_VEHICLES = 9,\n WORK_RELATED_TRAVEL_EXPENSES = 10,\n COMPULSORY_WORK_UNIFORM = 11,\n PROTECTION_CLOTHING = 12,\n OCCUPATIONAL_SPECIFIC_CLOTHING = 13,\n SELF_EDUCATIONAL_EXPENSES = 14,\n OTHER_WORK_RELATED_EXPENSES = 15,\n SUBSCRIPTIONS = 16,\n HOME_OFFICE_RUNNING = 17,\n TOOLS_EQUIPMENT = 18,\n HOME_OFFICE_OCCUPANCY = 19,\n AWARD_OVERTIME_MEAL_ALLOWANCE_EXPENSE = 20,\n NEWSPAPER = 21,\n PRINTING_POSTAGE_STATIONERY = 22,\n SEMINARS_ETC = 23,\n TELEPHONE = 24,\n UNION_FEES = 25,\n OTHER = 26,\n DONATIONS = 27,\n PSI = 30,\n BONUSES = 34,\n OTHER_DEDUCTIONS = 37,\n ETP = 39,\n INTEREST_DEDUCTIONS = 47,\n DIVIDEND_DEDUCTIONS = 48,\n PURCHASES_STOCK_INVENTORY = 52,\n CONTRACTORS_COMMISSION = 53,\n SUPERANNUATION = 54,\n BAD_DEBT = 55,\n LEASE_EXPENSES = 56,\n RENT_EXPENSES = 57,\n INTEREST_EXPENSES_AUSTRALIA = 58,\n INTEREST_EXPENSES_OVERSEAS = 59,\n KLMS = 60,\n FUEL_OIL = 61,\n SERVICES_MAINTENANCE = 62,\n REGISTRATION = 63,\n LEASE_INTEREST_PAYMENTS = 64,\n INSURANCE = 65,\n TYRES_BATTERIES = 66,\n OTHER_EXPENSES = 67,\n DEPRECIATION_EXPENSES = 68,\n}\n","export enum ChartAccountsHeadingTaxDeductibleEnum {\n\tALLOWANCES_AND_PAYMENTS = 4,\n\tPENSIONS_AND_ALLOWANCES = 5,\n\tANNUITIES_AND_SUPERANNUATION_INCOME_STREAMS = 40,\n\tSUPERANNUATION_LUMP_SUM = 41,\n}\n","export enum ChartAccountsHeadingTaxableEnum {\n\tGROSS_INTEREST = 7,\n\tDIVIDENDS = 38,\n\tEMPLOYEE_SHARE_SCHEMES = 42,\n\tPARTNERSHIPS_AND_TRUSTS_INCOME = 43,\n}\n","export enum ChartAccountsHeadingVehicleListEnum {\n WORK_RELATED_CAR_EXPENSES = 8,\n DEPRECIATION_VEHICLES = 9,\n KLMS = 60,\n FUEL_OIL = 61,\n}\n","export enum ChartAccountsListEnum {\n HOME_OFFICE_WORK_HOURS = 103,\n PARTNERSHIP_EXPENSES = 156,\n TRUST_EXPENSES = 157,\n INTEREST_CHARGED_BY_ATO = 278,\n LITIGATION_COSTS = 280,\n ACCOUNTANT_TAX_AGENT_FEES = 282,\n TRAVEL_COSTS_TO_SEE_YOUR_ACCOUNTANT_ADVISOR = 284,\n ACCOUNTING_SOFTWARE_FEES = 285,\n ADVISOR_FEES = 286,\n INCOME_TAX_VARIATION = 292,\n PSI_ABN_NOT_QUOTED = 294,\n PSI_LABOUR_HIRE_OR_OTHER = 294,\n PSI_VOLUNTARY_AGREEMENT = 296,\n RENTAL_INCOME = 298,\n OTHER_RENTAL_INCOME = 300,\n INTEREST_ON_LOAN = 302,\n BORROWING_EXPENSES = 315,\n DIVIDENDS = 542,\n TRANSFER = 615,\n BUILDING_AT_COST = 304,\n KLMS_TRAVELLED_FOR_WORK = 24,\n DIRECTOR_FEES = 6,\n SALARY_OR_WAGES = 2,\n WORK_VEHICLES = 25,\n SOLE_VEHICLES = 721,\n COMMERCIAL_VEHICLES = 26,\n VEHICLE_LOAN_INTEREST = 37,\n VEHICLE_LOAN_PRINCIPAL = 38,\n TAX_INSTALMENTS = 662,\n INTEREST_EARNED = 22,\n PARTNERSHIP_INCOME = 566,\n TRUST_INCOME = 567,\n TAX_OFFSETS_N_R_A_S = 571,\n LUMP_SUM_A_GENUINE_REDUNDANCY = 9,\n LUMP_SUM_A_ALL_OTHER_PAYMENTS = 10,\n LUMP_SUM_B = 11,\n ATTRIBUTABLE_PSI = 20,\n LUMP_SUM_PAYMENTS_IN_ARREARS = 519,\n JURY_ATTENDANCE_FEES = 519,\n FOREIGN_EXCHANGE_GAINS_NON_BUSINESS = 523,\n ROYALTIES = 525,\n TAXABLE_SCHOLARSHIPS_BURSARIES_GRANTS = 527,\n SPECIAL_PROFESSION_INCOME = 529,\n GAIN_ON_SALE_OF_VEHICLE_PREVIOUSLY_DEPRECIATED = 531,\n ATO_INTEREST_PAID = 533,\n PERSONAL_SUPER_CONTRIBUTIONS_DEDUCTIBLE = 536,\n SOFTWARE_FEES_TAXTANK = 541,\n AUSTRALIAN_ANNUITY_PAYMENTS = 559,\n CODE_M_SUPERANNUATION_LUMP_SUM = 561,\n EMPLOYEE_SHARE_SCHEME_INCOME = 564,\n FORESTRY_MANAGED_INVESTMENT_SCHEMES_INCOME = 590,\n FORESTRY_MANAGED_INVESTMENT_SCHEMES_DEDUCTION = 593,\n ASSESSABLE_AMOUNT_CAPPED_DEFINED_BENEFIT = 639,\n CODE_B_SUPERANNUATION_INCOME_STREAMS_DISABILITY = 558,\n CODE_A_SUPERANNUATION_INCOME_STREAMS_DEATH = 640,\n SALES = 665,\n LABOUR = 666,\n UBER_INCOME = 667,\n COMMISSION = 668,\n PARTS_CONSUMABLES = 669,\n OTHER_BUSINESS_INCOME = 670,\n ASSESSIBLE_GOVERNMENT_PAYMENTS = 671,\n GROSS_PAYMENTS_NO_ABN_GIVEN = 672,\n GROSS_PAYMENTS_VOLUNTARY_AGREEMENT = 673,\n GROSS_PAYMENTS_LABOUR_HIRE_OR_OTHER_SPECIFIED_PAYMENTS = 674,\n PURCHASES_STOCK_INVENTORY = 675,\n CONTRACTORS_AND_COMMISSION = 676,\n SUPERANNUATION = 677,\n BAD_DEBT = 678,\n LEASE_EXPENSES_COMMERCIAL = 679,\n RENT_EXPENSES_COMMERCIAL_PREMISES = 680,\n INTEREST_EXPENSES_AUSTRALIA = 681,\n INTEREST_EXPENSES_OVERSEAS = 682,\n KLMS_TRAVELLED = 683,\n FUEL_OIL = 684,\n SERVICES_MAINTENANCE = 685,\n REGISTRATION = 686,\n LEASE_INTEREST_PAYMENTS = 687,\n SOLE_VEHICLE_LOAN_INTEREST = 688,\n SOLE_VEHICLE_LOAN_PRINCIPAL = 855,\n INSURANCE = 689,\n TYRES = 690,\n BATTERIES = 691,\n CAR_WASH = 692,\n PARKING_TOLLS = 693,\n OTHER_SOLE_EXPENSES = 694,\n SOLE_ENTERTAINMENT = 698,\n PERSONAL_EXPENSES = 628,\n PERSONAL_INCOME = 630,\n PLATFORM_FEES = 857,\n PSI_OTHER = 858,\n PSI_DEDUCTION_ASSOCIATES = 859,\n PSI_DEDUCTION_OTHER = 860,\n AUSTRALIAN_GOVERNMENT_SPECIAL_PAYMENTS = 871,\n FHSS = 872,\n}\n","export enum ChartAccountsMetaFieldListEnum {\n\tTAX_INSTALMENTS = 4,\n\tFRANKING_CREDIT = 5,\n ELIGIBLE_FOR_REDUCTION = 6,\n\tSHARE_PERCENTAGE = 7,\n\tTAX_OFFSETS = 8,\n HOURS = 11,\n\tTAX_PAID = 13,\n TAX_FREE_COMPONENT = 18,\n\tYEARS_OF_SERVICE = 19,\n\tUNTAXED_ELEMENT = 24,\n\tNOT_ELIGIBLE_FOR_DEDUCTION = 25,\n\tFRANKED = 26,\n\tUNFRANKED = 27,\n\tTAX_OFFSETS_N_R_A_S = 29,\n\tDISCOUNT_FROM_DEFERRED_SCHEMES = 32\n}\n","export enum ChartAccountsMetaFieldTypeEnum {\n\tNUMBER = 3,\n\tBOOLEAN = 4,\n}\n","export enum ChartAccountsSalaryAdjustmentsListEnum {\n\tALLOWANCE = 4,\n\tTIPS = 5,\n\tREIMBURSEMENTS = 555,\n ADVANCE = 556,\n POST_TAX_DEDUCTIONS_OTHER = 644,\n\tPRE_TAX_DEDUCTIONS_OTHER = 645,\n\tPHONE_ALLOWANCE = 646,\n\tUNIFORM_ALLOWANCE = 647,\n\tMETA_ALLOWANCE = 648,\n\tTRAVEL_ALLOWANCE = 649,\n\tOTHER_ALLOWANCE = 650,\n\tLAFH = 651,\n\tWORK_PLACE_GIVING = 653,\n}\n","export enum ChartAccountsSalaryIncludedListEnum {\n\tALLOWANCE = 4,\n\tTIPS = 5,\n\tREIMBURSEMENTS = 555,\n\tADVANCE = 556,\n PHONE_ALLOWANCE = 646,\n\tUNIFORM_ALLOWANCE = 647,\n\tMETA_ALLOWANCE = 648,\n\tTRAVEL_ALLOWANCE = 649,\n\tOTHER_ALLOWANCE = 650,\n LAFH = 651,\n}\n","export enum ChartAccountsTypeEnum {\n\tINCOME = 1,\n\tEXPENSE = 2,\n}\n","/**\n * most of chartAccounts could have only negative or positive amount,\n * but there are exceptions like advance income (free loan from company u work for), it's positive number when you receive it,\n * and negative when you pay it back (still income, but with negative amount)\n */\nexport enum ChartAccountsKeepSign {\n ADVANCE = 556,\n}\n","export enum ChartAccountsHoldingUntaxedIncomeListEnum {\n\tFOREIGN_EXCHANGE_GAINS = 523,\n\tDIVIDENDS = 542,\n\tINTEREST_ON_TERM_DEPOSITS = 873,\n\tINTEREST_FROM_OTHER_INVESTMENTS = 874,\n\tINTEREST_DISTRIBUTIONS_FROM_PARTNERSHIPS = 875,\n\tINTEREST_DISTRIBUTIONS_FROM_TRUSTS = 876,\n\tSTAKING = 877,\n}","export enum ChartAccountsInvoiceExpenseEnum {\n PAYG_INSTALLMENTS = 878,\n CONTRACTORS_COMMISSION = 676,\n SUPPERANNUATION = 677,\n}\n","export enum DocumentTypeEnum {\n INVOICE = 1\n}\n","export enum HoldingTypeCategoryEnum {\n\tCRYPTO = 1, // cryptos\n\tSTOCK = 2, // shares\n ETF = 3,\n FUND = 4,\n MUTUAL_FUND = 5,\n PREFERRED_STOCK = 6,\n WARRANT = 7,\n ETC = 8,\n NOTE = 9,\n INDEX = 10,\n UNLISTED_STOCK = 11, // others\n\tUNLISTED_UNIT = 12, // others\n\tCOLLECTIBLE = 13, // others\n\tOTHER = 14, // others\n}\n","export enum TaxReturnCategoryListEnum {\n SALARY = 1,\n ALLOWANCES_EARNINGS_TIPS_DIRECTOR_FEES = 30,\n EMPLOYER_LUMP_SUM_PAYMENTS = 31,\n ETP = 32,\n GOVERNMENT_ALLOWANCES = 2,\n GOVERNMENT_PENSIONS = 33,\n ANNUITIES_SUPER_INCOME_STREAMS = 3,\n SUPERANNUATION_LUMP_SUM_PAYMENTS = 34,\n ATTRIBUTED_PSI_INCOME = 4,\n GROSS_INTEREST = 5,\n DIVIDENDS = 6,\n SHARE_SCHEMES = 35,\n GROSS_RENT = 8,\n PARTNERSHIPS_TRUSTS = 13,\n PARTNERSHIPS = 36,\n TRUSTS = 37,\n PSI_SBE_INCOME = 14,\n SOLE_TRADER_BUSINESS_INCOME = 38,\n CAPITAL_GAINS = 15,\n FOREIGN_SOURCE_INCOME = 16,\n BONUSES_FROM_LIFE_INSURANCE = 17,\n FORESTRY_MANAGED_INVESTMENT_SCHEMES = 39,\n OTHER_INCOME = 40,\n GROSS_PAYMENTS_NO_ABN_GIVEN = 42,\n GROSS_PAYMENTS_VOLUNTARY_AGREEMENT = 43,\n GROSS_PAYMENTS_LABOUR_HIRE_OR_OTHER = 44,\n ASSESSABLE_GOVERNMENT_PAYMENTS = 45,\n OTHER_BUSINESS_INCOME = 46,\n WORK_EXPENSES = 7,\n INTEREST_DEDUCTIONS = 9,\n CAPITAL_WORKS = 10,\n PLANT_AND_EQUIPMENT = 11,\n BORROWING_EXPENSES = 29,\n OTHER_RENTAL_DEDUCTIONS = 12,\n OTHER_DEDUCTIONS = 18,\n PURCHASES_AND_OTHER_COSTS = 48,\n CONTRACTORS_SUBCONTRACTORS_COMMISSION_EXPENSES = 49,\n SUPERANNUATION_EXPENSES = 50,\n BAD_DEBTS = 51,\n LEASE_EXPENSES = 52,\n RENT_EXPENSES = 53,\n INTEREST_EXPENSES_WITHIN_AUSTRALIA = 54,\n INTEREST_EXPENSES_OVERSEAS = 55,\n DEPRECIATION_EXPENSES = 56,\n MOTOR_VEHICLE_EXPENSES = 57,\n ALL_OTHER_EXPENSES = 58,\n GROSS_TAX_PAYABLE = 19,\n TAX_ON_TAXABLE_INCOME = 20,\n MEDICARE = 21,\n STUDENT_LOAN_REPAYMENT = 22,\n TAX_CREDITS = 23,\n TAX_WITHHELD = 24,\n TAX_INSTALMENTS = 25,\n FRANKING_CREDITS = 26,\n TAX_OFFSETS = 27,\n TAX_OFFSETS_LOW = 61,\n TAX_OFFSETS_MIDDLE = 62,\n TAX_OFFSETS_SOLE = 63,\n TAX_PAYABLE = 28,\n BUSINESS_INCOME_OR_LOSS = 59,\n DEFERRED_BUSINESS_LOSSES = 60,\n DEFERRED_BUSINESS_LOSSES_FROM_PRIOR_YEAR = 64\n}\n","export enum TaxReturnCategorySectionEnum {\n\tWORK_TANK = 1,\n\tPROPERTY_TANK = 2,\n\tOTHER_INCOME = 3,\n SOLE_TANK = 4,\n\tSUMMARY = 5,\n}\n","export enum TaxReturnItemEnum {\n NO_ABN_GIVEN = 161,\n VOLUNTARY_AGREEMENT = 162,\n SUPERANNUATION_EXPENSES = 163,\n ASSESSABLE_GOVERNMENT_PAYMENTS = 164,\n BAD_DEBTS = 165,\n OTHER_BUSINESS_INCOME = 166,\n RENT_EXPENSES = 167,\n PURCHASES_AND_OTHER_COSTS = 168,\n DEPRECIATION_EXPENSES = 169,\n MOTOR_VEHICLE_EXPENSES = 170,\n LABOUR_HIRE_OR_OTHER = 171,\n ALL_OTHER_EXPENSES = 172,\n INTEREST_EXPENSES_WITHIN_AUSTRALIA = 173,\n INTEREST_EXPENSES_OVERSEAS = 174,\n COMMISSION_EXPENSES = 175,\n LEASE_EXPENSES = 176,\n}\n","// @TODO Artem TT-2308 move everything\nexport * from './allocation-rule-condition-comparison-operator.enum';\nexport * from './allocation-rule-condition-field.enum';\nexport * from './allocation-rule-condition-operator.enum';\nexport * from './allocation-rule-type.enum';\nexport * from './bank';\n\nexport * from './annual-frequency.enum';\nexport * from './chart-accounts';\nexport * from './document-type.enum';\n\nexport * from './holding/holding-type-category.enum';\nexport * from './tax-return';\n","/**\n * @TODO not used for now\n * Bank subclass, average bank response time for some operations in milliseconds\n * Used for basiq banks functionality to improve bank login UI/UX (loading progress)\n */\nexport class BankExternalStats {\n retrieveAccounts: number;\n retrieveMeta: number;\n retrieveTransactions: number;\n total: number;\n verifyCredentials: number;\n}\n","import { File } from '../../db/Models';\n\n/**\n * The model renamed for more comfortable work because File already exist in JS\n * @TODO Alex: consider a better name like document\n */\nexport class AppFile extends File {\n static imageMimeTypes: string[] = ['image/jpg, image/jpeg, image/png, image/tiff, image/bmp'];\n\n isImage(): boolean {\n return AppFile.imageMimeTypes.includes[this.mimeType];\n }\n}\n","import { Bank as BankBase } from '../../db/Models/bank/bank';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { BankPopularEnum, BankProviderEnum } from '../../db/Enums';\nimport { BankExternalStats } from './bank-external-stats';\nimport { AppFile } from '../file';\n\nexport class Bank extends BankBase {\n // Replace spaces in logo URL by %20 for correct images loading\n @Transform(({ value }) => value ? value.replace(' ', '%20') : null)\n logo: string;\n\n @Transform(({ obj }) => Object.values(BankPopularEnum).includes(obj.name))\n @Expose() isPopular: boolean;\n\n @Type(() => BankExternalStats)\n externalStats: BankExternalStats;\n\n @Type(() => AppFile)\n file: AppFile;\n\n isManual(): boolean {\n return this.provider === BankProviderEnum.MANUAL;\n }\n\n isBasiq(): boolean {\n return this.provider !== BankProviderEnum.MANUAL;\n }\n\n /**\n * some images come from basiq (starting http), the rest from assets\n */\n getPhoto(): string {\n if (!this.logo) {\n return null;\n }\n\n return this.logo.includes('http') ? `${this.logo}` : `${localStorage.getItem('api_uri')}${this.logo}`;\n }\n}\n","/**\n * Enum with maximum number of payments, depending on the frequency.\n * Used only for vehicle loans\n */\nexport enum LoanMaxNumberOfPaymentsEnum {\n WEEKLY = 260,\n FORTNIGHTLY = 130,\n MONTHLY = 60,\n}\n","import { Type } from 'class-transformer';\nimport {AbstractModel} from '../../db/Models/abstract-model';\n\n// @Todo no base model from backend list\n/**\n * Loan payment class\n */\nexport class LoanPayment extends AbstractModel {\n @Type(() => Date)\n date: Date;\n interestAccrued: number;\n interestBalance: number;\n number: number;\n paymentDue: number;\n principalBalance: number;\n principalPaid: number;\n payout: number;\n totalOwed: number;\n}\n","export enum LoanPayoutTypeEnum {\n\tREFINANCE = 1,\n\tPAYOUT = 2,\n}\n","import { LoanPayout as LoanPayoutBase } from '../../db/Models/loan/loan-payout';\nimport { LoanPayoutTypeEnum } from '../../db/Enums/bank/loan/loan-payout-type.enum';\n\nexport class LoanPayout extends LoanPayoutBase {\n type: LoanPayoutTypeEnum;\n\n /**\n * Check if payout type is refinance\n */\n isRefinance(): boolean {\n return this.type === LoanPayoutTypeEnum.REFINANCE;\n }\n}\n","export enum LoanBankTypeEnum {\n\tMORTGAGE = 1,\n\tINSTALLMENT_LOAN = 2,\n\tPERSONAL_LOAN = 3,\n\tHOME_EQUITY_LINE_OF_CREDIT = 4,\n\tLINE_OF_CREDIT = 5,\n\tAUTO_LOAN = 6,\n\tHOME_LOAN = 7,\n\tOTHER = 8,\n}\n","export enum LoanFrequencyEnum {\n\tANNUAL = 1,\n\tMONTHLY = 12,\n\tFORTNIGHTLY = 26,\n\tWEEKLY = 52,\n}\n","export enum LoanInterestTypeEnum {\n\tFIXED_RATE = 1,\n\tVARIABLE = 2,\n}\n","export enum LoanRepaymentFrequencyEnum {\n\tWEEKLY = 1,\n\tFORTNIGHTLY = 2,\n\tMONTHLY = 3,\n}\n","export enum LoanRepaymentTypeEnum {\n INTEREST_ONLY = 1,\n PRINCIPAL_AND_INTEREST = 2,\n}\n","export enum LoanRepaymentTypeLabelEnum {\n INTEREST_ONLY = 'IO',\n PRINCIPAL_AND_INTEREST = 'PI',\n}\n","export enum LoanTypeEnum {\n\tMORTGAGE = 1,\n\tINSTALLMENT_LOAN = 2,\n\tPERSONAL_LOAN = 3,\n\tHOME_EQUITY_LINE_OF_CREDIT = 4,\n\tLINE_OF_CREDIT = 5,\n\tAUTO_LOAN = 6,\n\tHOME_LOAN = 7,\n\tOTHER = 8,\n\tCHATTEL_MORTGAGE = 9,\n\tCOMMERCIAL_HIRE_PURCHASE = 10,\n}\n","export enum LoanVehicleTypeEnum {\n AUTO_LOAN = 6,\n\tCHATTEL_MORTGAGE = 9,\n\tCOMMERCIAL_HIRE_PURCHASE = 10,\n}\n","export enum LoanInterestTypeLabelEnum {\n FIXED_RATE = 'Fixed Rate',\n VARIABLE = 'Variable',\n}\n","export class FinancialYear {\r\n static weeksInYear = 52;\r\n static monthsInYear = 12;\r\n static startMonthIndex = 6;\r\n static year: number = +localStorage.getItem('financialYear');\r\n year: number;\r\n startDate: Date;\r\n endDate: Date;\r\n\r\n private yearStartDate = '-07-01';\r\n private yearEndDate = '-06-30';\r\n\r\n constructor(date?: Date|number) {\r\n if (date) {\r\n this.year = date instanceof Date ? FinancialYear.toFinYear(date) : date;\r\n } else {\r\n this.year = FinancialYear.year || FinancialYear.toFinYear(new Date());\r\n }\r\n\r\n this.setStartDate(this.year);\r\n this.setEndDate(this.year);\r\n }\r\n\r\n static isCurrent(year: number = FinancialYear.year): boolean {\r\n return FinancialYear.toFinYear(new Date()) === year;\r\n }\r\n\r\n includes(date: Date): boolean {\r\n return this.year === new FinancialYear(date).year;\r\n }\r\n\r\n static toFinYear(date: Date): number {\r\n return date.getFullYear() + (date.getMonth() >= this.startMonthIndex ? 1 : 0);\r\n }\r\n\r\n get prevFinYear(): FinancialYear {\r\n return new FinancialYear(new Date(`${new Date().getFullYear() - 1}${this.yearStartDate}`));\r\n }\r\n\r\n /**\r\n * Get date by desired month\r\n */\r\n getMonthDate(monthIndex: number): Date {\r\n if (monthIndex >= FinancialYear.startMonthIndex) {\r\n return new Date(`${this.year - 1}-${monthIndex + 1}-01`);\r\n }\r\n return new Date(`${this.year}-${monthIndex + 1}-01`);\r\n }\r\n\r\n private setStartDate(year: number): void {\r\n this.startDate = new Date(`${year - 1}${this.yearStartDate}`);\r\n }\r\n\r\n private setEndDate(year: number): void {\r\n this.endDate = new Date(`${year}${this.yearEndDate}`);\r\n }\r\n\r\n getPastMonths(): number[] {\r\n const months: number[] = [];\r\n const now: Date = new Date();\r\n const endDate: Date = this.endDate < now ? this.endDate : now;\r\n for (const d: Date = this.startDate; d <= endDate; d.setMonth(d.getMonth() + 1)) {\r\n months.push(d.getMonth());\r\n }\r\n\r\n return months;\r\n }\r\n}\r\n","/**\r\n * @TODO move to pipe/translation\r\n * enum with months short names.\r\n * Order of items match with financial year months order\r\n */\r\nexport enum MonthNameShortEnum {\r\n JULY = 'Jul',\r\n AUGUST = 'Aug',\r\n SEPTEMBER = 'Sep',\r\n OCTOBER = 'Oct',\r\n NOVEMBER = 'Nov',\r\n DECEMBER = 'Dec',\r\n JANUARY = 'Jan',\r\n FEBRUARY = 'Feb',\r\n MARCH = 'Mar',\r\n APRIL = 'Apr',\r\n MAY = 'May',\r\n JUNE = 'Jun'\r\n}\r\n","/**\r\n * enum with months indexes.\r\n * item value match with js Date month index from 0 to 11\r\n * Order of items match with financial year months order\r\n */\r\nexport enum MonthNumberEnum {\r\n JULY = 6,\r\n AUGUST = 7,\r\n SEPTEMBER = 8,\r\n OCTOBER = 9,\r\n NOVEMBER = 10,\r\n DECEMBER = 11,\r\n JANUARY = 0,\r\n FEBRUARY = 1,\r\n MARCH = 2,\r\n APRIL = 3,\r\n MAY = 4,\r\n JUNE = 5\r\n}\r\n","export const MONTHS: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan'];\n","import get from 'lodash/get';\nimport flatten from 'lodash/flatten';\nimport hasIn from 'lodash/hasIn';\nimport { Collection as BaseCollection } from './collection';\nimport {AbstractModel} from '../db/Models';\nimport intersection from 'lodash/intersection';\nimport uniqBy from 'lodash/uniqBy';\n\n/**\n * List of collections grouped by passed property\n */\nexport class CollectionDictionary<Collection extends BaseCollection<AbstractModel>> {\n /**\n * List of grouped collections\n */\n items: { [key: string]: Collection } = {};\n\n /**\n * Constructor function of passed collection for creating new instances\n */\n private collectionConstructor: new (items: object[]) => Collection;\n\n constructor(collection: Collection, path: string = 'id') {\n this.collectionConstructor = collection.constructor as new (items: object[]) => Collection;\n // group if provided path was found in the 1st collection's item\n if (collection.length && hasIn(collection.items[0], path.split('.')[0])) {\n this.groupItems(collection, path);\n }\n }\n\n /**\n * List of collections keys\n */\n get keys(): string[] {\n return Object.keys(this.items);\n }\n\n /**\n * push new elements in existing item\n */\n addTo(key: string | number, ...models: AbstractModel[]): void {\n if (!this.items[key]) {\n this.add(key);\n }\n\n this.items[key].push(...models);\n }\n\n /**\n * Add new item by key\n */\n add(key: string | number, value: Collection = this.createCollection([])) {\n this.items[key] = value;\n }\n\n /**\n * Get collection by key or return empty collection if key does not exist\n */\n get(key: string | number): Collection {\n return this.items[key] ? this.items[key] : this.createCollection([]);\n }\n\n /**\n * @TODO bad name, it just gets items by keys, same as get method by multiple keys\n * Join several collections by ids, return collection of uniq models (skip duplicates)\n */\n merge(keys: number[] | string[]): Collection {\n if (!this.length) {\n return this.createCollection([]);\n }\n\n return this.createCollection(\n uniqBy(flatten(keys.map((key: number | string): object[] => this.get(key.toString()).items)), 'id')\n );\n }\n\n /**\n * Create instance of collection\n */\n createCollection(items: object[] = []): Collection {\n return new this.collectionConstructor(items);\n }\n\n get length(): number {\n return this.keys.length;\n }\n\n /**\n * @Todo find a better solution to get list of the sorted keys\n * Get array of the \"keys\" by provided order\n */\n getSortedKeys(isDesc = false): string[] {\n return this.keys.sort((a: any, b: any): number => {\n if (a > b) { return !isDesc ? 1 : -1; }\n if (a < b) { return !isDesc ? -1 : 1; }\n return 0;\n });\n }\n\n keysIntersection(keys: string[] | number[]): string[] {\n return intersection(keys.map((key: string | number) => key.toString()), this.keys);\n }\n\n /**\n * Group collection items by passed path into items object\n */\n private groupItems(collection: Collection, path: string): void {\n // Create empty initial object for groups\n const obj: { [key: string]: Array<object> } = {};\n\n // Group collection items\n collection.items.forEach((item: object): void => {\n let key: string = get(item, path);\n\n // if object does not have property for grouping it will be grouped as 'other'\n if (key === undefined) {\n key = 'other';\n }\n\n if (!obj[key]) {\n obj[key] = [];\n }\n\n obj[key].push(item);\n });\n\n // Create collections from groups\n Object.keys(obj).forEach((key: string): void => {\n this.items[key] = this.createCollection(obj[key]);\n });\n }\n}\n","import { CollectionDictionary } from './collection-dictionary';\r\nimport first from 'lodash/first';\r\nimport last from 'lodash/last';\r\nimport get from 'lodash/get';\r\nimport { sort } from '../functions/array';\r\nimport { AbstractModel } from '../db/Models';\r\nimport { Dictionary, FinancialYear } from '../models';\r\nimport round from 'lodash/round';\r\nimport orderBy from 'lodash/orderBy';\r\n\r\n/**\r\n * Base collection class. Contains common properties and methods for all collections\r\n */\r\nexport class Collection<Model extends AbstractModel> implements Iterable<Model> {\r\n // list of collection's items\r\n items: Model[];\r\n\r\n /**\r\n * index of current item, used to iterate over the collection\r\n */\r\n index = 0;\r\n\r\n constructor(items: Model[] = []) {\r\n this.items = items;\r\n // @TODO Alex: Think and implement some smart solution for default sort\r\n }\r\n\r\n /**\r\n * Iterator that allow to iterate collection items\r\n */\r\n [Symbol.iterator](): Iterator<Model> {\r\n return this.items.values();\r\n }\r\n\r\n create(items: Model[] = []): this {\r\n return new (this.constructor as any)(items);\r\n }\r\n\r\n get length(): number {\r\n return this.items.length;\r\n }\r\n\r\n toArray(): Model[] {\r\n return [...this.items];\r\n }\r\n\r\n get first(): Model {\r\n return first(this.items);\r\n }\r\n\r\n get last(): Model {\r\n return last(this.items);\r\n }\r\n\r\n reset(): Model {\r\n this.index = 0;\r\n\r\n return this.items[this.index];\r\n }\r\n\r\n next(): Model {\r\n if (this.index < this.length) {\r\n this.index++;\r\n\r\n return this.items[this.index];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n back(): Model {\r\n if (this.index > 0) {\r\n this.index--;\r\n\r\n return this.items[this.index];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getIds(): number[] {\r\n return this.items.map((item: Model): number => item['id']);\r\n }\r\n\r\n map(callback: (item: Model) => any): any[] {\r\n return this.items.map(callback);\r\n }\r\n\r\n mapBy(path: string): any[] {\r\n return this.items.map((item: Model): any => get(item, path))\r\n }\r\n\r\n sortBy(paths: string | string[] = ['id'], order: string | string[] = ['desc']): this {\r\n this.items = orderBy(this.items, paths instanceof Array ? paths : [paths], order instanceof Array ? order : [order]);\r\n\r\n return this;\r\n }\r\n\r\n sort(callback: (a: Model, b: Model) => number): this {\r\n this.items.sort(callback);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get total sum of items by field\r\n */\r\n sumBy(path: string, abs = false): number {\r\n return this.reduce(\r\n (sum: number, item: Model): number => sum + (abs ? Math.abs(Number(get(item, path))) : Number(get(item, path)))\r\n );\r\n }\r\n\r\n groupBy(path = 'id'): CollectionDictionary<this> {\r\n return new CollectionDictionary(this, path);\r\n }\r\n\r\n indexBy(path: string): Dictionary<Model> {\r\n return new Dictionary(this.items, path);\r\n }\r\n\r\n filter(callback: (item: Model) => boolean): this {\r\n return this.create(this.items.filter(callback));\r\n }\r\n\r\n filterBy(path: string, values: any): this {\r\n return this.filter((item: Model) => (Array.isArray(values) ? values : [values]).includes(get(item, path)));\r\n }\r\n\r\n filterByRange(path: string, from: any, to: any): this {\r\n return this.filter((item: Model): boolean => get(item, path) >= from && get(item, path) <= to);\r\n }\r\n\r\n filterByFinancialYear(path: string, financialYear: FinancialYear = new FinancialYear()): this {\r\n return this.filterByRange(path, financialYear.startDate, financialYear.endDate);\r\n }\r\n\r\n find(callback: (item: Model) => boolean): Model | null {\r\n return this.items.find(callback);\r\n }\r\n\r\n findBy(path: string, value: any): Model | null {\r\n return this.items.find((model: Model) => value === get(model, path));\r\n }\r\n\r\n findIndexBy(path: string, value: any): number {\r\n return this.items.findIndex((item: Model) => get(item, path) === value) ?? null;\r\n }\r\n\r\n push(...items: Model[]): this {\r\n this.items.push(...items);\r\n\r\n return this.create(this.items);\r\n }\r\n\r\n remove(...items: Model[]): this {\r\n items.forEach((item) => {\r\n const index: number = this.findIndexBy('id', item.id);\r\n if (index < 0) {\r\n return;\r\n }\r\n\r\n this.items.splice(index, 1);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * @TODO it's filter, not remove\r\n */\r\n removeBy(path: string, values: any): this {\r\n return this.filter((item: Model) => !(Array.isArray(values) ? values : [values]).includes(get(item, path)));\r\n }\r\n\r\n replaceBy(path: string, value: any, item: Model): this {\r\n const index: number = this.findIndexBy(path, value);\r\n if (index >= 0) {\r\n this.items.splice(index, 1, item);\r\n }\r\n\r\n return this.create(this.items);\r\n }\r\n\r\n diff(items: Model[]): this {\r\n return this.filter((model: Model) => !items.map((item: Model) => item.id).includes(model.id));\r\n }\r\n\r\n minBy(path: string): Model {\r\n return this.items.reduce((prev: Model, current: Model) => (get(prev, path) < get(current, path) ? prev : current));\r\n }\r\n\r\n maxBy(path: string): Model {\r\n return this.items.reduce((prev: Model, current: Model) => (get(prev, path) > get(current, path) ? prev : current));\r\n }\r\n\r\n /**\r\n * float math issues https://stackoverflow.com/questions/12511057/float-sum-with-javascript\r\n */\r\n reduce(callback: (sum: number, item: Model) => number, init = 0): number {\r\n return +this.items.reduce(callback, init).toFixed(10);\r\n }\r\n\r\n slice(from: number, to: number): this {\r\n this.items.slice(from, to);\r\n\r\n return this;\r\n }\r\n}\r\n","import { Collection } from '../collection';\nimport { Message, User } from '../../models';\nimport uniqBy from 'lodash/uniqBy';\n\n\nexport class MessageCollection extends Collection<Message> {\n getFirstUnreadMessage(user: User): Message {\n return this.items.find((message: Message): boolean => !message.isRead() && message.isFromEmployee() !== user.isEmployee()\n );\n }\n\n /**\n * Get List of unread chats\n */\n getUnread(): Message[] {\n return this.items.filter((message: Message): boolean => !message.readAt);\n }\n\n getFromActiveChats(): this {\n return this.filter((message: Message) => message.chat.isActive());\n }\n\n /**\n * Get amount of chats that contains unread messages\n */\n getUnreadChatsAmount(isFromEmployee = false): number {\n // filtered messages for client/employee\n const filteredMessages: this = this.filter((message: Message) => isFromEmployee ? message.isFromEmployee() : !message.isFromEmployee());\n\n return uniqBy(filteredMessages.getFromActiveChats().getUnread(), 'chat.id').length;\n }\n\n /**\n * Check if chat has unread chats\n */\n hasUnread(): boolean {\n return !!this.getUnread().length;\n }\n}\n","export enum ChatStatusEnum {\n\tACTIVE = 1,\n\tINACTIVE = 2,\n}\n","import { Collection } from '../collection';\nimport { Chat, Dictionary, Message } from '../../models';\nimport { MessageCollection } from './message.collection';\nimport uniqBy from 'lodash/uniqBy';\nimport differenceBy from 'lodash/differenceBy';\nimport { ChatStatusEnum } from '../../db/Enums/chat-status.enum';\n\nexport class ChatCollection extends Collection<Chat> {\n /**\n * Sort chats by last messages (newest first) + empty chats in the end\n */\n getSortedByNewest(messages: Message[]): this {\n const chatsById: Dictionary<Chat> = new Dictionary<Chat>(this.toArray());\n\n // get chats array sorted from newest to oldest\n const chats: Chat[] = uniqBy(\n new MessageCollection(messages)\n .filterBy('chat.id', this.getIds())\n .sortBy('createdAt')\n .toArray()\n .map((message: Message) => chatsById.get(message.chat.id)),\n 'id');\n\n const emptyChats: Chat[] = differenceBy(this.toArray(), chats, 'id');\n\n return this.create([...chats, ...emptyChats]);\n }\n\n getActive(): this {\n return this.filterBy('status', ChatStatusEnum.ACTIVE);\n }\n}\n","import { Collection } from '../collection';\nimport { MessageDocument } from '../../models';\n\n/**\n * Collection of MessageDocument instances\n */\nexport class MessageDocumentCollection extends Collection<MessageDocument> {\n /**\n * get list of documents which are not attached to any message\n */\n getUnattached(): MessageDocumentCollection {\n return new MessageDocumentCollection(\n this.items.filter((doc: MessageDocument): boolean => !doc.message)\n );\n }\n}\n","/**\n * Data table structure suitable for export\n */\nimport { ExportCell } from './export-cell';\n\nexport class ExportDataTable {\n caption?: string;\n header: string[];\n body: ExportCell[][];\n footer: ExportCell[][]\n}\n","import { Collection } from './collection';\nimport { plainToClass } from 'class-transformer';\nimport { ExportDataTable } from '../models/export/export-data-table';\nimport { ExportCell } from '../models/export/export-cell';\nimport {AbstractModel} from '../db/Models/abstract-model';\n\nexport abstract class ExportableCollection<Model extends AbstractModel> extends Collection<Model> {\n abstract getExportHeader(): string[];\n\n abstract getExportBody(params: {}): ExportCell[][];\n\n getExportFooter(): ExportCell[] {\n return [];\n }\n\n getBodyAoa(exportData): any {\n return exportData.body.map(row => {\n return row.map(cell => {\n return cell.value;\n })\n })\n }\n\n export(params?: any): ExportDataTable {\n return plainToClass(ExportDataTable, {\n header: this.getExportHeader(),\n body: this.getExportBody(params),\n footer: [this.getExportFooter()]\n });\n }\n}\n","import { ExportCellTypeEnum } from './export-cell-type.enum';\n\n/**\n * export table column\n */\nexport class ExportCell {\n value: any;\n type: ExportCellTypeEnum\n}\n","/**\n * type of export table column value\n */\nexport enum ExportCellTypeEnum {\n STRING,\n CURRENCY,\n DATE,\n PERCENT\n}\n","import { ExportableCollection } from '../exportable.collection';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { plainToClass } from 'class-transformer';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { LoanPayment, FinancialYear } from '../../models';\n\nexport class LoanPaymentCollection extends ExportableCollection<LoanPayment> {\n getExportHeader(): string[] {\n return [\n 'Pmt No.',\n 'Date',\n 'Payment Due',\n 'Interest Accrued',\n 'Principal Paid',\n 'Principal Balance',\n 'Payout'\n ];\n }\n\n getExportBody(): ExportCell[][] {\n return this.items.map((payment: LoanPayment) => [\n plainToClass(ExportCell, {value: payment.number, type: ExportCellTypeEnum.STRING}),\n plainToClass(ExportCell, {value: payment.date, type: ExportCellTypeEnum.DATE}),\n plainToClass(ExportCell, {value: payment.paymentDue, type: ExportCellTypeEnum.CURRENCY}),\n plainToClass(ExportCell, {value: payment.interestAccrued, type: ExportCellTypeEnum.CURRENCY}),\n plainToClass(ExportCell, {value: payment.principalPaid, type: ExportCellTypeEnum.CURRENCY}),\n plainToClass(ExportCell, {value: payment.principalBalance, type: ExportCellTypeEnum.CURRENCY}),\n plainToClass(ExportCell, {value: payment.payout, type: ExportCellTypeEnum.CURRENCY}),\n ]);\n }\n\n get paymentDue(): number {\n return this.sumBy('paymentDue');\n }\n\n getByFinYear(finYear: FinancialYear = new FinancialYear()): this {\n return this.filter((payment: LoanPayment) => new Date(payment.date) >= finYear.startDate &&\n new Date(payment.date) <= finYear.endDate)\n }\n\n getForCurrentYear(): this {\n return this.getByFinYear(new FinancialYear());\n }\n}\n","import { Collection } from '../collection';\nimport { Loan } from '../../models';\nimport { CollectionDictionary } from '../collection-dictionary';\nimport { LoanPaymentCollection } from './loan-payment.collection';\nimport uniq from 'lodash/uniq';\n\nexport class LoanCollection extends Collection<Loan> {\n /**\n * Get new collection of loans filtered by bank accounts ids\n * @param ids list of bank accounts ids for filter\n */\n getByBankAccountsIds(ids: number[]): LoanCollection {\n return new LoanCollection(\n this.items.filter((loan: Loan): boolean => ids.includes(loan.bankAccount?.id))\n );\n }\n\n /**\n * Get single loan by bank account id\n * @param id id of bank account\n */\n getByBankAccountId(id: number): Loan {\n return this.items.find((loan: Loan): boolean => loan.bankAccount?.id === id);\n }\n\n /**\n * Get list of current fin year payments grouped by loan id\n */\n groupCurrentYearPaymentsByLoans(): CollectionDictionary<LoanPaymentCollection> {\n const dictionary = new LoanPaymentCollection([]).groupBy();\n this.items.forEach((loan: Loan) => dictionary.add(loan.id, new LoanPaymentCollection(loan.payments).getForCurrentYear()))\n\n return dictionary;\n }\n\n /**\n * Get list of vehicle loans\n */\n getVehicleLoans(): this {\n return this.filter((loan: Loan) => loan.isVehicle());\n }\n\n get interestRate(): number {\n return this.sumBy('interestRate') / this.length;\n }\n\n get monthlyRepaymentAmount(): number {\n return this.sumBy('monthlyRepaymentAmount') / this.length;\n }\n\n get repaymentTypes(): string {\n return uniq(this.map((loan) => loan.repaymentTypeLabel)).join(', ');\n }\n\n get interestTypes(): string {\n return uniq(this.map((loan) => loan.interestTypeLabel)).join(', ');\n }\n}\n","import { Collection } from '../../collection';\nimport { PropertySale } from '../../../models';\n\nexport class PropertySaleCollection extends Collection<PropertySale> {\n /**\n * Property sales are CGT applicable unless it has \"Principle place of residence\" exemption type\n */\n getCGTApplicable(): this {\n return this.filter((propertySale: PropertySale) => propertySale.isCGTApplicable());\n }\n\n getByPropertyShareIds(ids: number[]): this {\n return this.filterBy('share.id', ids);\n }\n}\n","export enum TaxExemptionMetaFieldEnum {\n // principle place of residence\n PPR_DAYS = 1,\n // market value once it was moved, decimal\n MARKET_VALUE = 2,\n CLAIM_PERCENT = 3,\n}\n","import { Collection } from '../../collection';\nimport {\n PropertySaleTaxExemptionMetaField\n} from '../../../models';\nimport {TaxExemptionMetaFieldEnum} from '../../../db/Enums/property/property-sale/tax-exemption-meta-field.enum';\n\nexport class PropertySaleTaxExemptionMetaFieldCollection extends Collection<PropertySaleTaxExemptionMetaField> {\n getPPRDays(): number {\n return this.getByMetaFieldId(TaxExemptionMetaFieldEnum.PPR_DAYS)?.value ?? 0;\n }\n\n getMarketValue(): number {\n return this.getByMetaFieldId(TaxExemptionMetaFieldEnum.MARKET_VALUE)?.value ?? 0;\n }\n\n getClaimPercent(): number {\n return this.getByMetaFieldId(TaxExemptionMetaFieldEnum.CLAIM_PERCENT)?.value ?? 100;\n }\n\n getByMetaFieldId(id: number): PropertySaleTaxExemptionMetaField {\n return this.items.find(\n (metaField: PropertySaleTaxExemptionMetaField) => metaField.metaField.id === id\n );\n }\n}\n","import { Collection } from '../collection';\nimport { Property, PropertyCategory, FinancialYear } from '../../models';\nimport uniqBy from 'lodash/uniqBy';\nimport { DepreciationCollection } from '../depreciation.collection';\nimport { TransactionCollection } from '../transaction';\nimport { CollectionDictionary } from '../collection-dictionary';\n\nexport class PropertyCollection extends Collection<Property> {\n /**\n * Get new property collection filtered by category id\n * @param id id of category for filter\n */\n getByCategoryId(id: number): PropertyCollection {\n return new PropertyCollection(\n this.items.filter((property: Property): boolean => property.category.id === id)\n );\n }\n\n /**\n * Get new property collection filtered by active status\n */\n getActiveProperties(): PropertyCollection {\n return new PropertyCollection(\n this.items.filter((property: Property): boolean => property.isActive)\n );\n }\n\n getCreatedProperties(): PropertyCollection {\n return new PropertyCollection(\n this.items.filter((property: Property): boolean => property.isOwn())\n );\n }\n\n /**\n * Get new property collection filtered by shared\n */\n getSharedProperties(): PropertyCollection {\n return new PropertyCollection(\n this.items.filter((property: Property): boolean => !property.isOwn())\n );\n }\n\n /**\n * Properties that are taxed and will be included in reports (Tax summary, My tax report, e.t.c.)\n */\n getTaxInclusive(): this {\n return this.create(\n this.items.filter((property: Property) => property.category.isTaxInclusive)\n );\n }\n\n getUnsold(): this {\n return this.create(\n this.items.filter((property: Property) => !property.isSold())\n );\n }\n\n /**\n * Get total purchase price for all properties in the collection\n */\n get purchasePrice(): number {\n return this.sumBy('purchasePrice');\n }\n\n get growthPercent(): number {\n return this.sumBy('growthPercent');\n }\n\n get marketValue(): number {\n return this.sumBy('marketValue');\n }\n\n get firstForecastYear(): number {\n return this.items.reduce((min: number, property: Property): number => {\n const current: number = property.firstForecastYear;\n return min > current ? current : min;\n }, new FinancialYear().year);\n }\n\n get marketValueGrowth(): number {\n return (this.marketValue - this.purchasePrice) / this.purchasePrice;\n }\n\n /**\n * list of properties\n */\n getCGTApplicable(): this {\n return this.create(\n this.items.filter((property: Property) => property.isCGTApplicable())\n );\n }\n\n getOwnerOccupiedProperties(): PropertyCollection {\n return new PropertyCollection(\n this.items.filter((property: Property): boolean => property.category.isOwnerOccupied())\n );\n }\n\n get earliestContractDate(): Date {\n return this.items.reduce((min: Date, property: Property): Date => min < property.contractDate ? min : property.contractDate, new FinancialYear(new Date()).startDate);\n }\n\n /**\n * Get list of unique property categories from collection\n */\n getCategories(): PropertyCategory[] {\n return uniqBy(this.items.map((property: Property): PropertyCategory => property.category), 'id');\n }\n\n /**\n * Get property with the highest growth percent\n */\n getBestPerformanceGrowthProperty(): Property {\n return this.items.reduce((max: Property, current: Property): Property => max.growthPercent < current.growthPercent ? current : max, this.first);\n }\n\n /**\n * Get property with the lowest tax position\n */\n getBestPerformanceTaxProperty(transactions: TransactionCollection, depreciations: DepreciationCollection): Property {\n const transactionsByProperty: CollectionDictionary<TransactionCollection> = transactions.groupBy('property.id');\n const depreciationsByProperty: CollectionDictionary<DepreciationCollection> = depreciations.groupBy('property.id');\n\n return this.items.reduce((min: Property, current: Property): Property => {\n const minTaxPosition: number = min.getTaxPosition(transactionsByProperty.get(min.id), depreciationsByProperty.get(min.id));\n const currentTaxPosition: number = current.getTaxPosition(transactionsByProperty.get(current.id), depreciationsByProperty.get(current.id));\n\n return minTaxPosition > currentTaxPosition ? current : min;\n }, this.first);\n }\n\n /**\n * Show best performance properties first\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677997/Property+Tank+Dashboard\n */\n sortByBestPerformance(transactions: TransactionCollection, depreciations: DepreciationCollection): this {\n const activeProperties: PropertyCollection = this.getActiveProperties();\n\n // nothing to sort when no active properties\n if (!activeProperties.length) {\n return this;\n }\n\n const bestProperties: Property[] = uniqBy(this.create([\n activeProperties.getBestPerformanceGrowthProperty(),\n activeProperties.getBestPerformanceTaxProperty(transactions, depreciations)\n ]).toArray(), 'id');\n\n const newItems: Property[] = this.diff(bestProperties).toArray();\n newItems.unshift(...bestProperties);\n\n return this.create(newItems);\n }\n\n get netMonthlyIncome(): number {\n return this.sumBy('monthlyIncome') + this.sumBy('monthlyExpense');\n }\n}\n","import { Collection } from '../collection';\nimport { FinancialYear, Property, PropertyCategoryMovement, PropertyForecast } from '../../models';\n\nexport class PropertyCategoryMovementCollection extends Collection<PropertyCategoryMovement> {\n /**\n * @TODO TT-2355 Alex refactor propertyForecast, use separated api (then I can remove property from param)\n */\n getByForecast(property: Property, forecast: PropertyForecast): this {\n const financialYear = new FinancialYear(forecast.financialYear);\n\n return this.filterBy('property.id', property.id).filter((movement: PropertyCategoryMovement) => movement.fromDate <= financialYear.endDate && !movement.toDate || movement.toDate >= financialYear.startDate);\n }\n\n hasCategory(categoryId: number): boolean {\n return !!this.findBy('propertyCategory.id', categoryId);\n }\n}\n","import { PropertyShare } from '../../models';\nimport { Collection } from '../collection';\n\nexport class PropertyShareCollection extends Collection<PropertyShare> {\n /**\n * Get list of incoming property shares\n * (initiated not by current user)\n * @TODO Alex: rename\n */\n getIncoming(): this {\n return this.filter((propertyShare: PropertyShare) => propertyShare.user?.isLoggedIn() && propertyShare.isPending() && propertyShare.property.user.id !== +localStorage.getItem('userId'));\n }\n\n /**\n * Get list of outcoming property shares\n * (initiated by current user)\n * @TODO Alex: rename\n */\n getOutcoming(): this {\n return this.filter((propertyShare: PropertyShare) => !propertyShare.user?.isLoggedIn());\n }\n}\n","/**\n * Enum with symbols based on depreciation LVP asset type\n */\nexport enum DepreciationLvpAssetTypeEnum {\n PRIOR_YEARS = 'A',\n FIRST_YEAR = 'L',\n WRITTEN_OFF = 'W'\n}\n","export enum DepreciationTypeEnum {\n\tPLANT_EQUIPMENT = 1,\n\tCAPITAL_WORKS = 2,\n\tBULK_DEPRECIATION = 3,\n\tBORROWING_EXPENSES = 4,\n}\n","export enum DepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n\tCAPITAL = 3,\n\tLVP = 4,\n\tAMORTISATION = 5,\n SBP = 6\n}\n","import { DepreciationCapitalProject as DepreciationCapitalProjectBase } from '../../db/Models/depreciation/depreciation-capital-project';\nimport { Type } from 'class-transformer';\nimport { MpTrackableInterface } from '../../interfaces';\nimport { Property } from '../property';\n\nexport class DepreciationCapitalProject extends DepreciationCapitalProjectBase implements MpTrackableInterface {\n @Type(() => Date)\n effectiveDate: Date;\n\n getMpData(property: Property) {\n return {\n 'Property': property.name,\n 'Name': this.projectName\n };\n }\n}\n","import { DepreciationForecast as DepreciationForecastBase } from '../../db/Models/depreciation/depreciation-forecast';\nimport moment from 'moment';\nimport { DateRange } from 'moment-range';\nimport { Type } from 'class-transformer';\n\nexport class DepreciationForecast extends DepreciationForecastBase {\n isLVP: boolean;\n\n @Type(() => Number)\n amount: number;\n\n @Type(() => Number)\n closeBalance: number;\n\n get dailyClaimAmount(): number {\n return this.claimAmount / this.daysApplied;\n }\n\n get daysApplied(): number {\n return moment(this.toDate).diff(moment(this.fromDate), 'days');\n }\n\n getDaysByMonth(month: number): number {\n // @TODO find a better place\n const year: number = this.financialYear - (month > 5 ? 1 : 0);\n\n // forecast date intersect by month\n const range: DateRange = new DateRange(this.fromDate, this.toDate).intersect(\n new DateRange(new Date(year, month, 1), new Date(year, month + 1, 0))\n );\n\n return range ? range.duration('days') + 1 : 0;\n }\n\n get claimOpenBalance(): number {\n return this.openBalance * this.claimRate;\n }\n\n get claimCloseBalance(): number {\n return this.closeBalance * this.claimRate;\n }\n\n get claimAmount(): number {\n return this.amount * this.claimRate;\n }\n\n get claimRate(): number {\n return this.claimPercent / 100;\n }\n\n getClaimAmountByMonth(month: number): number {\n return this.getDaysByMonth(month) * this.dailyClaimAmount;\n }\n}\n","import { ChartAccountsCategoryEnum } from '../../db/Enums';\r\n\r\n/**\r\n * Grouped chart accounts categories for fast work\r\n * @TODO Alex: Clean up and/or remove some groups\r\n */\r\nexport const CHART_ACCOUNTS_CATEGORIES: {[key: string]: ChartAccountsCategoryEnum[]} = {\r\n income: [\r\n ChartAccountsCategoryEnum.PROPERTY_INCOME,\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME,\r\n ChartAccountsCategoryEnum.PERSONAL_INCOME,\r\n ChartAccountsCategoryEnum.SOLE_INCOME,\r\n ChartAccountsCategoryEnum.HOLDING_INCOME,\r\n ],\r\n expense: [\r\n ChartAccountsCategoryEnum.PROPERTY_EXPENSE,\r\n ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION,\r\n ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS,\r\n ChartAccountsCategoryEnum.WORK_DEPRECIATION,\r\n ChartAccountsCategoryEnum.WORK_EXPENSE,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE,\r\n ChartAccountsCategoryEnum.PERSONAL_EXPENSE,\r\n ChartAccountsCategoryEnum.SOLE_EXPENSE,\r\n ChartAccountsCategoryEnum.SOLE_DEPRECIATION,\r\n ChartAccountsCategoryEnum.HOLDING_EXPENSE,\r\n ],\r\n property: [\r\n ChartAccountsCategoryEnum.PROPERTY_EXPENSE,\r\n ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION,\r\n ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS,\r\n ChartAccountsCategoryEnum.PROPERTY_INCOME\r\n ],\r\n work: [\r\n ChartAccountsCategoryEnum.WORK_EXPENSE,\r\n ChartAccountsCategoryEnum.WORK_DEPRECIATION,\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE,\r\n ChartAccountsCategoryEnum.OTHER_INCOME\r\n ],\r\n sole: [\r\n ChartAccountsCategoryEnum.SOLE_INCOME,\r\n ChartAccountsCategoryEnum.SOLE_EXPENSE,\r\n ChartAccountsCategoryEnum.SOLE_DEPRECIATION\r\n ],\r\n holding: [\r\n ChartAccountsCategoryEnum.HOLDING_EXPENSE,\r\n ChartAccountsCategoryEnum.HOLDING_INCOME,\r\n\r\n ],\r\n other: [\r\n ChartAccountsCategoryEnum.OTHER_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE,\r\n ],\r\n personal: [\r\n ChartAccountsCategoryEnum.PERSONAL_EXPENSE,\r\n ChartAccountsCategoryEnum.PERSONAL_INCOME\r\n ],\r\n propertyExpense: [\r\n ChartAccountsCategoryEnum.PROPERTY_EXPENSE\r\n ],\r\n propertyIncome: [\r\n ChartAccountsCategoryEnum.PROPERTY_INCOME\r\n ],\r\n workExpense: [\r\n ChartAccountsCategoryEnum.WORK_EXPENSE,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE\r\n ],\r\n workIncome: [\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME\r\n ],\r\n soleExpense: [\r\n ChartAccountsCategoryEnum.SOLE_EXPENSE,\r\n ],\r\n soleIncome: [\r\n ChartAccountsCategoryEnum.SOLE_INCOME,\r\n ],\r\n soleDepreciation: [\r\n ChartAccountsCategoryEnum.SOLE_DEPRECIATION,\r\n ],\r\n holdingExpense: [\r\n ChartAccountsCategoryEnum.HOLDING_EXPENSE,\r\n ],\r\n holdingIncome: [\r\n ChartAccountsCategoryEnum.HOLDING_INCOME,\r\n ],\r\n workTankHeader: [\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME,\r\n ChartAccountsCategoryEnum.WORK_EXPENSE,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE\r\n ],\r\n workTankHeaderIncome: [\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME\r\n ],\r\n workTankHeaderExpenses: [\r\n ChartAccountsCategoryEnum.WORK_EXPENSE,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE\r\n ],\r\n depreciation: [\r\n ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION,\r\n ChartAccountsCategoryEnum.WORK_DEPRECIATION,\r\n ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS,\r\n ChartAccountsCategoryEnum.SOLE_DEPRECIATION,\r\n ],\r\n all: [\r\n ChartAccountsCategoryEnum.PROPERTY_INCOME,\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME,\r\n ChartAccountsCategoryEnum.HOLDING_INCOME,\r\n ChartAccountsCategoryEnum.PERSONAL_INCOME,\r\n ChartAccountsCategoryEnum.PROPERTY_EXPENSE,\r\n ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION,\r\n ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS,\r\n ChartAccountsCategoryEnum.WORK_DEPRECIATION,\r\n ChartAccountsCategoryEnum.WORK_EXPENSE,\r\n ChartAccountsCategoryEnum.OTHER_EXPENSE,\r\n ChartAccountsCategoryEnum.HOLDING_EXPENSE,\r\n ChartAccountsCategoryEnum.PERSONAL_EXPENSE\r\n ]\r\n};\r\n","import { ChartAccountsCategoryEnum } from '../../db/Enums';\n\n/**\n * @TODO Vik: we want to use enums from backend instead of declared types\n */\nexport declare type ChartAccountsType = 'income' | 'expense' | 'depreciation' | 'capital works';\nexport declare type ChartAccountsTankType = 'property' | 'work' | 'sole' | 'personal' | 'other';\n\n/**\n * @TODO Alex/Vik: think and create some new collection type\n * @TODO Alex: research all constants and make the same structure\n */\nexport class ChartAccountsCategoryECollection {\n items: ChartAccountsCategoryEnum[];\n\n constructor(items?: ChartAccountsCategoryEnum[]) {\n this.items = items || [\n ChartAccountsCategoryEnum.PROPERTY_INCOME,\n ChartAccountsCategoryEnum.PROPERTY_EXPENSE,\n ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION,\n ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS,\n ChartAccountsCategoryEnum.WORK_DEPRECIATION,\n ChartAccountsCategoryEnum.WORK_INCOME,\n ChartAccountsCategoryEnum.WORK_EXPENSE,\n ChartAccountsCategoryEnum.OTHER_INCOME,\n ChartAccountsCategoryEnum.OTHER_EXPENSE,\n ChartAccountsCategoryEnum.PERSONAL_INCOME,\n ChartAccountsCategoryEnum.PERSONAL_EXPENSE,\n ChartAccountsCategoryEnum.SOLE_INCOME,\n ChartAccountsCategoryEnum.SOLE_EXPENSE,\n ChartAccountsCategoryEnum.SOLE_DEPRECIATION\n ];\n }\n\n getByType(types: ChartAccountsType | ChartAccountsType[]): ChartAccountsCategoryECollection {\n if (!Array.isArray(types)) {\n types = [types];\n }\n\n const items: ChartAccountsCategoryEnum[] = [];\n\n types.forEach((type: ChartAccountsType) => {\n const filtered: ChartAccountsCategoryEnum[] = this.items.filter((item: ChartAccountsCategoryEnum) => ChartAccountsCategoryEnum[item].includes(type.toUpperCase()));\n items.push(...filtered);\n })\n\n return new ChartAccountsCategoryECollection(items);\n }\n\n getByTankType(tankTypes: ChartAccountsTankType | ChartAccountsTankType[]): ChartAccountsCategoryECollection {\n if (!Array.isArray(tankTypes)) {\n tankTypes = [tankTypes];\n }\n\n const items: ChartAccountsCategoryEnum[] = [];\n\n tankTypes.forEach((tankType: ChartAccountsTankType) => {\n const filtered: ChartAccountsCategoryEnum[] = this.items.filter((item: ChartAccountsCategoryEnum) => ChartAccountsCategoryEnum[item].includes(tankType.toUpperCase()))\n items.push(...filtered);\n })\n\n return new ChartAccountsCategoryECollection(items);\n }\n}\n","import { ChartAccountsHeading as ChartAccountsHeadingBase } from '../../db/Models/chart-accounts/chart-accounts-heading';\r\nimport { ChartAccounts } from './chart-accounts';\r\n\r\nexport class ChartAccountsHeading extends ChartAccountsHeadingBase {\r\n chartAccounts: ChartAccounts[];\r\n}\r\n","import { ChartAccountsMetaField as ChartAccountsMetaFieldBase } from '../../db/Models/chart-accounts/chart-accounts-meta-field';\r\nimport { ChartAccountsMetaFieldListEnum } from '../../db/Enums';\r\n\r\nexport class ChartAccountsMetaField extends ChartAccountsMetaFieldBase {\r\n /**\r\n * Check if meta field id is related to SHARE_PERCENTAGE value\r\n */\r\n isSharePercentage(): boolean {\r\n return this.id === ChartAccountsMetaFieldListEnum.SHARE_PERCENTAGE;\r\n }\r\n\r\n isHours(): boolean {\r\n return this.id === ChartAccountsMetaFieldListEnum.HOURS;\r\n }\r\n\r\n isFranked(): boolean {\r\n return this.id === ChartAccountsMetaFieldListEnum.FRANKED;\r\n }\r\n\r\n isFrankingCredit(): boolean {\r\n return this.id === ChartAccountsMetaFieldListEnum.FRANKING_CREDIT;\r\n }\r\n}\r\n","import { ChartAccountsValue as ChartAccountsValueBase } from '../../db/Models/chart-accounts/chart-accounts-value';\n\nexport class ChartAccountsValue extends ChartAccountsValueBase {\n}\n","export enum ChartAccountsTaxLabelsEnum {\r\n TAX_WITHHELD = 'Tax withheld',\r\n TAX_PAID = 'Tax Paid',\r\n TAX_DEDUCTED = 'Tax Deducted'\r\n}\r\n","import { IOption } from '../interfaces/option.interface';\r\n\r\nexport function enumToList(data: object): IOption[] {\r\n const list: IOption[] = [];\r\n\r\n for (const key in data) {\r\n if (Number(key) >= 0) {\r\n list.push({\r\n label: data[key],\r\n value: Number(key)\r\n });\r\n }\r\n }\r\n\r\n return list;\r\n}\r\n","import { ChartAccountsValue } from '../../db/Models';\nimport { plainToClass } from 'class-transformer';\nimport ChartAccountValues from '../../db/Json/chart-accounts/chart-accounts-value.json';\nimport { Collection } from '../../collections';\n\n/**\n * @TODO vik performance problems, try https://angular.io/guide/dependency-injection-providers?\n */\nexport const CHART_ACCOUNTS_VALUES = new Collection(\n ChartAccountValues.map((value) => plainToClass(ChartAccountsValue, value))\n).groupBy('chartAccounts.id');\n","import { ChartAccounts as ChartAccountsBase } from '../../db/Models/chart-accounts/chart-accounts';\r\nimport { Expose, Transform, Type } from 'class-transformer';\r\nimport { ChartAccountsHeading } from './chart-accounts-heading';\r\nimport { ChartAccountsMetaField } from './chart-accounts-meta-field';\r\nimport {\r\n ChartAccountsCategoryEnum,\r\n ChartAccountsHeadingListEnum,\r\n ChartAccountsHeadingTaxableEnum,\r\n ChartAccountsHeadingTaxDeductibleEnum,\r\n ChartAccountsHeadingVehicleListEnum,\r\n ChartAccountsListEnum,\r\n ChartAccountsSalaryIncludedListEnum\r\n} from '../../db/Enums';\r\nimport { CHART_ACCOUNTS_CATEGORIES } from './chart-accounts-categories.const';\r\nimport { FinancialYear } from '../financial-year';\r\nimport { ChartAccountsValue } from './chart-accounts-value';\r\nimport { ChartAccountsTaxLabelsEnum } from './chart-accounts-tax-labels.enum';\r\nimport { enumToList } from '../../functions/enum-to-list';\r\nimport { CHART_ACCOUNTS_VALUES } from '../../db-static/chart-accounts/chart-accounts-values';\r\n\r\nexport class ChartAccounts extends ChartAccountsBase {\r\n /**\r\n * Australian GST percent value (VAT)\r\n */\r\n static GSTRatio = 0.1;\r\n static GSTCoefficient = 1.1;\r\n static GSTPercent = 10;\r\n\r\n @Type(() => ChartAccountsHeading)\r\n heading: ChartAccountsHeading;\r\n\r\n @Type(() => ChartAccountsMetaField)\r\n metaFields: ChartAccountsMetaField[];\r\n\r\n @Type(() => ChartAccountsValue)\r\n @Transform(({obj}) => CHART_ACCOUNTS_VALUES.get(obj.id).toArray(), {toClassOnly: true})\r\n @Transform(() => null, {toPlainOnly: true})\r\n @Expose() values: ChartAccountsValue[];\r\n\r\n /**\r\n * Return name as string\r\n */\r\n toString(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Kms travelled for work' category\r\n */\r\n isKmsForWork(): boolean {\r\n return this.id === ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK;\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Kms travelled for sole' category\r\n */\r\n isKmsForSole(): boolean {\r\n return this.id === ChartAccountsListEnum.KLMS_TRAVELLED;\r\n }\r\n\r\n isKms(): boolean {\r\n return [ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK, ChartAccountsListEnum.KLMS_TRAVELLED].includes(this.id);\r\n }\r\n\r\n /**\r\n * special type used for just pre-paying tax to the ATO, uses on tax summary\r\n */\r\n isNRAS(): boolean {\r\n return this.id === ChartAccountsListEnum.TAX_OFFSETS_N_R_A_S;\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Interest on Loan' category\r\n */\r\n isInterestOnLoan(): boolean {\r\n return this.id === ChartAccountsListEnum.INTEREST_ON_LOAN;\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Motor Vehicles' category\r\n */\r\n isVehicles(): boolean {\r\n return [ChartAccountsListEnum.WORK_VEHICLES, ChartAccountsListEnum.SOLE_VEHICLES].includes(this.id);\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Interest Earned' category\r\n */\r\n isInterestEarned(): boolean {\r\n return this.id === ChartAccountsListEnum.INTEREST_EARNED;\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Trust Income' category\r\n */\r\n isTrustIncome(): boolean {\r\n return this.id === ChartAccountsListEnum.TRUST_INCOME;\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'Motor vehicles (commercial cars)' category\r\n */\r\n isCommercialVehicles(): boolean {\r\n return this.id === ChartAccountsListEnum.COMMERCIAL_VEHICLES;\r\n }\r\n\r\n /**\r\n * Check if chart accounts is work income\r\n */\r\n isWorkIncome(): boolean {\r\n return this.category === ChartAccountsCategoryEnum.WORK_INCOME;\r\n }\r\n\r\n isVehicleExpense(): boolean {\r\n return !!ChartAccountsHeadingVehicleListEnum[this.heading?.id];\r\n }\r\n\r\n /**\r\n * Check if chart accounts is other income\r\n */\r\n isOtherIncome(): boolean {\r\n return this.category === ChartAccountsCategoryEnum.OTHER_INCOME;\r\n }\r\n\r\n isIncome(): boolean {\r\n return CHART_ACCOUNTS_CATEGORIES.income.includes(this.category);\r\n }\r\n\r\n isExpense(): boolean {\r\n return CHART_ACCOUNTS_CATEGORIES.expense.includes(this.category);\r\n }\r\n\r\n isProperty(): boolean {\r\n return CHART_ACCOUNTS_CATEGORIES.property.includes(this.category);\r\n }\r\n\r\n isWorkExpense(): boolean {\r\n return [ChartAccountsCategoryEnum.WORK_EXPENSE, ChartAccountsCategoryEnum.OTHER_EXPENSE, ChartAccountsCategoryEnum.WORK_DEPRECIATION]\r\n .includes(this.category);\r\n }\r\n\r\n isSoleExpense(): boolean {\r\n return [ChartAccountsCategoryEnum.SOLE_EXPENSE, ChartAccountsCategoryEnum.SOLE_DEPRECIATION]\r\n .includes(this.category);\r\n }\r\n\r\n /**\r\n * Check if chart accounts is property expense\r\n */\r\n isPropertyExpense(): boolean {\r\n return this.isProperty() && this.isExpense();\r\n }\r\n\r\n /**\r\n * Check if chart accounts is property income\r\n */\r\n isPropertyIncome(): boolean {\r\n return this.category === ChartAccountsCategoryEnum.PROPERTY_INCOME;\r\n }\r\n\r\n isPersonal(): boolean {\r\n return CHART_ACCOUNTS_CATEGORIES.personal.includes(this.category);\r\n }\r\n\r\n isPersonalExpense(): boolean {\r\n return this.category === ChartAccountsCategoryEnum.PERSONAL_EXPENSE;\r\n }\r\n\r\n /**\r\n * Check if chart accounts category is depreciation\r\n */\r\n isDepreciation(): boolean {\r\n return CHART_ACCOUNTS_CATEGORIES.depreciation.includes(this.category);\r\n }\r\n\r\n isSoleIncome(): boolean {\r\n return CHART_ACCOUNTS_CATEGORIES.soleIncome.includes(this.category);\r\n }\r\n\r\n /**\r\n * Check if transaction chart account is work related car expenses\r\n */\r\n isVehicleLoanExpense(): boolean {\r\n return this.isVehicleLoanInterest() || this.isVehicleLoanPrinciple();\r\n }\r\n\r\n isVehicleLoanPrinciple(): boolean {\r\n return [ChartAccountsListEnum.VEHICLE_LOAN_PRINCIPAL, ChartAccountsListEnum.SOLE_VEHICLE_LOAN_PRINCIPAL].includes(this.id);\r\n }\r\n\r\n isVehicleLoanInterest(): boolean {\r\n return [ChartAccountsListEnum.VEHICLE_LOAN_INTEREST, ChartAccountsListEnum.SOLE_VEHICLE_LOAN_INTEREST].includes(this.id);\r\n }\r\n\r\n /**\r\n * Get chart accounts value for current financial year\r\n */\r\n getCurrentYearValue(): ChartAccountsValue {\r\n return this.getValueByYear(new FinancialYear().year);\r\n }\r\n\r\n /**\r\n * Get chart accounts value by financial year\r\n */\r\n getValueByYear(year: number): ChartAccountsValue {\r\n return this.values.find((value: ChartAccountsValue): boolean => value.financialYear === year);\r\n }\r\n\r\n /**\r\n * no way to check how much used for work/sole, so we let user adjust it\r\n * except vehicle expense, which is equal to vehicleClaim.workUsage\r\n * except when taxablePercent=0, but not SOLE_ENTERTAINMENT\r\n */\r\n isClaimPercentEditable(): boolean {\r\n return ((this.isWorkExpense() || this.isSoleExpense()) && !this.isVehicleExpense() && this.taxablePercent > 0)\r\n || this.id === ChartAccountsListEnum.SOLE_ENTERTAINMENT;\r\n }\r\n\r\n /**\r\n * get label for transaction tax field depended on selected chart account.\r\n * tax type depends on chart account heading or category.\r\n */\r\n getTaxLabel(): ChartAccountsTaxLabelsEnum {\r\n // get simple array of ids from enum with taxable chart accounts headings\r\n const taxableCAHeadingsIds: number[] = enumToList(ChartAccountsHeadingTaxableEnum)\r\n .map((item: { label: string, value: number }) => item.value);\r\n // get simple array of ids from enum with tax-deductible chart accounts headings\r\n const deductibleCAHeadingsIds: number[] = enumToList(ChartAccountsHeadingTaxDeductibleEnum)\r\n .map((item: { label: string, value: number }) => item.value);\r\n\r\n // check if one of ids arrays includes current chart accounts heading id and set tax label\r\n // otherwise label is empty for this class\r\n switch (true) {\r\n case taxableCAHeadingsIds.includes(this.heading?.id):\r\n return ChartAccountsTaxLabelsEnum.TAX_PAID;\r\n case deductibleCAHeadingsIds.includes(this.heading?.id):\r\n return ChartAccountsTaxLabelsEnum.TAX_DEDUCTED;\r\n case CHART_ACCOUNTS_CATEGORIES.workIncome.includes(this.category):\r\n case this.category === ChartAccountsCategoryEnum.HOLDING_INCOME:\r\n return ChartAccountsTaxLabelsEnum.TAX_WITHHELD;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n isETP(): boolean {\r\n return this.heading.id === ChartAccountsHeadingListEnum.ETP\r\n }\r\n\r\n isSalary(): boolean {\r\n return this.id === ChartAccountsListEnum.SALARY_OR_WAGES;\r\n }\r\n\r\n /**\r\n * chart accounts included in salary, like tips or allowance\r\n */\r\n isSalaryIncluded(): boolean {\r\n return this.id in ChartAccountsSalaryIncludedListEnum;\r\n }\r\n\r\n isPropertyCapitalWorks(): boolean {\r\n return this.category === ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS\r\n }\r\n\r\n isTaxable(): boolean {\r\n return !this.isNRAS() && this.isWorkIncome();\r\n }\r\n\r\n isTransfer(): boolean {\r\n return this.id === ChartAccountsListEnum.TRANSFER;\r\n }\r\n\r\n isDividends(): boolean {\r\n return this.id === ChartAccountsListEnum.DIVIDENDS;\r\n }\r\n\r\n isHomeOfficeWorkHours(): boolean {\r\n return this.id === ChartAccountsListEnum.HOME_OFFICE_WORK_HOURS;\r\n }\r\n}\r\n","import { ChartAccountsDepreciation as ChartAccountsDepreciationBase } from '../../db/Models/chart-accounts/chart-accounts-depreciation';\nimport { ChartAccounts } from './chart-accounts';\nimport { Transform, Type } from 'class-transformer';\n\nexport class ChartAccountsDepreciation extends ChartAccountsDepreciationBase {\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n\n @Transform(({value}) => +value)\n limit: number;\n\n @Transform(({value}) => +value)\n effectiveLife: number;\n}\n","import { AllocationRuleConditionOperatorEnum, AllocationRuleTypeEnum } from '../../Enums';\nimport { User } from '../user/user';\nimport { BankAccount } from '../bank/bank-account';\nimport { AllocationRuleCondition } from './allocation-rule-condition';\nimport { AllocationRuleTransaction } from './allocation-rule-transaction';\nimport { AbstractModel } from '../abstract-model';\n\nexport class AllocationRule extends AbstractModel {\n name?: string;\n type?: AllocationRuleTypeEnum;\n autoAllocate?: boolean;\n conditionOperator?: AllocationRuleConditionOperatorEnum;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n bankAccount?: BankAccount;\n conditions?: AllocationRuleCondition[];\n transaction?: AllocationRuleTransaction;\n transferBankAccount?: BankAccount;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { AllocationRule } from './allocation-rule';\nimport { AbstractModel } from '../abstract-model';\nimport { AllocationRuleConditionComparisonOperatorEnum, AllocationRuleConditionFieldEnum } from '../../Enums';\n\nexport class AllocationRuleCondition extends AbstractModel {\n comparisonOperator?: AllocationRuleConditionComparisonOperatorEnum;\n field?: AllocationRuleConditionFieldEnum;\n value?: string;\n rule?: AllocationRule;\n}\n","import { AllocationRuleCondition as AllocationRuleConditionBase } from '../../db/Models/transaction/allocation-rule-condition';\nimport { BankTransaction } from '../bank';\nimport { AllocationRuleConditionComparisonOperatorEnum, AllocationRuleConditionFieldEnum } from '../../db/Enums';\nimport { Transform } from 'class-transformer';\n\nexport class AllocationRuleCondition extends AllocationRuleConditionBase {\n @Transform(({value}) => value.toString(), {toPlainOnly: true})\n value: string;\n\n matchBankTransaction(bankTransaction: BankTransaction): boolean {\n return this.field === AllocationRuleConditionFieldEnum.AMOUNT ? this.matchBankTransactionByAmount(bankTransaction) : this.matchBankTransactionByDescription(bankTransaction);\n }\n\n matchBankTransactionByAmount(bankTransaction: BankTransaction): boolean {\n // Amount should be compared as number\n const value: number = +this.value;\n\n switch (this.comparisonOperator) {\n case AllocationRuleConditionComparisonOperatorEnum.EQUALS:\n return bankTransaction.amount === value;\n case AllocationRuleConditionComparisonOperatorEnum.EQUALS_OR_LESS:\n return bankTransaction.amount <= value;\n case AllocationRuleConditionComparisonOperatorEnum.EQUALS_OR_GREATER:\n return bankTransaction.amount >= value;\n }\n\n return false;\n }\n\n matchBankTransactionByDescription(bankTransaction: BankTransaction): boolean {\n // Prepare value and description for comparison\n const description: string = bankTransaction.description.toLowerCase();\n const value: string = this.value.trim().toLowerCase();\n\n switch (this.comparisonOperator) {\n case AllocationRuleConditionComparisonOperatorEnum.EQUALS:\n return description === value;\n case AllocationRuleConditionComparisonOperatorEnum.CONTAINS:\n return description.includes(value);\n case AllocationRuleConditionComparisonOperatorEnum.STARTS:\n return description.startsWith(value);\n }\n\n return false;\n }\n}\n","import { AllocationRule } from './allocation-rule';\nimport { Loan } from '../loan/loan';\nimport { IncomeSource } from '../incomeSource/income-source';\nimport { AllocationRuleTransactionMetaField } from './allocation-rule-transaction-meta-field';\nimport { TransactionBase } from './transaction-base';\nimport { SoleBusiness } from '../sole/sole-business';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { Property } from '../property/property';\n\nexport class AllocationRuleTransaction extends TransactionBase {\n canAutoAllocate?: boolean;\n amount?: number;\n\tamountPercent?: number;\n tax?: number;\n claimPercent?: number;\n isGST?: boolean;\n rule?: AllocationRule;\n chartAccounts?: ChartAccounts;\n property?: Property;\n loan?: Loan;\n incomeSource?: IncomeSource;\n metaFields?: AllocationRuleTransactionMetaField[];\n parentTransaction?: AllocationRuleTransaction;\n childTransactions?: AllocationRuleTransaction[];\n business?: SoleBusiness;\n}\n","import { AllocationRuleTransaction } from './allocation-rule-transaction';\nimport { ChartAccountsMetaField } from '../chart-accounts/chart-accounts-meta-field';\nimport { AbstractModel } from '../abstract-model';\n\nexport class AllocationRuleTransactionMetaField extends AbstractModel {\n value?: string;\n allocationRuleTransaction?: AllocationRuleTransaction;\n chartAccountsMetaField?: ChartAccountsMetaField;\n}\n","import { AllocationRuleTransactionMetaField as AllocationRuleTransactionMetaFieldBase } from '../../db/Models/transaction/allocation-rule-transaction-meta-field';\n\nexport class AllocationRuleTransactionMetaField extends AllocationRuleTransactionMetaFieldBase {\n}\n","/**\n * @TODO vik remove\n */\nexport enum IncomeSourceTypeEnum {\n WORK = 1,\n SOLE = 2,\n OTHER = 3,\n HOLDING = 4,\n}\n","export enum SalaryForecastFrequencyEnum {\n\tANNUAL = 1,\n\tMONTHLY = 12,\n\tFORTNIGHTLY = 26,\n\tWEEKLY = 52,\n}\n","import { SalaryForecast as SalaryForecastBase } from '../../db/Models/incomeSource/salary-forecast';\nimport { IncomeSource } from './income-source';\nimport { IIncomeSourceForecast } from '../../interfaces';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { SalaryForecastFrequencyEnum } from '../../db/Enums/salary-forecast-frequency.enum';\nimport { FinancialYear } from '../financial-year';\n\nexport class SalaryForecast extends SalaryForecastBase implements IIncomeSourceForecast {\n @Type(() => Number)\n tax: number;\n\n @Type(() => Number)\n netPay: number;\n\n get grossAmount(): number {\n return this.netPay + this.tax;\n }\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n get taxWithheld(): number {\n return this.grossAmount - this.netPay;\n }\n\n get monthlyAmount(): number {\n switch (this.frequency) {\n case SalaryForecastFrequencyEnum.ANNUAL:\n return this.netPay / FinancialYear.monthsInYear;\n case SalaryForecastFrequencyEnum.FORTNIGHTLY:\n return this.netPay * FinancialYear.weeksInYear / FinancialYear.monthsInYear / 2;\n case SalaryForecastFrequencyEnum.WEEKLY:\n return this.netPay * FinancialYear.weeksInYear / FinancialYear.monthsInYear;\n default:\n return this.netPay;\n }\n }\n}\n","import { IncomeSource } from './income-source';\nimport { SoleForecast as SoleForecastBase } from '../../db/Models/sole/sole-forecast';\nimport { Type } from 'class-transformer';\nimport {IIncomeSourceForecast} from '../../interfaces';\n\nexport class SoleForecast extends SoleForecastBase implements IIncomeSourceForecast {\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n get netPay(): number {\n return this.amount;\n }\n}\n","export enum IncomeSourceForecastTrustTypeEnum {\n SPECIAL_DISABILITY_TRUST = 1,\n DECEASED_ESTATE = 2,\n FIXED_TRUST = 3,\n HYBRID_TRUST = 4,\n DISCRETIONARY_SERVICE_TRUST = 5,\n DISCRETIONARY_TRADING_TRUST = 6,\n DISCRETIONARY_INVESTMENT_TRUST = 7,\n CASH_MANAGEMENT_UNIT_TRUST = 8,\n PUBLIC_UNIT_TRUST_LISTED = 9,\n PUBLIC_UNIT_TRUST_UNLISTED = 10,\n TESTAMENTARY_TRUST = 11,\n}\n","export enum IncomeSourceTypeListOtherEnum {\n PSI = 6,\n SOLE_TRADER = 7,\n TRUSTS = 9,\n OTHER_INCOME = 10,\n PARTNERSHIPS = 12\n}\n","export enum IncomeSourceTypeListSoleEnum {\n SOLE_TRADER = 7,\n}\n","export enum IncomeSourceTypeListWorkEnum {\n BONUSES = 1,\n DIRECTOR_FEES = 2,\n INTEREST = 4,\n PENSIONS_AND_ALLOWANCES = 5,\n SUPERANNUATION = 8,\n ATTRIBUTED_P_S_I = 11,\n}\n","export enum IncomeSourceTypeListHoldingEnum {\n DIVIDENDS = 3,\n INTEREST = 4,\n TRUSTS = 9,\n OTHER_INCOME = 10,\n PARTNERSHIPS = 12\n}\n","import { IncomeSourceType as IncomeSourceTypeBase } from '../../db/Models/incomeSource/income-source-type';\nimport { IncomeSourceTypeListWorkEnum, IncomeSourceTypeListOtherEnum, IncomeSourceTypeListSoleEnum, IncomeSourceTypeListHoldingEnum } from '../../db/Enums/income-source';\n\nexport class IncomeSourceType extends IncomeSourceTypeBase {\n isBonuses(): boolean {\n return this.id === IncomeSourceTypeListWorkEnum.BONUSES;\n }\n\n isWork(): boolean {\n return !!IncomeSourceTypeListWorkEnum[this.id];\n }\n\n isOther(): boolean {\n return !!IncomeSourceTypeListOtherEnum[this.id];\n }\n\n isHolding(): boolean {\n return !!IncomeSourceTypeListHoldingEnum[this.id];\n }\n\n isSole(): boolean {\n return !!IncomeSourceTypeListSoleEnum[this.id];\n }\n}\n","import { IncomeSourceForecast as IncomeSourceForecastBase } from '../../db/Models/incomeSource/income-source-forecast';\nimport { SalaryForecastFrequencyEnum } from '../../db/Enums/salary-forecast-frequency.enum';\nimport { IIncomeSourceForecast } from '../../interfaces';\nimport { Type } from 'class-transformer';\nimport { IncomeSourceType } from './income-source-type';\nimport { IncomeSource } from './income-source';\n\nexport class IncomeSourceForecast extends IncomeSourceForecastBase implements IIncomeSourceForecast {\n @Type(() => IncomeSourceType)\n incomeSourceType: IncomeSourceType;\n\n paygIncome = 0;\n frequency: SalaryForecastFrequencyEnum = SalaryForecastFrequencyEnum.ANNUAL;\n isTaxFree = false;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n /**\n * Sometimes Income source has Salary & Income source forecasts,\n * and we need these fields to work with Income source forecasts like with Salary Forecasts\n */\n get netPay(): number {\n return this.amount;\n }\n\n get grossAmount(): number {\n return this.amount + this.tax + this.taxInstalments + this.frankingCredits;\n }\n\n get monthlyAmount(): number {\n return this.amount / 12;\n }\n}\n","import {IncomeSource as IncomeSourceBase} from '../../db/Models/incomeSource/income-source';\r\nimport {IncomeSourceTypeEnum} from '../../db/Enums/income-source/income-source-type.enum';\r\nimport {IIncomeSourceForecast} from '../../interfaces';\r\nimport {Type} from 'class-transformer';\r\nimport {SalaryForecast} from './salary-forecast';\r\nimport {SoleForecast} from './sole-forecast';\r\nimport {IncomeSourceForecast} from './income-source-forecast';\r\nimport {FinancialYear} from '../financial-year';\r\n\r\nexport class IncomeSource extends IncomeSourceBase {\r\n @Type(() => SalaryForecast)\r\n salaryForecasts: SalaryForecast[];\r\n\r\n @Type(() => SoleForecast)\r\n soleForecasts: SoleForecast[];\r\n\r\n @Type(() => IncomeSourceForecast)\r\n incomeSourceForecasts: IncomeSourceForecast[];\r\n\r\n @Type(() => Date)\r\n dateFrom: Date;\r\n\r\n @Type(() => Date)\r\n dateTo: Date;\r\n\r\n isSoleIncome(): boolean {\r\n return this.type === IncomeSourceTypeEnum.SOLE;\r\n }\r\n\r\n isWorkIncome(): boolean {\r\n return this.type === IncomeSourceTypeEnum.WORK;\r\n }\r\n\r\n isOtherIncome(): boolean {\r\n return this.type === IncomeSourceTypeEnum.OTHER;\r\n }\r\n\r\n isHolding(): boolean {\r\n return this.type === IncomeSourceTypeEnum.HOLDING;\r\n }\r\n\r\n /**\r\n * Get salary and other income forecasts\r\n */\r\n get forecasts(): IIncomeSourceForecast[] {\r\n return [...this.salaryForecasts, ...this.incomeSourceForecasts, ...this.soleForecasts];\r\n }\r\n\r\n /**\r\n * Get actual (1st from the list) forecast\r\n */\r\n get actualForecast(): IIncomeSourceForecast {\r\n return this.forecasts[0];\r\n }\r\n\r\n /**\r\n * Check if user was working in month taken by the index\r\n * @param monthIndex by which month should be taken\r\n */\r\n isWorkedInMonth(monthIndex: number): boolean {\r\n const monthDate: Date = new FinancialYear().getMonthDate(monthIndex);\r\n return (!this.dateFrom || monthDate >= this.dateFrom) && (!this.dateTo || monthDate < this.dateTo);\r\n }\r\n}\r\n","import { TransactionCollection } from '../../collections/transaction/transaction.collection';\nimport { IChartData } from '../../interfaces/chart-data.interface';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { MonthNameShortEnum } from '../financial-year/month-name-short.enum';\nimport { MonthNumberEnum } from '../financial-year/month-number.enum';\n\n/**\n * Income sources chart data\n */\nexport class IncomeSourceChartData {\n private forecastedIncomeAmount: number;\n private transactions: TransactionCollection;\n\n constructor(\n forecastedIncomeAmount: number,\n transactions: TransactionCollection,\n ) {\n this.forecastedIncomeAmount = forecastedIncomeAmount;\n this.transactions = transactions;\n }\n\n /**\n * Get prepared data for income sources chart\n */\n get(): IChartData[] {\n const chartData: IChartData[] = [{\n id: 'actualIncome',\n name: 'Actual Income',\n data: [],\n // display future actual incomes with dash line and past actual incomes with solid line\n zones: [{\n // line style after current month\n value: new FinancialYear().getMonthDate(new Date().getMonth()).getTime(),\n dashStyle: 'Solid'\n }, {\n // default line style\n dashStyle: 'Dash'\n }]\n }, {\n id: 'forecastedIncome',\n name: 'Forecasted Income',\n data: [],\n }];\n\n for (const key in MonthNameShortEnum) {\n if (MonthNameShortEnum.hasOwnProperty(key)) {\n // transaction collection for provided month\n const monthTransactionCollection: TransactionCollection = this.transactions.getByMonth(+MonthNumberEnum[key]);\n\n chartData[0].data.push([new FinancialYear().getMonthDate(+MonthNumberEnum[key]).getTime(), monthTransactionCollection.amount]);\n chartData[1].data.push([new FinancialYear().getMonthDate(+MonthNumberEnum[key]).getTime(), this.forecastedIncomeAmount / 12]);\n }\n }\n\n return chartData;\n }\n}\n","import {\n AllocationRuleTransaction as AllocationRuleTransactionBase\n} from '../../db/Models/transaction/allocation-rule-transaction';\nimport { ChartAccounts } from '../chart-accounts';\nimport { Transform, Type, plainToClass } from 'class-transformer';\nimport { AllocationRuleTransactionMetaField } from './allocation-rule-transaction-meta-field';\nimport { BankTransaction, Loan, Property, SoleBusiness, Transaction, TransactionAllocation } from '../../models';\nimport { IncomeSource } from '../income-source';\nimport { ChartAccountsListEnum } from '../../db/Enums';\nimport merge from 'lodash/merge';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\n\nexport class AllocationRuleTransaction extends AllocationRuleTransactionBase {\n @Type(() => ChartAccounts)\n // @TODO Alex: Create custom decorator for this transform\n @Transform(({ value }) => ({ id: value.id }), { toPlainOnly: true })\n chartAccounts: ChartAccounts;\n\n @Type(() => Property)\n @Transform(({ value }) => value ? { id: value.id } : null, { toPlainOnly: true })\n property: Property;\n\n @Type(() => Loan)\n @Transform(({ value }) => value ? { id: value.id } : null, { toPlainOnly: true })\n loan: Loan;\n\n @Type(() => IncomeSource)\n @Transform(({ value }) => value ? { id: value.id } : null, { toPlainOnly: true })\n incomeSource?: IncomeSource;\n\n @Type(() => SoleBusiness)\n @Transform(({ value }) => value ? { id: value.id } : null, { toPlainOnly: true })\n business: SoleBusiness;\n\n @Type(() => AllocationRuleTransactionMetaField)\n metaFields: AllocationRuleTransactionMetaField[];\n\n @Type(() => AllocationRuleTransaction)\n parentTransaction: AllocationRuleTransaction;\n\n @Type(() => AllocationRuleTransaction)\n childTransactions: AllocationRuleTransaction[];\n\n @Type(() => Number) claimPercent = 100;\n @Type(() => Number) tax = 0;\n\n amount: number = null;\n\n get amountPercentCoefficient(): number {\n return this.amountPercent ? this.amountPercent / 100 : 1;\n }\n\n calculateClaimPercent(): number {\n if (!this.chartAccounts) {\n return null;\n }\n\n let claimPercent = this.chartAccounts.taxablePercent;\n\n // Property claim (ownership% x shared%) for property expenses, taxable percent for others\n if (this.chartAccounts?.isProperty() && this.property) {\n\n if (this.chartAccounts.isPropertyExpense() && this.chartAccounts.id !== ChartAccountsListEnum.PLATFORM_FEES) {\n claimPercent *= this.property?.claimCoefficient;\n }\n }\n\n return claimPercent;\n }\n\n /**\n * If rule transaction has amount then split enabled. There is 0 when split disabled\n */\n isSplit(): boolean {\n return !!this.amountPercent;\n }\n\n /**\n * Create Transaction instance based on passed bank transaction and rule transaction\n */\n toTransaction(bankTransaction: BankTransaction): Transaction {\n const transaction = merge(\n bankTransaction.toTransaction(this.isGST),\n {\n tax: this.tax,\n claimPercent: this.claimPercent,\n chartAccounts: this.chartAccounts,\n property: this.property,\n loan: this.loan,\n incomeSource: this.incomeSource,\n metaFields: this.metaFields,\n parentTransaction: this.parentTransaction,\n childTransactions: this.childTransactions,\n business: this.business,\n operation: TransactionOperationEnum.ALLOCATE,\n }\n );\n // amount: bankTransaction.amount * (this.amountPercent ? (this.amountPercent / 100) : 1),\n if (this.amount) {\n transaction.amount = this.amount;\n } else if (this.amountPercent) {\n transaction.amount *= this.amountPercentCoefficient;\n }\n\n transaction.allocations = [TransactionAllocation.create(transaction.amountWithGst, bankTransaction)]\n\n return transaction;\n }\n}\n","import { AllocationRule as AllocationRuleBase } from '../../db/Models/transaction/allocation-rule';\nimport { BankAccount, BankTransaction } from '../bank';\nimport { Transform, Type, plainToClass } from 'class-transformer';\nimport { AllocationRuleCondition } from './allocation-rule-condition';\nimport { AllocationRuleTransaction } from './allocation-rule-transaction';\nimport {\n AllocationRuleConditionComparisonOperatorEnum,\n AllocationRuleConditionFieldEnum,\n AllocationRuleConditionOperatorEnum,\n AllocationRuleTypeEnum, ChartAccountsListEnum\n} from '../../db/Enums';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { Transaction } from './transaction';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { ChartAccounts } from '../chart-accounts';\n\nexport class AllocationRule extends AllocationRuleBase {\n @Type(() => BankAccount)\n @Transform(({ value }) => ({ id: value.id }), { toPlainOnly: true })\n bankAccount?: BankAccount;\n\n @Type(() => AllocationRuleCondition)\n conditions?: AllocationRuleCondition[];\n\n @Type(() => AllocationRuleTransaction)\n transaction?: AllocationRuleTransaction;\n\n @Type(() => BankAccount)\n transferBankAccount?: BankAccount;\n\n type: AllocationRuleTypeEnum = AllocationRuleTypeEnum.EXPENSE;\n conditionOperator: AllocationRuleConditionOperatorEnum = AllocationRuleConditionOperatorEnum.OR;\n\n get typeLabel(): string {\n switch (this.type) {\n case AllocationRuleTypeEnum.EXPENSE:\n return 'expense';\n\n case AllocationRuleTypeEnum.INCOME:\n return 'income';\n\n default:\n return 'transfer';\n }\n }\n\n isIncome(): boolean {\n return this.type === AllocationRuleTypeEnum.INCOME;\n }\n\n isExpense(): boolean {\n return this.type === AllocationRuleTypeEnum.EXPENSE;\n }\n\n isTransfer(): boolean {\n return this.type === AllocationRuleTypeEnum.TRANSFER;\n }\n\n isPropertyTank(): boolean {\n return this.transaction.tankType === TankTypeEnum.PROPERTY;\n }\n\n isWorkTank(): boolean {\n return this.transaction.tankType === TankTypeEnum.WORK;\n }\n\n isSoleTank(): boolean {\n return this.transaction.tankType === TankTypeEnum.SOLE;\n }\n\n isPropertyIncome(): boolean {\n return this.isIncome() && this.isPropertyTank();\n }\n\n isWorkIncome(): boolean {\n return this.isIncome() && this.isWorkTank();\n }\n\n isSoleIncome(): boolean {\n return this.isIncome() && this.isSoleTank();\n }\n\n /**\n * @TODO Alex: move to collection\n */\n matchBankTransaction(bankTransaction: BankTransaction): boolean {\n return this.conditionOperator === AllocationRuleConditionOperatorEnum.AND ? this.checkAnd(bankTransaction) : this.checkOr(bankTransaction);\n }\n\n createTransaction(bankTransaction: BankTransaction): Transaction {\n if (this.isTransfer()) {\n const transaction: Transaction = bankTransaction.toTransaction();\n\n transaction.operation = TransactionOperationEnum.TRANSFER;\n transaction.chartAccounts = plainToClass(ChartAccounts, { id: ChartAccountsListEnum.TRANSFER });\n\n return transaction;\n }\n\n return this.transaction.toTransaction(bankTransaction);\n }\n\n /**\n * Rule is matched when all conditions matched\n */\n private checkAnd(bankTransaction: BankTransaction): boolean {\n for (const condition of this.conditions) {\n if (!condition.matchBankTransaction(bankTransaction)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Rule is matched when at least one condition matched\n */\n private checkOr(bankTransaction: BankTransaction): boolean {\n for (const condition of this.conditions) {\n if (condition.matchBankTransaction(bankTransaction)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Create allocation rule based on bank transaction (just prefill rule fields with bank transaction values)\n */\n static fromBankTransaction(bankTransaction: BankTransaction): AllocationRule {\n return plainToClass(AllocationRule, {\n type: bankTransaction.isDebit() ? AllocationRuleTypeEnum.EXPENSE : AllocationRuleTypeEnum.INCOME,\n bankAccount: bankTransaction.bankAccount,\n conditionOperator: AllocationRuleConditionOperatorEnum.AND,\n conditions: [\n plainToClass(AllocationRuleCondition, {\n field: AllocationRuleConditionFieldEnum.AMOUNT,\n comparisonOperator: AllocationRuleConditionComparisonOperatorEnum.EQUALS,\n value: bankTransaction.amount\n }),\n plainToClass(AllocationRuleCondition, {\n field: AllocationRuleConditionFieldEnum.DESCRIPTION,\n comparisonOperator: AllocationRuleConditionComparisonOperatorEnum.EQUALS,\n value: bankTransaction.description\n })\n ]\n });\n }\n}\n","/**\n * Enum with income amount types (Net or Gross)\n */\nexport enum IncomeAmountTypeEnum {\n NET,\n GROSS\n}\n","export enum TransactionTypeEnum {\n\tDEBIT = 1,\n\tCREDIT = 2,\n}\n","export enum TransactionSourceEnum {\n\tCASH = 1,\n\tBANK_TRANSACTION = 2,\n}\n","export enum TaxExemptionEnum {\n ONE_YEAR_RULE = 1,\n // principle place of residence\n PPR = 2,\n SIX_YEARS_RULE = 3,\n INVESTMENT_TO_PPR = 4,\n PPR_TO_INVESTMENT = 5,\n TRANSFER = 6,\n OTHER = 7,\n}\n","import {TaxExemption as BaseTaxExemption} from '../../../db/Models/property/property-sale/tax-exemption';\nimport {TaxExemptionEnum} from '../../../db/Enums/property/property-sale/tax-exemption.enum';\n\nexport class TaxExemption extends BaseTaxExemption {\n isPartial(): boolean {\n return [TaxExemptionEnum.INVESTMENT_TO_PPR, TaxExemptionEnum.PPR_TO_INVESTMENT].includes(this.id);\n }\n}\n","import { ObservableModel } from '../db/Models';\nimport { Type } from 'class-transformer';\n\nexport abstract class AssetSale extends ObservableModel {\n totalCapitalGain: number;\n grossCapitalGain: number;\n netCapitalGain: number;\n @Type(() => Date)\n date: Date;\n}\n","import { Type } from 'class-transformer';\nimport { PropertySaleTaxExemptionMetaField, PropertyShare } from '../../../db/Models';\nimport { TaxExemptionEnum } from '../../../db/Enums/property/property-sale/tax-exemption.enum';\nimport { TaxExemption } from './tax-exemption';\nimport { AssetSale } from '../../asset-sale';\nimport { MpTrackableInterface } from '../../../interfaces';\nimport { Property } from '../property';\nimport TaxExemptions from '../../../db/Json/property/tax-exemption.json';\n\nexport class PropertySale extends AssetSale implements MpTrackableInterface {\n createdAt: Date;\n updatedAt: Date;\n share: PropertyShare;\n\n @Type(() => Number)\n holdingCosts: number;\n\n @Type(() => Number)\n structuralImprovementsWDV: number;\n\n @Type(() => Number)\n buildingAtCostClaimed: number;\n\n @Type(() => Number)\n price: number;\n\n @Type(() => Number)\n commission: number;\n\n @Type(() => Number)\n legalFees: number;\n\n @Type(() => Number)\n otherCost: number;\n\n @Type(() => Date)\n settlementDate: Date;\n\n @Type(() => Date)\n date: Date;\n\n @Type(() => TaxExemption)\n taxExemption: TaxExemption;\n\n @Type(() => PropertySaleTaxExemptionMetaField)\n taxExemptionMetaFields: PropertySaleTaxExemptionMetaField[];\n\n get saleCostsTotalAmount(): number {\n return this.commission + this.legalFees + this.otherCost;\n }\n\n /**\n * CGT is not applicable for sales with \"Principle place of residence\" exemption type.\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (\"Capital gains or losses\" section)\n */\n isCGTApplicable(): boolean {\n return this.taxExemption?.id !== TaxExemptionEnum.PPR;\n }\n\n get netPrice(): number {\n return this.price - this.saleCostsTotalAmount;\n }\n\n getMpData(property: Property) {\n return {\n 'Property': property.name,\n 'Concession': TaxExemptions.find((taxExemption) => taxExemption.id === this.taxExemption.id).name\n };\n }\n}\n","export enum MyAccountHistoryInitiatedByEnum {\n OWNER = 0,\n ACCOUNTANT = 1\n}\n","export enum MyAccountHistoryStatusEnum {\n SUCCESS = 0,\n ERROR = 1\n}\n","export enum MyAccountHistoryTypeEnum {\n REVIEW = 0,\n UPGRADE_PLAN = 1,\n UPLOAD_DOCUMENT = 2\n}\n","import { MyAccountHistoryTypeEnum } from './my-account-history-type.enum';\nimport { MyAccountHistoryInitiatedByEnum } from './my-account-history-initiated-by.enum';\nimport { MyAccountHistoryStatusEnum } from './my-account-history-status.enum';\n\nexport class MyAccountHistory {\n id: number;\n name: string;\n type: MyAccountHistoryTypeEnum;\n initiatedBy: MyAccountHistoryInitiatedByEnum;\n date: Date;\n status: MyAccountHistoryStatusEnum;\n}\n","import { Occupation as OccupationBase } from '../../db/Models/client/occupation';\n\nexport class Occupation extends OccupationBase {\n}\n","export enum UserRolesEnum {\n FIRM_OWNER = 'ROLE_FIRM_OWNER',\n FIRM_MANAGER = 'ROLE_FIRM_MANAGER',\n CLIENT = 'ROLE_CLIENT',\n EMPLOYEE = 'ROLE_EMPLOYEE',\n ACCOUNTANT = 'ROLE_ACCOUNTANT',\n ADVISOR = 'ROLE_ADVISOR',\n USER = 'ROLE_USER',\n SUBSCRIPTION = 'ROLE_USER_SUBSCRIPTION',\n WORK_TANK = 'ROLE_USER_WORK',\n PROPERTY_TANK = 'ROLE_USER_PROPERTY',\n SOLE_TANK = 'ROLE_USER_SOLE',\n HOLDING_TANK = 'ROLE_USER_HOLDING',\n SWITCH_USER = 'IS_IMPERSONATOR',\n}\n","import { UserRolesEnum } from '../../db/Enums/user-roles.enum';\n\n/**\n * role hierarchy\n */\nexport const USER_ROLES: {[key: string]: UserRolesEnum[]} = {\n ROLE_FIRM_OWNER: [UserRolesEnum.FIRM_OWNER, UserRolesEnum.FIRM_MANAGER, UserRolesEnum.ACCOUNTANT, UserRolesEnum.ADVISOR],\n ROLE_FIRM_MANAGER: [UserRolesEnum.FIRM_MANAGER, UserRolesEnum.ACCOUNTANT, UserRolesEnum.ADVISOR],\n ROLE_EMPLOYEE: [UserRolesEnum.ACCOUNTANT, UserRolesEnum.ADVISOR],\n ROLE_ACCOUNTANT: [UserRolesEnum.ACCOUNTANT],\n ROLE_ADVISOR: [UserRolesEnum.ADVISOR],\n // @TODO makes no sense, these roles can't be hierarchical\n ROLE_CLIENT: [UserRolesEnum.CLIENT],\n ROLE_USER_SUBSCRIPTION: [UserRolesEnum.SUBSCRIPTION],\n ROLE_USER_WORK: [UserRolesEnum.WORK_TANK],\n ROLE_USER_PROPERTY: [UserRolesEnum.PROPERTY_TANK],\n ROLE_USER_SOLE: [UserRolesEnum.SOLE_TANK],\n ROLE_USER_HOLDING: [UserRolesEnum.HOLDING_TANK],\n ROLE_PREVIOUS_ADMIN: [UserRolesEnum.SWITCH_USER],\n};\n","/**\n * Class with basic information about registering user\n */\nexport class UserToRegister {\n firstName: string;\n email: string;\n}\n","import { UserRolesEnum } from '../../db/Enums/user-roles.enum';\r\n\r\nexport const USER_WORK_POSITION: {[key: string]: string} = {\r\n [UserRolesEnum.EMPLOYEE]: 'Employee',\r\n [UserRolesEnum.FIRM_MANAGER]: 'Manager',\r\n [UserRolesEnum.FIRM_OWNER]: 'Firm Owner'\r\n};\r\n","export enum UserStatusEnum {\n INACTIVE = 0,\n ON_BOARDING = 1,\n ACTIVE = 2,\n}\n","import { ClientDetails as ClientDetailsBase } from '../../db/Models/client/client-details';\n\nexport class ClientDetails extends ClientDetailsBase {\n}\n","import { AbstractModel } from '../../db/Models';\nimport { ClientDetails } from './client-details';\nimport { FinancialYear } from '../financial-year';\nimport { Type } from 'class-transformer';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class AnnualClientDetails extends AbstractModel implements MpTrackableInterface {\n capitalLoss: number;\n privateHealthCare: boolean;\n spouse: boolean;\n spouseAnnualIncome = 0;\n dependants?: number;\n studentLoanAmount?: number;\n financialYear: number = new FinancialYear().year;\n reportableFringeBenefits?: number;\n exemptForeignEmploymentIncome?: number;\n @Type(() => ClientDetails)\n clientDetails: ClientDetails;\n\n get spouseMonthlyIncome(): number {\n return this.spouseAnnualIncome / 12;\n }\n\n getMpData() {\n return {\n capitalLoss: this.capitalLoss,\n privateHealthCare: this.privateHealthCare,\n spouse: this.spouse,\n dependants: this.dependants,\n studentLoanAmount: this.studentLoanAmount,\n financialYear: this.financialYear,\n reportableFringeBenefits: this.reportableFringeBenefits,\n exemptForeignEmploymentIncome: this.exemptForeignEmploymentIncome,\n };\n }\n}\n","import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../db/Models/client/client-income-types';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class ClientIncomeTypes extends ClientIncomeTypesBase implements MpTrackableInterface {\n /**\n * Get count of selected income types\n */\n get length(): number {\n return Object.values(this).filter((value: boolean): boolean => typeof value === 'boolean' && value).length;\n }\n\n getMpData() {\n return { work: this.work, property: this.property, sole: this.sole, holding: this.holdings }\n }\n}\n","export enum ClientInviteStatusEnum {\n\tPENDING = 1,\n\tREJECTED = 2,\n}\n","export enum ClientInviteTypeEnum {\n FROM_CLIENT = 1,\n FROM_EMPLOYEE = 2,\n}\n","import { Type } from 'class-transformer';\nimport { RegistrationInvite as RegistrationInviteBase } from '../../db/Models/user/registration-invite';\nimport { AppFile } from '../file';\n\nexport class RegistrationInvite extends RegistrationInviteBase {\n @Type(() => AppFile)\n file: AppFile;\n}\n","export enum PhoneTypeEnum {\n\tMOBILE = 1,\n\tOFFICE = 2,\n}\n","import { Phone as PhoneBase } from '../../db/Models/phone';\r\nimport { PhoneTypeEnum } from '../../db/Enums/phone-type.enum';\r\nimport { Country } from '../address/country';\r\nimport { Type } from 'class-transformer';\r\n\r\nexport class Phone extends PhoneBase {\r\n @Type(() => Country)\r\n country: Country = Country.australia;\r\n\r\n type: PhoneTypeEnum = PhoneTypeEnum.MOBILE;\r\n\r\n toString(): string {\r\n return `+${this.country.callingCode} ${this.number}`;\r\n }\r\n}\r\n","export enum FirmTypeEnum {\n\tACCOUNTANT = 1,\n\tADVISOR = 2,\n}\n","import { Firm as FirmBase } from '../../db/Models/firm/firm';\r\nimport { Phone } from '../phone/phone';\r\nimport { Address } from '../address';\r\nimport { User } from '../user';\r\nimport { Type } from 'class-transformer';\r\nimport { AppFile } from '../file';\r\nimport { FirmTypeEnum } from '../../db/Enums/firm-type.enum';\r\n\r\nexport class Firm extends FirmBase {\r\n @Type(() => User)\r\n owner: User;\r\n\r\n @Type(() => Address)\r\n address: Address;\r\n\r\n @Type(() => Phone)\r\n phone: Phone;\r\n\r\n @Type(() => AppFile)\r\n file: AppFile;\r\n\r\n isAccountant(): boolean {\r\n return this.type === FirmTypeEnum.ACCOUNTANT;\r\n }\r\n}\r\n","import { ClientInvite as ClientInviteBase } from '../../db/Models/firm/client-invite';\r\nimport { ClientInviteStatusEnum } from '../../db/Enums/client-invite-status.enum';\r\nimport { ClientInviteTypeEnum } from '../../db/Enums/client-invite-type.enum';\r\nimport { RegistrationInvite } from '../registration-invite/registration-invite';\r\nimport { Firm } from '../firm/firm';\r\nimport { User } from '../user';\r\nimport { Type } from 'class-transformer';\r\n\r\nexport class ClientInvite extends ClientInviteBase {\r\n @Type(() => Date)\r\n sentOn: Date;\r\n\r\n @Type(() => Date)\r\n updatedAt: Date;\r\n\r\n @Type(() => Firm)\r\n firm: Firm;\r\n\r\n @Type(() => User)\r\n client: User;\r\n\r\n @Type(() => User)\r\n employee: User;\r\n\r\n @Type(() => RegistrationInvite)\r\n registrationInvite: RegistrationInvite;\r\n\r\n /**\r\n * Check if client invite status is pending\r\n */\r\n isPending(): boolean {\r\n return this.status === ClientInviteStatusEnum.PENDING;\r\n }\r\n\r\n /**\r\n * Check if client invite status is accepted\r\n */\r\n isAccepted(): boolean {\r\n return !this.isPending() && !this.isRejected();\r\n }\r\n\r\n /**\r\n * Check if client invite status is rejected\r\n */\r\n isRejected(): boolean {\r\n return this.status === ClientInviteStatusEnum.REJECTED;\r\n }\r\n\r\n /**\r\n * Check if client invite initiated by firm\r\n */\r\n isFromEmployee(): boolean {\r\n return this.type === ClientInviteTypeEnum.FROM_EMPLOYEE;\r\n }\r\n\r\n /**\r\n * Check if client invite initiated by client\r\n */\r\n isFromClient(): boolean {\r\n return this.type === ClientInviteTypeEnum.FROM_CLIENT;\r\n }\r\n\r\n get firstName(): string {\r\n return this.client ? this.client.firstName : this.registrationInvite?.firstName;\r\n }\r\n\r\n get email(): string {\r\n return this.client ? this.client.email : this.registrationInvite?.email;\r\n }\r\n}\r\n","export enum ServiceProductStatusEnum {\n ARCHIVED = 0,\n ACTIVE = 1,\n}\n","export enum ServiceProductIdEnum {\n WORK_TANK_OLD = 1,\n PROPERTY_OLD = 2,\n PROPERTY_TANK = 3,\n WORK_TANK = 4,\n PROPERTIES = 5,\n SOLE_TANK = 6,\n HOLDINGS_TANK = 7,\n}\n","import {ServiceProduct as BaseServiceProduct} from '../../db/Models/subscription/service-product';\nimport {ServiceProductStatusEnum} from '../../db/Enums/subscription/service-product-status.enum';\nimport {ServiceProductIdEnum} from '../../db/Enums/subscription/service-product-id.enum';\n\nexport class ServiceProduct extends BaseServiceProduct {\n static quantity = 4;\n\n isProperties(): boolean {\n return [ServiceProductIdEnum.PROPERTY_OLD, ServiceProductIdEnum.PROPERTIES].includes(this.id);\n }\n\n isWorkTank(): boolean {\n return [ServiceProductIdEnum.WORK_TANK_OLD, ServiceProductIdEnum.WORK_TANK].includes(this.id);\n }\n\n isSoleTank(): boolean {\n return this.id === ServiceProductIdEnum.SOLE_TANK;\n }\n\n isHoldingsTank(): boolean {\n return this.id === ServiceProductIdEnum.HOLDINGS_TANK;\n }\n\n isArchived(): boolean {\n return this.status === ServiceProductStatusEnum.ARCHIVED;\n }\n\n // makeTrial(): ServiceSubscription {\n // return plainToClass(ServiceSubscription, {\n // items: [\n // plainToClass(ServiceSubscriptionItem, {\n // price: {\n // id: TestEnum[this.id]\n // }\n // })\n // ]\n // });\n // }\n}\n\n// const TestEnum = {\n// 4: 4,\n// 5: 7,\n// 6: 6\n// }\n","export enum ServicePriceTypeEnum {\n DEPRECATED = 0,\n MONTHLY = 1,\n MONTHLY_PACKAGE = 2,\n YEARLY = 3,\n YEARLY_PACKAGE = 4,\n}\n","import { ServicePrice as BaseServicePrice } from '../../db/Models/subscription/service-price';\nimport { ServiceProduct } from './service-product';\nimport {Type, plainToClass} from 'class-transformer';\nimport {ServiceSubscriptionItem} from './service-subscription-item';\nimport {ServicePriceTypeEnum} from '../../db/Enums/subscription/service-price-type.enum';\n\nexport class ServicePrice extends BaseServicePrice {\n @Type(() => ServiceProduct)\n product: ServiceProduct;\n\n toSubscriptionItem(): ServiceSubscriptionItem {\n return plainToClass(ServiceSubscriptionItem, {price: this, quantity: this.product.minQty});\n }\n\n isAnnual(): boolean {\n return [ServicePriceTypeEnum.YEARLY, ServicePriceTypeEnum.YEARLY_PACKAGE].includes(this.type);\n }\n\n isPackage(): boolean {\n return [ServicePriceTypeEnum.MONTHLY_PACKAGE, ServicePriceTypeEnum.YEARLY_PACKAGE].includes(this.type);\n }\n\n discountPrice(promoCode): number {\n // @TODO why only percent type?\n return this.amount - this.amount * (promoCode.percentOff / 100);\n }\n}\n","import {\n ServiceSubscriptionItem as ServiceSubscriptionItemBase\n} from '../../db/Models/subscription/service-subscription-item';\nimport {ServicePrice} from './service-price';\nimport {Type} from 'class-transformer';\nimport {ServicePromoCode} from \"./service-promo-code\";\n\nexport class ServiceSubscriptionItem extends ServiceSubscriptionItemBase {\n @Type(() => ServicePrice)\n price: ServicePrice;\n\n get total(): number {\n return this.price.amount * this.quantity;\n }\n\n /**\n * Show discount price after applying promo code\n */\n discountTotal(promoCode: ServicePromoCode): number {\n if (promoCode.percentOff) {\n return (this.price.amount - this.price.amount * (promoCode.percentOff / 100)) * this.quantity;\n } else {\n return this.price.amount = this.price.amount - promoCode.amountOff;\n }\n }\n}\n","export enum ServiceSubscriptionStatusEnum {\n\tACTIVE = 1,\n\tINCOMPLETE = 2,\n\tINCOMPLETE_EXPIRED = 3,\n\tPAST_DUE = 4,\n\tCANCELED = 5,\n\tUNPAID = 6,\n}\n","export enum ServicePromoCodeDurationEnum {\n FOREVER = 1,\n ONCE = 2,\n REPEATING = 3,\n}\n","import { ServicePromoCodeDurationEnum } from './service-promo-code-duration.enum';\nimport {ServicePrice} from \"./service-price\";\nimport {Type} from \"@angular/core\";\nimport {HoldingType} from \"../holding\";\n\nexport class ServicePromoCode {\n stripeId?: string;\n code?: string;\n amountOff?: number;\n percentOff?: number;\n duration?: ServicePromoCodeDurationEnum;\n durationMonths?: number;\n customer?: string;\n id?: number;\n\n isDurationForever() {\n return this.duration === ServicePromoCodeDurationEnum.FOREVER;\n }\n\n isDurationOnce() {\n return this.duration === ServicePromoCodeDurationEnum.ONCE;\n }\n\n isDurationRepeating() {\n return this.duration === ServicePromoCodeDurationEnum.REPEATING;\n }\n}\n","import { ServiceSubscription as ServiceSubscriptionBase } from '../../db/Models/subscription/service-subscription';\nimport { ServiceSubscriptionItem } from './service-subscription-item';\nimport { UserRolesEnum } from '../../db/Enums/user-roles.enum';\nimport { Expose, Type } from 'class-transformer';\nimport { ServiceSubscriptionStatusEnum } from '../../db/Enums/subscription/service-subscription-status.enum';\nimport { ServiceProduct } from './service-product';\nimport { SubscriptionItemCollection } from '../../collections';\nimport { ServicePromoCode } from './service-promo-code';\nimport moment from 'moment';\n\nexport class ServiceSubscription extends ServiceSubscriptionBase {\n @Type(() => Date)\n startDate: Date;\n\n @Type(() => Date)\n endDate: Date;\n\n @Type(() => Date)\n createdAt: Date;\n\n @Type(() => ServiceSubscriptionItem)\n items: ServiceSubscriptionItem[];\n\n @Type(() => ServicePromoCode)\n promoCode?: ServicePromoCode;\n\n @Expose()\n get promoCodeId(): number {\n return this.promoCode?.id || null;\n }\n\n get frequency(): 'month' | 'year' {\n return this.isAnnual() ? 'year' : 'month';\n }\n\n get isTrial(): boolean {\n return !this.stripeId;\n }\n\n get isPaid(): boolean {\n return !!this.stripeId;\n }\n\n get initialPrice(): number {\n const price: number = this.items.reduce((sum: number, item: ServiceSubscriptionItem) => sum + item.total, 0);\n return price;\n }\n\n get discountAmount(): number {\n return this.initialPrice - this.price\n }\n\n get price(): number {\n let price: number = this.items.reduce((sum: number, item: ServiceSubscriptionItem) => sum + item.total, 0);\n\n if (!!this.promoCode && !this.isAnnual()) {\n if (this.promoCode.amountOff) {\n price = price - this.promoCode.amountOff;\n } else {\n price = price - price * (this.promoCode.percentOff / 100);\n }\n }\n\n // promo code can't make price < 0\n return price > 0 ? price : 0;\n }\n\n /**\n * get title of subscription\n */\n get title(): string {\n return this.items.map((item) => item.price.product.title).join(' + ');\n // return this.isTrial ? 'Trial period' : this.items.map((item) => item.price.product.title).join(' + ');\n }\n\n /**\n * A subscription is considered active if the end date has not yet arrived and its status is \"Active\" or \"Past due\"\n */\n get isActive(): boolean {\n const isExpired: boolean = new Date(this.endDate).getTime() < new Date().getTime();\n\n return !isExpired && ([ServiceSubscriptionStatusEnum.ACTIVE, ServiceSubscriptionStatusEnum.PAST_DUE].includes(this.status));\n }\n\n isRenewable(): boolean {\n return !this.isTrial && this.isActive;\n }\n\n getItems(): SubscriptionItemCollection {\n return new SubscriptionItemCollection(this.items);\n }\n\n /**\n * @TODO move to collection\n */\n get workTankItem(): ServiceSubscriptionItem {\n return this.items.find((item: ServiceSubscriptionItem): boolean => item.price.product.isWorkTank());\n }\n\n get soleTankItem(): ServiceSubscriptionItem {\n return this.items.find((item: ServiceSubscriptionItem): boolean => item.price.product.isSoleTank());\n }\n\n get propertyTankItem(): ServiceSubscriptionItem {\n return this.items.find((item: ServiceSubscriptionItem): boolean => item.price.product.isProperties());\n }\n\n hasPropertyTank(): boolean {\n return !!this.items.find((subscriptionItem: ServiceSubscriptionItem) => subscriptionItem.price.product.role.includes(UserRolesEnum.PROPERTY_TANK));\n }\n\n hasWorkTank() {\n return !!this.items.find((subscriptionItem: ServiceSubscriptionItem) => subscriptionItem.price.product.role.includes(UserRolesEnum.WORK_TANK));\n }\n\n /**\n * bought before price updates, active for some time to let customer select a new plan\n * impossible to update, only prolong or buy new\n */\n isArchived(): boolean {\n // subscription with at least one archived product considered as archived\n return !!this.items.filter((item) => item.price.product.isArchived()).length;\n }\n\n /**\n * Case when payment was failed, but user has a time to update payment method\n */\n isPastDue(): boolean {\n return this.status === ServiceSubscriptionStatusEnum.PAST_DUE;\n }\n\n /**\n * Check if current subscription has provided subscription item\n */\n hasItem(itemToCheck: ServiceSubscriptionItem): boolean {\n return !!this.items.find((item: ServiceSubscriptionItem): boolean => item.price.id === itemToCheck.price.id);\n }\n\n hasProduct(product: ServiceProduct): boolean {\n return !!this.items.find((item: ServiceSubscriptionItem): boolean => item.price.product.id === product.id);\n }\n\n /**\n * package might have not all products, if it's purchased before release of the new product\n */\n isPackage(): boolean {\n return this.getItems().prices.first?.isPackage();\n }\n\n isFullPackage(): boolean {\n return this.items.length === ServiceProduct.quantity;\n }\n\n isAnnual(): boolean {\n return !!(this.getItems().prices.annual.length || this.getItems().prices.annualPackage.length);\n }\n\n /**\n * Recommended number of properties to buy,\n * based on the property service product and the number of properties the user has\n */\n getRecommendedPropertiesQty(propertyItem: ServiceSubscriptionItem, propertiesQty: number): number {\n const min: number = propertyItem.price.product.minQty;\n\n return Math.max(min, propertiesQty);\n }\n\n promoCodeEndDate(): number {\n return +moment(this.startDate).add(this.promoCode?.durationMonths, 'months');\n }\n}\n","import { ClientMovement as ClientMovementBase } from '../../db/Models/firm/client-movement';\r\nimport { ServiceSubscription } from '../service-subscription/service-subscription';\r\nimport { Firm } from '../firm/firm';\r\nimport { User } from '../user/user';\r\nimport { Type } from 'class-transformer';\r\n\r\nexport class ClientMovement extends ClientMovementBase {\r\n @Type(() => Firm)\r\n firm: Firm;\r\n\r\n @Type(() => User)\r\n client: User;\r\n\r\n @Type(() => User)\r\n employee: User;\r\n\r\n @Type(() => ServiceSubscription)\r\n subscription: ServiceSubscription;\r\n\r\n @Type(() => Date)\r\n dateFrom: Date;\r\n\r\n @Type(() => Date)\r\n dateTo: Date;\r\n}\r\n","/**\r\n * Chart serie class: chart data item\r\n * @TODO consider rename to ChartSerieData\r\n */\r\nexport class ChartSerie {\r\n label: string;\r\n value: number;\r\n}\r\n","import { ChartSerie } from './chart-serie';\r\nimport { Type } from 'class-transformer';\r\n\r\n/**\r\n * Chart data class\r\n * @TODO consider rename to ChartSerie\r\n */\r\nexport class ChartData {\r\n name: string;\r\n\r\n @Type(() => ChartSerie)\r\n data: ChartSerie[];\r\n}\r\n","import { plainToClass } from 'class-transformer';\nimport { ClientPortfolioReportCollection } from '../../collections/client-portfolio-report.collection';\nimport { ClientPortfolioReport } from './client-portfolio-report';\nimport { ChartData } from '../chart/chart-data';\n\n/**\n * Client portfolio charts data based on ClientPortfolioReportCollection\n */\nexport class ClientPortfolioChartData {\n private clientsPortfolioReportCollection: ClientPortfolioReportCollection;\n\n constructor(\n clientsPortfolioReportCollection: ClientPortfolioReportCollection\n ) {\n this.clientsPortfolioReportCollection = clientsPortfolioReportCollection;\n }\n\n getPieChartData(): ChartData[] {\n return this.clientsPortfolioReportCollection.items.map((clientPortfolioReport: ClientPortfolioReport) => plainToClass(ChartData, {\n name: clientPortfolioReport.category,\n data: clientPortfolioReport.count\n }));\n }\n\n getBarChartData(): ChartData[] {\n return [\n plainToClass(ChartData, {\n name: 'Total',\n data: [\n {\n label: 'Market value',\n value: this.clientsPortfolioReportCollection.marketValue\n },\n {\n label: 'Loan balance',\n value: this.clientsPortfolioReportCollection.loanBalance\n },\n {\n label: 'Equity position',\n value: this.clientsPortfolioReportCollection.equityPosition\n }\n ]\n }),\n plainToClass(ChartData, {\n name: 'Average',\n data: [\n {\n label: 'Market value',\n value: this.clientsPortfolioReportCollection.averageMarketValue\n },\n {\n label: 'Loan balance',\n value: this.clientsPortfolioReportCollection.averageLoanBalance\n },\n {\n label: 'Equity position',\n value: this.clientsPortfolioReportCollection.averageEquityPosition\n }\n ]\n })\n ];\n }\n}\n","/**\n * Class describes client's portfolio report information\n */\nimport {AbstractModel} from '../../db/Models/abstract-model';\n\nexport class ClientPortfolioReport extends AbstractModel {\n category: string;\n count: number;\n marketValue: number;\n loanBalance: number;\n equityPosition: number;\n}\n","import { EmployeeDetails as EmployeeDetailsBase } from '../../db/Models/user/employee-details';\nimport { Firm } from '../firm/firm';\nimport { Type } from 'class-transformer';\n\nexport class EmployeeDetails extends EmployeeDetailsBase {\n @Type(() => Firm)\n firm: Firm;\n}\n","import { ServicePayment as BaseServicePayment } from '../../db/Models/subscription/service-payment';\nimport { ServiceSubscription } from './service-subscription';\nimport { Type } from 'class-transformer';\n\nexport class ServicePayment extends BaseServicePayment {\n static daysToInvoiceUrlExpired = 30;\n\n @Type(() => ServiceSubscription)\n subscription: ServiceSubscription;\n\n @Type(() => Date)\n date: Date;\n\n /**\n * Stripe stores actual links to payment invoices for 30 days.\n * Link expires after 30 days\n */\n isInvoiceLinkExpired(): boolean {\n const expirationDate: Date = new Date(this.date.setDate(this.date.getDate() + ServicePayment.daysToInvoiceUrlExpired));\n\n return expirationDate.getTime() < new Date().getTime();\n }\n}\n","import { ServicePaymentMethodTypeEnum } from '../../Enums/subscription/service-payment-method-type.enum';\nimport { ServicePaymentMethodCardBrandEnum } from '../../Enums/subscription/service-payment-method-card-brand.enum';\nimport { User } from '../user/user';\nimport { AbstractModel } from '../abstract-model';\n\nexport class ServicePaymentMethod extends AbstractModel {\n stripeId?: string;\n type?: ServicePaymentMethodTypeEnum;\n lastFourDigits?: string;\n cardBrand?: ServicePaymentMethodCardBrandEnum;\n cardExpirationMonth?: number;\n cardExpirationYear?: number;\n isDefault?: boolean;\n deletedAt?: Date;\n user?: User;\n}\n","export enum PaymentMethodBrandEnum {\n UNKNOWN = 'Unknown',\n AMEX = 'American Express',\n DINERS = 'Diners Club',\n DISCOVER = 'Discover',\n JCB = 'JCB',\n MASTERCARD = 'Mastercard',\n UNIONPAY = 'UnionPay',\n VISA = 'Visa',\n}\n","export enum ServicePaymentMethodCardBrandEnum {\n\tUNKNOWN = 0,\n\tAMEX = 1,\n\tDINERS = 2,\n\tDISCOVER = 3,\n\tJCB = 4,\n\tMASTERCARD = 5,\n\tUNIONPAY = 6,\n\tVISA = 7,\n}\n","export enum ServicePaymentMethodTypeEnum {\n\tAU_BECS_DEBIT = 1,\n\tCARD = 2,\n}\n","import { ServicePaymentMethod as ServicePaymentMethodBase } from '../../db/Models/subscription/service-payment-method';\nimport { PaymentMethodBrandEnum } from './payment-method-brand.enum';\nimport { ServicePaymentMethodCardBrandEnum } from '../../db/Enums/subscription/service-payment-method-card-brand.enum';\nimport { ServicePaymentMethodTypeEnum } from '../../db/Enums/subscription/service-payment-method-type.enum';\n\nexport class ServicePaymentMethod extends ServicePaymentMethodBase {\n get logo(): string {\n if (!this.isCard()) {\n return null;\n }\n\n return `/assets/img/payment-methods/${this.cardBrand}.svg`\n }\n\n get brandName(): string {\n return this.isCard() ? PaymentMethodBrandEnum[ServicePaymentMethodCardBrandEnum[this.cardBrand]] : 'BECS Direct Debit (AU)';\n }\n\n /**\n * Get expiration date formatted string (MM/YY)\n */\n get expirationDate(): string {\n if (!this.isCard()) {\n return null;\n }\n\n return `${('0' + this.cardExpirationMonth).slice(-2)}/${this.cardExpirationYear.toString().slice(-2)}`;\n }\n\n get description(): string {\n return `${this.brandName} ***${this.lastFourDigits}`;\n }\n\n isCard(): boolean {\n return this.type === ServicePaymentMethodTypeEnum.CARD;\n }\n}\n","/**\n * Enum with icon-names related to tank roles\n */\nexport enum ServiceProductIconsEnum {\n ROLE_USER_WORK = 'icon-case',\n ROLE_USER_PROPERTY = 'icon-property',\n ROLE_USER_SOLE = 'icon-sole-tank',\n ROLE_USER_HOLDING = 'icon-holding-tank'\n}\n","import { UserRolesEnum } from '../../db/Enums/user-roles.enum';\n\n/**\n * List of user roles related to tanks (subscription products)\n */\nexport const SERVICE_PRODUCT_ROLES: UserRolesEnum[] = [\n UserRolesEnum.WORK_TANK,\n UserRolesEnum.PROPERTY_TANK,\n UserRolesEnum.SOLE_TANK,\n UserRolesEnum.HOLDING_TANK\n];\n","import { SoleBusinessAllocation as SoleBusinessAllocationBase } from '../../db/Models/sole/sole-business-allocation';\nimport { BankAccount } from '../bank/bank-account';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { SoleBusiness } from './sole-business';\n\nexport class SoleBusinessAllocation extends SoleBusinessAllocationBase {\n @Type(() => BankAccount)\n bankAccount: BankAccount;\n\n @Type(() => SoleBusiness)\n business: SoleBusiness;\n\n @Transform(({ value }) => isNaN(value) ? 100 : value)\n @Expose() percent: number;\n}\n","import { SoleBusinessLossOffsetRule as SoleBusinessLossOffsetRuleBase } from '../../db/Models/sole/sole-business-loss-offset-rule';\nimport {Type} from 'class-transformer';\n\nexport class SoleBusinessLossOffsetRule extends SoleBusinessLossOffsetRuleBase {\n @Type(() => SoleBusinessLossOffsetRule)\n parent: SoleBusinessLossOffsetRule;\n}\n","import { SoleBusinessLoss as SoleBusinessLossBase } from '../../db/Models/sole/sole-business-loss';\nimport { SoleBusiness } from './sole-business';\nimport { Type } from 'class-transformer';\nimport { SoleBusinessLossOffsetRule } from './sole-business-loss-offset-rule';\nimport { FinancialYear } from '../financial-year/financial-year';\n\n/**\n * If a sole trader business makes a tax loss in a current year, you can generally carry forward that loss and offset profit in future years.\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4641357930/Rules+when+a+business+makes+a+loss+Tax+Summary#Offsetting-current-year-business-losses\n */\nexport class SoleBusinessLoss extends SoleBusinessLossBase {\n @Type(() => SoleBusiness)\n business: SoleBusiness;\n\n @Type(() => SoleBusinessLossOffsetRule)\n offsetRule: SoleBusinessLossOffsetRule;\n\n openBalance = 0;\n financialYear: number = new FinancialYear().year;\n\n get hasOffset(): boolean {\n return !!this.offsetRule;\n }\n}\n","import {SoleInvoiceItem as SoleInvoiceItemBase} from '../../db/Models/sole/sole-invoice-item';\nimport {SoleInvoice} from './sole-invoice';\nimport {ChartAccounts} from '../chart-accounts';\nimport {Type} from 'class-transformer';\nimport {Transaction} from '../transaction';\n\nexport class SoleInvoiceItem extends SoleInvoiceItemBase {\n @Type(() => SoleInvoice)\n invoice: SoleInvoice;\n\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n\n @Type(() => Transaction)\n transaction: Transaction;\n\n isGST = false;\n\n get totalPrice(): number {\n return this.price * this.quantity;\n }\n}\n","import { SoleContact as SoleContactBase } from '../../db/Models/sole/sole-contact';\nimport { User } from '../user';\nimport { Address } from '../address';\nimport { Phone } from '../phone/phone';\nimport { SoleInvoice } from './sole-invoice';\nimport { Type } from 'class-transformer';\nimport { AppFile } from '../file';\n\n// @TODO Alex/Vik: Create some base class for User and SoleContact with common methods and properties\nexport class SoleContact extends SoleContactBase {\n @Type(() => User)\n user: User;\n\n @Type(() => Phone)\n phone: Phone;\n\n @Type(() => Address)\n address: Address;\n\n @Type(() => SoleInvoice)\n invoices: SoleInvoice[];\n\n @Type(() => AppFile)\n file: AppFile;\n\n get fullName(): string {\n return `${this.firstName} ${this.lastName}`;\n }\n}\n","export enum SoleInvoiceStatusesEnum {\n\tCANCELED = 0,\n\tDRAFT = 1,\n\tPENDING = 2,\n\tPAID = 3,\n\tPAID_CASH = 4\n}\n","export enum SoleInvoiceTaxTypeEnum {\n TAX_EXCLUSIVE = 0,\n TAX_INCLUSIVE = 1,\n NO_TAX = 2,\n}\n","import {SoleInvoice as SoleInvoiceBase} from '../../db/Models/sole/sole-invoice';\nimport {User} from '../user';\nimport {SoleBusiness} from './sole-business';\nimport {SoleInvoiceItem} from './sole-invoice-item';\nimport {SoleContact} from './sole-contact';\nimport {Type} from 'class-transformer';\nimport {SoleInvoiceStatusesEnum} from '../../db/Enums/sole-invoice-statuses.enum';\nimport {BankAccount} from '../bank';\nimport {SoleInvoiceTaxTypeEnum} from '../../db/Enums/sole-invoice-tax-type.enum';\nimport {Collection, SoleInvoiceItemCollection} from '../../collections';\nimport {ChartAccounts} from '../chart-accounts';\nimport round from 'lodash/round';\n\nexport class SoleInvoice extends SoleInvoiceBase {\n static NUMBER_LENGTH = 4;\n\n @Type(() => Date)\n dateFrom: Date;\n\n @Type(() => Date)\n dateTo: Date;\n\n @Type(() => User)\n user: User;\n\n @Type(() => SoleBusiness)\n business: SoleBusiness;\n\n @Type(() => SoleInvoiceItem)\n items: SoleInvoiceItem[];\n\n @Type(() => SoleContact)\n payer: SoleContact;\n\n @Type(() => BankAccount)\n bankAccount: BankAccount;\n\n status: SoleInvoiceStatusesEnum = SoleInvoiceStatusesEnum.DRAFT;\n taxType: SoleInvoiceTaxTypeEnum = SoleInvoiceTaxTypeEnum.NO_TAX;\n\n /**\n * Get items array as collection\n */\n get itemsCollection(): SoleInvoiceItemCollection {\n return new SoleInvoiceItemCollection(this.items);\n }\n\n /**\n * Total price of all items\n */\n private get price(): number {\n return this.itemsCollection.sumBy('totalPrice');\n }\n\n /**\n * Total invoice price without GST\n */\n get netPrice(): number {\n if (this.isTaxInclusive()) {\n return this.price - this.GSTAmount;\n }\n\n return this.price;\n }\n\n /**\n * Total final price (net + GST)\n */\n get grossPrice(): number {\n if (this.isTaxExclusive()) {\n return this.price + this.GSTAmount;\n }\n\n return this.price;\n }\n\n /**\n * Total GST amount\n */\n get GSTAmount(): number {\n switch (this.taxType) {\n case SoleInvoiceTaxTypeEnum.TAX_INCLUSIVE:\n return this.inclusiveGSTAmount;\n case SoleInvoiceTaxTypeEnum.TAX_EXCLUSIVE:\n return this.exclusiveGSTAmount;\n case SoleInvoiceTaxTypeEnum.NO_TAX:\n return 0;\n }\n }\n\n /**\n * When tax inclusive, GST amount is included to total price\n */\n private get inclusiveGSTAmount(): number {\n const gstPrice = this.itemsCollection.gstPrice;\n\n return round(gstPrice - (gstPrice / (1 + ChartAccounts.GSTRatio)), 2);\n }\n\n /**\n * When tax exclusive, GST amount should be added additionally to total price\n */\n private get exclusiveGSTAmount(): number {\n return round(this.itemsCollection.gstPrice * ChartAccounts.GSTRatio, 2)\n }\n\n isDraft(): boolean {\n return this.status === SoleInvoiceStatusesEnum.DRAFT;\n }\n\n isCancelled(): boolean {\n return this.status === SoleInvoiceStatusesEnum.CANCELED;\n }\n\n isPending(): boolean {\n return this.status === SoleInvoiceStatusesEnum.PENDING;\n }\n\n isPaid(): boolean {\n return this.status === SoleInvoiceStatusesEnum.PAID;\n }\n\n isPaidCash(): boolean {\n return this.status === SoleInvoiceStatusesEnum.PAID_CASH;\n }\n\n isOverdue(): boolean {\n return this.isPending() && this.dateTo < new Date();\n }\n\n isUnpaid(): boolean {\n return this.isPending() && this.dateTo >= new Date();\n }\n\n /**\n * GST is not available for invoices without taxes\n */\n isNoTax(): boolean {\n return this.taxType === SoleInvoiceTaxTypeEnum.NO_TAX;\n }\n\n /**\n * GST amount is not included in items prices for invoices with tax exclusive,\n * we should add GST amount additionaly to subtotal price to get total price\n */\n isTaxExclusive(): boolean {\n return this.taxType === SoleInvoiceTaxTypeEnum.TAX_EXCLUSIVE;\n }\n\n /**\n * GST amount already included in items prices for invoices with tax inclusive,\n * we should subtract GST amount from total price to get subtotal price\n */\n isTaxInclusive(): boolean {\n return this.taxType === SoleInvoiceTaxTypeEnum.TAX_INCLUSIVE;\n }\n\n getNumber(): string {\n return String(this.number).padStart(SoleInvoice.NUMBER_LENGTH, '0');\n }\n\n get name(): string {\n return `invoice-${this.getNumber()}.pdf`;\n }\n\n getTransactionsIds(): number[] {\n return new Collection(this.items).mapBy('transaction.id');\n }\n}\n","export enum SoleInvoiceTemplateTaxTypeEnum {\n TAX_EXCLUSIVE = 0,\n TAX_INCLUSIVE = 1,\n NO_TAX = 2,\n}\n","import { SoleBusiness } from './sole-business';\nimport { BankAccount } from '../bank';\nimport { SoleInvoiceTemplate as SoleInvoiceTemplateBase } from '../../db/Models/sole/sole-invoice-template';\nimport { Type } from 'class-transformer';\nimport { SoleInvoiceTemplateTaxTypeEnum } from '../../db/Enums/sole-invoice-template-tax-type.enum';\n\nexport class SoleInvoiceTemplate extends SoleInvoiceTemplateBase {\n @Type(() => SoleBusiness)\n business: SoleBusiness;\n\n @Type(() => BankAccount)\n bankAccount: BankAccount;\n\n /**\n * Affects to SoleInvoiceItem.isGST flag availability.\n * When NONE: isGST is unavailable\n * When EXCLUSIVE: GST amount added additionaly to invoice total price\n * When INCLUSIVE: GST amount is already included to invoice total price\n */\n taxType: SoleInvoiceTemplateTaxTypeEnum = SoleInvoiceTemplateTaxTypeEnum.NO_TAX;\n\n /**\n * Get term duration in milliseconds\n */\n get termTime(): number {\n return this.term * 24 * 3600 * 1000;\n }\n}\n","import { VehicleLogbook as VehicleLogbookBase } from '../../db/Models/vehicle/vehicle-logbook';\nimport { Type } from 'class-transformer';\nimport { SoleBusiness } from '../sole';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\n\nexport class VehicleLogbook extends VehicleLogbookBase {\n @Type(() => Date)\n date: Date;\n\n @Type(() => SoleBusiness)\n business: SoleBusiness;\n\n get kilometers(): number {\n return this.odometerEnd - this.odometerStart;\n }\n\n get tankType(): TankTypeEnum {\n return this.isSoleTank() ? TankTypeEnum.SOLE : TankTypeEnum.WORK;\n }\n\n isWorkTank(): boolean {\n return !this.business;\n }\n\n isSoleTank(): boolean {\n return !!this.business;\n }\n}\n","import { Vehicle as VehicleBase } from '../../db/Models/vehicle/vehicle';\nimport { VehicleLogbook } from './vehicle-logbook';\nimport { Type } from 'class-transformer';\n\nexport class Vehicle extends VehicleBase {\n @Type(() => VehicleLogbook)\n logbook: VehicleLogbook[];\n}\n","export enum VehicleClaimDetailsMethodEnum {\n\tKMS = 1,\n\tLOGBOOK = 2,\n}\n","import { VehicleClaimDetails as VehicleClaimDetailsBase } from '../../db/Models/vehicle/vehicle-claim-details';\nimport { Type } from 'class-transformer';\nimport { User } from '../user/user';\nimport { VehicleClaimDetailsMethodEnum } from '../../db/Enums/vehicle-claim-details-method.enum';\nimport { FinancialYear } from '../financial-year/financial-year';\n\nexport class VehicleClaimDetails extends VehicleClaimDetailsBase {\n /**\n * Init default values for the new instances\n */\n isManual = true;\n method: VehicleClaimDetailsMethodEnum = VehicleClaimDetailsMethodEnum.KMS;\n financialYear: number = new FinancialYear().year;\n\n @Type(() => User)\n user: User;\n\n isLogbookMethod(): boolean {\n return this.method === VehicleClaimDetailsMethodEnum.LOGBOOK;\n }\n\n isKmsMethod(): boolean {\n return this.method === VehicleClaimDetailsMethodEnum.KMS;\n }\n}\n","import { VehicleClaim as VehicleClaimBase } from '../../db/Models/vehicle/vehicle-claim';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { Type } from 'class-transformer';\nimport { TransactionCollection } from '../../collections';\nimport { VehicleClaimDetails } from './vehicle-claim-details';\nimport { SoleBusiness } from '../sole';\nimport { FinancialYear } from '../financial-year';\nimport round from 'lodash/round';\n\nexport class VehicleClaim extends VehicleClaimBase {\n /**\n * limit for kms claim method\n */\n static totalKmsLimit = 5000;\n\n /**\n * limit for work usage claim method\n */\n static totalWorkUsagePercent = 100;\n\n @Type(() => VehicleClaimDetails)\n details: VehicleClaimDetails;\n\n @Type(() => SoleBusiness)\n business: SoleBusiness;\n\n kilometers = 0;\n workUsage = 0;\n\n isWorkTank(): boolean {\n return !this.business;\n }\n\n isSoleTank(): boolean {\n return !!this.business;\n }\n\n get tankType(): TankTypeEnum {\n return this.isSoleTank() ? TankTypeEnum.SOLE : TankTypeEnum.WORK;\n }\n\n /**\n * Claim amount for KMs method. Exists only for KMs method.\n */\n getKMSClaimAmount(vehicleClaimRate: number): number {\n return round(this.kilometers * vehicleClaimRate, 2);\n }\n\n /**\n * Get logbook claim amount. Exists only for logbook method.\n * ClaimAmount = WorkUsage * transaction/depreciation amount\n */\n getLogbookClaimAmount(transactions: TransactionCollection): number {\n\n const transactionsAmount: number = transactions\n .getByVehicleClaim(this)\n .getLogbookTransactions()\n .sumBy('amount');\n\n // Math.abs because amount will be negative (because we sum expenses), but we don't want negative percent value\n return Math.abs(transactionsAmount) * this.workUsage / 100;\n }\n\n getAverageWeeklyKMS(): number {\n return this.kilometers / FinancialYear.weeksInYear;\n }\n}\n","/**\n * Depreciation Nested Tree node with depreciations group\n */\nexport class DepreciationGroup {\n label: string;\n description: string;\n icon: string;\n children: DepreciationGroup[];\n totalCost: number;\n openingValue: number;\n\n constructor(\n label: string,\n description?: string,\n icon?: string,\n children?: DepreciationGroup[],\n totalCost?: number,\n openingValue?: number\n ) {\n this.label = label;\n this.description = description;\n this.icon = icon;\n this.children = children;\n this.totalCost = totalCost;\n this.openingValue = openingValue;\n }\n\n getClaimAmount(): number {\n return this.children.reduce((sum: number, child: DepreciationGroup): number => sum + child.getClaimAmount(), 0);\n }\n\n getAmount(): number {\n return this.children.reduce((sum: number, child: DepreciationGroup): number => sum + child.getAmount(), 0);\n }\n}\n","import { DepreciationGroup } from './depreciation-group';\nimport { Depreciation } from './depreciation';\n\n/**\n * @TODO Alex useless class, use parent instead\n * Depreciation Tree node with depreciation details\n */\nexport class DepreciationGroupItem extends DepreciationGroup {\n depreciation: Depreciation;\n\n constructor(\n depreciation: Depreciation\n ) {\n super(depreciation.chartAccounts.name, depreciation.description, 'property');\n this.depreciation = depreciation;\n }\n\n getClaimAmount(): number {\n return this.depreciation.currentYearForecast.claimAmount;\n }\n\n getAmount(): number {\n return this.depreciation.currentYearForecast.amount;\n }\n}\n","export enum DepreciationGroupEnum {\n BUILDING_IMPROVEMENTS,\n PLANT_EQUIPMENT,\n LOW_VALUE_POOL,\n WRITTEN_OFF_ITEMS,\n BORROWING_EXPENSES,\n SMALL_BUSINESS_POOL\n}\n","import { DepreciationGroupEnum } from './depreciation-group.enum';\n\ninterface DepreciationGroup {\n label: string;\n description: string;\n icon: string;\n}\n\nexport const DEPRECIATION_GROUPS: { [key: number]: DepreciationGroup } = {\n [DepreciationGroupEnum.BORROWING_EXPENSES]: {\n label: 'Borrowing Expenses',\n description: 'Borrowing expenses on loans are deductible over 1826 days (5 years) starting from the date of a loan',\n icon: 'loan'\n },\n [DepreciationGroupEnum.BUILDING_IMPROVEMENTS]: {\n label: 'Building & Improvements',\n description: 'Construction costs, renovations and capital improvements which depreciate at 2.5%',\n icon: 'building-improvements'\n },\n [DepreciationGroupEnum.PLANT_EQUIPMENT]: {\n label: 'Plant & Equipment',\n description: 'Assets which decline in value over their useful life (as prescribed by the ATO)',\n icon: 'plant-equipment'\n },\n [DepreciationGroupEnum.LOW_VALUE_POOL]: {\n label: 'Low Value Pool',\n description: 'Items under $1,000 are added to the pool to maximise depreciation',\n icon: 'lvp'\n },\n [DepreciationGroupEnum.WRITTEN_OFF_ITEMS]: {\n label: 'Written Off Items',\n description: 'Items below $300, replaced or obsolete are fully deductible',\n icon: 'cart'\n },\n [DepreciationGroupEnum.SMALL_BUSINESS_POOL]: {\n label: 'Small business pool',\n description: 'The small business pool allows business owners to claim depreciation on plant and equipment items at an accelerated rate.',\n icon: 'portfolio'\n },\n};\n","/**\n * Depreciation Low Value Pool rate based on asset financial year (current or subsequent years).\n */\nexport enum DepreciationLvpRateEnum {\n FIRST_YEAR = 0.1875,\n DEFAULT = 0.375,\n}\n","import { SoleBusiness as SoleBusinessBase } from '../../db/Models/sole/sole-business';\nimport { User } from '../user';\nimport { SoleBusinessAllocation } from './sole-business-allocation';\nimport { SoleBusinessLoss } from './sole-business-loss';\nimport { SoleInvoice } from './sole-invoice';\nimport { SoleInvoiceTemplate } from './sole-invoice-template';\nimport { Transform, Type } from 'class-transformer';\nimport { VehicleClaim } from '../vehicle';\nimport { Depreciation } from '../depreciation';\nimport { Transaction } from '../transaction';\nimport { SoleBusinessActivity } from '../../db/Models';\nimport { IncomeSource } from '../income-source';\nimport { AppFile } from '../file';\n\nexport class SoleBusiness extends SoleBusinessBase {\n /**\n * Maximum number of businesses that a person can have, according to the ATO\n */\n static businessesLimit = 6;\n\n @Type(() => User)\n user: User;\n\n @Type(() => SoleBusinessAllocation)\n allocations: SoleBusinessAllocation[];\n\n @Type(() => SoleBusinessLoss)\n losses: SoleBusinessLoss[];\n\n @Type(() => SoleInvoice)\n invoices: SoleInvoice[];\n\n @Type(() => SoleInvoiceTemplate)\n invoiceTemplates: SoleInvoiceTemplate[];\n\n @Type(() => VehicleClaim)\n vehicleClaims: VehicleClaim[];\n\n @Type(() => Transaction)\n transactions: Transaction[];\n\n @Type(() => Depreciation)\n depreciations: Depreciation[];\n\n @Type(() => SoleBusinessActivity)\n activity: SoleBusinessActivity;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n @Transform(({ value }) => value || false)\n isPrimaryProduction: boolean;\n\n @Type(() => AppFile)\n file: AppFile;\n}\n","import { SoleBusinessActivity as SoleBusinessActivityBase } from '../../db/Models/sole/sole-business-activity';\n\nexport class SoleBusinessActivity extends SoleBusinessActivityBase {\n\n}\n","export enum SoleDepreciationMethodEnum {\n SBP = 1,\n DEPRECIATION = 2,\n}\n","import { SoleDepreciationMethod as SoleDepreciationMethodBase } from '../../db/Models/sole/sole-depreciation-method';\nimport { SoleDepreciationMethodEnum } from '../../db/Enums/sole-depreciation-method.enum';\n\nexport class SoleDepreciationMethod extends SoleDepreciationMethodBase {\n isSBP(): boolean {\n return this.method === SoleDepreciationMethodEnum.SBP;\n }\n}\n","import { SoleDetails as SoleDetailsBase } from '../../db/Models/sole/sole-details';\nimport { User } from '../user/user';\nimport { Type } from 'class-transformer';\n\nexport class SoleDetails extends SoleDetailsBase {\n @Type(() => User)\n user: User;\n}\n","import { BasReport as BasReportBase } from '../../db/Models/sole/bas-report';\nimport { Type } from 'class-transformer';\n\nexport class BasReport extends BasReportBase {\n @Type(() => Date)\n dateFrom: Date;\n\n @Type(() => Date)\n dateTo: Date;\n\n get taxWithheldTotal(): number {\n return this.taxWithheldSalary + this.taxWithheldNoABN;\n }\n\n get paygTaxInstalmentOwedToATO(): number {\n return this.paygTaxInstalment > 0 ? this.paygTaxInstalment : 0;\n }\n\n get paygTaxInstalmentOwedByATO(): number {\n return this.paygTaxInstalment < 0 ? Math.abs(this.paygTaxInstalment) : 0;\n }\n\n get fuelTaxCreditOwedToATO(): number {\n return this.fuelTaxCredit < 0 ? this.fuelTaxCredit : 0;\n }\n\n get fuelTaxCreditOwedByATO(): number {\n return this.fuelTaxCredit > 0 ? Math.abs(this.fuelTaxCredit) : 0;\n }\n\n get owesToATO(): number {\n return this.incomeGST + this.taxWithheldTotal + this.paygTaxInstalmentOwedToATO + this.fuelTaxCreditOwedToATO;\n }\n\n get owedByATO(): number {\n return this.expenseGST + this.paygTaxInstalmentOwedByATO + this.fuelTaxCreditOwedByATO;\n }\n\n /**\n * GST payable to the ATO, or refundable from the ATO in case it's negative\n */\n get gst(): number {\n return this.incomeGST + this.expenseGST + this.taxWithheldTotal + this.paygTaxInstalment - this.fuelTaxCredit;\n }\n}\n","import { SetupItemTypeEnum } from '../Enums/setup-item-type.enum';\nimport { UserRolesEnum } from '../Enums/user-roles.enum';\nimport { AbstractModel } from './abstract-model';\n\nexport class SetupItem extends AbstractModel {\n\ttype?: SetupItemTypeEnum;\n\ttitle?: string;\n\tdescription?: string;\n\turl?: string;\n\turlFragment?: string;\n\troles?: UserRolesEnum;\n}\n","/**\n * Enum list of all possible account setup items ids. Using with [ACCOUNT_SETUP_ITEMS]{@link ACCOUNT_SETUP_ITEMS}\n * @TODO Vik/Nikita: Do we need to generate it from backend? If some ids changed?\n */\nexport enum AccountSetupItemsEnum {\n SALARY = 1,\n OTHER_INCOME = 2,\n PROPERTY = 3,\n BANK_FEEDS = 4,\n WORK_LOGBOOK = 5,\n TRANSACTION_ALLOCATE = 6,\n SOLE_BUSINESS = 7,\n HOLDINGS = 8,\n FIRM_DETAILS = 9,\n INVITE_TEAM = 10,\n INVITE_CLIENTS = 11\n}\n","import { SetupItem } from '../../db/Models/setup-item';\nimport { AccountSetupItemsEnum } from './account-setup-items.enum';\n\nexport class AccountSetupItem extends SetupItem {\n isCompleted: boolean;\n\n get isSalary(): boolean {\n return this.id === AccountSetupItemsEnum.SALARY;\n }\n\n get isOtherIncome(): boolean {\n return this.id === AccountSetupItemsEnum.OTHER_INCOME;\n }\n\n get isProperty(): boolean {\n return this.id === AccountSetupItemsEnum.PROPERTY;\n }\n\n get isBankFeeds(): boolean {\n return this.id === AccountSetupItemsEnum.BANK_FEEDS;\n }\n\n get isWorkLogbook(): boolean {\n return this.id === AccountSetupItemsEnum.WORK_LOGBOOK;\n }\n\n get isTransactionAllocate(): boolean {\n return this.id === AccountSetupItemsEnum.TRANSACTION_ALLOCATE;\n }\n\n get isSoleBusiness(): boolean {\n return this.id === AccountSetupItemsEnum.SOLE_BUSINESS;\n }\n \n get isHoldings(): boolean {\n return this.id === AccountSetupItemsEnum.HOLDINGS;\n }\n\n get isFirmDetails(): boolean {\n return this.id === AccountSetupItemsEnum.FIRM_DETAILS;\n }\n\n get isInviteTeam(): boolean {\n return this.id === AccountSetupItemsEnum.INVITE_TEAM;\n }\n\n get isInviteClients(): boolean {\n return this.id === AccountSetupItemsEnum.INVITE_CLIENTS;\n }\n}\n","import { User as BaseUser } from '../../db/Models/user/user';\nimport { UserStatusEnum } from '../../db/Enums/user-status.enum';\nimport { UserRolesEnum } from '../../db/Enums/user-roles.enum';\nimport { Address } from '../address';\nimport { USER_WORK_POSITION } from './user-work-position.const';\nimport { ClientDetails } from '../client';\nimport { EmployeeDetails } from '../employee/employee-details';\nimport { Type } from 'class-transformer';\nimport { Phone } from '../phone/phone';\nimport { ServiceSubscription } from '../service-subscription';\nimport { ServiceSubscriptionItem } from '../service-subscription';\nimport { SoleDetails } from '../sole';\nimport intersection from 'lodash/intersection';\nimport flatten from 'lodash/flatten';\nimport { USER_ROLES } from './user-roles.const';\nimport { FinancialYear } from '../financial-year';\nimport { AppFile } from '../file';\nimport range from 'lodash/range';\nimport { MpTrackableInterface } from '../../interfaces';\nimport { AccountSetupItem } from '../account-setup/account-setup-item';\n\nexport class User extends BaseUser implements MpTrackableInterface {\n @Type(() => ServiceSubscription)\n subscriptions: ServiceSubscription[];\n\n @Type(() => ClientDetails)\n clientDetails: ClientDetails;\n\n @Type(() => EmployeeDetails)\n employeeDetails: EmployeeDetails;\n\n @Type(() => SoleDetails)\n soleDetails: SoleDetails;\n\n @Type(() => Address)\n address: Address;\n\n @Type(() => Phone)\n phone: Phone;\n\n @Type(() => Date)\n createdAt: Date;\n\n // @TODO Alex remove this hack\n @Type(() => User)\n clients: User[];\n\n @Type(() => AppFile)\n file: AppFile;\n\n @Type(() => AccountSetupItem)\n blacklistSetupItems: AccountSetupItem[] = [];\n\n get fullName(): string {\n return `${this.firstName} ${this.lastName}`;\n }\n\n get activeSubscription(): ServiceSubscription {\n return this.subscriptions.find((ss: ServiceSubscription): boolean => ss.isActive);\n }\n\n get lastSubscription(): ServiceSubscription {\n return this.subscriptions[this.subscriptions.length - 1];\n }\n\n /**\n * @TODO refactor\n *\n */\n get position(): string {\n switch (true) {\n case this.isFirmOwner():\n return USER_WORK_POSITION[UserRolesEnum.FIRM_OWNER];\n case this.isManager():\n return USER_WORK_POSITION[UserRolesEnum.FIRM_MANAGER];\n case this.isEmployee():\n return USER_WORK_POSITION[UserRolesEnum.EMPLOYEE];\n default:\n return '';\n }\n }\n\n /**\n * search roles including hierarchy\n */\n hasRoles(roles: UserRolesEnum | UserRolesEnum[]): boolean {\n roles = roles instanceof Array ? roles : [roles];\n if (!roles.length) {\n return true;\n }\n\n roles = flatten(roles.map((role) => USER_ROLES[role]));\n return !!intersection(this.roles, roles).length;\n }\n\n isOnboarding(): boolean {\n return this.status === UserStatusEnum.ON_BOARDING;\n }\n\n isInactive(): boolean {\n return this.status === UserStatusEnum.INACTIVE;\n }\n\n hasSubscription(): boolean {\n return this.roles.includes(UserRolesEnum.SUBSCRIPTION);\n }\n\n isLoggedIn(): boolean {\n return this.id === +localStorage.getItem('userId');\n }\n\n isClient(): boolean {\n return this.roles.includes(UserRolesEnum.CLIENT);\n }\n\n isEmployee(): boolean {\n return this.isAccountant() || this.isAdvisor();\n }\n\n isAccountant(): boolean {\n return this.roles.includes(UserRolesEnum.ACCOUNTANT);\n }\n\n isAdvisor(): boolean {\n return this.roles.includes(UserRolesEnum.ADVISOR);\n }\n\n isImpersonator(): boolean {\n return this.roles.includes(UserRolesEnum.SWITCH_USER);\n }\n\n /**\n * Check if current user is firm owner\n */\n isFirmOwner(): boolean {\n return this.roles.includes(UserRolesEnum.FIRM_OWNER);\n }\n\n /**\n * Check if current user is firm manager\n */\n isManager(): boolean {\n return this.roles.includes(UserRolesEnum.FIRM_MANAGER) || this.roles.includes(UserRolesEnum.FIRM_OWNER);\n }\n\n /**\n * check if user has property tank access\n */\n hasPropertyTank(): boolean {\n return this.roles ?\n this.roles.includes(UserRolesEnum.PROPERTY_TANK) :\n !!this.getSubscriptionRole(UserRolesEnum.PROPERTY_TANK);\n }\n\n /**\n * check if user has property tank access\n */\n hasWorkTank(): boolean {\n return this.roles ?\n this.roles.includes(UserRolesEnum.WORK_TANK) :\n !!this.getSubscriptionRole(UserRolesEnum.WORK_TANK);\n }\n\n /**\n * Get user subscription role by provided role type\n * @param roleType by which role should be returned\n */\n getSubscriptionRole(roleType: UserRolesEnum): ServiceSubscriptionItem {\n /**\n * Add @TODO for Alex to check if we should use getLastSubscription here\n */\n return this.activeSubscription?.items\n .find((subscriptionItem: ServiceSubscriptionItem) => subscriptionItem.price.product.role.includes(roleType));\n }\n\n isCurrentFinancialYear(): boolean {\n return new FinancialYear(new Date()).year === this.financialYear;\n }\n\n /**\n * financial years available in the app for user\n * starts from 2022 for new users and registeredYear - 1 for old users\n */\n get financialYears(): number {\n return range(\n Math.min(FinancialYear.toFinYear(this.createdAt) - 1, 2022),\n FinancialYear.toFinYear(new Date()) + 1\n );\n }\n\n getMpData() {\n return {\n clientDetails: {}\n }\n }\n}\n\n","import { PropertySubscription as PropertySubscriptionBase } from '../../db/Models/property/property-subscription';\nimport { Type } from 'class-transformer';\nimport { User } from '../user';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class PropertySubscription extends PropertySubscriptionBase {\n @Type(() => Date)\n createdAt: Date;\n\n @Type(() => User)\n user: User;\n}\n","export enum PropertyCategoryListEnum {\n\tOWNER_OCCUPIED = 3,\n SHARED = 4,\n\tVACANT_LAND = 5,\n}\n","import { PropertyCategory as PropertyCategoryBase } from '../../db/Models/property/property-category';\nimport { PropertyCategoryListEnum } from '../../db/Enums/property/property-category-list.enum';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class PropertyCategory extends PropertyCategoryBase implements MpTrackableInterface {\n // @Todo check if category is Owner Occupied. If will be needed to check more categories - move the checking to the backend\n isOwnerOccupied(): boolean {\n return this.id === PropertyCategoryListEnum.OWNER_OCCUPIED;\n }\n\n isVacantLand(): boolean {\n return this.id === PropertyCategoryListEnum.VACANT_LAND;\n }\n\n isShared(): boolean {\n return this.id === PropertyCategoryListEnum.SHARED;\n }\n\n getMpData() {\n return {\n 'Name': this.name\n };\n }\n}\n","import { PropertyDocument as PropertyDocumentBase } from '../../db/Models/document/property-document';\nimport { DocumentInterface } from '../../interfaces';\nimport { Property } from './property';\nimport { Type } from 'class-transformer';\nimport { AppFile } from '../file';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class PropertyDocument extends PropertyDocumentBase implements DocumentInterface, MpTrackableInterface {\n @Type(() => Property)\n property: Property;\n\n @Type(() => AppFile)\n file: AppFile;\n\n get parent(): Property {\n return this.property;\n }\n\n getMpData(property: Property) {\n return {\n 'Property': property.name\n }\n }\n}\n","import { PropertyValuation as PropertyValuationBase } from '../../db/Models/property/property-valuation';\nimport { Type } from 'class-transformer';\nimport { PropertyDocument } from './property-document';\nimport { FinancialYear } from '../financial-year';\nimport { MpTrackableInterface } from '../../interfaces';\nimport { Property } from './property';\n\nexport class PropertyValuation extends PropertyValuationBase implements MpTrackableInterface {\n @Type(() => Date)\n date: Date;\n\n @Type(() => PropertyDocument)\n document: PropertyDocument;\n\n @Type(() => Number)\n marketValue: number\n\n get financialYear(): number {\n return new FinancialYear(this.date).year;\n }\n\n isCurrentYear(): boolean {\n return this.financialYear === new FinancialYear(new Date()).year;\n }\n\n getMpData(property: Property) {\n return {\n 'Property': property.name,\n 'Date': this.date\n };\n }\n}\n","import { PropertyForecast as PropertyForecastBase } from '../../db/Models/property/property-forecast';\nimport { MpTrackableInterface } from '../../interfaces';\nimport { FinancialYear } from '../financial-year';\nimport { Transform } from 'class-transformer';\nimport { Property } from './property';\n\nexport class PropertyForecast extends PropertyForecastBase implements MpTrackableInterface {\n @Transform(({ value }) => +value)\n income: number;\n\n @Transform(({ value }) => -Math.abs(+value))\n expense: number;\n\n @Transform(({ value }) => -Math.abs(+value))\n interest: number;\n\n @Transform(({ value }) => -Math.abs(+value))\n depreciation: number;\n\n @Transform(({ value }) => +value)\n loanBalance: number;\n\n @Transform(({ value }) => +value)\n marketValue: number;\n\n financialYear: number = new FinancialYear(new Date()).year;\n\n /**\n * Get cash position\n * Cash Position = Income - Expense - Interest\n */\n get cashPosition(): number {\n return this.income + this.expense + this.interest;\n }\n\n\n /**\n * Get tax position\n * Tax Position = Income - Expense - Interest - Depreciation\n */\n get taxPosition(): number {\n return this.cashPosition + this.depreciation;\n }\n\n /**\n * Get rental return percent\n * Rental Return = Income / Market Value\n */\n get rentalReturn(): number {\n return this.income / this.marketValue;\n }\n\n /**\n * Check if forecast is for real current fin year (not selected in the sidebar)\n */\n isCurrentYear(): boolean {\n return this.financialYear === new FinancialYear(new Date()).year;\n }\n\n getMpData(property: Property) {\n return {\n 'Property': property.name,\n 'Financial Year': this.financialYear,\n };\n }\n}\n","import { PropertyCategoryMovement as PropertyCategoryMovementBase } from '../../db/Models/property/property-category-movement';\nimport { Type } from 'class-transformer';\nimport { PropertyValuation } from './property-valuation';\nimport { PropertyCategory } from './property-category';\nimport { MpTrackableInterface } from '../../interfaces';\nimport { Property } from './property';\n\nexport class PropertyCategoryMovement extends PropertyCategoryMovementBase implements MpTrackableInterface {\n @Type(() => PropertyValuation)\n valuation: PropertyValuation;\n\n @Type(() => PropertyCategory)\n propertyCategory: PropertyCategory;\n\n @Type(() => Date)\n fromDate: Date;\n\n @Type(() => Date)\n toDate: Date;\n\n getMpData(property: Property) {\n return {\n 'Property': property.name,\n 'Category': this.propertyCategory.name\n };\n }\n}\n","import { Property as PropertyBase } from '../../db/Models/property/property';\nimport { PropertyShare } from '../../db/Models';\nimport { PropertySubscription } from './property-subscription';\nimport { Exclude, Type } from 'class-transformer';\nimport { Address } from '../address';\nimport { PropertyCategory } from './property-category';\nimport { PropertyValuation } from './property-valuation';\nimport { PropertyForecast } from './property-forecast';\nimport { PropertyCategoryMovement } from './property-category-movement';\nimport { User } from '../user';\nimport { FinancialYear } from '../financial-year';\nimport { TaxExemptionEnum } from '../../db/Enums/property/property-sale/tax-exemption.enum';\nimport { PropertyCategoryListEnum } from '../../db/Enums/property/property-category-list.enum';\nimport moment from 'moment';\nimport { PropertySale } from './property-sale';\nimport { unitOfTime } from 'moment';\nimport {\n DepreciationCollection, PropertySaleTaxExemptionMetaFieldCollection, TransactionCollection\n} from '../../collections';\nimport round from 'lodash/round';\nimport { AppFile } from '../file';\nimport { MpTrackableInterface } from '../../interfaces';\n\n/**\n * propertySale docs - https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4209508353/Property+Sold+button\n */\nexport class Property extends PropertyBase implements MpTrackableInterface {\n /**\n * Property acquired before 20 September 1985 will generally be treated as pre-Capital Gains Tax (CGT) assets.\n * Any assets acquired before this day are CGT exempt (because the tax didn't exist before this date).\n */\n static preCGTAssetDate: Date = new Date(1985, 9, 20);\n\n @Type(() => Number)\n purchasePrice: number;\n\n @Type(() => Number)\n growthPercent: number\n\n @Type(() => Date)\n contractDate: Date;\n\n @Type(() => Date)\n settlementDate: Date;\n\n @Type(() => Address)\n address: Address;\n\n @Type(() => PropertyCategory)\n category: PropertyCategory;\n\n @Type(() => Number)\n stampDuty?: number;\n\n @Type(() => Number)\n legalFees?: number;\n\n @Type(() => Number)\n otherCapitalCosts?: number;\n\n @Type(() => PropertyValuation)\n valuations: PropertyValuation[];\n\n @Type(() => PropertyForecast)\n forecasts: PropertyForecast[];\n\n @Type(() => PropertyCategoryMovement)\n categoryMovements: PropertyCategoryMovement[];\n\n @Type(() => User)\n user: User;\n\n @Type(() => PropertySubscription)\n subscriptions: PropertySubscription[];\n\n @Type(() => AppFile)\n file: AppFile;\n\n // could be File when just added new image\n @Exclude()\n documentFile: File;\n\n get name(): string {\n return this.address.name;\n }\n\n get isActive(): boolean {\n return !!this.subscriptions?.length;\n }\n\n isOwn(): boolean {\n return this.user.id === +localStorage.getItem('userId');\n }\n\n isSold(): boolean {\n return !!this.myShare?.sale;\n }\n\n get capitalCostsTotalAmount(): number {\n return this.stampDuty + this.legalFees + this.otherCapitalCosts;\n }\n\n get currentYearValuations(): PropertyValuation[] {\n return this.valuations.filter((valuation: PropertyValuation): boolean => valuation.isCurrentYear());\n }\n\n get marketValue(): number {\n return this.actualValuation?.marketValue || 0;\n }\n\n get currentYearForecast(): PropertyForecast {\n return this.forecasts.find((forecast: PropertyForecast): boolean => forecast.isCurrentYear());\n }\n\n get forecastedRentalReturn(): number {\n return this.currentYearForecast?.rentalReturn || 0;\n }\n\n get forecastedTaxPosition(): number {\n return this.currentYearForecast?.taxPosition || 0;\n }\n\n get forecastedCashPosition(): number {\n return this.currentYearForecast?.cashPosition || 0;\n }\n\n get firstForecastYear(): number {\n return this.forecasts.reduce((min: number, forecast: PropertyForecast): number => min > forecast.financialYear ? forecast.financialYear : min, new FinancialYear().year);\n }\n\n get marketValueGrowth(): number {\n return (this.marketValue - this.purchasePrice) / this.marketValue;\n }\n\n get myShare(): PropertyShare {\n return this.shares.find((share: PropertyShare): boolean => share.user.id === +localStorage.getItem('userId'));\n }\n\n get actualValuation(): PropertyValuation {\n return this.valuations.reduce((maxDateValuation: PropertyValuation, valuation: PropertyValuation) => maxDateValuation.date > valuation.date ? maxDateValuation : valuation, this.valuations[0]);\n }\n\n get claimPercent(): number {\n return this.currentYearForecast.claimPercent;\n }\n\n get claimCoefficient(): number {\n return this.claimPercent / 100;\n }\n\n get sharePercent(): number {\n return this.myShare.percent;\n }\n\n get shareRatio(): number {\n return this.myShare.percent / 100;\n }\n\n get previousCategory(): PropertyCategory {\n let previousCategory: PropertyCategory;\n\n const movementsCount: number = this.categoryMovements.length;\n\n if (movementsCount > 1) {\n previousCategory = this.categoryMovements[movementsCount - 2].propertyCategory;\n }\n\n return previousCategory;\n }\n\n getCurrentSubscription(): PropertySubscription {\n // always return first element because subscriptions array contains only one element\n return this.subscriptions[0];\n }\n\n getForecastByYear(year: number): PropertyForecast {\n return this.forecasts.find((forecast: PropertyForecast): boolean => forecast.financialYear === year);\n }\n\n get isShared(): boolean {\n return this.shares.length > 1;\n }\n\n /**\n * @TODO consider to move methods related with propertySale to separated class, since used just in one module yet\n * purchase costs - claimed costs, except `ppr to investment` exemption,\n * in that case it's equal to market value, when property became an investment property\n */\n calculateCostBase(sale: PropertySale): number {\n const marketValue: number = new PropertySaleTaxExemptionMetaFieldCollection(sale.taxExemptionMetaFields).getMarketValue();\n if (marketValue) {\n return marketValue;\n }\n\n return this.purchasePrice + this.capitalCostsTotalAmount + sale.holdingCosts + sale.structuralImprovementsWDV - sale.buildingAtCostClaimed;\n }\n\n calculateGrossCapitalGain(sale: PropertySale): number {\n return round((sale.netPrice - this.calculateCostBase(sale)) * this.getPartialCGTExemptionRatio(sale) * this.shareRatio, 2);\n }\n\n /**\n * net capital gain includes tax exemption\n */\n calculateNetCapitalGain(sale: PropertySale): number {\n return this.getCGTExemptionRatio(sale) * sale.grossCapitalGain;\n }\n\n /**\n * guess tax exemption based on property details\n */\n getCGTExemption(sale: PropertySale): TaxExemptionEnum {\n if (sale.taxExemption) {\n return sale.taxExemption.id;\n }\n\n switch (true) {\n // exemption for main residence properties\n case this.category.id === PropertyCategoryListEnum.OWNER_OCCUPIED:\n return TaxExemptionEnum.PPR;\n // exemption for investment properties owned for at least one year\n case this.isOneYearExemptionApplicable(sale):\n return TaxExemptionEnum.ONE_YEAR_RULE;\n default:\n return null;\n }\n }\n\n getPartialCGTExemptionRatio(sale: PropertySale): number {\n const metaFields: PropertySaleTaxExemptionMetaFieldCollection = new PropertySaleTaxExemptionMetaFieldCollection(sale.taxExemptionMetaFields);\n\n switch (sale.taxExemption?.id) {\n case TaxExemptionEnum.INVESTMENT_TO_PPR:\n const ownershipDays = this.getOwnershipDuration(sale);\n return (ownershipDays - metaFields.getPPRDays()) / ownershipDays;\n case TaxExemptionEnum.PPR_TO_INVESTMENT:\n return metaFields.getClaimPercent() / 100;\n default:\n return 1;\n }\n }\n\n /**\n * tax exemption can reduce cgt from 100% to less (up to zero)\n */\n getCGTExemptionRatio(sale: PropertySale): number {\n switch (sale.taxExemption?.id) {\n // 50% exemption for investments owned for at least one year\n case TaxExemptionEnum.ONE_YEAR_RULE:\n return 0.5;\n case TaxExemptionEnum.INVESTMENT_TO_PPR:\n case TaxExemptionEnum.PPR_TO_INVESTMENT:\n return this.isOneYearExemptionApplicable(sale) ? 0.5 : 1;\n // full exemption\n case TaxExemptionEnum.PPR:\n case TaxExemptionEnum.SIX_YEARS_RULE:\n case TaxExemptionEnum.TRANSFER:\n case TaxExemptionEnum.OTHER:\n return 0;\n // no exemption\n default:\n return 1;\n }\n }\n\n /**\n * in cgt report we apply losses, which can reset 1 year rule (in case if there is no profit after loss)\n */\n isOneYearExemptionApplicable(sale: PropertySale): boolean {\n return sale.grossCapitalGain > 0 && this.getOwnershipDuration(sale, 'years') > 0;\n }\n\n /**\n * CGT is not applicable for properties acquired before 20.09.1985 (tax didn't exist before this date).\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (\"Capital gains or losses\" section)\n */\n isCGTApplicable(): boolean {\n return this.contractDate >= Property.preCGTAssetDate;\n }\n\n /**\n * ownership duration from purchase till sale\n */\n getOwnershipDuration(sale: PropertySale, unitOfTime: unitOfTime.Diff = 'days'): number {\n return moment(sale.date).diff(moment(this.contractDate), unitOfTime);\n }\n\n /**\n * Tax Position = Income - Expense - Interest - Depreciation\n * Where (Income - Expense - Interest) is cash position.\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217415928/Dashboard+Property\n */\n getTaxPosition(transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n return transactions.grossClaimAmount - Math.abs(depreciations.claimAmount);\n }\n\n get monthlyIncome(): number {\n return this.currentYearForecast.income / 12;\n }\n\n get monthlyExpense(): number {\n return this.currentYearForecast.expense / 12;\n }\n\n getMpData() {\n return {\n 'Category': this.category.name,\n 'Taxable': this.category.isTaxInclusive ? 'Yes' : 'No',\n 'Shared': this.isShared ? 'Yes' : 'No',\n 'Ownership %': `${this.myShare.percent}%`\n }\n }\n}\n","import { Property } from '../property';\nimport { PropertySale } from './property-sale';\nimport { plainToClass } from 'class-transformer';\nimport { DepreciationCollection, TransactionCollection } from '../../../collections';\n\n/**\n * @Todo TT-2143 should be removed when PropertySaleCostBaseForm refactored (cut property to separated form)\n */\nexport class PropertySaleCostBase {\n property: Property;\n sale: PropertySale;\n\n static createFrom(property: Property, propertySale: PropertySale, depreciations: DepreciationCollection, holdingCosts: TransactionCollection = new TransactionCollection()): PropertySaleCostBase {\n return plainToClass(PropertySaleCostBase, {\n property: plainToClass(Property, property),\n sale: plainToClass(PropertySale, Object.assign({}, propertySale,\n {\n holdingCosts: propertySale.holdingCosts ?? Math.abs(holdingCosts.sumBy('amount')),\n structuralImprovementsWDV: propertySale.structuralImprovementsWDV ?? depreciations.getWithCapitalProject().getCloseBalanceByYear(),\n buildingAtCostClaimed: propertySale.buildingAtCostClaimed ?? depreciations.getWithoutCapitalProject().getClaimedAmountByYear(),\n }\n )),\n })\n }\n}\n","import { PropertySaleTaxExemptionMetaField as BasePropertySaleTaxExemptionMetaField } from '../../../db/Models/property/property-sale/property-sale-tax-exemption-meta-field';\n\nexport class PropertySaleTaxExemptionMetaField extends BasePropertySaleTaxExemptionMetaField {\n}\n","import { TaxExemptionMetaField as BaseTaxExemptionMetaField } from '../../../db/Models/property/property-sale/tax-exemption-meta-field';\n\nexport class TaxExemptionMetaField extends BaseTaxExemptionMetaField {\n}\n","/**\n * Calculation form control types\n */\nexport enum CalculationFormTypeEnum {\n INPUT = 1,\n SELECT = 2,\n}\n","import { ValidatorFn } from '@angular/forms';\nimport { Expose, Transform } from 'class-transformer';\nimport { CalculationFormTypeEnum } from './calculation-form-type.enum';\n\n/**\n * Fields to implement custom calculation form\n */\nexport class CalculationFormItem {\n name: string;\n value: number | boolean;\n // label for form control\n label: string;\n // type of control (input, select, e.t.c)\n type: CalculationFormTypeEnum = CalculationFormTypeEnum.SELECT;\n // array of dependent fields for control\n dependentFields?: string[];\n // flag to check if field is disabled\n isDisabled: boolean;\n\n @Transform(({obj}) => obj.type === CalculationFormTypeEnum.SELECT)\n @Expose() isSelect: boolean;\n\n validators?: ValidatorFn[];\n}\n","import { Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { CalculationFormItem } from './calculation-form-item';\nimport { CalculationFormTypeEnum } from './calculation-form-type.enum';\n\nexport const CAPITAL_COSTS_ITEMS: CalculationFormItem[] = [\n plainToClass(CalculationFormItem, {\n name: 'rentingWholeProperty',\n value: null,\n label: 'Are you renting out the whole property?',\n type: CalculationFormTypeEnum.SELECT,\n dependentFields: ['howBigIsProperty', 'howBigIsLetArea', 'howBigIsCommonAreas'],\n isDisabled: false,\n validators: [Validators.required]\n }),\n plainToClass(CalculationFormItem, {\n name: 'rentingWholeYear',\n value: null,\n label: 'Are you renting out for the whole year?',\n type: CalculationFormTypeEnum.SELECT,\n dependentFields: ['howManyDays'],\n isDisabled: false,\n validators: [Validators.required]\n }),\n plainToClass(CalculationFormItem, {\n name: 'howBigIsProperty',\n value: null,\n label: 'How big is the property?',\n type: CalculationFormTypeEnum.INPUT,\n isDisabled: true,\n validators: [Validators.required, Validators.min(1)]\n }),\n plainToClass(CalculationFormItem, {\n name: 'howBigIsLetArea',\n value: null,\n label: 'How big is the let area?',\n type: CalculationFormTypeEnum.INPUT,\n isDisabled: true,\n validators: [Validators.required, Validators.min(1)]\n }),\n plainToClass(CalculationFormItem, {\n name: 'howBigIsCommonAreas',\n value: null,\n label: 'How big are the common areas?',\n type: CalculationFormTypeEnum.INPUT,\n isDisabled: true,\n validators: [Validators.required, Validators.min(1)]\n }),\n plainToClass(CalculationFormItem, {\n name: 'howManyDays',\n value: null,\n label: 'How many days of the year is the property available for rent?',\n type: CalculationFormTypeEnum.INPUT,\n isDisabled: true,\n validators: [Validators.required, Validators.min(1)]\n }),\n];\n","import { PropertyEquityChartTypeEnum } from './property-equity-chart-type.enum';\n\n/**\n * class contains equity information for passed financial year\n */\nexport class PropertyEquityChartItem {\n year: number;\n marketValue: number;\n loanBalance: number;\n\n constructor(\n year: number,\n marketValue?: number,\n loanBalance?: number\n ) {\n this.year = year;\n this.marketValue = marketValue || 0;\n this.loanBalance = loanBalance || 0;\n }\n\n /**\n * calculate equity position\n */\n get equityPosition(): number {\n return this.marketValue - this.loanBalance;\n }\n\n /**\n * return this equity position instance as chart serie\n * @param type\n */\n getSerie(type: PropertyEquityChartTypeEnum): number[] {\n return [this.year, this[type]];\n }\n}\n","export enum PropertyEquityChartTypeEnum {\n MARKET_VALUE = 'marketValue',\n LOAN_BALANCE = 'loanBalance'\n}\n","import first from 'lodash/first';\nimport { PropertyEquityChartItem } from './property-equity-chart-item';\nimport { PropertyCollection } from '../../collections/property/property.collection';\nimport { BankAccountCollection } from '../../collections/bank-account.collection';\nimport { LoanCollection } from '../../collections/loan/loan.collection';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { PropertyEquityChartTypeEnum } from './property-equity-chart-type.enum';\nimport { Property } from './property';\nimport { BankAccount } from '../bank/bank-account';\n\n// count of years for future values\nconst FORECAST_YEARS = 25;\n\n/**\n * class contain actual and forecasted market values and loan balances for passed properties\n * X axis - years from the first actual data year to the last forecasted year\n * Y axis - amounts of market values, loan balances\n * Also on hover appear equity positions point\n */\nexport class PropertyEquityChartData {\n // list of equity positions for all years range\n list: PropertyEquityChartItem[];\n // current financial year\n currentYear: number;\n // list of properties this collection based on\n private properties: PropertyCollection;\n private bankAccounts: BankAccountCollection;\n private loans: LoanCollection;\n\n constructor(\n properties: PropertyCollection,\n bankAccounts: BankAccountCollection,\n loans: LoanCollection,\n private registerDate: Date\n ) {\n this.properties = properties;\n this.bankAccounts = bankAccounts.getLoanAccounts();\n this.loans = loans;\n this.currentYear = new FinancialYear(new Date()).year;\n this.initItems();\n this.buildHistoryItems();\n this.buildActualItem();\n this.buildForecastedItems();\n this.checkZeroLoanBalance();\n this.checkZeroMarketValue();\n }\n\n /**\n * get items list in chart series format\n * @param type\n */\n getChartSeries(type: PropertyEquityChartTypeEnum): number[][] {\n return this.list.map((item: PropertyEquityChartItem) => item.getSerie(type));\n }\n\n /**\n * get prepared chart data\n */\n getChartData(): object[] {\n return [\n {\n id: 'marketValue',\n name: 'Market Value',\n series: this.getChartSeries(PropertyEquityChartTypeEnum.MARKET_VALUE),\n // display future market value with dash line and past market value with solid line\n zones: [{\n // line style after current calendar year\n value: this.currentYear,\n dashStyle: 'Solid'\n }, {\n // default line style\n dashStyle: 'Dash'\n }]\n },\n {\n // id used to add/remove serie to chart\n id: 'loanBalance',\n name: 'Loan Balance',\n series: this.getChartSeries(PropertyEquityChartTypeEnum.LOAN_BALANCE)\n }\n ];\n }\n\n /**\n * create empty equity position item for each year in collection\n */\n private initItems(): void {\n this.list = [];\n for (let year: number = new FinancialYear(this.registerDate).year - 1; year <= (this.currentYear + FORECAST_YEARS); year++) {\n this.list.push(new PropertyEquityChartItem(year));\n }\n }\n\n /**\n * collect equity position items with past values from properties forecasts\n */\n private buildHistoryItems(): void {\n // get items for past and current years\n const items: PropertyEquityChartItem[] = this.list.filter((item: PropertyEquityChartItem) => item.year <= this.currentYear);\n items.forEach((item: PropertyEquityChartItem) => {\n // increase item values with property actual forecasts for item year\n item.marketValue = this.properties.items.reduce((sum: number, property: Property): number => sum + this.getMarketValueForPropertyByYear(property, item.year), 0);\n\n item.loanBalance = Math.abs(this.properties.items.reduce((sum: number, property: Property): number => sum + this.getLoanBalanceForPropertyByYear(property, item.year), 0));\n });\n }\n\n /**\n * set actual year's real data\n * @private\n */\n private buildActualItem(): void {\n const item: PropertyEquityChartItem = this.list.find((i: PropertyEquityChartItem) => i.year === this.currentYear);\n item.marketValue = this.properties.marketValue;\n item.loanBalance = this.properties.items.reduce((sum: number, property: Property): number => sum + Math.abs(this.bankAccounts.getPropertyBalanceAmount(property.id)), 0);\n }\n\n /**\n * collect equity position items with forecasted (future) calculated values\n */\n private buildForecastedItems(): void {\n // calculate future values for all properties separately\n this.properties.items.forEach((property: Property) => {\n let forecastedMarketValue: number = (property.growthPercent / 100) * property.marketValue + property.marketValue;\n\n // calculate future values for each future year for current handling property\n this.list\n .filter((item: PropertyEquityChartItem) => item.year > this.currentYear)\n .forEach((item: PropertyEquityChartItem) => {\n const propertyBankAccounts: BankAccountCollection = this.bankAccounts.getByPropertyId(property.id);\n // increase loan balance amount for handling equity position item\n item.loanBalance += this.getLoanBalanceByYear(property, item.year, propertyBankAccounts, this.loans.getByBankAccountsIds(propertyBankAccounts.getIds()));\n\n // increase market value amount for handling equity position item\n item.marketValue += forecastedMarketValue;\n\n // increase current market value forecast for the next cycle iteration\n forecastedMarketValue += forecastedMarketValue * (property.growthPercent / 100);\n });\n });\n }\n\n /**\n * Get property loan balance by financial year\n * @param property Property instance for filter\n * @param year Financial year number\n * @param bankAccounts List of bank accounts\n * @param loans List of loans\n * @private\n */\n private getLoanBalanceByYear(property: Property, year: number, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n return bankAccounts.items.reduce((totalSum: number, bankAccount: BankAccount): number => totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0)), 0);\n }\n\n getMarketValueForPropertyByYear(property: Property, year: number): number {\n if (new FinancialYear(property.contractDate).year > year) {\n return 0;\n }\n\n return (property.getForecastByYear(year) || first(property.forecasts)).marketValue;\n }\n\n getLoanBalanceForPropertyByYear(property: Property, year: number): number {\n if (new FinancialYear(property.contractDate).year > year) {\n return 0;\n }\n\n // @TODO remove after tests `|| this.bankAccounts.getPropertyBalanceAmount(property.id)`\n return property.getForecastByYear(year)?.loanBalance;\n }\n\n /**\n * Check if loan balance is 0 and set it as null (to not to draw point on the chart)\n */\n private checkZeroLoanBalance(): void {\n this.list.forEach((item: PropertyEquityChartItem) => {\n if (item.loanBalance === 0) {\n item.loanBalance = null;\n }\n });\n }\n\n /**\n * Check if market value is 0 and set it as null (to not to draw point on the chart)\n */\n private checkZeroMarketValue(): void {\n this.list.forEach((item: PropertyEquityChartItem) => {\n if (item.marketValue === 0) {\n item.marketValue = null;\n }\n });\n }\n}\n","export enum PropertyShareStatusEnum {\n\tPENDING = 1,\n\tAPPROVED = 2,\n\tREJECTED = 3,\n}\n","import { PropertyShare as PropertyShareBase } from '../../db/Models/property/property-share';\nimport { PropertyShareStatusEnum } from '../../db/Enums/property/property-share-status.enum';\nimport { Transform, Type } from 'class-transformer';\nimport { User } from '../user';\nimport { RegistrationInvite } from '../registration-invite/registration-invite';\nimport { Property } from './property';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class PropertyShare extends PropertyShareBase implements MpTrackableInterface {\n @Type(() => Date)\n fromDate: Date;\n\n @Type(() => Date)\n toDate: Date;\n\n @Type(() => User)\n user: User;\n\n @Type(() => RegistrationInvite)\n invite: RegistrationInvite;\n\n @Type(() => Property)\n property: Property;\n\n @Transform(({ obj }) => obj.user ? obj.user.email : obj.invite.email)\n email: string;\n\n isAccepted(): boolean {\n return this.status === PropertyShareStatusEnum.APPROVED;\n }\n\n isPending(): boolean {\n return this.status === PropertyShareStatusEnum.PENDING;\n }\n\n isRejected(): boolean {\n return this.status === PropertyShareStatusEnum.REJECTED;\n }\n\n get statusName(): string {\n return PropertyShareStatusEnum[this.status]?.toLowerCase();\n }\n\n /**\n * Return full user name if user is already registered.\n * Otherwise - return first name from invitation\n */\n get userName(): string {\n return this.user ? this.user.fullName : `${this.invite.firstName}`;\n }\n\n getMpData() {\n return {\n 'Property': this.property.name,\n 'User': this.user.email\n };\n }\n}\n","import {User} from '../user/user';\nimport { AbstractModel } from '../abstract-model';\n\nexport class BorrowingReport extends AbstractModel {\n netRentIncome?: number;\n loanRepaymentAmount?: number;\n netSalary?: number;\n spouseNetSalary?: number;\n otherLiabilities?: number;\n livingExpenses?: number;\n user?: User;\n}\n","import { BorrowingReport as BorrowingReportBase } from '../../db/Models/property/borrowing-report';\nimport { Type } from 'class-transformer';\nimport { User } from '../user';\nimport { plainToClass } from 'class-transformer';\nimport { Collection, IncomeSourceForecastCollection } from '../../collections';\nimport { AnnualClientDetails } from '../client';\nimport { IncomeSourceForecast, SalaryForecast } from '../income-source';\n\n/**\n * Borrowing power report, shows if u can afford new property loan\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4717608961/Borrowing+Power+Report+-+Property+Tank\n */\nexport class BorrowingReport extends BorrowingReportBase {\n @Type(() => User)\n user: User;\n\n netRentIncome: number = 0;\n loanRepaymentAmount: number = 0;\n otherLiabilities: number = 0;\n livingExpenses: number = 0;\n\n /**\n * some fields calculated automatically until user filled them manually\n */\n static calculate(\n salaryForecasts: SalaryForecast[],\n incomeSourceForecasts: IncomeSourceForecast[],\n clientDetails: AnnualClientDetails = plainToClass(AnnualClientDetails, {}),\n report: BorrowingReport = plainToClass(BorrowingReport, {})\n ): BorrowingReport {\n report.netSalary = report.netSalary ?? new Collection(salaryForecasts).sumBy('monthlyAmount')\n + new IncomeSourceForecastCollection(incomeSourceForecasts).bonuses.sumBy('monthlyAmount');\n report.spouseNetSalary = report.spouseNetSalary ?? clientDetails.spouseMonthlyIncome;\n\n return report;\n }\n\n /**\n * free money after expenses\n */\n getNetIncomeSurplus(profit: number, repaymentAmount: number): number {\n return profit + this.netRentIncome + this.netSalary + this.spouseNetSalary - repaymentAmount\n - this.loanRepaymentAmount - this.otherLiabilities - this.livingExpenses\n }\n\n /**\n * surplus income to cover your debt obligations\n */\n getNetSurplusRatio(profit: number, repaymentAmount: number): number {\n if (!(repaymentAmount + this.loanRepaymentAmount + this.otherLiabilities)) {\n return 0;\n }\n\n return (profit + this.netRentIncome + this.netSalary + this.spouseNetSalary - this.livingExpenses)\n / (repaymentAmount + this.loanRepaymentAmount + this.otherLiabilities);\n }\n}\n","/**\n * @TODO used only on dashboard, move from tt-core\n * Enum with properties ownership filter options\n */\nexport enum ShareFilterOptionsEnum {\n ALL = 1,\n CREATED = 2,\n SHARED = 3\n}\n","import { TransactionMetaField as TransactionMetaFieldBase } from '../../db/Models/transaction/transaction-meta-field';\nimport { Type } from 'class-transformer';\nimport { ChartAccountsMetaField } from '../chart-accounts';\nimport {Transaction} from '../../db/Models';\n\nexport class TransactionMetaField extends TransactionMetaFieldBase {\n @Type(() => ChartAccountsMetaField)\n metaField: ChartAccountsMetaField;\n @Type(() => Transaction)\n transaction: Transaction;\n @Type(() => ChartAccountsMetaField)\n chartAccountsMetaField: ChartAccountsMetaField;\n}\n","import { BankTransaction as BankTransactionBase } from '../../db/Models/bank/bank-transaction';\nimport { BankTransactionTypeEnum } from '../../db/Enums';\nimport { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { Type, plainToClass } from 'class-transformer';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { Transaction } from '../transaction';\nimport { ChartAccounts } from '../chart-accounts';\nimport { TransactionAllocationCollection } from '../../collections';\n\nexport class BankTransaction extends BankTransactionBase {\n // allocated money amount for bank transaction\n allocatedAmount = 0;\n unallocatedAmount = 0;\n\n operation: TransactionOperationEnum;\n\n @Type(() => Date)\n date: Date;\n\n @Type(() => Number)\n amount: number;\n\n /**\n * get allocated amount value but with +/- sign\n */\n get balanceAmount(): number {\n return this.isCredit() ? this.allocatedAmount : -this.allocatedAmount;\n }\n\n /**\n * check if bank transaction is debit\n */\n isDebit(): boolean {\n return this.type === BankTransactionTypeEnum.DEBIT;\n }\n\n /**\n * check if bank transaction is credit\n */\n isCredit(): boolean {\n return this.type === BankTransactionTypeEnum.CREDIT;\n }\n\n /**\n * Create Transaction instance based on Bank Transaction\n */\n toTransaction(isGST = false, allocations: TransactionAllocationCollection = new TransactionAllocationCollection([])): Transaction {\n const transaction = plainToClass(Transaction, {\n amount: this.getUnallocatedAmount(allocations),\n description: this.description,\n type: this.type,\n date: this.date,\n source: TransactionSourceEnum.BANK_TRANSACTION,\n operation: this.operation,\n isGST: isGST,\n });\n\n // gst should be included\n if (isGST) {\n transaction.amount = transaction.amount / ChartAccounts.GSTCoefficient;\n }\n\n return transaction;\n }\n\n /**\n * Check if bank transaction is completely allocated\n */\n isAllocated(allocations: TransactionAllocationCollection): boolean {\n return this.amount === this.getAllocatedAmount(allocations);\n }\n\n /**\n * Get bank transaction allocated amount\n */\n getAllocatedAmount(allocations: TransactionAllocationCollection): number {\n return allocations.getByBankTransactionsIds([this.id]).amount;\n }\n\n /**\n * Get bank transaction unallocated amount\n */\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return this.amount - this.getAllocatedAmount(allocations);\n }\n}\n","import { TransactionAllocation as TransactionAllocationBase } from '../../db/Models/transaction/transaction-allocation';\nimport { BankTransaction } from '../bank/bank-transaction';\nimport { Transaction } from './transaction';\nimport { Type, plainToClass } from 'class-transformer';\n\nexport class TransactionAllocation extends TransactionAllocationBase {\n @Type(() => BankTransaction)\n bankTransaction: BankTransaction;\n\n @Type(() => Transaction)\n transaction: Transaction;\n\n /**\n * Create a new instance of transaction allocation\n * transaction could be empty since we can POST allocation inside a new transaction\n */\n static create(amount: number, bankTransaction: BankTransaction, transaction?: Transaction): TransactionAllocation {\n return plainToClass(TransactionAllocation, {amount, transaction, bankTransaction});\n }\n}\n","import { Transaction as TransactionBase } from '../../db/Models/transaction/transaction';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport {\n ChartAccountsCategoryEnum, ChartAccountsKeepSign,\n ChartAccountsListEnum,\n ChartAccountsMetaFieldListEnum,\n} from '../../db/Enums';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { DepreciationTypeEnum } from '../../db/Enums/depreciation-type.enum';\nimport { DepreciationCalculationEnum } from '../../db/Enums/depreciation-calculation.enum';\nimport { Transform, Type, plainToClass } from 'class-transformer';\nimport { Property } from '../property';\nimport { CHART_ACCOUNTS_CATEGORIES, ChartAccounts } from '../chart-accounts';\nimport { IncomeSource } from '../income-source';\nimport { TransactionMetaField } from './transaction-meta-field';\nimport { Loan } from '../loan';\nimport { TransactionAllocation } from './transaction-allocation';\nimport { Collection, TransactionAllocationCollection } from '../../collections';\nimport { Depreciation } from '../depreciation';\nimport { Expense } from '../../interfaces';\nimport { SoleInvoiceItem } from '../sole';\n\n// @TODO Alex: refactor: move here allocations methods, netAmount = amount, grossAmount calculation, remove unused methods, etc.\nexport class Transaction extends TransactionBase implements Expense {\n // list of child transactions (fees)\n @Type(() => Transaction)\n transactions: Transaction[] = [];\n\n @Type(() => Property)\n property: Property;\n\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n @Type(() => TransactionMetaField)\n metaFields: TransactionMetaField[] = [];\n\n @Type(() => Transaction)\n transfer: Transaction;\n\n @Type(() => Loan)\n loan: Loan;\n\n @Type(() => Date)\n date: Date;\n\n @Type(() => TransactionAllocation)\n allocations: TransactionAllocation[] = [];\n\n @Type(() => SoleInvoiceItem)\n soleInvoiceItem: SoleInvoiceItem;\n\n @Transform(({ value }) => +value)\n tax = 0;\n\n operation: TransactionOperationEnum = TransactionOperationEnum.FIND_AND_MATCH;\n allocatedAmount: number;\n unallocatedAmount: number;\n isSelected: boolean;\n claimPercent = 100;\n amount = 0;\n\n get invoiceId(): number {\n return this.soleInvoiceItem?.invoice.id;\n }\n\n isDebit(): boolean {\n return this.type === TransactionTypeEnum.DEBIT;\n }\n\n isCredit(): boolean {\n return this.type === TransactionTypeEnum.CREDIT;\n }\n\n /**\n * @TODO move to base collection\n */\n isIncome(): boolean {\n // @TODO not used\n if (!this.chartAccounts) {\n return this.isCredit();\n }\n\n return CHART_ACCOUNTS_CATEGORIES.income.includes(this.chartAccounts.category);\n }\n\n /**\n * @TODO move to base collection\n */\n isExpense(): boolean {\n // @TODO not used\n if (!this.chartAccounts) {\n return this.isDebit();\n }\n\n return CHART_ACCOUNTS_CATEGORIES.expense.includes(this.chartAccounts.category);\n }\n\n isPersonal(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.personal.includes(this.chartAccounts.category);\n }\n\n isInterest(): boolean {\n return this.chartAccounts.id === ChartAccountsListEnum.INTEREST_ON_LOAN;\n }\n\n get chartAccountsCategories(): ChartAccountsCategoryEnum[] {\n switch (true) {\n case this.isPersonal():\n return CHART_ACCOUNTS_CATEGORIES.personal;\n\n case this.isPropertyTank():\n return CHART_ACCOUNTS_CATEGORIES.property;\n\n case this.isSoleTank():\n return CHART_ACCOUNTS_CATEGORIES.sole;\n\n default:\n return CHART_ACCOUNTS_CATEGORIES.work;\n }\n }\n\n /**\n * Get transaction date\n */\n getDate(): Date {\n return this.date;\n }\n\n /**\n * Check if transaction type is vehicle\n */\n isVehicleTransaction(): boolean {\n return this.chartAccounts.isVehicleExpense();\n }\n\n get taxFreeComponent(): number {\n return this.getMetaFieldValue(ChartAccountsMetaFieldListEnum.TAX_FREE_COMPONENT);\n }\n\n get frankingCredit(): number {\n return this.getMetaFieldValue(ChartAccountsMetaFieldListEnum.FRANKING_CREDIT);\n }\n\n get eligibleForReduction(): number {\n return this.getMetaFieldValue(ChartAccountsMetaFieldListEnum.ELIGIBLE_FOR_REDUCTION);\n }\n\n get untaxedElement(): number {\n return this.getMetaFieldValue(ChartAccountsMetaFieldListEnum.UNTAXED_ELEMENT);\n }\n\n /**\n * Check if transaction reconcile operation if TRANSFER\n * @TODO bad usage of get (and all is* methods), getter should sound like a noun\n */\n get isTransfer(): boolean {\n return this.operation === TransactionOperationEnum.TRANSFER;\n }\n\n isFindAndMatch(): boolean {\n return this.operation === TransactionOperationEnum.FIND_AND_MATCH;\n }\n\n isMatchInvoice(): boolean {\n return this.operation === TransactionOperationEnum.MATCH_INVOICE;\n }\n\n get debit(): number {\n return this.isDebit() ? Math.abs(this.grossAmount) : 0;\n }\n\n get credit(): number {\n return this.isCredit() ? Math.abs(this.grossAmount) : 0;\n }\n\n /**\n * Get value of transaction meta field\n * @param field for which value should be returned\n * @Todo modify 'metaFields' property from array to Collection\n */\n getMetaFieldValue(field: ChartAccountsMetaFieldListEnum): number {\n return +this.metaFields.find((transactionMetaField: TransactionMetaField): boolean => transactionMetaField.chartAccountsMetaField.id === field)?.value || 0;\n }\n\n isCash(): boolean {\n return this.source === TransactionSourceEnum.CASH;\n }\n\n /**\n * Create Depreciation instance based on Transaction\n */\n toDepreciation(): Depreciation {\n return plainToClass(Depreciation, {\n date: this.date,\n amount: Math.abs(this.amount),\n chartAccounts: this.chartAccounts,\n description: this.description,\n type: this.chartAccounts.isPropertyCapitalWorks() ? DepreciationTypeEnum.CAPITAL_WORKS : DepreciationTypeEnum.PLANT_EQUIPMENT,\n claimPercent: this.claimPercent,\n property: this.property,\n calculation: this.property ? this.property.depreciationCalculation : DepreciationCalculationEnum.PRIME_COST,\n transactions: [this],\n business: this.business,\n });\n }\n\n /**\n * Check if transaction is completely allocated\n */\n isAllocated(allocations: TransactionAllocationCollection): boolean {\n return this.netAmount === this.getAllocatedAmount(allocations);\n }\n\n getAllocatedAmount(allocations: TransactionAllocationCollection): number {\n return allocations.filterBy('transaction.id', this.id).sumBy('amount');\n }\n\n /**\n * @TODO vik TT-3363\n */\n getAllocatedClaimAmount(allocations: TransactionAllocationCollection): number {\n let coef = 1;\n if (this.isSoleTank() && this.isIncome() && this.isGST) {\n coef = ChartAccounts.GSTCoefficient;\n }\n return this.getAllocatedAmount(allocations) * this.claimRatio / coef;\n }\n\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return this.netAmount - this.getAllocatedAmount(allocations);\n }\n\n /**\n * Total transaction amount including taxes and other additional amounts\n */\n get grossAmount(): number {\n let grossAmount = super.grossAmount + this.tax;\n if (this.isExpense()) {\n return grossAmount;\n }\n\n // salary included transactions affect parent transaction amount and as a result grossAmount, skip to avoid double sum\n grossAmount += new Collection(this.transactions)\n .filter((t) => !t.chartAccounts?.isSalaryIncluded())\n .sumBy('amount', true);\n\n if (this.isWorkTank() || this.isHoldingTank()) {\n grossAmount += this.frankingCredit - this.taxFreeComponent - this.eligibleForReduction;\n }\n\n return grossAmount;\n }\n\n /**\n * @TODO vik confusing logic demanded by Nicole, we need a better ux to fix it\n * netAmount matches received payment (bankTransaction amount), includes gst and salary included adjustments\n * ie user received 1000$ salary including 100$ tips. NetAmount=1000$, amount=900$, tips=100$\n */\n get netAmount(): number {\n return new Collection(this.transactions)\n .filter((t) => t.chartAccounts?.isSalaryIncluded())\n .sumBy('amount') + this.amountWithGst;\n }\n\n /**\n * most of the transactions could have only positive or negative amount depends on chartAccounts, so we ignore\n * user's choice and transform amount, but there are exceptions like advance (negative or positive amount)\n */\n ignoreSign(): boolean {\n return !(this.chartAccounts?.id in ChartAccountsKeepSign);\n }\n}\n","export enum TransactionCategoryEnum {\n PROPERTY,\n WORK,\n SOLE,\n PERSONAL\n}\n","import { Depreciation as DepreciationBase } from '../../db/Models/depreciation/depreciation';\nimport { DepreciationTypeEnum } from '../../db/Enums/depreciation-type.enum';\nimport { DepreciationCalculationEnum } from '../../db/Enums/depreciation-calculation.enum';\nimport { ChartAccountsHeadingVehicleListEnum, ChartAccountsListEnum } from '../../db/Enums';\nimport { DepreciationCapitalProject } from './depreciation-capital-project';\nimport { DepreciationForecast } from './depreciation-forecast';\nimport { FinancialYear } from '../financial-year';\nimport { ChartAccounts } from '../chart-accounts';\nimport { BankTransaction } from '../bank';\nimport { Exclude, Transform, Type, plainToClass } from 'class-transformer';\nimport { Transaction } from '../transaction';\nimport { Expense } from '../../interfaces';\n\n/**\n * @TODO Alex: clarify grouping rules and refactor\n */\nexport class Depreciation extends DepreciationBase implements Expense {\n static WRITTEN_OFF_THRESHOLD = 300;\n static LOW_VALUE_POOL_THRESHOLD = 1000;\n\n @Type(() => Date)\n purchaseDate: Date;\n\n @Type(() => Date)\n date: Date;\n\n @Type(() => Date)\n lowValuePoolDate: Date;\n\n @Type(() => Date)\n writeOffManualDate: Date;\n\n @Type(() => Date)\n writeOffDate: Date;\n\n @Type(() => DepreciationCapitalProject)\n depreciationCapitalProject: DepreciationCapitalProject;\n\n @Type(() => DepreciationForecast)\n @Transform(({ value, obj }) => {\n // value = array of DepreciationForecast\n // obj = plain (whole Depreciation object)\n // Set isLVP flag for each DepreciationForecast\n // @TODO refactor\n value.forEach((forecast: DepreciationForecast): void => {\n forecast.isLVP =\n forecast.closeBalance < 1000 &&\n obj.calculation === DepreciationCalculationEnum.DIMINISHING &&\n obj.type === DepreciationTypeEnum.PLANT_EQUIPMENT &&\n !(obj.amount > Depreciation.WRITTEN_OFF_THRESHOLD && obj.amount < Depreciation.LOW_VALUE_POOL_THRESHOLD) &&\n !(obj.writeOffDate && new FinancialYear(new Date(obj.writeOffDate)).year === obj.financialYear);\n });\n return value;\n })\n forecasts: DepreciationForecast[] = [];\n\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n\n @Type(() => BankTransaction)\n bankTransaction: BankTransaction;\n\n type: DepreciationTypeEnum = DepreciationTypeEnum.PLANT_EQUIPMENT;\n\n /**\n * @TODO remove after ? signs removed from db models\n */\n amount = 0;\n\n // Type checking\n\n isCapital(): boolean {\n return this.type === DepreciationTypeEnum.CAPITAL_WORKS;\n }\n\n isBorrowingExpense(): boolean {\n return this.type === DepreciationTypeEnum.BORROWING_EXPENSES;\n }\n\n isAsset(): boolean {\n return this.type === DepreciationTypeEnum.PLANT_EQUIPMENT;\n }\n\n // Calculation checking\n\n isSBPCalculation(): boolean {\n return this.calculation === DepreciationCalculationEnum.SBP;\n }\n\n isPrimeCost(): boolean {\n return this.calculation === DepreciationCalculationEnum.PRIME_COST;\n }\n\n isDiminishing(): boolean {\n return this.calculation === DepreciationCalculationEnum.DIMINISHING;\n }\n\n // Pool checking\n\n isPlantEquipmentPool(): boolean {\n return this.isAsset() && !this.isSBPCalculation() && !this.isWrittenOff() && !this.isLVP();\n }\n\n isLVP(): boolean {\n return this.isAsset()\n && !this.isSBPCalculation()\n && this.isDiminishing()\n && this.currentYearForecast.closeBalance > Depreciation.WRITTEN_OFF_THRESHOLD\n && this.currentYearForecast.closeBalance <= Depreciation.LOW_VALUE_POOL_THRESHOLD;\n }\n\n isSBP(): boolean {\n return this.isAsset() && this.isSBPCalculation() && !this.isWrittenOff();\n }\n\n isWrittenOff(): boolean {\n return this.writeOffYear === new FinancialYear().year;\n }\n\n get writeOffYear(): number {\n if (!this.writeOffManualDate && !this.writeOffDate) {\n return null;\n }\n\n return new FinancialYear(this.writeOffManualDate || this.writeOffDate)?.year;\n }\n\n /**\n * Check if depreciation chart accounts heading related to vehicles category\n */\n isVehicleDepreciation(): boolean {\n return this.chartAccounts.heading?.id === ChartAccountsHeadingVehicleListEnum.DEPRECIATION_VEHICLES;\n }\n\n /**\n * Get depreciation purchase date\n */\n getDate(): Date {\n return this.date;\n }\n\n /**\n * @TODO Vik: Research a problem with depreciations without current year forecast\n */\n get currentYearForecast(): DepreciationForecast {\n return this.forecasts.find(\n (forecast: DepreciationForecast): boolean => forecast.financialYear === new FinancialYear().year\n ) || plainToClass(DepreciationForecast, {\n financialYear: new FinancialYear().year,\n openBalance: 0,\n closeBalance: 0,\n amount: 0,\n claimPercent: 0\n });\n }\n\n getForecastByYear(year: number): DepreciationForecast {\n return this.forecasts.find((forecast: DepreciationForecast): boolean => forecast.financialYear === year);\n }\n\n getClaimAmountByYear(year: number): number {\n return this.getForecastByYear(year)?.claimAmount || 0;\n }\n\n getCloseBalanceByYear(year: number): number {\n return this.getForecastByYear(year)?.closeBalance || 0;\n }\n\n isBuildingAtCost() {\n return this.chartAccounts.id === ChartAccountsListEnum.BUILDING_AT_COST;\n }\n\n /**\n * Create a new transaction from current depreciation\n */\n toTransaction(params = {}): Transaction {\n return plainToClass(\n Transaction,\n Object.assign(params, this, {\n amount: -this.currentYearForecast?.amount || 0,\n claimAmount: -this.currentYearForecast?.claimAmount || 0,\n claimPercent: this.currentYearForecast?.claimPercent || 0,\n })\n );\n }\n\n /**\n * @TODO Michael: remove and check everywhere in reports\n */\n get claimAmount(): number {\n return this.currentYearForecast?.claimAmount || 0;\n }\n\n @Exclude()\n get amountWithGst(): number {\n // gst applies only to new assets\n if (this.isNew()) {\n return super.amountWithGst;\n }\n\n return this.amount;\n }\n\n @Exclude()\n get gstClaimAmount(): number {\n return this.gstAmount * this.currentYearForecast?.claimRate;\n }\n\n /**\n * assets purchased in the current financial year\n */\n isNew(): boolean {\n return new FinancialYear(this.date).year === new FinancialYear().year\n }\n}\n","import { Expose, Transform } from 'class-transformer';\nimport { DepreciationLvpAssetTypeEnum } from './depreciation-lvp-asset-type.enum';\nimport { FinancialYear } from '../../financial-year/financial-year';\nimport { Depreciation } from '../../depreciation/depreciation';\n\nexport class DepreciationLvpReportItem extends Depreciation {\n /**\n * Asset type symbol based on write off manual date / low value pool date\n */\n @Transform(({obj}) => {\n switch (true) {\n case !!obj.writeOffManualDate:\n return DepreciationLvpAssetTypeEnum.WRITTEN_OFF;\n case new FinancialYear().year === new Date(obj.lowValuePoolDate).getFullYear():\n return DepreciationLvpAssetTypeEnum.FIRST_YEAR;\n default:\n return DepreciationLvpAssetTypeEnum.PRIOR_YEARS;\n }\n })\n @Expose() assetType: DepreciationLvpAssetTypeEnum;\n}\n","import { ChartAccounts, Transaction, TransactionAllocation, TransactionMetaField, VehicleClaim } from '../../models';\nimport { TransactionAllocationCollection } from './transaction-allocation.collection';\nimport { ChartAccountsCategoryEnum, ChartAccountsListEnum } from '../../db/Enums';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { ExportableCollection } from '../exportable.collection';\nimport { plainToClass } from 'class-transformer';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { Collection } from '../collection';\nimport { ChartData } from '../../models/chart/chart-data';\nimport { FinancialYear } from '../../models/financial-year/financial-year';\nimport { MONTHS } from '../../models/financial-year/months.const';\nimport { Depreciation } from '../../models/depreciation/depreciation';\nimport { SoleInvoiceCollection } from '../sole';\n\n/**\n * Collection of transactions\n */\nexport class TransactionCollection extends ExportableCollection<Transaction> {\n /**\n * we use depreciations as expense transactions a lot\n */\n constructor(transactions: Transaction[] = [], depreciations: Depreciation[] = []) {\n super([...transactions, ...depreciations.map((depreciation) => depreciation.toTransaction())]);\n }\n\n getSoleTransactions(): this {\n return this.filter((transaction: Transaction) => transaction.isSoleTank());\n }\n\n get amount(): number {\n return this.sumBy('amount');\n }\n\n getUnallocated(allocations: TransactionAllocationCollection): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => !transaction.isAllocated(allocations))\n );\n }\n\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return this.items.reduce((sum: number, transaction: Transaction): number =>\n sum + transaction.getUnallocatedAmount(allocations.filterBy('transaction.id', transaction.id)), 0);\n }\n\n /**\n * get date of the last transaction\n */\n getLastTransactionDate(): Date {\n return new Date(Math.max.apply(Math, this.items.map((transaction: Transaction) => transaction.date)));\n }\n\n get claimAmount(): number {\n return this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.claimAmount, 0);\n }\n\n get grossClaimAmount(): number {\n return this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.grossClaimAmount, 0);\n }\n\n get grossAmount(): number {\n return this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.grossAmount, 0);\n }\n\n getByChartAccountsCategories(categories: ChartAccountsCategoryEnum[]): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => categories.includes(transaction.chartAccounts.category))\n );\n }\n\n /**\n * Get transactions by month\n * @param monthIndex by which desired month should be taken\n */\n getByMonth(monthIndex: number): TransactionCollection {\n return new TransactionCollection(this.items.filter((transaction: Transaction): boolean =>\n transaction.date.getMonth() === monthIndex\n ));\n }\n\n /**\n * Get collection of transactions meta fields\n */\n getTransactionsMetaFields(): Collection<TransactionMetaField> {\n const metaFieldsArray: TransactionMetaField[] = [];\n\n this.items.forEach((transaction: Transaction) => {\n metaFieldsArray.push(...transaction.metaFields);\n });\n\n return new Collection<TransactionMetaField>(metaFieldsArray);\n }\n\n getIncomeTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isIncome())\n );\n }\n\n getExpenseTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isExpense() && !transaction.isInterest())\n );\n }\n\n get claimIncome(): number {\n return this.getIncomeTransactions().claimAmount;\n }\n\n get claimExpense(): number {\n return this.getExpenseTransactions().claimAmount;\n }\n\n getInterestTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isInterest())\n );\n }\n\n get claimInterest(): number {\n return this.getInterestTransactions().claimAmount;\n }\n\n /**\n * Get collection of transactions and properties filtered by properties ids\n * @param ids Ids of properties for filter\n */\n getByPropertiesIds(ids: number[]): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => ids.includes(transaction.property?.id))\n );\n }\n\n /**\n * Get new collection filtered by income source id\n * @param id id of income source for filter\n */\n getByIncomeSourceId(id: number): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.incomeSource?.id === id)\n );\n }\n\n /**\n * Get new collection filtered by chart accounts category\n * @param category Chart accounts category value\n */\n getByChartAccountsCategory(category: ChartAccountsCategoryEnum): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.chartAccounts.category === category)\n );\n }\n\n /**\n * Get new collection of property transactions\n */\n getPropertyTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isPropertyTank())\n );\n }\n\n getDebitTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isDebit())\n );\n }\n\n getCreditTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isCredit())\n );\n }\n\n getByAllocations(allocations: TransactionAllocationCollection): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => allocations.hasTransaction(transaction))\n );\n }\n\n setAllocatedClaimAmount(allocations: TransactionAllocationCollection, invoices: SoleInvoiceCollection): this {\n const allocationsByTransaction = allocations.groupBy('transaction.id');\n const paidCacheTransactionsIds = invoices.getPaidCash().getTransactionsIds();\n this.items.forEach((transaction) => {\n // for paidCash invoices we haven't allocations and should use just claim amount\n if (paidCacheTransactionsIds.includes(transaction.id)) {\n return;\n }\n\n transaction.claimAmount = transaction.getAllocatedClaimAmount(allocationsByTransaction.get(transaction.id));\n });\n\n return this;\n }\n\n /**\n * Get transactions related to Vehicle category\n */\n getVehicleTransactions(): this {\n return this.create(\n this.items.filter((transaction: Transaction): boolean => transaction.isVehicleTransaction())\n );\n }\n\n /**\n * Get new transaction collection filtered by tank type\n */\n getByTankType(tankType: TankTypeEnum): this {\n return this.create(\n this.items.filter((transaction: Transaction): boolean => {\n switch (tankType) {\n case TankTypeEnum.PROPERTY:\n return transaction.isPropertyTank();\n case TankTypeEnum.WORK:\n return transaction.isWorkTank();\n case TankTypeEnum.SOLE:\n return transaction.isSoleTank();\n // Transaction may be not related to any tank type (personal)\n default:\n return false;\n }\n })\n );\n }\n\n getExportHeader(): string[] {\n return ['Date', 'Description', 'Debit', 'Credit'];\n }\n\n getExportFooter(): ExportCell[] {\n return [\n plainToClass(ExportCell, { value: 'Total', type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, { value: '', type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, { value: this.sumBy('debit'), type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, { value: this.sumBy('credit'), type: ExportCellTypeEnum.CURRENCY })\n ];\n }\n\n getExportBody(): ExportCell[][] {\n /**\n * Description is not a required field for transactions.\n * if there is no description, then add an empty line so that there are no errors when translated into a string.\n */\n return this.items.map((transaction: Transaction) => [\n plainToClass(ExportCell, { value: transaction.date, type: ExportCellTypeEnum.DATE }),\n plainToClass(ExportCell, { value: transaction.description ?? '-', type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, { value: transaction.debit, type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, { value: transaction.credit, type: ExportCellTypeEnum.CURRENCY })\n ]);\n }\n\n /**\n * Get list of vehicle transactions filtered by vehicle claim\n */\n getByVehicleClaim(vehicleClaim?: VehicleClaim): this {\n if (!vehicleClaim) {\n return this.create([]);\n }\n\n return vehicleClaim.isSoleTank()\n // sole tank may have multiple vehicle claims, so we need to filter by business.id\n ? this.getVehicleTransactions().filterBy('business.id', vehicleClaim.business.id)\n // work tank may have only one vehicle claim, so we need to filter by tank type\n : this.getVehicleTransactions().filterBy('tankType', TankTypeEnum.WORK);\n }\n\n /**\n * Get list of vehicle transactions except KMS transactions\n */\n getLogbookTransactions(): this {\n return this\n .getVehicleTransactions()\n .removeBy('chartAccounts.id', [ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK, ChartAccountsListEnum.KLMS_TRAVELLED]);\n }\n\n /**\n * Build chart data with transactions cash position.\n * Cash position = Income - Expenses (include depreciations)\n * Chart data for each month from fin year start till current month\n */\n getCashPositionChartData(): ChartData[] {\n const chartData: ChartData[] = [\n plainToClass(ChartData, { name: 'Income', data: [] }),\n plainToClass(ChartData, { name: 'Expense', data: [] })\n ];\n\n new FinancialYear().getPastMonths().forEach((month: number): void => {\n chartData[0].data.push({\n label: MONTHS[month],\n value: this.getIncomeTransactions().getByMonth(month).claimAmount\n });\n chartData[1].data.push({\n label: MONTHS[month],\n value: Math.abs(this.getExpenseTransactions().getByMonth(month).claimAmount)\n });\n });\n\n return chartData;\n }\n\n /**\n * user pays GST only from allocated part (or paid) of income\n */\n calculateAllocatedClaimAmount(allocations: TransactionAllocationCollection): number {\n return this.reduce((sum: number, transaction) => sum + transaction.getAllocatedClaimAmount(allocations));\n }\n\n calculateAllocatedGST(allocations: TransactionAllocationCollection): number {\n return this.filterBy('isGST', true).reduce(\n (sum: number, transaction) => sum + transaction.getAllocatedClaimAmount(allocations)\n ) * ChartAccounts.GSTRatio;\n }\n\n getAllocatedAmount(allocations: TransactionAllocationCollection): number {\n return allocations.getByTransactionsIds(this.getIds()).sumBy('amount')\n }\n\n /**\n * @TODO vik business transactions calculated differently, separated collection?\n */\n getBusinessClaimAmount(allocations: TransactionAllocationCollection, businessId: number = null): number {\n const transactions = businessId ? this.filterBy('business.id', businessId) : this;\n const expenses = transactions.getExpenseTransactions();\n const incomes = transactions.getIncomeTransactions();\n\n return incomes.calculateAllocatedClaimAmount(allocations) + expenses.sumBy('claimAmount');\n }\n}\n","import { Collection } from '../collection';\nimport { TransactionAllocation, Transaction, BankTransaction } from '../../models';\nimport { BankTransactionCollection } from '../bank-transaction.collection';\nimport { CollectionDictionary } from '../collection-dictionary';\n\nexport class TransactionAllocationCollection extends Collection<TransactionAllocation> {\n get amount(): number {\n return this.sumBy('amount');\n }\n\n getByTransactionsIds(ids: number[]): TransactionAllocationCollection {\n return new TransactionAllocationCollection(\n this.items.filter((allocation: TransactionAllocation): boolean => ids.includes(allocation.transaction.id))\n );\n }\n\n getByBankTransactionsIds(ids: number[]): TransactionAllocationCollection {\n return new TransactionAllocationCollection(\n this.items.filter((allocation: TransactionAllocation): boolean => ids.includes(allocation.bankTransaction.id))\n );\n }\n\n /**\n * Group allocations by bank account via bank transactions collection\n */\n groupByBankAccount(bankTransactions: BankTransactionCollection): CollectionDictionary<TransactionAllocationCollection> {\n // Group bank transactions by bank account id\n const bankTransactionsByBankAccount = bankTransactions.groupBy('bankAccount.id');\n // Create empty dictionary of transaction allocations\n const allocationsByBankAccount = new TransactionAllocationCollection([]).groupBy();\n // Fill allocations dictionary with bank transactions dictionary keys and allocations related with each bank transaction collection\n bankTransactionsByBankAccount.keys.forEach((key: string): void => {\n allocationsByBankAccount.add(key, this.getByBankTransactionsIds(bankTransactionsByBankAccount.get(key).getIds()));\n });\n return allocationsByBankAccount;\n }\n\n /**\n * check if collection includes allocation of passed transaction\n */\n hasTransaction(transaction: Transaction): boolean {\n return !!this.items.find((allocation: TransactionAllocation): boolean => allocation.transaction.id === transaction.id);\n }\n\n /**\n * Check if bank transaction is related with current allocations\n */\n hasBankTransaction(bankTransaction: BankTransaction): boolean {\n return !!this.items.find((allocation: TransactionAllocation): boolean => allocation.bankTransaction.id === bankTransaction.id);\n }\n}\n","import { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { Collection } from './collection';\nimport { Depreciation } from '../models';\nimport uniqBy from 'lodash/uniqBy';\nimport compact from 'lodash/compact';\nimport { DepreciationCapitalProject } from '../models';\nimport { TransactionCollection } from './transaction';\nimport { ChartAccountsCategoryEnum } from '../db/Enums';\nimport { VehicleClaim } from '../models';\nimport round from 'lodash/round';\n\nexport class DepreciationCollection extends Collection<Depreciation> {\n getSoleDepreciations(): this {\n return this.filter((depreciation: Depreciation) => depreciation.isSoleTank());\n }\n\n getNew(): this {\n return this.filter((depreciation: Depreciation) => depreciation.isNew());\n }\n\n /**\n * Get total amount of all depreciations in the collection\n */\n get amount(): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => sum + depreciation.amount, 0);\n }\n\n get claimAmount(): number {\n return this.items.reduce((sum: number, depreciation: Depreciation) => sum + depreciation.currentYearForecast.claimAmount, 0);\n }\n\n getClaimedAmountByYear(year: number = +localStorage.getItem('financialYear')): number {\n const closeBalance = this.items.reduce(\n (sum: number, depreciation: Depreciation): number => sum + depreciation.getCloseBalanceByYear(year), 0\n );\n\n return round(this.amount - closeBalance, 2);\n }\n\n getClaimAmountByYear(year: number = +localStorage.getItem('financialYear')): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => sum + depreciation.getClaimAmountByYear(year), 0);\n }\n\n getCloseBalanceByYear(year: number = +localStorage.getItem('financialYear')): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => sum + depreciation.getCloseBalanceByYear(year), 0);\n }\n\n getCurrentYearForecastAmount(): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => sum + depreciation.currentYearForecast.amount, 0);\n }\n\n get closeBalance(): number {\n return this.sumBy('currentYearForecast.closeBalance');\n }\n\n getByPropertiesIds(ids: number[]): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => ids.includes(depreciation.property?.id))\n );\n }\n\n getWithCapitalProject(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => !!depreciation.depreciationCapitalProject)\n );\n }\n\n getWithoutCapitalProject(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => !depreciation.depreciationCapitalProject)\n );\n }\n\n getWithoutBorrowingExpenses(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => !depreciation.isBorrowingExpense())\n );\n }\n\n getByChartAccountsCategories(categories: ChartAccountsCategoryEnum[]): this {\n return this.create(\n this.items.filter((depreciation: Depreciation): boolean => categories.includes(depreciation.chartAccounts.category))\n );\n }\n\n getAssets(): this {\n return this.filter((depreciation) => depreciation.isAsset());\n }\n\n getPlantEquipment(): this {\n return this.filter((depreciation) => depreciation.isPlantEquipmentPool());\n }\n\n getCapitalDepreciations(): this {\n return this.filter((depreciation) => depreciation.isCapital());\n }\n\n getBorrowingExpenseDepreciations(): DepreciationCollection {\n return this.filter((depreciation: Depreciation) => depreciation.isBorrowingExpense());\n }\n\n getWrittenOffDepreciations(): DepreciationCollection {\n return this.filter((depreciation: Depreciation) => depreciation.isWrittenOff());\n }\n\n getLVPDepreciations(): this {\n return this.filter((depreciation: Depreciation) => depreciation.isLVP());\n }\n\n getSBPDepreciations(): this {\n return this.filter((depreciation: Depreciation) => depreciation.isSBP());\n }\n\n getCapitalProjects(): DepreciationCapitalProject[] {\n return uniqBy(\n compact(\n this.items.map((depreciation: Depreciation): DepreciationCapitalProject => depreciation.depreciationCapitalProject)\n ),\n 'id'\n );\n }\n\n /**\n * Get a new collection of depreciations related to vehicles\n */\n getVehicleDepreciations(): this {\n return this.filter((depreciation: Depreciation) => depreciation.isVehicleDepreciation());\n }\n\n getByTankType(tankType: TankTypeEnum): this {\n return this.create(\n this.items.filter((depreciation: Depreciation): boolean => {\n switch (tankType) {\n case TankTypeEnum.PROPERTY:\n return depreciation.isPropertyTank();\n case TankTypeEnum.WORK:\n return depreciation.isWorkTank();\n case TankTypeEnum.SOLE:\n return depreciation.isSoleTank();\n // case for other tank or some extra\n default:\n return false;\n }\n })\n );\n }\n\n /**\n * Create TransactionCollection from depreciation items\n */\n toTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.map((item: Depreciation) => item.toTransaction())\n );\n }\n\n /**\n * Get depreciations by vehicle claim. Only vehicle depreciations may be related to vehicle claim\n */\n getByVehicleClaim(vehicleClaim: VehicleClaim): this {\n return vehicleClaim.isSoleTank()\n // sole tank may have multiple vehicle claims, so we need to filter by business.id\n ? this.getVehicleDepreciations().filterBy('business.id', vehicleClaim.business.id)\n // work tank may have only one vehicle claim, so we need to filter by tank type\n : this.getVehicleDepreciations().filterBy('tankType', TankTypeEnum.WORK);\n }\n}\n","import {\n DepreciationLvpReportItem\n} from '../../../models/report/depreciation/depreciation-lvp-report-item';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { plainToClass } from 'class-transformer';\nimport { DepreciationCollection } from '../../depreciation.collection';\n\n/**\n * Collection of depreciation Low Value Pool report items\n */\nexport class DepreciationLvpReportItemCollection extends DepreciationCollection {\n static fromDepreciations(deprectiations: Depreciation[]): DepreciationLvpReportItemCollection {\n return new DepreciationLvpReportItemCollection(\n deprectiations.map((depreciation: Depreciation) => plainToClass(DepreciationLvpReportItem, depreciation))\n );\n }\n}\n","import { Depreciation } from '../../depreciation/depreciation';\n\n/**\n * Class for depreciation report item\n */\nexport class DepreciationReportItem extends Depreciation {\n get primeCost(): number {\n return this.isPrimeCost() ? this.currentYearForecast.amount : 0;\n }\n\n get diminishingValue(): number {\n return this.isDiminishing() ? this.currentYearForecast.amount : 0;\n }\n\n get categoryTitle(): string {\n switch (true) {\n case this.isPlantEquipmentPool():\n return 'Plant & Equipment';\n case this.isWrittenOff():\n return 'Written Off Items';\n case this.isCapital():\n return 'Building & Improvements';\n default:\n return 'Other';\n }\n }\n}\n","import { Depreciation } from '../../../models/depreciation/depreciation';\nimport { plainToClass } from 'class-transformer';\nimport { DepreciationCollection } from '../../depreciation.collection';\nimport { DepreciationReportItem } from '../../../models/report/depreciation/depreciation-report-item';\n\nexport class DepreciationReportItemCollection extends DepreciationCollection {\n /**\n * Create new collection from provided depreciations list\n */\n static fromDepreciations(deprectiations: Depreciation[]): DepreciationReportItemCollection {\n return new DepreciationReportItemCollection(\n deprectiations.map((depreciation: Depreciation) => plainToClass(DepreciationReportItem, depreciation))\n );\n }\n}\n","import { Property } from '../../property';\nimport { CHART_ACCOUNTS_CATEGORIES, ChartAccounts } from '../../chart-accounts';\nimport {AbstractModel} from '../../../db/Models';\nimport round from 'lodash/round';\n\n/**\n * Class with property transactions report entities\n */\nexport class PropertyReportItem extends AbstractModel {\n amount: number;\n description: string;\n\n /**\n * Tax return item sub-code\n */\n subCode: string;\n sharePercent: number;\n claimPercent: number;\n propertyId: number;\n chartAccounts: ChartAccounts;\n\n constructor(\n property: Property,\n chartAccounts: ChartAccounts\n ) {\n super();\n this.chartAccounts = chartAccounts;\n this.propertyId = property.id;\n this.claimPercent = property.claimPercent;\n this.sharePercent = property.sharePercent;\n this.subCode = chartAccounts.taxReturnItem.subCode;\n this.description = chartAccounts.name\n }\n\n get claimAmount(): number {\n return round(this.amount * (this.claimPercent / 100), 2);\n }\n\n get shareClaimAmount(): number {\n return this.claimAmount * (this.sharePercent / 100);\n }\n\n isIncome(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.income.includes(this.chartAccounts.category);\n }\n\n isExpense(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.expense.includes(this.chartAccounts.category);\n }\n}\n","import { PropertyReportItem } from './property-report-item';\nimport { Property } from '../../property/property';\nimport { ChartAccounts } from '../../chart-accounts/chart-accounts';\nimport { DepreciationCollection } from '../../../collections/depreciation.collection';\n\n/**\n * Const with labels based on depreciation type\n */\nconst DEPRECIATION_TYPE_LABELS: { [key: number]: string } = {\n 1: 'Plant & Equipment',\n 2: 'Building & Improvements'\n};\n\n/**\n * Class with depreciation-based property transactions report entities\n */\nexport class PropertyReportItemDepreciation extends PropertyReportItem {\n constructor(\n depreciations: DepreciationCollection,\n property: Property,\n chartAccounts: ChartAccounts\n ) {\n super(property, chartAccounts);\n this.amount = Math.abs(depreciations.getCurrentYearForecastAmount());\n this.description = DEPRECIATION_TYPE_LABELS[depreciations.first.type]\n }\n}\n","import { Collection } from '../../collection';\nimport { PropertyReportItem } from '../../../models/report/property/property-report-item';\n\n/**\n * Base collection to work with property report items\n */\nexport class PropertyReportItemCollection extends Collection<PropertyReportItem> {\n getIncomes(): this {\n return this.create(\n this.items.filter((item: PropertyReportItem) => item.isIncome())\n );\n }\n\n getExpenses(): this {\n return this.create(\n this.items.filter((item: PropertyReportItem) => item.isExpense())\n );\n }\n}\n","import { Collection } from '../../collection';\nimport { Property } from '../../../models/property/property';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport { DepreciationCollection } from '../../depreciation.collection';\nimport { CollectionDictionary } from '../../collection-dictionary';\nimport { PropertyReportItemDepreciation } from '../../../models/report/property/property-report-item-depreciation';\nimport { PropertyReportItemCollection } from './property-report-item.collection';\nimport {PropertyCollection} from '../../property/property.collection';\n\n/**\n * Collection to work with depreciation-based property report items\n */\nexport class PropertyReportItemDepreciationCollection extends PropertyReportItemCollection {\n constructor(\n depreciations: DepreciationCollection,\n properties: PropertyCollection,\n chartAccounts: Collection<ChartAccounts>\n ) {\n super();\n this.setItems(depreciations, properties, chartAccounts)\n }\n\n private setItems(depreciations: DepreciationCollection, properties: PropertyCollection, chartAccounts: Collection<ChartAccounts>): void {\n this.items = [];\n\n properties.items.forEach((property: Property) => {\n const depreciationsByType = depreciations.filterBy('property.id', property.id).groupBy('type');\n\n depreciationsByType.keys.map((type: string) => {\n this.items.push(new PropertyReportItemDepreciation(\n depreciationsByType.get(type),\n property,\n chartAccounts.findBy('id', depreciationsByType.get(type).first.chartAccounts.id)\n ));\n });\n });\n }\n}\n","import { PropertyReportItem } from './property-report-item';\nimport { TransactionCollection } from '../../../collections/transaction/transaction.collection';\nimport { Property } from '../../property/property';\nimport { ChartAccounts } from '../../chart-accounts/chart-accounts';\n\n/**\n * Class with transaction-based property transactions report entities\n */\nexport class PropertyReportItemTransaction extends PropertyReportItem {\n constructor(\n transactions: TransactionCollection,\n property: Property,\n chartAccounts: ChartAccounts\n ) {\n super(property, chartAccounts);\n this.amount = Math.abs(transactions.sumBy('grossAmount'));\n this.description = chartAccounts.name\n }\n}\n","import { Collection } from '../../collection';\nimport { TransactionCollection } from '../../transaction/transaction.collection';\nimport { Property } from '../../../models/property/property';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport { CollectionDictionary } from '../../collection-dictionary';\nimport { PropertyReportItemTransaction } from '../../../models/report/property/property-report-item-transaction';\nimport { PropertyReportItemCollection } from './property-report-item.collection';\nimport {PropertyCollection} from '../../property/property.collection';\n\n/**\n * Collection to work with transaction-based property report items\n */\nexport class PropertyReportItemTransactionCollection extends PropertyReportItemCollection {\n constructor(\n transactions: TransactionCollection,\n properties: PropertyCollection,\n chartAccounts: Collection<ChartAccounts>\n ) {\n super();\n this.setItems(transactions, properties, chartAccounts);\n }\n\n private setItems(transactions: TransactionCollection, properties: PropertyCollection, chartAccounts: Collection<ChartAccounts>): void {\n this.items = [];\n properties.items.forEach((property: Property) => {\n const transactionsDictionary = transactions.getByPropertiesIds([property.id]).groupBy('chartAccounts.id');\n\n transactionsDictionary.keys.map((chartAccountId: string) => {\n this.items.push(new PropertyReportItemTransaction(\n transactionsDictionary.get(chartAccountId),\n property,\n chartAccounts.findBy('id', +chartAccountId)\n ));\n });\n });\n }\n}\n","/**\n * Enum with type of business for My Tax report\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form\n * (\"Business income or losses\" section, \"F. Type of business\" field)\n */\nexport enum BusinessTypeEnum {\n PARTNERSHIP,\n SOLE_TRADER,\n}\n","/**\n * Enum with business loss types\n * Values are related to SoleBusinessLossOffsetRule ids\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form\n * (\"Business income or losses\" section, \"G. Type of loss\" field)\n */\nexport enum LossTypeEnum {\n ASSESSABLE_INCOME_TEST = 2,\n PROFIT_TEST = 3,\n REAL_PROPERTY_TEST = 4,\n OTHER_ASSETS_TEST = 5,\n COMMISSIONERS_DISCRETION = 8,\n PRIMARY_PRODUCTION_AND_ARTS_BUSINESS = 7\n}\n","import { VehicleClaimDetails } from '../../../../vehicle';\nimport { Collection } from '../../../../../collections/collection';\nimport { SoleBusiness, SoleBusinessActivity, SoleDetails } from '../../../../sole';\nimport uniqBy from 'lodash/uniqBy'\nimport { User } from '../../../../user/user';\n\n/**\n * Main information of Sole businesses\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (section \"Business income or losses\")\n */\nexport class MyTaxBusinessDetails {\n vehicleClaimDetails: VehicleClaimDetails;\n businessActivities: SoleBusinessActivity[];\n businesses: Collection<SoleBusiness>;\n businessABN: string;\n businessAddress: string;\n\n constructor(\n vehicleClaimDetails: VehicleClaimDetails,\n businesses: Collection<SoleBusiness>,\n soleDetails: SoleDetails,\n user: User\n ) {\n this.businessActivities = uniqBy(businesses.mapBy('activity'), 'id');\n this.businessABN = soleDetails?.abn;\n this.businessAddress = user.address?.name;\n this.businesses = businesses;\n this.vehicleClaimDetails = vehicleClaimDetails;\n }\n}\n","import { ChartAccountsListEnum } from '../../../../db/Enums';\n\n/**\n * Const with the categories for my-tax 'Business income or losses' report.\n * Grouped by ChartAccountsHeadingListEnum / ChartAccountsListEnum based on rules from documentation\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (section \"Business income or losses\")\n */\nexport const BUSINESS_INCOME_OR_LOSSES_CATEGORIES: { [key: string]: number[] } = {\n psiIncomes: [\n ChartAccountsListEnum.PSI_VOLUNTARY_AGREEMENT,\n ChartAccountsListEnum.PSI_ABN_NOT_QUOTED,\n ChartAccountsListEnum.PSI_LABOUR_HIRE_OR_OTHER,\n ChartAccountsListEnum.PSI_OTHER,\n ],\n psiDeductions: [\n ChartAccountsListEnum.PSI_DEDUCTION_ASSOCIATES,\n ChartAccountsListEnum.PSI_DEDUCTION_OTHER\n ],\n otherBusinessIncome: [\n ChartAccountsListEnum.SALES,\n ChartAccountsListEnum.LABOUR,\n ChartAccountsListEnum.UBER_INCOME,\n ChartAccountsListEnum.COMMISSION,\n ChartAccountsListEnum.PARTS_CONSUMABLES,\n ChartAccountsListEnum.OTHER_BUSINESS_INCOME\n ]\n};\n","import { TransactionCollection } from '../../../../../collections';\nimport { ChartAccountsCategoryEnum, ChartAccountsHeadingListEnum, ChartAccountsListEnum } from '../../../../../db/Enums';\nimport { BUSINESS_INCOME_OR_LOSSES_CATEGORIES } from '../business-income-or-losses-categories.const';\nimport { TaxSummary } from '../../../../tax-summary/tax-summary';\nimport { TaxReturnCategoryListEnum } from '../../../../../db/Enums/tax-return/tax-return-category-list.enum';\n\n/**\n * Sole business information related to income transactions\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (section \"Business income or losses\")\n */\nexport class MyTaxBusinessIncome {\n psiIncomeAmount: number;\n psiVoluntaryAgreementAmount: number;\n psiABNNotQuotedAmount: number;\n psiLabourHireOrOtherAmount: number;\n psiOtherAmount: number;\n psiDeductionAssociatesAmount: number;\n psiDeductionOtherAmount: number;\n netPSIAmount: number;\n psiVoluntaryAgreementTax: number;\n psiABNNotQuotedTax: number;\n psiLabourHireOrOtherTax: number;\n netPSITax: number;\n grossPaymentsNoAbsGivenAmount: number;\n grossPaymentsVoluntaryAgreementAmount: number;\n grossPaymentsLabourHireAmount: number;\n grossPaymentsNoAbsGivenTax: number;\n grossPaymentsVoluntaryAgreementTax: number;\n grossPaymentsLabourHireTax: number;\n assessibleGovernmentPaymentsAmount: number;\n otherBusinessIncomeAmount: number;\n nonPrimaryProductionTotalAmount: number;\n\n constructor(\n psiIncome: TransactionCollection,\n soleIncome: TransactionCollection,\n taxSummary: TaxSummary\n ) {\n this.psiIncomeAmount = psiIncome.filterBy('chartAccounts.heading.id', ChartAccountsHeadingListEnum.PSI).amount;\n this.psiVoluntaryAgreementAmount = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_VOLUNTARY_AGREEMENT)\n .amount;\n this.psiABNNotQuotedAmount = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_ABN_NOT_QUOTED)\n .amount;\n this.psiLabourHireOrOtherAmount = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_LABOUR_HIRE_OR_OTHER)\n .amount;\n this.psiOtherAmount = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_OTHER)\n .amount;\n this.psiDeductionAssociatesAmount = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_DEDUCTION_ASSOCIATES)\n .amount;\n this.psiDeductionOtherAmount = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_DEDUCTION_OTHER)\n .amount;\n this.netPSIAmount = psiIncome\n .filterBy('chartAccounts.id', BUSINESS_INCOME_OR_LOSSES_CATEGORIES.psiIncomes)\n .amount -\n psiIncome\n .filterBy('chartAccounts.id', BUSINESS_INCOME_OR_LOSSES_CATEGORIES.psiDeductions)\n .amount;\n this.psiVoluntaryAgreementTax = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_VOLUNTARY_AGREEMENT)\n .sumBy('tax');\n this.psiABNNotQuotedTax = psiIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PSI_ABN_NOT_QUOTED)\n .sumBy('tax');\n this.psiLabourHireOrOtherTax = psiIncome\n .filterBy('chartAccounts.id', [ChartAccountsListEnum.PSI_LABOUR_HIRE_OR_OTHER, ChartAccountsListEnum.PSI_OTHER])\n .sumBy('tax');\n this.netPSITax = psiIncome\n .filterBy('chartAccounts.id', BUSINESS_INCOME_OR_LOSSES_CATEGORIES.psiIncomes)\n .sumBy('tax');\n\n this.grossPaymentsNoAbsGivenAmount = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GROSS_PAYMENTS_NO_ABN_GIVEN)\n .amount;\n this.grossPaymentsVoluntaryAgreementAmount = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GROSS_PAYMENTS_VOLUNTARY_AGREEMENT)\n .amount;\n this.grossPaymentsLabourHireAmount = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GROSS_PAYMENTS_LABOUR_HIRE_OR_OTHER_SPECIFIED_PAYMENTS)\n .amount;\n this.assessibleGovernmentPaymentsAmount = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.ASSESSIBLE_GOVERNMENT_PAYMENTS)\n .amount;\n this.otherBusinessIncomeAmount = taxSummary.sole.items.sumByCategories([TaxReturnCategoryListEnum.OTHER_BUSINESS_INCOME]);\n this.nonPrimaryProductionTotalAmount = soleIncome\n .filterBy('chartAccounts.category', ChartAccountsCategoryEnum.SOLE_INCOME)\n .amount;\n this.grossPaymentsNoAbsGivenTax = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GROSS_PAYMENTS_NO_ABN_GIVEN)\n .sumBy('tax');\n this.grossPaymentsVoluntaryAgreementTax = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GROSS_PAYMENTS_VOLUNTARY_AGREEMENT)\n .sumBy('tax');\n this.grossPaymentsLabourHireTax = soleIncome\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GROSS_PAYMENTS_LABOUR_HIRE_OR_OTHER_SPECIFIED_PAYMENTS)\n .sumBy('tax');\n }\n}\n","import {TaxReturnCategoryListEnum} from '../../db/Enums';\n\nexport const TAX_RETURN_CATEGORIES: {[key: string]: {[key: string]: TaxReturnCategoryListEnum[]}} = {\n work: {\n income: [\n TaxReturnCategoryListEnum.SALARY,\n TaxReturnCategoryListEnum.ALLOWANCES_EARNINGS_TIPS_DIRECTOR_FEES,\n TaxReturnCategoryListEnum.EMPLOYER_LUMP_SUM_PAYMENTS,\n TaxReturnCategoryListEnum.ETP,\n TaxReturnCategoryListEnum.GOVERNMENT_ALLOWANCES,\n TaxReturnCategoryListEnum.GOVERNMENT_PENSIONS,\n TaxReturnCategoryListEnum.ANNUITIES_SUPER_INCOME_STREAMS,\n TaxReturnCategoryListEnum.SUPERANNUATION_LUMP_SUM_PAYMENTS,\n TaxReturnCategoryListEnum.ATTRIBUTED_PSI_INCOME,\n TaxReturnCategoryListEnum.DIVIDENDS,\n TaxReturnCategoryListEnum.GROSS_INTEREST\n ],\n expenses: [\n TaxReturnCategoryListEnum.WORK_EXPENSES\n ],\n interest: [\n ],\n taxWithheld: [\n TaxReturnCategoryListEnum.TAX_WITHHELD\n ]\n },\n property: {\n income: [\n TaxReturnCategoryListEnum.GROSS_RENT\n ],\n expenses: [\n TaxReturnCategoryListEnum.OTHER_RENTAL_DEDUCTIONS\n ],\n interest: [\n TaxReturnCategoryListEnum.INTEREST_DEDUCTIONS\n ],\n depreciation: [\n TaxReturnCategoryListEnum.CAPITAL_WORKS,\n // @TODO Nik/Alex (it was TaxReturnCategoryListEnum.DEPRECIATION which doesn't exist)\n TaxReturnCategoryListEnum.PLANT_AND_EQUIPMENT\n ]\n },\n other: {\n income: [\n TaxReturnCategoryListEnum.GROSS_INTEREST,\n TaxReturnCategoryListEnum.SHARE_SCHEMES,\n TaxReturnCategoryListEnum.PARTNERSHIPS,\n TaxReturnCategoryListEnum.PARTNERSHIPS_TRUSTS,\n TaxReturnCategoryListEnum.TRUSTS,\n TaxReturnCategoryListEnum.PSI_SBE_INCOME,\n TaxReturnCategoryListEnum.SOLE_TRADER_BUSINESS_INCOME,\n TaxReturnCategoryListEnum.CAPITAL_GAINS,\n TaxReturnCategoryListEnum.FOREIGN_SOURCE_INCOME,\n TaxReturnCategoryListEnum.BONUSES_FROM_LIFE_INSURANCE,\n TaxReturnCategoryListEnum.FORESTRY_MANAGED_INVESTMENT_SCHEMES,\n TaxReturnCategoryListEnum.OTHER_INCOME\n ],\n expenses: [\n TaxReturnCategoryListEnum.OTHER_DEDUCTIONS\n ],\n taxCredits: [\n TaxReturnCategoryListEnum.TAX_CREDITS\n ],\n taxOffsets: [\n TaxReturnCategoryListEnum.TAX_OFFSETS,\n TaxReturnCategoryListEnum.TAX_OFFSETS_LOW,\n TaxReturnCategoryListEnum.TAX_OFFSETS_MIDDLE,\n ]\n },\n sole: {\n income: [\n TaxReturnCategoryListEnum.GROSS_PAYMENTS_NO_ABN_GIVEN,\n TaxReturnCategoryListEnum.GROSS_PAYMENTS_VOLUNTARY_AGREEMENT,\n TaxReturnCategoryListEnum.GROSS_PAYMENTS_LABOUR_HIRE_OR_OTHER,\n TaxReturnCategoryListEnum.ASSESSABLE_GOVERNMENT_PAYMENTS,\n TaxReturnCategoryListEnum.OTHER_BUSINESS_INCOME\n ],\n expenses: [\n TaxReturnCategoryListEnum.PURCHASES_AND_OTHER_COSTS,\n TaxReturnCategoryListEnum.CONTRACTORS_SUBCONTRACTORS_COMMISSION_EXPENSES,\n TaxReturnCategoryListEnum.SUPERANNUATION_EXPENSES,\n TaxReturnCategoryListEnum.BAD_DEBTS,\n TaxReturnCategoryListEnum.LEASE_EXPENSES,\n TaxReturnCategoryListEnum.RENT_EXPENSES,\n TaxReturnCategoryListEnum.INTEREST_EXPENSES_WITHIN_AUSTRALIA,\n TaxReturnCategoryListEnum.INTEREST_EXPENSES_OVERSEAS,\n TaxReturnCategoryListEnum.MOTOR_VEHICLE_EXPENSES,\n TaxReturnCategoryListEnum.ALL_OTHER_EXPENSES\n ],\n depreciation: [\n TaxReturnCategoryListEnum.DEPRECIATION_EXPENSES,\n ],\n loss: [\n TaxReturnCategoryListEnum.DEFERRED_BUSINESS_LOSSES_FROM_PRIOR_YEAR,\n ],\n lossCurrent: [\n TaxReturnCategoryListEnum.DEFERRED_BUSINESS_LOSSES,\n ],\n taxOffsets: [\n TaxReturnCategoryListEnum.TAX_OFFSETS_SOLE\n ],\n },\n summary: {\n income: [\n TaxReturnCategoryListEnum.GROSS_TAX_PAYABLE, TaxReturnCategoryListEnum.TAX_PAYABLE\n ],\n taxCredits: [\n TaxReturnCategoryListEnum.TAX_CREDITS\n ],\n taxOffsets: [\n TaxReturnCategoryListEnum.TAX_OFFSETS,\n ]\n }\n}\n","export enum TaxSummarySectionEnum {\n\tWORK_TANK = 1,\n\tPROPERTY_TANK = 2,\n\tOTHER_TANK = 3,\n SOLE_TANK = 4,\n SUMMARY = 5\n}\n","import { TransactionAllocationCollection, TransactionCollection } from '../../../../../collections';\nimport { ChartAccountsCategoryEnum, ChartAccountsHeadingListEnum, ChartAccountsListEnum } from '../../../../../db/Enums';\nimport { DepreciationCollection } from '../../../../../collections/depreciation.collection';\nimport { SoleBusinessLoss } from '../../../../sole';\nimport { SoleBusinessLossesCollection } from '../../../../../collections';\nimport { TaxSummary } from '../../../../tax-summary/tax-summary';\nimport { TAX_RETURN_CATEGORIES } from '../../../../../collections/tax-summary/tax-return-categories.const';\nimport { TaxSummarySectionEnum } from '../../../../../db/Enums/tax-summary-section.enum';\n\n/**\n * Sole business information related to expense transactions (losses)\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (section \"Business income or losses\")\n */\nexport class MyTaxBusinessLosses {\n currentLoss: SoleBusinessLoss;\n purchasesAndOtherCostsAmount: number;\n contractorsAndCommissionAmount: number;\n superannuationAmount: number;\n badDebtAmount: number;\n leaseExpensesCommercialAmount: number;\n rentExpensesCommercialPremisesAmount: number;\n interestExpensesAustraliaAmount: number;\n interestExpensesOverseasAmount: number;\n kmsTravelledExpensesAmount: number;\n logbookExpensesAmount: number;\n otherExpensesAmount: number;\n totalNonPrimaryProductionExpensesAmount: number;\n depreciationExpensesAmount: number;\n deductionsForCertainAssetsAmount: number;\n deductionsForGeneralSmallBusinessPoolAmount: number;\n priorYearsNonPrimaryLossesAmount: number;\n netNonPrimaryIncomeOrLossesAmount: number;\n currentYearNetNonPrimaryIncomeOrLossesAmount: number;\n deferredLossesAmount: number;\n\n constructor(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n allocations: TransactionAllocationCollection,\n businessLosses: SoleBusinessLossesCollection,\n currentLoss: SoleBusinessLoss,\n taxSummary: TaxSummary\n ) {\n this.currentLoss = currentLoss;\n this.purchasesAndOtherCostsAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.PURCHASES_STOCK_INVENTORY)\n .sumBy('claimAmount'));\n this.contractorsAndCommissionAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.CONTRACTORS_AND_COMMISSION)\n .sumBy('claimAmount'));\n this.superannuationAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.SUPERANNUATION)\n .sumBy('claimAmount'));\n this.badDebtAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.BAD_DEBT)\n .sumBy('claimAmount'));\n this.leaseExpensesCommercialAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.LEASE_EXPENSES_COMMERCIAL)\n .sumBy('claimAmount'));\n this.rentExpensesCommercialPremisesAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.RENT_EXPENSES_COMMERCIAL_PREMISES)\n .sumBy('claimAmount'));\n this.interestExpensesAustraliaAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.INTEREST_EXPENSES_AUSTRALIA)\n .sumBy('claimAmount'));\n this.interestExpensesOverseasAmount = Math.abs(transactions.getExpenseTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.INTEREST_EXPENSES_OVERSEAS)\n .sumBy('claimAmount'));\n this.kmsTravelledExpensesAmount = Math.abs(\n transactions\n .filterBy('chartAccounts.category', [ChartAccountsListEnum.KLMS_TRAVELLED])\n .sumBy('claimAmount') +\n depreciations\n .filterBy('chartAccounts.category', [ChartAccountsListEnum.KLMS_TRAVELLED])\n .sumBy('claimAmount')\n );\n this.logbookExpensesAmount = Math.abs(transactions.getVehicleTransactions().sumBy('claimAmount')) +\n depreciations.getVehicleDepreciations().sumBy('claimAmount');\n this.otherExpensesAmount = Math.abs(transactions\n .filterBy('chartAccounts.heading.id', ChartAccountsHeadingListEnum.OTHER_EXPENSES)\n .sumBy('claimAmount'));\n this.totalNonPrimaryProductionExpensesAmount = Math.abs(transactions\n .filterBy('chartAccounts.category', [ChartAccountsCategoryEnum.SOLE_EXPENSE])\n .sumBy('claimAmount')) +\n depreciations\n .filterBy('chartAccounts.category', [ChartAccountsCategoryEnum.SOLE_DEPRECIATION])\n .sumBy('claimAmount');\n // depreciations\n this.depreciationExpensesAmount = depreciations\n .filterBy('chartAccounts.heading.id', ChartAccountsHeadingListEnum.DEPRECIATION_EXPENSES)\n .sumBy('claimAmount');\n this.deductionsForCertainAssetsAmount = depreciations\n .getWrittenOffDepreciations()\n .sumBy('claimAmount');\n this.deductionsForGeneralSmallBusinessPoolAmount = depreciations\n .getSBPDepreciations()\n .sumBy('claimAmount');\n this.currentYearNetNonPrimaryIncomeOrLossesAmount = new TransactionCollection(transactions.toArray(), depreciations.toArray())\n .getBusinessClaimAmount(allocations);\n this.priorYearsNonPrimaryLossesAmount = businessLosses.sumBy('openBalance');\n this.netNonPrimaryIncomeOrLossesAmount = this.currentYearNetNonPrimaryIncomeOrLossesAmount -\n this.priorYearsNonPrimaryLossesAmount;\n this.deferredLossesAmount = taxSummary.sole.items.sumByCategoriesAndSection(\n TAX_RETURN_CATEGORIES.sole.lossCurrent,\n TaxSummarySectionEnum.SOLE_TANK\n )\n }\n}\n","import {\n AssetSaleCollection,\n HoldingSaleCollection,\n PropertyCollection,\n PropertySaleCollection\n} from '../../../../collections';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * @TODO vik/nicole test\n * Report related to Property sales CGT details.\n * All fields are about current year, except netCapitalLoss\n *\n */\nexport class MyTaxCgt {\n hasAssetSales: boolean;\n hasExemption: boolean;\n netCapitalProfit: number;\n taxableGrossCapitalProfit: number;\n /**\n * Loss collected over the years\n */\n netCapitalLoss: number;\n forwardCapitalLoss: number;\n\n static createFrom(propertySales: PropertySaleCollection, holdingSales: HoldingSaleCollection, clientCapitalLoss: number): MyTaxCgt {\n const assetSales = new AssetSaleCollection([...propertySales.toArray(), ...holdingSales.toArray()]);\n const netCapitalGain = assetSales.calculateNetCapitalGain(clientCapitalLoss);\n\n return plainToClass(MyTaxCgt, {\n hasAssetSales: !!assetSales.length,\n hasExemption: !!assetSales.fullExemptionSales.length,\n netCapitalProfit: Math.max(0, netCapitalGain),\n taxableGrossCapitalProfit: assetSales.taxableGrossCapitalProfit,\n netCapitalLoss: Math.min(0, netCapitalGain),\n forwardCapitalLoss: assetSales.calculateForwardCapitalLoss(clientCapitalLoss)\n })\n }\n\n /**\n * Exemption is applicable for PPR sales and properties acquired before Property.preCGTAssetDate\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (\"Capital gains or losses\" section)\n */\n static isCGTApplicable(sales: PropertySaleCollection, properties: PropertyCollection): boolean {\n return !sales.getCGTApplicable().length || !properties.getCGTApplicable().length;\n }\n}\n","/**\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (\"Capital gains or losses\" section)\n */\nexport enum CgtExemptionAndRolloverCodeEnum {\n MAIN_RESIDENT_EXEMPTION_I,\n PRE_CGT_ASSET_J\n}\n","import { ChartAccountsHeadingListEnum, ChartAccountsListEnum } from '../../../../db/Enums';\n\n/**\n * Const with the categories for my-tax 'Deductions' report.\n * Grouped by ChartAccountsHeadingListEnum / ChartAccountsListEnum based on rules from documentation\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (section \"Deduction\")\n */\nexport const DEDUCTION_CATEGORIES: {[key: string]: number[]} = {\n workRelatedClothingExpenses: [\n ChartAccountsHeadingListEnum.COMPULSORY_WORK_UNIFORM,\n ChartAccountsHeadingListEnum.PROTECTION_CLOTHING,\n ChartAccountsHeadingListEnum.OCCUPATIONAL_SPECIFIC_CLOTHING\n ],\n otherIncomeRelatedExpenses: [\n ChartAccountsHeadingListEnum.OTHER_WORK_RELATED_EXPENSES,\n ChartAccountsHeadingListEnum.SUBSCRIPTIONS,\n ChartAccountsHeadingListEnum.HOME_OFFICE_RUNNING,\n ChartAccountsHeadingListEnum.HOME_OFFICE_OCCUPANCY,\n ChartAccountsHeadingListEnum.AWARD_OVERTIME_MEAL_ALLOWANCE_EXPENSE,\n ChartAccountsHeadingListEnum.NEWSPAPER,\n ChartAccountsHeadingListEnum.PRINTING_POSTAGE_STATIONERY,\n ChartAccountsHeadingListEnum.SEMINARS_ETC,\n ChartAccountsHeadingListEnum.TELEPHONE,\n ChartAccountsHeadingListEnum.UNION_FEES,\n ChartAccountsHeadingListEnum.OTHER\n ],\n workRelatedSelfEducationExpenses: [\n ChartAccountsHeadingListEnum.SELF_EDUCATIONAL_EXPENSES\n ],\n interestExpenses: [\n ChartAccountsHeadingListEnum.INTEREST_DEDUCTIONS\n ],\n dividendExpenses: [\n ChartAccountsHeadingListEnum.DIVIDEND_DEDUCTIONS\n ],\n donations: [\n ChartAccountsHeadingListEnum.DONATIONS\n ],\n otherDeductions: [\n ChartAccountsHeadingListEnum.OTHER_DEDUCTIONS\n ],\n interestsChargedByATO: [\n ChartAccountsListEnum.INTEREST_CHARGED_BY_ATO\n ],\n litigationCosts: [\n ChartAccountsListEnum.LITIGATION_COSTS\n ],\n otherManagingCosts: [\n ChartAccountsListEnum.ACCOUNTANT_TAX_AGENT_FEES,\n ChartAccountsListEnum.TRAVEL_COSTS_TO_SEE_YOUR_ACCOUNTANT_ADVISOR,\n ChartAccountsListEnum.ACCOUNTING_SOFTWARE_FEES,\n ChartAccountsListEnum.ADVISOR_FEES,\n ChartAccountsListEnum.INCOME_TAX_VARIATION,\n ChartAccountsListEnum.SOFTWARE_FEES_TAXTANK\n ],\n personalSuperContributions: [\n ChartAccountsListEnum.PERSONAL_SUPER_CONTRIBUTIONS_DEDUCTIBLE\n ],\n forestryManagedInvestmentSchemesDeductions: [\n ChartAccountsListEnum.FORESTRY_MANAGED_INVESTMENT_SCHEMES_DEDUCTION\n ]\n};\n","/**\n * Enum with work-related clothing, laundry, dry cleaning expenses types\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form\n * (\"Deductions\" section, \"D3. Work-related clothing, laundry and dry cleaning expenses\" field)\n */\nexport enum DeductionClothingTypeEnum {\n COMPULSORY_C,\n NON_COMPULSORY_N,\n PROTECTION_P,\n OCCUPATIONAL_SPECIFIC_S\n}\n","/**\n * Enum with work-related self-education expenses types\n */\nexport enum DeductionSelfEducationTypeEnum {\n IMPROVE_SKILLS_FOR_CURRENT_EARNINGS_K,\n INCOME_FROM_CURRENT_EARNINGS_I,\n OTHER_O\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { DepreciationCollection } from '../../../../collections/depreciation.collection';\nimport { DEDUCTION_CATEGORIES } from './deduction-fields.const';\nimport { ChartAccountsHeadingListEnum } from '../../../../db/Enums';\nimport { DeductionClothingTypeEnum } from './deduction-clothing-type.enum';\nimport { DeductionSelfEducationTypeEnum } from './deduction-self-education-type.enum';\nimport { TankTypeEnum } from '../../../../db/Enums/tank-type.enum';\nimport { VehicleClaim, VehicleClaimDetails } from '../../../vehicle';\nimport { Depreciation } from '../../../depreciation/depreciation';\n\nexport class MyTaxDeductions {\n /**\n * can't claim the first $250 of self-education expenses (Item code D4)\n */\n static selfEducationNotDeductibleAmount = -250;\n\n transactions: TransactionCollection;\n depreciations: DepreciationCollection;\n vehicleClaim: VehicleClaim;\n vehicleClaimDetails: VehicleClaimDetails;\n vehicleClaimRate: number;\n workRelatedClothingExpenses: TransactionCollection;\n workRelatedSelfEducationExpenses: TransactionCollection;\n personalSuperContributions: TransactionCollection;\n otherWorkRelatedExpensesTotalAmount: number;\n klmsMethodClaimAmount: number;\n totalExpensesAmount: number;\n vehicleExpensesTotalAmount: number;\n workRelatedTravelExpensesTotalAmount: number;\n workRelatedClothingType: DeductionClothingTypeEnum;\n workRelatedClothingTotalAmount: number;\n workRelatedSelfEducationType: DeductionSelfEducationTypeEnum;\n workRelatedSelfEducationTotalAmount: number;\n lowValuePoolDeductionTotalAmount: number;\n interestExpensesTotalAmount: number;\n dividendExpensesTotalAmount: number;\n donationsTotalAmount: number;\n interestsChargedByATOTotalAmount: number;\n litigationCostsTotalAmount: number;\n otherManagingCostsTotalAmount: number;\n personalSuperContributionsTotalAmount: number;\n forestryManagedInvestmentSchemesDeductionsTotalAmount: number;\n otherDeductionsTotalAmount: number;\n depreciationAndCapitalAllowancesTotalAmount: number;\n\n constructor(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n vehicleClaim: VehicleClaim,\n vehicleClaimDetails: VehicleClaimDetails,\n vehicleClaimRate: number\n ) {\n this.transactions = transactions;\n this.depreciations = depreciations;\n this.vehicleClaim = vehicleClaim;\n this.vehicleClaimDetails = vehicleClaimDetails;\n this.vehicleClaimRate = vehicleClaimRate;\n\n // user can have no selected vehicle claim\n if (this.vehicleClaim) {\n this.setVehicleClaimData();\n }\n\n this.setOtherWorkRelatedExpensesTotalAmount();\n\n this.workRelatedClothingExpenses = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.workRelatedClothingExpenses);\n this.personalSuperContributions = this.transactions\n .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.personalSuperContributions);\n this.workRelatedSelfEducationExpenses = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.workRelatedSelfEducationExpenses);\n this.vehicleExpensesTotalAmount = this.getVehicleExpensesTotalAmount();\n this.workRelatedTravelExpensesTotalAmount = this.transactions\n .filterBy('chartAccounts.heading.id', ChartAccountsHeadingListEnum.WORK_RELATED_TRAVEL_EXPENSES)\n .sumBy('claimAmount');\n this.workRelatedClothingType = this.workRelatedClothingExpenses.length ? DeductionClothingTypeEnum.COMPULSORY_C : null;\n this.workRelatedClothingTotalAmount = this.workRelatedClothingExpenses.sumBy('claimAmount');\n this.workRelatedSelfEducationType = this.workRelatedSelfEducationExpenses.length ?\n DeductionSelfEducationTypeEnum.IMPROVE_SKILLS_FOR_CURRENT_EARNINGS_K : null;\n this.workRelatedSelfEducationTotalAmount = this.calculateWorkRelatedSelfEducationTotalAmount();\n this.lowValuePoolDeductionTotalAmount = this.depreciations.getByTankType(TankTypeEnum.WORK)\n .getLVPDepreciations().sumBy('claimAmount');\n this.interestExpensesTotalAmount = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.interestExpenses)\n .sumBy('claimAmount');\n this.dividendExpensesTotalAmount = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.dividendExpenses)\n .sumBy('claimAmount');\n this.donationsTotalAmount = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.donations)\n .sumBy('claimAmount');\n this.interestsChargedByATOTotalAmount = this.transactions\n .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.interestsChargedByATO)\n .sumBy('claimAmount');\n this.litigationCostsTotalAmount = this.transactions\n .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.litigationCosts)\n .sumBy('claimAmount');\n this.otherManagingCostsTotalAmount = this.transactions\n .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.otherManagingCosts)\n .sumBy('claimAmount');\n this.personalSuperContributionsTotalAmount = this.personalSuperContributions.sumBy('claimAmount');\n this.forestryManagedInvestmentSchemesDeductionsTotalAmount = this.transactions\n .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.forestryManagedInvestmentSchemesDeductions)\n .sumBy('claimAmount');\n this.otherDeductionsTotalAmount = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.otherDeductions)\n .sumBy('claimAmount');\n this.depreciationAndCapitalAllowancesTotalAmount = this.depreciations\n .filter((depreciation: Depreciation) => !depreciation.isLVP())\n .sumBy('claimAmount');\n }\n\n private getVehicleExpensesTotalAmount(): number {\n if (this.vehicleClaimDetails) {\n return this.vehicleClaimDetails.isLogbookMethod() ? this.totalExpensesAmount : this.klmsMethodClaimAmount;\n }\n\n return 0;\n }\n\n private setVehicleClaimData(): void {\n this.klmsMethodClaimAmount = this.vehicleClaim.getKMSClaimAmount(this.vehicleClaimRate);\n this.totalExpensesAmount = this.vehicleClaim.getLogbookClaimAmount(\n new TransactionCollection([\n ...this.transactions.getByTankType(this.vehicleClaim.tankType),\n ...this.depreciations.getByTankType(this.vehicleClaim.tankType).toTransactions().toArray()\n ])\n );\n }\n\n /**\n * Total amount from Other work related expenses and Tools & equipment depreciations\n */\n private setOtherWorkRelatedExpensesTotalAmount(): void {\n const otherIncomeRelatedExpenses: TransactionCollection = this.transactions\n .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.otherIncomeRelatedExpenses);\n this.otherWorkRelatedExpensesTotalAmount = -Math.abs(otherIncomeRelatedExpenses.sumBy('claimAmount')) -\n this.depreciations.filterBy('chartAccounts.heading.id', ChartAccountsHeadingListEnum.TOOLS_EQUIPMENT).sumBy('claimAmount');\n }\n\n private calculateWorkRelatedSelfEducationTotalAmount(): number {\n return !this.workRelatedSelfEducationExpenses ? 0 :\n this.workRelatedSelfEducationExpenses.sumBy('claimAmount') - MyTaxDeductions.selfEducationNotDeductibleAmount;\n }\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { ChartAccountsListEnum, ChartAccountsMetaFieldListEnum } from '../../../../db/Enums';\n\nexport class MyTaxDividends {\n transactions: TransactionCollection;\n dividendsUnfrankedAmount: number;\n dividendsFrankedAmount: number;\n dividendsFrankingCreditsAmount: number;\n dividendsTotalTax: number;\n\n constructor(\n transactions: TransactionCollection,\n ) {\n this.transactions = transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.DIVIDENDS);\n this.dividendsUnfrankedAmount = this.transactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.UNFRANKED)\n .sumBy('value');\n this.dividendsFrankedAmount = this.transactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.FRANKED)\n .sumBy('value');\n this.dividendsFrankingCreditsAmount = this.transactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.FRANKING_CREDIT)\n .sumBy('value');\n this.dividendsTotalTax = this.transactions.sumBy('tax');\n }\n}\n","import { TaxSummarySection } from '../../../tax-summary/tax-summary-section';\nimport { TaxReturnCategoryListEnum } from '../../../../db/Enums/tax-return/tax-return-category-list.enum';\nimport { ReportItem } from '../../../tax-summary/report-item';\nimport { TaxSummary } from '../../../tax-summary/tax-summary';\nimport { plainToClass } from 'class-transformer';\nimport { ReportItemDetails } from '../../../tax-summary/report-item-details';\n\n/**\n * @Todo add link to documentation about related fields, add comments to methods\n */\nexport class MyTaxEstimate {\n taxableIncome: number;\n taxPayable: number;\n grossTaxPayable: number;\n medicareLevy: number;\n medicareLevySurcharge: number;\n taxCredits: number;\n lowMiddleIncomeTaxOffsets: number;\n percentageOfTaxPaid: number;\n taxOffsets: number;\n netRefund: number;\n\n static fromTaxSummary(taxSummary: TaxSummary): MyTaxEstimate {\n const summarySection: TaxSummarySection = taxSummary.summary;\n const grossTaxPayableReportItem: ReportItem = summarySection.items.findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.GROSS_TAX_PAYABLE);\n const medicareReportItem: ReportItem = grossTaxPayableReportItem.items.findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.MEDICARE);\n const taxOffsetsReportItem: ReportItem = summarySection.items.findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.TAX_OFFSETS);\n const lowMiddleIncomeTaxOffsets: number = this.getLowMiddleIncomeTaxOffsets(taxOffsetsReportItem);\n const taxPayable: number = grossTaxPayableReportItem.items.findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.TAX_ON_TAXABLE_INCOME).amount;\n const medicareLevy: number = medicareReportItem.details.findBy('name', 'Medicare Levy (based on single)').amount;\n const medicareLevySurcharge: number = medicareReportItem.details.findBy('name', 'Medicare Levy Surcharge').amount;\n const taxCredits: number = summarySection.items.findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.TAX_CREDITS).amount;\n const taxOffsets: number = this.getTaxOffsets(taxOffsetsReportItem.amount, lowMiddleIncomeTaxOffsets);\n\n return plainToClass(MyTaxEstimate, {\n taxableIncome: summarySection.netAmount,\n grossTaxPayable: grossTaxPayableReportItem.amount,\n lowMiddleIncomeTaxOffsets,\n taxPayable,\n medicareLevy,\n medicareLevySurcharge,\n taxCredits,\n taxOffsets,\n netRefund: taxSummary.projectedTaxPosition,\n percentageOfTaxPaid: taxSummary.taxPercent\n })\n }\n\n static getLowMiddleIncomeTaxOffsets(taxOffsetsReportItem: ReportItem): number {\n const taxOffsetLowIncome: ReportItem = taxOffsetsReportItem.items.findBy('title', 'Tax Offset Low Income');\n const taxOffsetLowMiddleIncome: ReportItem = taxOffsetsReportItem.items.findBy('title', 'Tax Offset Low and Middle Income');\n\n return taxOffsetLowIncome.amount + taxOffsetLowMiddleIncome.amount;\n }\n\n static getTaxOffsets(taxOffsetsReportItemAmount: number, lowMiddleIncomeTaxOffsets: number): number {\n return taxOffsetsReportItemAmount - lowMiddleIncomeTaxOffsets\n }\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { ChartAccountsHeadingListEnum, ChartAccountsHeadingTaxDeductibleEnum, ChartAccountsListEnum } from '../../../../db/Enums';\nimport { CollectionDictionary } from '../../../../collections/collection-dictionary';\n\nexport class MyTaxIncomeStatements {\n transactionsByChartAccounts: CollectionDictionary<TransactionCollection>;\n transactionsByChartAccountsHeadings: CollectionDictionary<TransactionCollection>;\n\n salaryTransactionsByIncomeSource: CollectionDictionary<TransactionCollection>;\n etpTransactionsByIncomeSource: CollectionDictionary<TransactionCollection>;\n superannuationLumpSumTransactionsByIncomeSource: CollectionDictionary<TransactionCollection>;\n\n allowanceTotalAmount: number;\n allowanceTotalTax: number;\n lumpATransactionsTotalAmount: number;\n lumpATransactionsTotalTax: number;\n hasGenuineLumpATransactions: boolean;\n hasOtherLumpATransactions: boolean;\n lumpBTransactionsTotalAmount: number;\n lumpBTransactionsTotalTax: number;\n australianAllowancesAndPaymentsTotalAmount: number;\n australianAllowancesAndPaymentsTotalTax: number;\n australianPensionsAndAllowancesTotalAmount: number;\n australianPensionsAndAllowancesTotalTax: number;\n australianAnnuitiesSuperannuationIncomesTotalTax: number;\n australianAnnuityPaymentsTaxed: number;\n australianAnnuityPaymentsUntaxed: number;\n assessableCappedDefinedBenefitTotalAmount: number;\n superannuationIncomeStreamsTotalTaxed: number;\n superannuationIncomeStreamsTotalUntaxed: number;\n attributablePsiTransactionsTotalAmount: number;\n attributablePsiTransactionsTotalTax: number;\n // First home super saver\n fhssTransactionsTotalAmount: number;\n fhssTransactionsTotalTax: number;\n australianSpecialPaymentsTotalAmount: number;\n australianSpecialPaymentsTotalTax: number;\n\n constructor(\n transactions: TransactionCollection\n ) {\n this.transactionsByChartAccounts = transactions.groupBy('chartAccounts.id');\n this.transactionsByChartAccountsHeadings = transactions.groupBy('chartAccounts.heading.id');\n\n this.salaryTransactionsByIncomeSource = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.SALARY_OR_WAGES)\n .groupBy('incomeSource.name');\n\n this.etpTransactionsByIncomeSource = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.ETP)\n .groupBy('incomeSource.name');\n\n this.superannuationLumpSumTransactionsByIncomeSource = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingTaxDeductibleEnum.SUPERANNUATION_LUMP_SUM)\n .groupBy('incomeSource.name');\n\n this.allowanceTotalAmount = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.ALLOWANCES_EARNINGS_TIPS_DIRECTOR_FEES)\n .sumBy('grossAmount');\n\n this.allowanceTotalTax = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.ALLOWANCES_EARNINGS_TIPS_DIRECTOR_FEES)\n .sumBy('tax');\n\n this.lumpATransactionsTotalAmount =\n this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_A_GENUINE_REDUNDANCY).sumBy('claimAmount') +\n this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_A_ALL_OTHER_PAYMENTS).sumBy('claimAmount');\n\n this.lumpATransactionsTotalTax =\n this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_A_GENUINE_REDUNDANCY).sumBy('tax') +\n this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_A_ALL_OTHER_PAYMENTS).sumBy('tax');\n\n this.hasGenuineLumpATransactions = !!this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_A_GENUINE_REDUNDANCY).length;\n this.hasOtherLumpATransactions = !!this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_A_ALL_OTHER_PAYMENTS).length;\n this.lumpBTransactionsTotalAmount = this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_B).sumBy('claimAmount');\n this.lumpBTransactionsTotalTax = this.transactionsByChartAccounts.get(ChartAccountsListEnum.LUMP_SUM_B).sumBy('tax');\n this.australianAllowancesAndPaymentsTotalAmount = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.AUSTRALIAN_GOVERNMENT_ALLOWANCES_PAYMENTS)\n .sumBy('grossAmount');\n this.australianAllowancesAndPaymentsTotalTax = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.AUSTRALIAN_GOVERNMENT_ALLOWANCES_PAYMENTS)\n .sumBy('tax');\n this.australianPensionsAndAllowancesTotalAmount = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.AUSTRALIAN_GOVERNMENT_PENSIONS_ALLOWANCES)\n .sumBy('grossAmount');\n this.australianPensionsAndAllowancesTotalTax = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingListEnum.AUSTRALIAN_GOVERNMENT_PENSIONS_ALLOWANCES)\n .sumBy('tax');\n this.australianAnnuitiesSuperannuationIncomesTotalTax = this.transactionsByChartAccountsHeadings\n .get(ChartAccountsHeadingTaxDeductibleEnum.ANNUITIES_AND_SUPERANNUATION_INCOME_STREAMS)\n .sumBy('tax');\n this.australianAnnuityPaymentsTaxed = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.AUSTRALIAN_ANNUITY_PAYMENTS).sumBy('claimAmount');\n this.australianAnnuityPaymentsUntaxed = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.AUSTRALIAN_ANNUITY_PAYMENTS).sumBy('untaxedElement');\n this.assessableCappedDefinedBenefitTotalAmount = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.ASSESSABLE_AMOUNT_CAPPED_DEFINED_BENEFIT).sumBy('claimAmount');\n this.superannuationIncomeStreamsTotalTaxed = this.transactionsByChartAccounts.merge([\n ChartAccountsListEnum.CODE_B_SUPERANNUATION_INCOME_STREAMS_DISABILITY,\n ChartAccountsListEnum.CODE_A_SUPERANNUATION_INCOME_STREAMS_DEATH\n ]).sumBy('claimAmount');\n this.superannuationIncomeStreamsTotalUntaxed = this.transactionsByChartAccounts.merge([\n ChartAccountsListEnum.CODE_B_SUPERANNUATION_INCOME_STREAMS_DISABILITY,\n ChartAccountsListEnum.CODE_A_SUPERANNUATION_INCOME_STREAMS_DEATH\n ]).sumBy('untaxedElement');\n this.attributablePsiTransactionsTotalAmount = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.ATTRIBUTABLE_PSI).sumBy('grossAmount');\n this.attributablePsiTransactionsTotalTax = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.ATTRIBUTABLE_PSI).sumBy('tax');\n this.fhssTransactionsTotalAmount = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.FHSS).sumBy('grossAmount');\n this.fhssTransactionsTotalTax = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.FHSS).sumBy('tax');\n // Australian Government Special Payments\n this.australianSpecialPaymentsTotalAmount = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.AUSTRALIAN_GOVERNMENT_SPECIAL_PAYMENTS).sumBy('grossAmount');\n this.australianSpecialPaymentsTotalTax = this.transactionsByChartAccounts\n .get(ChartAccountsListEnum.AUSTRALIAN_GOVERNMENT_SPECIAL_PAYMENTS).sumBy('tax');\n }\n}\n","import { TransactionCollection } from '../../../../collections/transaction/transaction.collection';\n\n/**\n * @Todo future functionality\n */\nexport class MyTaxIncomeTests {\n constructor(\n transactions: TransactionCollection,\n ) {\n }\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { ChartAccountsListEnum } from '../../../../db/Enums';\n\nexport class MyTaxInterest {\n interestEarnedTransactions: TransactionCollection;\n interestPaidTransactions: TransactionCollection;\n interestEarnedTotalAmount: number;\n interestEarnedTotalTax: number;\n interestPaidTotalAmount: number;\n\n constructor(\n transactions: TransactionCollection,\n ) {\n this.interestEarnedTransactions = transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.INTEREST_EARNED);\n this.interestPaidTransactions = transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.ATO_INTEREST_PAID);\n this.interestEarnedTotalAmount = this.interestEarnedTransactions.sumBy('grossAmount');\n this.interestEarnedTotalTax = this.interestEarnedTransactions.sumBy('tax');\n this.interestPaidTotalAmount = this.interestPaidTransactions.sumBy('grossAmount');\n }\n}\n","import {\n SoleBusinessLossesCollection,\n TransactionAllocationCollection,\n TransactionCollection\n} from '../../../../collections';\n\n/**\n * Sole business losses report\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form (\"Losses\" section)\n */\nexport class MyTaxLosses {\n /**\n * Losses carried forward from earlier income years\n */\n businessLossDeferred: number;\n\n /**\n * Losses applied to the current year (until profit gets to $0)\n */\n businessLossApplied: number;\n\n constructor(\n private businessLosses: SoleBusinessLossesCollection,\n private transactions: TransactionCollection,\n private allocations: TransactionAllocationCollection,\n ) {\n this.businessLossDeferred = businessLosses.sumBy('openBalance');\n this.businessLossApplied = businessLosses.calculateBusinessLossApplied(transactions, allocations);\n }\n}\n","import { TransactionCollection } from '../../../../collections/transaction/transaction.collection';\n\n/**\n * @Todo waiting for new chart accounts implemented (TT-1739 & TT-1740)\n */\nexport class MyTaxOffsets {\n constructor(\n transactions: TransactionCollection,\n ) {\n }\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { ChartAccountsHeadingListEnum, ChartAccountsListEnum, ChartAccountsMetaFieldListEnum } from '../../../../db/Enums';\n\nexport class MyTaxOtherIncome {\n transactions: TransactionCollection;\n employeeShareSchemesTransactions: TransactionCollection;\n eligibleForReductionAmount: number;\n notEligibleForReductionAmount: number;\n discountFromDeferredSchemeAmount: number;\n totalAssessableDiscountAmount: number;\n shareSchemesTotalTax: number;\n lumpSumPaymentsInArrearsTransactions: TransactionCollection;\n bonusesTotalAmount: number;\n forestryManagedInvestmentSchemesIncomeTotalAmount: number;\n lumpSumPaymentsInArrearsTotalTax: number;\n specialProfessionIncomeTotalAmount: number;\n category1TotalIncome: number;\n atoInterestPaidTotalAmount: number;\n gainOnSaleOfVehiclePreviouslyDepreciatedTotalAmount: number;\n\n constructor(\n transactions: TransactionCollection,\n ) {\n this.transactions = transactions;\n this.employeeShareSchemesTransactions = transactions\n .filterBy('chartAccounts.id', ChartAccountsListEnum.EMPLOYEE_SHARE_SCHEME_INCOME);\n\n // Employee Share Schemes data\n this.eligibleForReductionAmount = this.employeeShareSchemesTransactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.ELIGIBLE_FOR_REDUCTION)\n .sumBy('value');\n this.notEligibleForReductionAmount = this.employeeShareSchemesTransactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.NOT_ELIGIBLE_FOR_DEDUCTION)\n .sumBy('value');\n this.discountFromDeferredSchemeAmount = this.employeeShareSchemesTransactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.DISCOUNT_FROM_DEFERRED_SCHEMES)\n .sumBy('value');\n this.totalAssessableDiscountAmount = this.employeeShareSchemesTransactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.NOT_ELIGIBLE_FOR_DEDUCTION)\n .sumBy('value') +\n this.employeeShareSchemesTransactions.getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.DISCOUNT_FROM_DEFERRED_SCHEMES)\n .sumBy('value');\n this.shareSchemesTotalTax = this.employeeShareSchemesTransactions.sumBy('tax');\n\n // Other income data\n this.lumpSumPaymentsInArrearsTransactions = this.transactions\n .filterBy('chartAccounts.id', ChartAccountsListEnum.LUMP_SUM_PAYMENTS_IN_ARREARS);\n this.bonusesTotalAmount = this.transactions\n .filterBy('chartAccounts.heading.id', ChartAccountsHeadingListEnum.BONUSES)\n .sumBy('grossAmount');\n this.forestryManagedInvestmentSchemesIncomeTotalAmount = this.transactions\n .filterBy('chartAccounts.id', ChartAccountsListEnum.FORESTRY_MANAGED_INVESTMENT_SCHEMES_INCOME)\n .sumBy('grossAmount');\n this.lumpSumPaymentsInArrearsTotalTax = this.lumpSumPaymentsInArrearsTransactions.sumBy('tax');\n this.specialProfessionIncomeTotalAmount = this.transactions\n .filterBy('chartAccounts.id', ChartAccountsListEnum.SPECIAL_PROFESSION_INCOME).sumBy('grossAmount');\n this.category1TotalIncome = this.lumpSumPaymentsInArrearsTransactions.sumBy('grossAmount') +\n this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.JURY_ATTENDANCE_FEES).sumBy('grossAmount') +\n this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.FOREIGN_EXCHANGE_GAINS_NON_BUSINESS).sumBy('grossAmount') +\n this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.ROYALTIES).sumBy('grossAmount') +\n this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TAXABLE_SCHOLARSHIPS_BURSARIES_GRANTS).sumBy('grossAmount');\n this.atoInterestPaidTotalAmount = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.ATO_INTEREST_PAID).sumBy('grossAmount');\n this.gainOnSaleOfVehiclePreviouslyDepreciatedTotalAmount = this.transactions\n .filterBy('chartAccounts.id', ChartAccountsListEnum.GAIN_ON_SALE_OF_VEHICLE_PREVIOUSLY_DEPRECIATED)\n .sumBy('grossAmount');\n }\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { ChartAccountsHeadingTaxableEnum, ChartAccountsListEnum, ChartAccountsMetaFieldListEnum } from '../../../../db/Enums';\nimport { IncomeSourceCollection } from '../../../../collections/income-source/income-source.collection';\n\nexport class MyTaxPartnershipsAndTrusts {\n transactions: TransactionCollection;\n incomeSources: IncomeSourceCollection;\n partnershipsIncomes: TransactionCollection;\n partnershipsExpenses: TransactionCollection;\n trustsIncomes: TransactionCollection;\n trustsExpenses: TransactionCollection;\n partnershipsIncomeTotalAmount: number;\n partnershipsExpenseTotalAmount: number;\n trustsIncomeTotalTax: number;\n trustsIncomeTotalAmount: number;\n trustsExpenseTotalAmount: number;\n partnershipsNetNonPrimaryProductionAmount: number;\n trustsNetNonPrimaryProductionAmount: number;\n frankingCreditsTotal: number;\n taxOffsetNRASTotalAmount: number;\n\n constructor(\n transactions: TransactionCollection,\n incomeSources: IncomeSourceCollection,\n ) {\n this.transactions = transactions;\n this.incomeSources = incomeSources;\n this.partnershipsIncomes = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.PARTNERSHIP_INCOME);\n this.partnershipsExpenses = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.PARTNERSHIP_EXPENSES);\n this.trustsIncomes = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TRUST_INCOME);\n this.trustsExpenses = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TRUST_EXPENSES);\n this.partnershipsIncomeTotalAmount = this.partnershipsIncomes.sumBy('amount');\n this.partnershipsExpenseTotalAmount = this.partnershipsExpenses.sumBy('amount');\n this.trustsIncomeTotalAmount = this.trustsIncomes.sumBy('amount');\n this.trustsExpenseTotalAmount = this.trustsExpenses.sumBy('amount');\n this.partnershipsNetNonPrimaryProductionAmount = this.partnershipsIncomeTotalAmount - this.partnershipsExpenseTotalAmount;\n this.trustsNetNonPrimaryProductionAmount = this.trustsIncomeTotalAmount - this.trustsExpenseTotalAmount;\n this.frankingCreditsTotal = this.transactions\n .filterBy('chartAccounts.heading.id', ChartAccountsHeadingTaxableEnum.PARTNERSHIPS_AND_TRUSTS_INCOME)\n .getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.FRANKING_CREDIT)\n .sumBy('value');\n this.trustsIncomeTotalTax = this.trustsIncomes.sumBy('tax');\n this.frankingCreditsTotal = this.transactions\n .filterBy('chartAccounts.heading.id', ChartAccountsHeadingTaxableEnum.PARTNERSHIPS_AND_TRUSTS_INCOME)\n .getTransactionsMetaFields()\n .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.FRANKING_CREDIT)\n .sumBy('value');\n this.taxOffsetNRASTotalAmount = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TAX_OFFSETS_N_R_A_S).sumBy('amount');\n }\n}\n","import { TransactionCollection } from '../../../../collections';\nimport { ChartAccountsListEnum } from '../../../../db/Enums';\nimport { DepreciationCollection } from '../../../../collections';\nimport { TaxSummary } from '../../../tax-summary/tax-summary';\nimport { TaxSummarySection } from '../../../tax-summary/tax-summary-section';\nimport { TaxReturnCategoryListEnum } from '../../../../db/Enums/tax-return/tax-return-category-list.enum';\nimport round from 'lodash/round';\n\nexport class MyTaxRent {\n propertyExpenses: TransactionCollection;\n taxSummaryPropertySection: TaxSummarySection;\n grossRentAmount: number;\n interestDeductionsAmount: number;\n capitalWorksDeductionsAmount: number;\n otherRentalDeductionsAmount: number;\n netRent: number;\n\n constructor(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n taxSummary: TaxSummary\n ) {\n this.propertyExpenses = transactions.getPropertyTransactions().getExpenseTransactions();\n this.taxSummaryPropertySection = taxSummary.property;\n this.grossRentAmount = transactions\n .getPropertyTransactions()\n .getIncomeTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.RENTAL_INCOME)\n .sumBy('claimAmount') +\n transactions\n .getPropertyTransactions()\n .getIncomeTransactions()\n .filterBy('chartAccounts.id', ChartAccountsListEnum.OTHER_RENTAL_INCOME)\n .sumBy('claimAmount');\n\n this.interestDeductionsAmount = Math.abs(transactions.getInterestTransactions().sumBy('claimAmount'));\n this.capitalWorksDeductionsAmount = Math.abs(depreciations.getCapitalDepreciations().sumBy('claimAmount'));\n\n this.otherRentalDeductionsAmount = this.calculateOtherRentalDeductionsAmount();\n\n /**\n * @Todo Vik uncomment when task TT-2009 will be implemented\n */\n // this.otherRentalDeductionsAmount = depreciations.getByTankType(TankTypeEnum.PROPERTY).getAssets().claimAmount +\n // depreciations.getByTankType(TankTypeEnum.PROPERTY).getBorrowingExpenseDepreciations().claimAmount +\n // Math.abs(this.propertyExpenses.sumBy('claimAmount'));\n\n this.netRent = this.grossRentAmount -\n this.interestDeductionsAmount -\n this.capitalWorksDeductionsAmount -\n this.otherRentalDeductionsAmount;\n }\n\n /**\n * @Todo Vik remove when TT-2009 will be implemented.\n * We use tax summary data here because claim amount from depreciation is different\n * from the claim amount that we get from tax summary (depreciation claim amount is not affected by property share,\n * property contract date, e.t.c.). Details in the TT-2009 task\n */\n private calculateOtherRentalDeductionsAmount(): number {\n const plantAndEquipmentAmount: number = Math.abs(this.taxSummaryPropertySection.items\n .findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.PLANT_AND_EQUIPMENT)?.amount || 0);\n\n const borrowingExpensesAmount: number = Math.abs(\n this.taxSummaryPropertySection.items\n .findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.BORROWING_EXPENSES)?.amount || 0);\n\n const otherRentalDeductionsAmount: number = Math.abs(this.taxSummaryPropertySection.items\n .findBy('taxReturnCategory.id', TaxReturnCategoryListEnum.OTHER_RENTAL_DEDUCTIONS)?.amount || 0);\n\n return round(plantAndEquipmentAmount + borrowingExpensesAmount + otherRentalDeductionsAmount, 2);\n }\n}\n","/**\n * Australian Taxation Office (ATO) website links\n */\nexport const atoLinks: { [key: string]: string } = {\n medicareLevy: 'https://www.ato.gov.au/Individuals/Medicare-and-private-health-insurance/Medicare-levy/',\n medicalExemption: 'https://www.ato.gov.au/Individuals/Medicare-and-private-health-insurance/Medicare-levy/Medicare-levy-exemption/Medical-exemption-from-Medicare-levy/',\n foreignResidentsExemption: 'https://www.ato.gov.au/Individuals/Medicare-and-private-health-insurance/Medicare-levy/Medicare-levy-exemption/Foreign-residents-Medicare-levy-exemption/',\n notEntitledToMedicareBenefits: 'https://www.ato.gov.au/Individuals/Medicare-and-private-health-insurance/Medicare-levy/Medicare-levy-exemption/Not-entitled-to-Medicare-benefits/#:~:text=If%20you%20were%20not%20entitled,an%20exemption%20under%20category%203.&text=are%20a%20member%20of%20a,Australia%20and%20meet%20other%20conditions',\n privateHealthInsuranceRebate: 'https://www.ato.gov.au/Individuals/Medicare-and-private-health-insurance/Private-health-insurance-rebate/#Appropriatelevelofprivatehospitalinsuran'\n};\n","/**\n * 'My Tax' report related data (classes, enums, const, e.t.c)\n */\nexport * from './my-tax-business-income-or-losses/business-type.enum';\nexport * from './my-tax-business-income-or-losses/loss-type.enum';\nexport * from './my-tax-business-income-or-losses/my-tax-business-details/my-tax-business-details';\nexport * from './my-tax-business-income-or-losses/my-tax-business-income/my-tax-business-income';\nexport * from './my-tax-business-income-or-losses/my-tax-business-losses/my-tax-business-losses';\nexport * from './my-tax-cgt/my-tax-cgt';\nexport * from './my-tax-cgt/cgt-exemption-and-rollover-code.enum';\nexport * from './my-tax-deductions/my-tax-deductions';\nexport * from './my-tax-deductions/deduction-fields.const';\nexport * from './my-tax-deductions/deduction-self-education-type.enum';\nexport * from './my-tax-deductions/deduction-clothing-type.enum';\nexport * from './my-tax-dividends/my-tax-dividends';\nexport * from './my-tax-estimate/my-tax-estimate';\nexport * from './my-tax-income-statements/my-tax-income-statements';\nexport * from './my-tax-income-tests/my-tax-income-tests';\nexport * from './my-tax-interest/my-tax-interest';\nexport * from './my-tax-losses/my-tax-losses';\nexport * from './my-tax-offsets/my-tax-offsets';\nexport * from './my-tax-other-income/my-tax-other-income';\nexport * from './my-tax-partnerships-and-trusts/my-tax-partnerships-and-trusts';\nexport * from './my-tax-rent/my-tax-rent';\nexport * from './ato-links';\n","import { SoleBusinessLoss } from '../../../sole';\nimport {DepreciationCollection, TransactionAllocationCollection, TransactionCollection} from '../../../../collections';\nimport { AbstractModel } from '../../../../db/Models';\nimport {TransactionAllocation} from '../../../transaction';\n\n/**\n * Class with business loss details\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4641357930/Rules+when+a+business+makes+a+loss+Tax+Summary\n */\nexport class SoleBusinessLossReport extends AbstractModel {\n /**\n * Business prior year losses\n */\n openBalance: number;\n\n /**\n * Net income reduced by the opening balance amount, that will be carried over to the next year, if it is positive\n */\n closeBalance: number;\n\n netIncome: number;\n\n constructor(loss: SoleBusinessLoss, transactions: TransactionCollection, depreciations: DepreciationCollection, allocations: TransactionAllocation[]) {\n super();\n this.openBalance = loss.openBalance;\n const claimAmount = new TransactionCollection(transactions.toArray(), depreciations.toArray())\n .getBusinessClaimAmount(new TransactionAllocationCollection(allocations), loss.business.id);\n this.netIncome = claimAmount;\n\n this.closeBalance = loss.offsetRule ? 0 : Math.min(0, claimAmount - this.openBalance);\n }\n}\n","/**\n * Vehicle expense for logbook section\n */\nimport {AbstractModel} from '../../../db/Models';\nimport round from 'lodash/round';\n\nexport class VehicleExpense extends AbstractModel {\n description: string;\n amount: number;\n claimPercent: number;\n\n constructor(\n amount: number,\n claimPercent: number,\n description: string\n ) {\n super();\n this.amount = amount;\n this.claimPercent = claimPercent;\n this.description = description;\n }\n\n getClaimAmount(): number {\n return round(this.amount * (this.claimPercent / 100), 2);\n }\n}\n","import { Collection } from '../../collection';\nimport { VehicleExpense } from '../../../models/report';\nimport { TransactionCollection } from '../../transaction';\nimport { DepreciationCollection } from '../../depreciation.collection';\n\nexport class VehicleExpenseCollection extends Collection<VehicleExpense> {\n constructor(transactions: TransactionCollection, depreciations: DepreciationCollection) {\n super();\n this.setItems(transactions, depreciations);\n }\n\n private setItems(transactions: TransactionCollection, depreciations: DepreciationCollection): void {\n this.items = [];\n\n const transactionsByChartAccounts = transactions.groupBy('chartAccounts.name');\n\n const transactionExpenses: VehicleExpense[] = transactionsByChartAccounts.keys.map((chartAccountsName: string) => new VehicleExpense(\n transactionsByChartAccounts.get(chartAccountsName).amount,\n transactionsByChartAccounts.get(chartAccountsName).first.claimPercent,\n chartAccountsName\n ));\n\n // group all depreciations into one expense item\n const depreciationExpense: VehicleExpense = new VehicleExpense(\n -depreciations.getCurrentYearForecastAmount(),\n depreciations.first?.claimPercent ?? 0,\n 'Depreciation'\n );\n\n this.items.push(...[depreciationExpense, ...transactionExpenses]);\n }\n}\n","import get from 'lodash/get';\nimport hasIn from 'lodash/hasIn';\n\n/**\n * List of objects grouped by passed property\n */\nexport class Dictionary<Model> {\n items: { [key: string]: Model } = {};\n\n constructor(\n items: Model[],\n path = 'id'\n ) {\n if (!items.length) {\n return;\n }\n\n // Do nothing if provided path was not found in the 1st item\n if (!hasIn(items[0], path.split('.')[0])) {\n return;\n }\n\n this.groupItems(items, path);\n }\n\n add(key: string | number, value: Model): void {\n this.items[key] = value;\n }\n\n get(key: string | number): Model {\n return this.items[key] !== undefined ? this.items[key] : null;\n }\n\n merge(dictionary: Dictionary<Model>): this {\n Object.assign(this.items, dictionary.items);\n\n return this;\n }\n\n toArray(): Model[] {\n return Object.values(this.items);\n }\n\n private groupItems(items: Model[], path: string): void {\n items.forEach((item: Model): void => {\n let key: string = get(item, path);\n\n // if object does not have property for grouping it will be grouped as 'other'\n if (key === undefined) {\n key = 'other';\n }\n\n this.items[key] = item;\n });\n }\n\n get keys(): string[] {\n return Object.keys(this.items);\n }\n}\n","import { Collection } from '../collection';\nimport {SoleBusinessLoss, SoleBusinessLossOffsetRule, TransactionAllocation} from '../../models';\nimport { CollectionDictionary } from '../collection-dictionary';\nimport { Dictionary } from '../../models/dictionary/dictionary';\nimport {TransactionAllocationCollection, TransactionCollection} from '../transaction';\n\nexport class SoleBusinessLossesCollection extends Collection<SoleBusinessLoss> {\n /**\n * Business loss applied in current year, includes previous year losses and current year losses for businesses matching offset rule\n */\n calculateBusinessLossApplied(transactions: TransactionCollection, allocations: TransactionAllocationCollection): number {\n // claim amounts for businesses that can be applied to be reduced by prior year business losses\n const claimAmountsByBusinessId: Dictionary<number> = this.getClaimAmountsByBusinessId(transactions, allocations);\n\n return Object.keys(claimAmountsByBusinessId.items).reduce((sum: number, businessId: string) => {\n const loss: SoleBusinessLoss = this.findBy('business.id', +businessId);\n const lossOpenBalance: number = loss?.openBalance || 0;\n\n // business loss can be applied to business profit or other income types profit in case in offset rule met\n return sum + (loss?.offsetRule ? lossOpenBalance : Math.min(lossOpenBalance, claimAmountsByBusinessId.get(businessId)));\n }, 0)\n }\n\n /**\n * Get business claim amounts that can be applied to be reduced by prior year business losses:\n * businesses with income or businesses with a loss, but which met the non-commercial loss rules\n * https://www.ato.gov.au/Business/Non-commercial-losses/\n */\n private getClaimAmountsByBusinessId(transactions: TransactionCollection, allocations: TransactionAllocationCollection): Dictionary<number> {\n const claimAmountsByBusinessId: Dictionary<number> = new Dictionary<number>([]);\n\n const transactionsByBusinessId: CollectionDictionary<TransactionCollection> = transactions.groupBy('business.id');\n\n transactionsByBusinessId.keys.forEach((businessId: string) => {\n // business loss may not exist if, when creating a business, user didn't add losses for previous years\n const lossOffsetRule: SoleBusinessLossOffsetRule = this.findBy('business.id', +businessId)?.offsetRule;\n const businessClaimAmount: number = transactionsByBusinessId\n .get(businessId)\n .getBusinessClaimAmount(allocations, +businessId);\n\n // @TODO vik it has nothing to do with getClaimAmountsByBusinessId\n // no way to apply loss for business without profit if offset rules not met\n if (businessClaimAmount < 0 && !lossOffsetRule) {\n return;\n }\n\n claimAmountsByBusinessId.add(businessId, businessClaimAmount);\n });\n\n return claimAmountsByBusinessId;\n }\n}\n","import { Collection } from '../collection';\nimport { SoleInvoiceItem } from '../../models';\n\nexport class SoleInvoiceItemCollection extends Collection<SoleInvoiceItem>{\n get gstPrice(): number {\n return this.filterBy('isGST', true).sumBy('totalPrice');\n }\n}\n","import { Collection } from '../collection';\nimport { SoleInvoice } from '../../models';\nimport flatten from 'lodash/flatten';\n\nexport class SoleInvoiceCollection extends Collection<SoleInvoice> {\n getOverdue(): this {\n return this.filter((invoice: SoleInvoice) => invoice.isOverdue())\n }\n\n getUnpaid(): this {\n return this.filter((invoice: SoleInvoice) => invoice.isUnpaid())\n }\n\n getPaid(): this {\n return this.filter((invoice: SoleInvoice) => invoice.isPaid())\n }\n\n getPaidCash(): this {\n return this.filter((invoice: SoleInvoice) => invoice.isPaidCash())\n }\n\n getPending(): this {\n return this.filter((invoice: SoleInvoice) => invoice.isPending())\n }\n\n getTransactionsIds(): number[] {\n return flatten(this.items.map((invoice: SoleInvoice) => invoice.getTransactionsIds()));\n }\n}\n","import { Collection } from '../collection';\nimport { ServiceProduct } from '../../models';\nimport { ServiceProductStatusEnum } from '../../db/Enums/subscription/service-product-status.enum';\n\nexport class ServiceProductCollection extends Collection<ServiceProduct> {\n get title(): string {\n return this.mapBy('title').join(', ');\n }\n\n getActive(): this {\n return this.filterBy('status', ServiceProductStatusEnum.ACTIVE);\n }\n}\n","import { Collection } from '../collection';\nimport { ServicePrice } from '../../models';\nimport {ServicePriceTypeEnum} from '../../db/Enums/subscription/service-price-type.enum';\nimport {ServiceProductIdEnum} from '../../db/Enums/subscription/service-product-id.enum';\nimport {ServiceProductCollection} from './service-product.collection';\n\n/**\n * @TODO vik refactor\n */\nexport class ServicePriceCollection extends Collection<ServicePrice> {\n getActive(): this {\n return this.filterBy('isActive', true);\n }\n\n get monthly(): this {\n return this.filterBy('type', ServicePriceTypeEnum.MONTHLY);\n }\n\n get monthlyPackage(): this {\n return this.filterBy('type', ServicePriceTypeEnum.MONTHLY_PACKAGE);\n }\n\n getMonthlyPackageSum(propertyQuantity): number {\n const property = this.monthlyPackage.findBy('product.id', ServiceProductIdEnum.PROPERTIES);\n\n // @TODO move to const\n // default number of properties should be 5\n return this.monthlyPackage.sumBy('amount') + property.amount * (propertyQuantity - 1);\n }\n\n get annual(): this {\n return this.filterBy('type', ServicePriceTypeEnum.YEARLY);\n }\n\n get annualPackage(): this {\n return this.filterBy('type', ServicePriceTypeEnum.YEARLY_PACKAGE);\n }\n\n getAnnualPackageSum(propertyQuantity): number {\n const property = this.annualPackage.findBy('product.id', ServiceProductIdEnum.PROPERTIES);\n\n // @TODO move to const\n // the default number of properties should be 5.\n return this.annualPackage.sumBy('amount') + property.amount * (propertyQuantity - 1);\n }\n\n getProperty(isAnnual: boolean, isPackage: boolean): ServicePrice {\n let type;\n\n if (isAnnual) {\n type = isPackage ? ServicePriceTypeEnum.YEARLY_PACKAGE : ServicePriceTypeEnum.YEARLY;\n } else {\n type = isPackage ? ServicePriceTypeEnum.MONTHLY_PACKAGE : ServicePriceTypeEnum.MONTHLY;\n }\n\n return this.filterBy('type', type).findBy('product.id', ServiceProductIdEnum.PROPERTIES);\n }\n\n get products(): ServiceProductCollection {\n return new ServiceProductCollection(this.mapBy('product'));\n }\n}\n","import { Collection } from '../collection';\nimport { ServiceProduct, ServiceSubscriptionItem } from '../../models';\nimport {ServicePriceCollection} from './service-price.collection';\n\nexport class SubscriptionItemCollection extends Collection<ServiceSubscriptionItem> {\n get propertiesItem(): ServiceSubscriptionItem {\n return this.filter((item: ServiceSubscriptionItem): boolean => item.price.product.isProperties()).last;\n }\n\n get propertyQuantity(): number {\n return this.propertiesItem ? this.propertiesItem.quantity : 0;\n }\n\n hasProduct(product: ServiceProduct): boolean {\n return !!this.findBy('price.product.id', product.id);\n }\n\n get prices(): ServicePriceCollection {\n return new ServicePriceCollection(this.mapBy('price'));\n }\n}\n","import { Collection } from '../collection';\nimport flatten from 'lodash/flatten';\nimport {SubscriptionItemCollection} from './subscription-item.collection';\nimport {Dictionary, ServiceProduct, ServiceSubscription, ServiceSubscriptionItem} from '../../models';\n\nexport class ServiceSubscriptionCollection extends Collection<ServiceSubscription> {\n getActive(): this {\n return this.filter((subscription) => subscription.isActive);\n }\n\n getInactive(): this {\n return this.filter((subscription) => !subscription.isActive);\n }\n\n getTrials(): this {\n return this.filterBy('stripeId', null);\n }\n\n getActiveTrials(): this {\n return this.getActive().getTrials();\n }\n\n getExpiredTrials(): this {\n // @TODO vik remove paid products\n return this.getInactive().getTrials();\n }\n\n getExpiredAfter(date?: Date): this {\n return this.getInactive().filter((item) => !date || item.endDate >= date);\n }\n\n getPaid(): this {\n return this.filter((subscription) => !!subscription.stripeId);\n }\n\n getActivePaid(): ServiceSubscription {\n return this.getActive().find((subscription) => !!subscription.stripeId);\n }\n\n /**\n * @TODO vik remove trials replaced by paid item\n */\n getItems(): SubscriptionItemCollection {\n return new SubscriptionItemCollection(flatten(this.mapBy('items')));\n }\n\n groupByProduct(products: Collection<ServiceProduct>): Dictionary<ServiceSubscription> {\n const dictionary: Dictionary<ServiceSubscription> = new Dictionary<ServiceSubscription>([]);\n\n products.toArray().forEach((product: ServiceProduct) => {\n const subscriptions = this.filterByProduct(product);\n dictionary.add(product.id, (subscriptions.getPaid().last ?? subscriptions.getTrials().first));\n });\n\n return dictionary;\n }\n\n findByProduct(product: ServiceProduct): ServiceSubscription {\n return this.find((subscription: ServiceSubscription) => subscription.roles.includes(product.role));\n }\n\n filterByProduct(product: ServiceProduct): this {\n return this.filter((subscription: ServiceSubscription) => subscription.roles.includes(product.role));\n }\n\n hasPropertyTank(): boolean {\n return !!this.getItems().propertiesItem;\n }\n}\n","import {Collection} from '../collection';\nimport {ReportItem} from '../../models/tax-summary/report-item';\nimport {TaxReturnCategoryListEnum} from '../../db/Enums/tax-return/tax-return-category-list.enum';\nimport {ReportItemDetails} from '../../models/tax-summary/report-item-details';\nimport {TaxSummarySectionEnum} from '../../db/Enums/tax-summary-section.enum';\nimport {IncomeSource} from '../../models/income-source/income-source';\nimport compact from 'lodash/compact';\n\n/**\n * collection for tax return category items\n */\nexport class ReportItemCollection extends Collection<ReportItem> {\n /**\n * Recursively get collection of report items by Tax Summary Section.\n * Search items which has details\n */\n getBySection(section: TaxSummarySectionEnum): ReportItemCollection {\n const result: ReportItem[] = [];\n\n for (const reportItem of this.items) {\n if ((reportItem.details.length || reportItem.amount) && reportItem.taxReturnCategory.section === section) {\n result.push(reportItem)\n } else {\n result.push(...reportItem.items.getBySection(section).toArray());\n }\n }\n\n return this.create(result);\n }\n\n getByCategory(categoryId: TaxReturnCategoryListEnum): ReportItem[] {\n const result: ReportItem[] = [];\n\n for (const reportItem of this.items) {\n if (reportItem.taxReturnCategory.id === categoryId) {\n result.push(reportItem);\n } else if(reportItem.items && reportItem.items.getByCategory(categoryId).length) {\n result.push(...reportItem.items.getByCategory(categoryId));\n }\n }\n\n return result;\n }\n\n /**\n * Recursively find report item by Tax Return Category ID\n */\n findByCategory(categoryId: TaxReturnCategoryListEnum): ReportItem {\n let result: ReportItem;\n\n for (const reportItem of this.items) {\n if (result) {\n break;\n }\n\n if (reportItem.taxReturnCategory.id === categoryId) {\n result = reportItem;\n } else {\n result = reportItem.items.findByCategory(categoryId);\n }\n }\n\n return result;\n }\n\n /**\n * get Collection of report items by Tax Return Categories IDs (one item per category)\n */\n findByCategories(categories: TaxReturnCategoryListEnum[]): ReportItemCollection {\n return this.create(\n compact(categories.map((category: TaxReturnCategoryListEnum) => this.findByCategory(category)))\n );\n }\n\n /**\n * Get Collection of report items by Tax Return Categories IDs (all items per category)\n */\n getByCategories(categories: TaxReturnCategoryListEnum[]): ReportItemCollection {\n const reportItems: ReportItem[] = [];\n categories.forEach((category) => {\n reportItems.push(...this.getByCategory(category));\n });\n\n return this.create(reportItems);\n }\n\n /**\n * A short call to a chain of methods that we often use.\n * Get total amount of report items by Tax Return categories and Tax Summary Section.\n */\n sumByCategoriesAndSection(categories: TaxReturnCategoryListEnum[], section: TaxSummarySectionEnum): number {\n return this.findByCategories(categories).getBySection(section).sumBy('amount');\n }\n\n /**\n * @TODO vik refactor once Nicole approved\n * unlike sumByCategoriesAndSection, which find just one reportItem per category,\n * this method will search for recursively for all matches\n */\n sumByCategories(categories: TaxReturnCategoryListEnum[]): number {\n return this.getByCategories(categories).sumBy('amount');\n }\n\n /**\n * Get collection of all report item details related to passed income source\n * @TODO Alex: consider to create and move to ReportItemDetailsCollection\n */\n getDetailsByIncomeSource(incomeSource: IncomeSource): Collection<ReportItemDetails> {\n const result: ReportItemDetails[] = [];\n\n for (const reportItem of this.items) {\n if (reportItem.details.length) {\n result.push(...reportItem.details.filter((details: ReportItemDetails) => details.name === incomeSource.name));\n } else {\n result.push(...reportItem.items.getDetailsByIncomeSource(incomeSource).toArray());\n }\n }\n\n return new Collection<ReportItemDetails>(result);\n }\n}\n","import { Collection } from '../collection';\nimport { VehicleClaim, VehicleLogbook } from '../../models';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport round from 'lodash/round';\nimport { BestVehicleLogbookCollection } from './best-vehicle-logbook.collection';\n\nexport class VehicleLogbookCollection extends Collection<VehicleLogbook> {\n /**\n * Get collection of non-personal logbooks (work-related, sole-related).\n * @TODO Vik: Best period: move this and related logic to backend\n */\n getClaimableLogbooks(isSole: boolean = false): this {\n return this.filter((logbook: VehicleLogbook) => !logbook.isPersonal && (isSole ? logbook.isSoleTank() : logbook.isWorkTank()));\n }\n\n /**\n * Calculate total kilometers traveled\n */\n get kilometers(): number {\n return this.sumBy('kilometers');\n }\n\n /**\n * Calculate work usage (percent of business-related kilometers from total kilometers)\n * @TODO Alex: TT-2089 replace with getter\n */\n get workUsage(): number {\n if (!this.length) {\n return 0;\n }\n\n const workKilometers = this.items\n .filter((logbook: VehicleLogbook) => !logbook.isPersonal)\n .reduce((sum, logbook) => sum + logbook.kilometers, 0);\n\n return round(workKilometers / this.kilometers * 100, 2);\n }\n\n getWorkUsageByTank(isSole: boolean): number {\n const workKilometers = this.getClaimableLogbooks(isSole).items\n .reduce((sum, logbook) => sum + logbook.kilometers, 0);\n\n return round(workKilometers / this.kilometers * 100, 2);\n }\n\n /**\n * Get list of logbooks related to passed vehicle claim\n */\n getByVehicleClaim(vehicleClaim: VehicleClaim): this {\n return vehicleClaim.isSoleTank()\n // sole tank may have multiple vehicle claims, so we need to filter by business.id\n ? this.filterBy('business.id', vehicleClaim.business.id)\n // work tank may have only one vehicle claim, so we need to filter by tank type\n : this.filterBy('tankType', TankTypeEnum.WORK);\n }\n\n /**\n * get collection of logbooks with the biggest work usage for {@link BestVehicleLogbookCollection.periodDuration}\n */\n getBest(isSole: boolean = false): BestVehicleLogbookCollection | null {\n return BestVehicleLogbookCollection.fromLogbooks(this, isSole);\n }\n}\n","import { VehicleClaim, VehicleLogbook } from '../../models';\nimport { VehicleLogbookCollection } from './vehicle-logbook.collection';\nimport { DateRange } from 'moment-range';\nimport round from 'lodash/round';\nimport last from 'lodash/last';\n\n/**\n * Special logbook collection that contains logbooks from date period with the highest work usage percent\n * Docs: https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/211517441/Logbook+Vehicle\n */\nexport class BestVehicleLogbookCollection extends VehicleLogbookCollection {\n /**\n * Logbook claimable period duration in milliseconds.\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/211517441/Logbook+Vehicle\n */\n static periodDuration = 12 * 7 * 24 * 3600 * 1000;\n\n /**\n * Date range with the biggest work usage percent\n */\n period: DateRange;\n\n /**\n * constructor is private because we want to prevent collection initialization via 'new' operator.\n * We should create instances only with fromLogbooks method\n */\n private constructor(logbooks: VehicleLogbookCollection, private isSole: boolean = false) {\n super([]);\n\n if (!this.isBestPeriodExist(logbooks)) {\n return;\n }\n\n this.calculateBestPeriod(logbooks);\n }\n\n /**\n * Best period may be calculated only when user has logbooks minimum for VehicleLogbook.bestPeriodWeeks\n */\n isBestPeriodExist(logbooks: VehicleLogbookCollection = this): boolean {\n if (logbooks.length < 2) {\n return false;\n }\n\n if (!(logbooks instanceof VehicleLogbookCollection)) {\n logbooks = new VehicleLogbookCollection(logbooks);\n }\n\n return BestVehicleLogbookCollection.periodDuration < (logbooks.last.date.getTime() - logbooks.first.date.getTime());\n }\n\n getWorkUsageByClaim(claim: VehicleClaim): number {\n const claimKilometers: number = this.getByVehicleClaim(claim).getClaimableLogbooks(this.isSole).kilometers;\n\n return round(this.getWorkUsageByTank(this.isSole) * (claimKilometers / this.kilometers), 2);\n }\n\n /**\n * Set Date Range with the biggest work usage percent\n * Range duration is defined as BestVehicleLogbookCollection.periodDuration by the ATO\n * \n * Algorithm:\n * Claimable logbooks or claimable trips - work/business logbook items.\n * We should work with dates from the first to the last trip (include personal trips).\n * Get date ranges starts on each claimable trip, all other ranges are definetily worst.\n * Also get extra date range which ends with the last claimable trip.\n * Get all trips included to each date range.\n * Find and return range with the biggest workUsage percent.\n */\n private calculateBestPeriod(logbooks: VehicleLogbookCollection): void {\n // get a list of date ranges that could potentially be the best\n const periods: DateRange[] = this.getPeriods(logbooks);\n\n periods.forEach((period: DateRange) => {\n const logbooksInPeriod: VehicleLogbookCollection = logbooks.filterByRange('date', period.start.toDate(), period.end.toDate());\n\n if (!this.period || (this.getWorkUsageByTank(this.isSole) < logbooksInPeriod.getWorkUsageByTank(this.isSole))) {\n this.period = period;\n this.items = logbooksInPeriod.toArray();\n }\n });\n }\n\n // get list of date ranges for each of passed logbook\n private getPeriods(logbooks: VehicleLogbookCollection): DateRange[] {\n const claimable = logbooks.getClaimableLogbooks(this.isSole);\n // get a list of date ranges that could potentially be the best\n const periods: DateRange[] = claimable\n // skip logbooks whose range ends after the last logbook\n .filter((logbook: VehicleLogbook) => this.getPeriodByLogbook(logbook).end.toDate() < logbooks.last.date)\n .map((logbook: VehicleLogbook) => this.getPeriodByLogbook(logbook));\n\n\n // skip if the last logbook already included to the last existing date range\n // if (last(periods).end.toDate() < logbooks.last.date) {\n // add extra date range for the last claimable logbook\n periods.push(this.getPeriodByLogbook(claimable.last, true));\n // }\n\n return periods;\n }\n\n /**\n * Get claimable date range for passed logbook\n * @param logbook logbook instance for range calculation\n * @param isBackward Flag false - range for logbook + duration; flag true - range for logbook - duration. Used for extra case, when we should add an extra date range for the last logbook\n */\n private getPeriodByLogbook(logbook: VehicleLogbook, isBackward: boolean = false): DateRange {\n if (isBackward) {\n return new DateRange([new Date(logbook.date.getTime() - BestVehicleLogbookCollection.periodDuration), logbook.date]);\n }\n\n return new DateRange([logbook.date, new Date(logbook.date.getTime() + BestVehicleLogbookCollection.periodDuration)]);\n }\n\n static fromLogbooks(logbooks: VehicleLogbookCollection, isSole: boolean = false): BestVehicleLogbookCollection | null {\n const collection = new BestVehicleLogbookCollection(logbooks, isSole);\n\n return collection.isBestPeriodExist(logbooks) ? collection : null;\n }\n}\n","import { Collection } from '../collection';\nimport { VehicleClaim } from '../../models';\n\nexport class VehicleClaimCollection extends Collection<VehicleClaim> {\n /**\n * Get remaining kilometers limit. Total limit ({@link VehicleClaim.totalKmsLimit}) - claimed kilometers from other vehicle claims\n */\n getKmsLimitForClaim(claim?: VehicleClaim): number {\n let collection: VehicleClaimCollection = this;\n\n if (claim) {\n collection = collection.removeBy('id', claim.id);\n }\n\n return VehicleClaim.totalKmsLimit - collection.sumBy('kilometers');\n }\n\n /**\n * Get remaining work usage limit. Total limit ({@link VehicleClaim.totalWorkUsagePercent}) - claimed percent from other vehicle claims\n */\n getWorkUsageLimitForClaim(claim?: VehicleClaim): number {\n let collection: VehicleClaimCollection = this;\n\n if (claim) {\n collection = collection.removeBy('id', claim.id);\n }\n\n return VehicleClaim.totalWorkUsagePercent - collection.sumBy('workUsage');\n }\n}\n","import { Collection } from './collection';\nimport { AllocationGroup } from '../models';\n\nexport class AllocationGroupCollection extends Collection<AllocationGroup> {\n constructor(items: AllocationGroup[]) {\n super(items);\n\n // @TODO Alex: could be useful for other collections, move to base class\n this.sortBy('date');\n }\n}\n","import { Collection } from './collection';\nimport { AllocationRule, BankTransaction } from '../models';\nimport { AllocationRuleTypeEnum } from '../db/Enums';\nimport { CollectionDictionary } from './collection-dictionary';\nimport { BankTransactionCollection } from './bank-transaction.collection';\n\nexport class AllocationRuleCollection extends Collection<AllocationRule> {\n getExpense(): this {\n return this.filterBy('type', AllocationRuleTypeEnum.EXPENSE);\n }\n\n getIncome(): this {\n return this.filterBy('type', AllocationRuleTypeEnum.INCOME);\n }\n\n getTransfer(): this {\n return this.filterBy('type', AllocationRuleTypeEnum.TRANSFER);\n }\n\n /**\n * Get dictionary where key is bank transaction id and value is collection of matched rules.\n * Group by this way for better performance\n * @TODO Alex: break bank transactions by pagination in case of bad performance\n */\n groupByBankTransaction(bankTransactions: BankTransactionCollection): CollectionDictionary<AllocationRuleCollection> {\n const rulesByBankTransaction = new AllocationRuleCollection([]).groupBy();\n\n bankTransactions.toArray().forEach((bankTransaction: BankTransaction) => {\n rulesByBankTransaction.add(bankTransaction.id, this.filter((rule: AllocationRule) => rule.matchBankTransaction(bankTransaction)));\n });\n\n return rulesByBankTransaction;\n }\n}\n","import { AccountSetupItem } from '../models/account-setup/account-setup-item';\nimport { Collection } from './collection';\nimport compact from 'lodash/compact';\n\nexport class AccountSetupItemCollection extends Collection<AccountSetupItem> {\n constructor(items: AccountSetupItem[]) {\n super(compact(items));\n this.sortBy('isCompleted', 'asc')\n }\n\n isCompleted(): boolean {\n return this.filterBy('isCompleted', true).length === this.length;\n }\n}\n","import { Collection } from './collection';\nimport { BankAccountTypeEnum } from '../db/Enums';\nimport { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { BankAccount, BankAccountProperty, Property, TYPE_LOAN } from '../models';\nimport flatten from 'lodash/flatten';\nimport uniqBy from 'lodash/uniqBy';\nimport uniq from 'lodash/uniq';\nimport concat from 'lodash/concat';\nimport { CollectionDictionary } from './collection-dictionary';\nimport { LoanCollection } from './loan';\n\n/**\n * Collection of bank accounts.\n */\nexport class BankAccountCollection extends Collection<BankAccount> {\n /**\n * get list of bank accounts with passed types\n */\n getByType(types: BankAccountTypeEnum | BankAccountTypeEnum[], isExclude = false): BankAccount[] {\n // get types always as array (if only one passed)\n const typesArray: BankAccountTypeEnum[] = concat(types);\n return this.items.filter((bankAccount: BankAccount) => {\n if (isExclude) {\n return !typesArray.includes(bankAccount.type);\n }\n return typesArray.includes(bankAccount.type);\n });\n }\n\n /**\n * get amount of initial loans\n */\n getInitialLoanAmount(): number {\n return this.getByType(TYPE_LOAN)\n .reduce((sum: number, bankAccount: BankAccount) => sum += bankAccount.balances.length ? bankAccount.getOpeningBalance() : 0, 0);\n }\n\n /**\n * get amount of current loans\n */\n getCurrentLoanAmount(): number {\n return this.getByType(TYPE_LOAN)\n .reduce((sum: number, bankAccount: BankAccount) => sum += bankAccount.currentBalance, 0);\n }\n\n /**\n * get collection filtered by property id\n */\n getByPropertyId(id: number): BankAccountCollection {\n return new BankAccountCollection(this.items.filter((bankAccount: BankAccount) => bankAccount.bankAccountProperties.find((bankAccountProperty: BankAccountProperty) => bankAccountProperty.property.id === id)));\n }\n\n groupByProperty(): CollectionDictionary<BankAccountCollection> {\n const dictionary = new CollectionDictionary(new BankAccountCollection());\n\n this.items.forEach((bankAccount) => {\n bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {\n dictionary.addTo(bankAccountProperty.property.id, bankAccount);\n });\n });\n\n return dictionary;\n }\n\n /**\n * get collection filtered by properties ids\n */\n getByPropertiesIds(ids: number[]): BankAccountCollection {\n return new BankAccountCollection(\n this.items.filter((bankAccount: BankAccount) => bankAccount.bankAccountProperties.find((bankAccountProperty: BankAccountProperty) => ids.includes(bankAccountProperty.property.id)))\n );\n }\n\n /**\n * get collection of active bank accounts\n */\n getActiveBankAccounts(): BankAccountCollection {\n return new BankAccountCollection(this.items.filter((bankAccount: BankAccount) => bankAccount.isActive()));\n }\n\n /**\n * get reduction of loan (reduction of principle) percentage\n */\n getPrincipleReductionPercent(): number {\n const initialLoans: number = this.getInitialLoanAmount();\n const currentLoans: number = this.getCurrentLoanAmount();\n\n if (!initialLoans) {\n return 0;\n }\n\n return (initialLoans - currentLoans) / initialLoans * 100;\n }\n\n /**\n * Get collection of loan bank accounts\n */\n getLoanAccounts(): BankAccountCollection {\n return new BankAccountCollection(this.getByType(TYPE_LOAN));\n }\n\n get loans(): LoanCollection {\n return new LoanCollection(this.filterBy('type', BankAccountTypeEnum.LOAN).map((bankAccount) => bankAccount.loan));\n }\n\n getSavingsAccounts(): BankAccountCollection {\n return new BankAccountCollection(this.getByType(TYPE_LOAN, true));\n }\n\n getOpeningBalance(): number {\n return this.items.reduce((sum: number, bankAccount: BankAccount): number => sum + bankAccount.getOpeningBalance(), 0);\n }\n\n get currentBalance(): number {\n return this.sumBy('currentBalance');\n }\n\n get bankShortNames(): string {\n return uniq(this.map((bankAccount) => bankAccount.bank.shortName)).join(', ');\n }\n\n /**\n * Get Collection of bank accounts with property tank type\n */\n getPropertyBankAccounts(): BankAccountCollection {\n return new BankAccountCollection(\n this.items.filter((bankAccount: BankAccount): boolean => bankAccount.isPropertyTank())\n );\n }\n\n /**\n * Get Collection of bank accounts with work tank type\n */\n getWorkBankAccounts(): BankAccountCollection {\n return new BankAccountCollection(\n this.items.filter((bankAccount: BankAccount): boolean => bankAccount.isWorkTank())\n );\n }\n\n /**\n * Get Collection of bank accounts by tank type\n */\n getByTankType(tankType: TankTypeEnum): BankAccountCollection {\n return new BankAccountCollection(\n this.items.filter((bankAccount: BankAccount): boolean => bankAccount.tankType === tankType)\n );\n }\n\n /**\n * Get list of all bank account properties\n */\n getBankAccountPropertiesList(): BankAccountProperty[] {\n return flatten(\n this.items.map((bankAccount: BankAccount): BankAccountProperty[] => bankAccount.bankAccountProperties)\n );\n }\n\n /**\n * Get lis of unique properties from all bank accounts properties\n */\n getProperties(): Property[] {\n return uniqBy(\n this.getBankAccountPropertiesList().map((bankAccountProperty: BankAccountProperty) => bankAccountProperty.property),\n 'id'\n );\n }\n\n /**\n * @TODO Alex not efficient, filter bankAccounts by property first\n */\n getPropertyBalanceAmount(propertyId: number): number {\n return this.items.reduce((sum: number, bankAccount: BankAccount): number => sum + bankAccount.getPropertyBalanceAmount(propertyId), 0);\n }\n\n get propertiesBalanceAmount(): number {\n let balanceAmount = 0;\n this.items.forEach((bankAccount) => {\n bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {\n balanceAmount += Math.abs(bankAccount.getPropertyBalanceAmount(bankAccountProperty.property.id));\n });\n });\n\n return balanceAmount;\n }\n\n get propertiesMonthlyRepaymentAmount(): number {\n let repaymentAmount = 0;\n this.getLoanAccounts().items.forEach((bankAccount) => {\n bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {\n repaymentAmount += bankAccount.getMonthlyRepaymentAmount(bankAccountProperty.property.id);\n });\n });\n\n return repaymentAmount;\n }\n\n getPropertyMonthlyRepaymentAmount(propertyId: number): number {\n return this.getLoanAccounts().reduce((sum: number, bankAccount: BankAccount): number =>\n sum + bankAccount.getMonthlyRepaymentAmount(propertyId), 0\n );\n }\n\n getLVR(property: Property): number {\n return this.getPropertyBalanceAmount(property.id) / property.currentYearForecast.marketValue;\n }\n\n getOwn(): this {\n // TODO Alex/Vik: maybe we should get it from jwtToken or think about some localStorageService?\n return this.filter((bankAccount: BankAccount) => bankAccount.isOwner(+localStorage.getItem('userId')));\n }\n\n getActiveLoanAccountsByProperties(ids: number[]): BankAccountCollection {\n return this.getActiveBankAccounts().getLoanAccounts().getByPropertiesIds(ids);\n }\n}\n","import { TransactionOperationEnum } from '../db/Enums/transaction-operation.enum';\nimport { BankTransaction } from '../models/bank/bank-transaction';\nimport { MonthNumberEnum } from '../models/financial-year/month-number.enum';\nimport { IncomeSource } from '../models/income-source/income-source';\nimport { BankAccount } from '../models/bank/bank-account';\nimport { Collection } from './collection';\nimport { CollectionDictionary } from './collection-dictionary';\nimport { TransactionAllocationCollection } from './transaction/transaction-allocation.collection';\nimport round from 'lodash/round';\n\n/**\n * Maximal delay between transfer transactions\n */\nconst TRANSACTION_TRANSFER_DELAY: number = 96 * 3600 * 1000;\n\n/**\n * Collection of bank transactions.\n * IMPORTANT: Create this collection based on bank transactions from TransactionAllocationService\n * @TODO find way to accept interface with allocation instead of bankTransaction to prevent wrong usage\n * because all amounts calculates with allocated amounts but not from bank transactions amounts.\n */\nexport class BankTransactionCollection extends Collection<BankTransaction> {\n getAmount(): number {\n return this.sumBy('amount');\n }\n\n /**\n * Difference between total bank transactions amount and sum of allocations for passed bank transactions\n */\n getUnallocatedAmount(allocations: TransactionAllocationCollection) {\n return round(this.getAmount() - allocations.getByBankTransactionsIds(this.getIds()).amount, 2);\n }\n\n /**\n * get date of the last transaction\n */\n getLastTransactionDate(): Date {\n return new Date(Math.max.apply(Math, this.items.map((bankTransaction: BankTransaction) => bankTransaction.date)));\n }\n\n /**\n * get list of credit transactions\n */\n get creditTransactions(): BankTransactionCollection {\n return new BankTransactionCollection(\n this.items.filter((bankTransaction: BankTransaction) => bankTransaction.isCredit())\n );\n }\n\n /**\n * get list of debit transactions\n */\n get debitTransactions(): BankTransactionCollection {\n return new BankTransactionCollection(\n this.items.filter((bankTransaction: BankTransaction) => bankTransaction.isDebit())\n );\n }\n\n /**\n * get difference between debit and credit transactions amounts\n */\n get balanceAmount(): number {\n return this.items.reduce((sum: number, bankTransaction: BankTransaction) => sum + bankTransaction.balanceAmount, 0);\n }\n\n /**\n * get list of transactions for passed month\n * @param monthIndex Month number from 0 to 11\n */\n getTransactionsByMonth(monthIndex: MonthNumberEnum): BankTransactionCollection {\n return new BankTransactionCollection(\n this.items.filter((bankTransaction: BankTransaction) => bankTransaction.date.getMonth() === monthIndex)\n );\n }\n\n /**\n * get list of transactions by provided bank accounts\n * @param bankAccounts by which transactions should be returned\n */\n getByBankAccounts(bankAccounts: BankAccount[]): BankTransaction[] {\n const bankAccountIds: number[] = bankAccounts.map((bankAccount: BankAccount) => bankAccount.id);\n return this.items.filter((bankTransaction: BankTransaction) => bankAccountIds.includes(bankTransaction.bankAccount.id));\n }\n\n /**\n * get list of transactions by provided ids of bank accounts\n * @param ids of bank accounts\n */\n getByBankAccountsIds(ids: number[]): BankTransactionCollection {\n return new BankTransactionCollection(\n this.items.filter((bankTransaction: BankTransaction) => ids.includes(bankTransaction.bankAccount.id))\n );\n }\n\n /**\n * Find Bank Transaction available for transfer\n */\n findTransfer(bankTransaction: BankTransaction): BankTransaction {\n return this.items.find((item: BankTransaction): boolean => item.amount + bankTransaction.amount === 0 &&\n Math.abs(bankTransaction.date.getTime() - item.date.getTime()) < TRANSACTION_TRANSFER_DELAY);\n }\n\n /**\n * Group bank transactions by transaction id.\n * Each group is bank transaction collection and contains bank transactions related to transactions via allocations\n */\n groupByTransaction(allocations: TransactionAllocationCollection): CollectionDictionary<BankTransactionCollection> {\n // Group allocations by transaction id\n const allocationsByTransactions = allocations.groupBy('transaction.id');\n // Init an empty dictionary we will fill below\n const bankTransactionsByTransactions = new BankTransactionCollection([]).groupBy();\n\n // Fill dictionary with the same keys as at allocationsByTransactions\n allocationsByTransactions.keys.forEach((key: string): void => {\n bankTransactionsByTransactions.add(key, this.getByAllocations(allocationsByTransactions.get(key)));\n });\n\n return bankTransactionsByTransactions;\n }\n\n /**\n * Get collection of bank transactions related with passed allocations\n */\n getByAllocations(allocations: TransactionAllocationCollection): BankTransactionCollection {\n return new BankTransactionCollection(\n this.items.filter((bankTransaction: BankTransaction): boolean => allocations.hasBankTransaction(bankTransaction))\n );\n }\n\n /**\n * Set allocate operation for bank transactions with amounts equal to salary\n */\n preselectAllocateOperationForSalary(salaryIncomeSources: IncomeSource[]): void {\n // incomeSource.salaryForecasts[0] because each income source has only one forecast for current fin year\n const salaryAmounts: number[] = salaryIncomeSources.map((incomeSource: IncomeSource): number => incomeSource.salaryForecasts[0]?.netPay || 0);\n\n this.items.forEach((bankTransaction: BankTransaction): void => {\n if (salaryAmounts.includes(bankTransaction.amount)) {\n bankTransaction.operation = TransactionOperationEnum.ALLOCATE;\n }\n });\n }\n\n /**\n * Get collection of unallocated bankTransactions\n */\n getUnallocated(allocations: TransactionAllocationCollection): BankTransactionCollection {\n return new BankTransactionCollection(\n this.items.filter((bankTransaction: BankTransaction): boolean => !bankTransaction.isAllocated(allocations))\n );\n }\n}\n","import { Collection } from './collection';\nimport { ChartAccounts, FinancialYear } from '../models';\nimport { ChartAccountsListEnum } from '../db/Enums';\n\nexport class ChartAccountsCollection extends Collection<ChartAccounts> {\n constructor(items: ChartAccounts[] = []) {\n super(items);\n\n // Sort personal chart accounts by name (TT-1950)\n // @TODO Alex: implement general initial sorting solution in parent class\n this.items.sort((a: ChartAccounts, b: ChartAccounts) => {\n if (a.isPersonal() && b.isPersonal()) {\n return a.name > b.name ? 1 : -1;\n }\n\n return 0;\n });\n }\n\n /**\n * Get 'Kms travelled for work' related chart account value\n */\n getVehicleKmsRate(year: number = new FinancialYear().year): number {\n return this.findBy('id', ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK).getValueByYear(year).value\n }\n}\n","import { Collection } from './collection';\nimport { ClientInvite } from '../models/client/client-invite';\n\nexport class ClientInviteCollection extends Collection<ClientInvite> {\n getPending(): this {\n return this.filter((invite: ClientInvite) => invite.isPending());\n }\n}\n","import { Collection } from './collection';\nimport { User } from '../models/user/user';\nimport { FirmTypeEnum } from '../db/Enums/firm-type.enum';\n\n\nexport class EmployeeCollection extends Collection<User> {\n get accountant(): User {\n return this.items.filter((user: User) => user.employeeDetails.firm.type === FirmTypeEnum.ACCOUNTANT)[0] ?? null;\n }\n\n get advisors(): User[] {\n return this.items.filter((user: User) => user.employeeDetails.firm.type === FirmTypeEnum.ADVISOR);\n }\n}\n","import { Collection } from './collection';\nimport { ClientMovement } from '../models/client/client-movement';\nimport { EmployeeCollection } from './employee.collection';\nimport { ClientCollection } from './client.collection';\nimport { FirmTypeEnum } from '../db/Enums/firm-type.enum';\nimport { CollectionDictionary } from './collection-dictionary';\nimport { SERVICE_PRODUCT_ROLES } from '../models';\nimport { UserRolesEnum } from '../db/Enums/user-roles.enum';\nimport { ServiceSubscriptionCollection } from './subscription';\n\n/**\n * Collection of tax review\n */\nexport class ClientMovementCollection extends Collection<ClientMovement> {\n get active(): ClientMovementCollection {\n return new ClientMovementCollection(this.items.filter((clientMovement: ClientMovement) => !clientMovement.dateTo));\n }\n\n get employees(): EmployeeCollection {\n return new EmployeeCollection(this.items.map((clientMovement: ClientMovement) => clientMovement.employee));\n }\n\n get clients(): ClientCollection {\n return new EmployeeCollection(this.items.map((clientMovement: ClientMovement) => clientMovement.client));\n }\n\n get accountant(): ClientMovement {\n return this.items.filter((clientMovement: ClientMovement) => clientMovement.firm.type === FirmTypeEnum.ACCOUNTANT)[0] ?? null;\n }\n\n get advisors(): ClientMovementCollection {\n return new ClientMovementCollection(\n this.items.filter((clientMovement: ClientMovement) => clientMovement.firm.type === FirmTypeEnum.ADVISOR)\n );\n }\n\n getByEmployeeId(id: number): ClientMovementCollection {\n return new ClientMovementCollection(this.items.filter((clientMovement: ClientMovement) => clientMovement.employee.id === id));\n }\n\n getByFirmType(firmType: FirmTypeEnum): ClientMovementCollection {\n return new ClientMovementCollection(\n this.items.filter((clientMovement: ClientMovement) => clientMovement.firm.type === firmType)\n );\n }\n\n /**\n * group clients (client movements) by tanks\n */\n groupByRoles(): CollectionDictionary<ClientMovementCollection> {\n const dictionary = new CollectionDictionary(new ClientMovementCollection());\n \n SERVICE_PRODUCT_ROLES.forEach((role: UserRolesEnum) => {\n dictionary.add(role, this.filter((movement: ClientMovement) => !!new ServiceSubscriptionCollection(movement.client.subscriptions).getItems().findBy('price.product.role', role)));\n });\n\n return dictionary;\n }\n}\n","/**\n * Collection of employee clients tax summary information\n */\nimport { Collection } from './collection';\nimport { ClientPortfolioReport } from '../models/client/client-portfolio-report';\n\nexport class ClientPortfolioReportCollection extends Collection<ClientPortfolioReport> {\n get marketValue(): number {\n return this.sumBy('marketValue');\n }\n\n get loanBalance(): number {\n return this.sumBy('loanBalance');\n }\n\n get equityPosition(): number {\n return this.sumBy('equityPosition');\n }\n\n /**\n * Get average market value if there are more than 1 item in the collection\n */\n get averageMarketValue(): number {\n return this.items.length > 1 ? this.marketValue / this.items.length : null;\n }\n\n /**\n * Get average loan balance if there are more than 1 item in the collection\n */\n get averageLoanBalance(): number {\n return this.items.length > 1 ? this.loanBalance / this.items.length : null;\n }\n\n /**\n * Get average equity position if there are more than 1 item in the collection\n */\n get averageEquityPosition(): number {\n return this.items.length > 1 ? this.equityPosition / this.items.length : null;\n }\n\n /**\n * Return report by provided category name\n */\n getByCategoryName(name: string): ClientPortfolioReport {\n return this.items.find((item: ClientPortfolioReport): boolean => item.category === name);\n }\n}\n","import { Collection } from './collection';\nimport { User } from '../models/user/user';\n\nexport class ClientCollection extends Collection<User> {\n}\n","import { Collection } from './collection';\nimport { DepreciationForecast } from '../models/depreciation/depreciation-forecast';\n\n/**\n * Collection of depreciations\n */\nexport class DepreciationForecastCollection extends Collection<DepreciationForecast> {\n filterByYear(financialYear: number): any {\n return new DepreciationForecastCollection(\n this.items.filter((forecast: DepreciationForecast) => forecast.financialYear === financialYear)\n );\n }\n\n getClaimAmountByMonth(month: number): number {\n return this.items.reduce((sum: number, item: DepreciationForecast): number => sum + item.getClaimAmountByMonth(month), 0);\n }\n\n get amount(): number {\n return this.sumBy('amount');\n }\n\n get claimAmount(): number {\n return this.sumBy('claimAmount');\n }\n}\n","import { Collection } from '../collection';\nimport { IncomeSource, IncomeSourceForecast, SalaryForecast } from '../../models';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source';\nimport { IIncomeSourceForecast } from '../../interfaces';\n\n/**\n * Collection of income sources\n */\nexport class IncomeSourceCollection extends Collection<IncomeSource> {\n filterByTank(tank: TankTypeEnum): IncomeSource[] {\n return this.items.filter((incomeSource: IncomeSource) => {\n switch (tank) {\n case TankTypeEnum.OTHER:\n return incomeSource.isOtherIncome();\n default:\n return incomeSource.isWorkIncome();\n }\n });\n }\n\n /**\n * Filter income sources by provided tyoes\n * @param types\n */\n filterByTypes(types: IncomeSourceTypeEnum[]): IncomeSource[] {\n return this.items.filter((incomeSource: IncomeSource) => types.includes(incomeSource.type));\n }\n\n getSalary(): IncomeSource[] {\n return this.items.filter((incomeSource: IncomeSource) => incomeSource.isWorkIncome());\n }\n\n getOther(): IncomeSource[] {\n return this.items.filter((incomeSource: IncomeSource) => incomeSource.isOtherIncome());\n }\n\n /**\n * Get income sources list of forecasts\n */\n get forecasts(): IIncomeSourceForecast[] {\n return this.items.map((incomeSource: IncomeSource) => incomeSource.forecasts).flat();\n }\n\n get salaryForecasts(): SalaryForecast[] {\n return this.items.map((incomeSource: IncomeSource) => incomeSource.salaryForecasts).flat();\n }\n\n get incomeSourceForecasts(): IncomeSourceForecast[] {\n return this.items.map((incomeSource: IncomeSource) => incomeSource.incomeSourceForecasts).flat();\n }\n}\n","import { IncomeSourceForecast } from '../../models';\nimport { Collection } from '../collection';\nimport { IncomeSourceTypeListWorkEnum } from '../../db/Enums/income-source';\n\nexport class IncomeSourceForecastCollection extends Collection<IncomeSourceForecast> {\n get bonuses(): this {\n return this.filterBy('incomeSourceType.id', IncomeSourceTypeListWorkEnum.BONUSES);\n }\n\n get monthlyAmount(): number {\n return this.sumBy('monthlyAmount');\n }\n}\n","import { Collection } from './collection';\nimport { TaxReview } from '../models/tax-review/tax-review';\nimport { TaxReviewStatusEnum } from '../db/Enums/tax-review-status.enum';\nimport { User } from '../models/user/user';\nimport uniqBy from 'lodash/uniqBy'\n\n/**\n * Collection of tax review\n */\nexport class TaxReviewCollection extends Collection<TaxReview> {\n /**\n * Get tax reviews items with SENT & COMPLETED statuses\n */\n getCompleted(): TaxReview[] {\n return this.items\n .filter((taxReview: TaxReview) => taxReview.isSent() || taxReview.isCompleted());\n }\n\n /**\n * Get tax reviews items with WAITING_FOR_APPROVAL status\n */\n getReadyForReview(): TaxReview[] {\n return this.items.filter((taxReview: TaxReview) => taxReview.isNew());\n }\n\n /**\n * Get tax reviews items in work (In progress, Waiting for client, Waiting for Approval, Is approved)\n */\n getInWork(): TaxReview[] {\n return this.items\n .filter((taxReview: TaxReview) => taxReview.isInProgress() ||\n taxReview.isWaitingForClient() ||\n taxReview.isWaitingForApproval() ||\n taxReview.isApproved());\n }\n\n /**\n * Get percentage of completed reviews of the total review amount\n */\n getCompletedPercentage(): number {\n return 100 * this.getCompleted().length / this.items.length || 0;\n }\n\n /**\n * get list of items filtered by status\n * @param status\n */\n getByStatus(status: TaxReviewStatusEnum): TaxReview[] {\n return this.items.filter((item: TaxReview): boolean => item.status === status);\n }\n\n /**\n * get list of items by firm id\n */\n getByEmployeeId(employeeId: number): TaxReview[] {\n return this.items.filter((item: TaxReview): boolean => item.employee.id === employeeId);\n }\n\n getEmployees(): User[] {\n return uniqBy(this.items.map((review: TaxReview): User => review.employee), 'id');\n }\n}\n","import { Collection } from './collection';\nimport { UserEventSetting } from '../models/user-event/user-event-setting';\n\n/**\n * Collection of user event settings\n */\nexport class UserEventSettingCollection extends Collection<UserEventSetting> {\n getConfigurableBy(field: string): UserEventSettingCollection {\n return new UserEventSettingCollection(this.items.filter((setting: UserEventSetting) => setting[field] !== null));\n }\n}\n","import { Collection } from './collection';\nimport { UserEventType } from '../models/user-event/user-event-type';\nimport { UserEventSettingCollection } from './user-event-setting.collection';\n\n/**\n * Collection of user event settings\n */\nexport class UserEventTypeCollection extends Collection<UserEventType> {\n toSettings(): UserEventSettingCollection {\n return new UserEventSettingCollection(this.map((type) => type.toSetting()));\n }\n}\n","import { plainToClass } from 'class-transformer';\nimport { ExportableCollection } from '../exportable.collection';\nimport { Holding } from '../../models';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { HoldingTypeCategoryEnum } from '../../db/Enums';\n\nexport class HoldingCollection extends ExportableCollection<Holding> {\n getExportHeader(): string[] {\n return ['Date', 'Ticker', 'Name', 'Asset type', 'Qty bought', 'Qty current', 'Buy price/Unit', 'Current price/Unit', 'Total MV', 'Profit/Loss'];\n }\n\n getExportFooter(): ExportCell[] {\n return [\n plainToClass(ExportCell, { value: '', type: ExportCellTypeEnum.STRING }),\n ];\n }\n\n getExportBody(): ExportCell[][] {\n return this.items.map((holding: Holding) => [\n plainToClass(ExportCell, { value: holding.date, type: ExportCellTypeEnum.DATE }),\n plainToClass(ExportCell, { value: holding.type.ticker, type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, {\n value: holding.type.name,\n type: ExportCellTypeEnum.STRING\n }),\n plainToClass(ExportCell, { value: holding.type.categoryLabel, type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, { value: holding.quantity, type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, { value: holding.currentQuantity, type: ExportCellTypeEnum.STRING }),\n plainToClass(ExportCell, { value: holding.price, type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, {\n value: holding.type.price,\n type: ExportCellTypeEnum.CURRENCY\n }),\n plainToClass(ExportCell, {\n value: holding.marketValue,\n type: ExportCellTypeEnum.CURRENCY\n }),\n plainToClass(ExportCell, {\n value: holding.growthCoefficient,\n type: ExportCellTypeEnum.PERCENT\n }),\n ]);\n }\n\n getShares(): this {\n return this.filterBy('type.category', HoldingTypeCategoryEnum.STOCK);\n }\n\n getCryptos(): this {\n return this.filterBy('type.category', HoldingTypeCategoryEnum.CRYPTO);\n }\n\n getOthers(): this {\n return this.filterBy('type.category', [\n HoldingTypeCategoryEnum.COLLECTIBLE,\n HoldingTypeCategoryEnum.UNLISTED_STOCK,\n HoldingTypeCategoryEnum.UNLISTED_UNIT,\n HoldingTypeCategoryEnum.OTHER\n ]);\n }\n\n getPurchaseValue(): number {\n return this.sumBy('purchaseValue');\n }\n\n get marketValue(): number {\n return this.sumBy('marketValue');\n }\n\n getGrowthCoefficient(): number {\n return this.marketValue / this.getPurchaseValue() - 1;\n }\n\n getUnsold(): this {\n return this.removeBy('currentQuantity', 0);\n }\n}\n","import { Dictionary, Holding, HoldingSale } from '../../models';\nimport { ExportableCollection } from '../exportable.collection';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { HoldingCollection } from './holding.collection';\n\nexport class HoldingSaleCollection extends ExportableCollection<HoldingSale> {\n filterByTaxFree(holdings: HoldingCollection, isTaxFree = false): this {\n return this.filterBy('holding.id', holdings.filterBy('isTaxFree', isTaxFree).getIds());\n }\n\n getExportHeader(): string[] {\n return ['Ticker', 'Asset type', 'Date of buy', 'Date of sale', 'Cost base', 'Net sale', 'Ownership', 'Total capital Gain/(Loss)', 'My Capital Gain/(Loss)', 'Exempt or Concession'];\n }\n\n getExportFooter(): ExportCell[] {\n return [\n plainToClass(ExportCell, { value: '', type: ExportCellTypeEnum.STRING }),\n ];\n }\n\n getExportBody(holdingsById: Dictionary<Holding>): ExportCell[][] {\n return this.items.map((sale: HoldingSale) => [\n plainToClass(ExportCell, {\n value: holdingsById.get(sale.holding.id).type.ticker,\n type: ExportCellTypeEnum.STRING\n }),\n plainToClass(ExportCell, {\n value: holdingsById.get(sale.holding.id).type.categoryLabel,\n type: ExportCellTypeEnum.STRING\n }),\n plainToClass(ExportCell, { value: holdingsById.get(sale.holding.id)?.date, type: ExportCellTypeEnum.DATE }),\n plainToClass(ExportCell, { value: sale.date, type: ExportCellTypeEnum.DATE }),\n plainToClass(ExportCell, { value: sale.getCostBase(holdingsById.get(sale.holding.id)), type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, { value: sale.netCost, type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, { value: holdingsById.get(sale.holding.id).ownershipPercent, type: ExportCellTypeEnum.PERCENT }),\n plainToClass(ExportCell, { value: sale.totalCapitalGain, type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, { value: sale.grossCapitalGain, type: ExportCellTypeEnum.CURRENCY }),\n plainToClass(ExportCell, {\n value: sale.concession,\n type: ExportCellTypeEnum.STRING\n }),\n ]);\n }\n}\n","import { HoldingTypeCategoryEnum } from '../../db/Enums';\nimport { HoldingType } from '../../models';\nimport { Collection } from '../collection';\n\nexport class HoldingTypeCollection extends Collection<HoldingType> {\n getOthers(): this {\n return this.filterBy('category', [\n HoldingTypeCategoryEnum.COLLECTIBLE,\n HoldingTypeCategoryEnum.UNLISTED_STOCK,\n HoldingTypeCategoryEnum.UNLISTED_UNIT,\n HoldingTypeCategoryEnum.OTHER\n ])\n }\n}\n","import {Collection} from './collection';\nimport {AssetSale} from '../models';\n\nexport class AssetSaleCollection extends Collection<AssetSale> {\n get grossCapitalProfit(): number {\n return this.filter((sale) => sale.grossCapitalGain > 0)\n .sumBy('grossCapitalGain');\n }\n\n get fullExemptionSales(): this {\n return this.filter((sale) => sale.grossCapitalGain != 0 && sale.netCapitalGain == 0);\n }\n\n get fullExemptionGrossCapitalProfit(): number {\n return this.filter((sale) => sale.grossCapitalGain > 0 && sale.netCapitalGain == 0).grossCapitalProfit;\n }\n\n get halfExemptionGrossCapitalProfit(): number {\n return this.filter((sale) => sale.netCapitalGain > 0 && sale.netCapitalGain !== sale.grossCapitalGain).grossCapitalProfit;\n }\n\n get noExemptionGrossCapitalProfit(): number {\n return this.filter((sale) => sale.netCapitalGain > 0 && sale.netCapitalGain === sale.grossCapitalGain).grossCapitalProfit;\n }\n\n get taxableGrossCapitalProfit(): number {\n return this.halfExemptionGrossCapitalProfit + this.noExemptionGrossCapitalProfit;\n }\n\n get currentYearCapitalLoss(): number {\n return Math.abs(this.filterByFinancialYear('date').filter((sale) => sale.netCapitalGain < 0).sumBy('grossCapitalGain'));\n }\n\n calculateForwardCapitalLoss(priorCapitalLoss: number): number {\n // gross capital profit\n const taxableGrossCapitalProfit = this.taxableGrossCapitalProfit;\n // gross capital loss\n const currentYearCapitalLoss = this.currentYearCapitalLoss;\n const currentYearCapitalLossApplied = Math.min(taxableGrossCapitalProfit, currentYearCapitalLoss);\n const priorYearCapitalLossApplied = Math.min(priorCapitalLoss, taxableGrossCapitalProfit - currentYearCapitalLossApplied);\n const capitalLossApplied = currentYearCapitalLossApplied + priorYearCapitalLossApplied;\n\n return this.currentYearCapitalLoss + priorCapitalLoss - capitalLossApplied;\n }\n\n /**\n * NET CAPITAL GAIN/(LOSS) AFTER CONCESSIONS & DISCOUNTS\n */\n calculateNetCapitalGain(priorCapitalLoss: number): number {\n // gross capital profit\n const noExemptionGrossCapitalProfit = this.noExemptionGrossCapitalProfit;\n const taxableGrossCapitalProfit = this.taxableGrossCapitalProfit;\n // gross capital loss\n const currentYearCapitalLoss = this.currentYearCapitalLoss;\n const currentYearCapitalLossApplied = Math.min(taxableGrossCapitalProfit, currentYearCapitalLoss);\n const priorYearCapitalLossApplied = Math.min(priorCapitalLoss, taxableGrossCapitalProfit - currentYearCapitalLossApplied);\n const capitalLossApplied = currentYearCapitalLossApplied + priorYearCapitalLossApplied;\n // grossCapitalProfit after loss\n const noExemptionCapitalGain = Math.max(noExemptionGrossCapitalProfit - capitalLossApplied, 0);\n const halfExemptionCapitalGain = Math.max(this.halfExemptionGrossCapitalProfit - (capitalLossApplied - noExemptionGrossCapitalProfit), 0);\n const capitalGain = noExemptionCapitalGain + halfExemptionCapitalGain;\n // capitalGain after exemption\n const cgtDiscount = halfExemptionCapitalGain / 2;\n\n return noExemptionCapitalGain + cgtDiscount - currentYearCapitalLoss + currentYearCapitalLossApplied;\n }\n}\n","// @TODO Alex move here all collections\nexport * from './collection';\nexport * from './collection-dictionary';\n\nexport * from './chat';\nexport * from './loan';\nexport * from './property';\nexport * from './report';\nexport * from './sole';\nexport * from './subscription';\nexport * from './tax-summary';\nexport * from './transaction';\nexport * from './vehicle';\n\n// @TODO break to folders\nexport * from './allocation-group.collection';\nexport * from './allocation-rule.collection';\nexport * from './account-setup-item.collection';\nexport * from './bank-account.collection';\nexport * from './bank-transaction.collection';\nexport * from './chart-accounts.collection';\nexport * from './client-invite.collection';\nexport * from './client-movement.collection';\nexport * from './client-portfolio-report.collection';\nexport * from './client.collection';\nexport * from './depreciation-forecast.collection';\nexport * from './depreciation.collection';\nexport * from './employee.collection';\nexport * from './exportable.collection';\nexport * from './income-source';\nexport * from './tax-review.collection';\nexport * from './user-event-setting.collection';\nexport * from './user-event-type-collection';\nexport * from './holding';\nexport * from './asset-sale.collection';\n","import { Loan as LoanBase } from '../../db/Models/loan/loan';\nimport {\n LoanVehicleTypeEnum,\n LoanRepaymentFrequencyEnum,\n LoanInterestTypeLabelEnum,\n LoanInterestTypeEnum, LoanRepaymentTypeLabelEnum, LoanRepaymentTypeEnum\n} from '../../db/Enums/bank/loan';\nimport { Type } from 'class-transformer';\nimport { LoanPayment } from './loan-payment';\nimport { LoanPayout } from './loan-payout';\nimport { FinancialYear } from '../financial-year';\nimport last from 'lodash/last';\nimport { LoanPaymentCollection } from '../../collections';\n\nexport class Loan extends LoanBase {\n /**\n * 30 years is default mortgage term\n */\n static mortgageDefaultTerm = 360;\n\n /**\n * 5 years is default bank loan term\n */\n static loanDefaultTerm = 60;\n\n @Type(() => LoanPayment)\n payments: LoanPayment[];\n\n @Type(() => Date)\n commencementDate: Date;\n\n @Type(() => LoanPayout)\n payout: LoanPayout;\n\n currentBalance: number;\n\n /**\n * Check if loan type is related to LoanVehicleTypeEnum\n */\n isVehicle(): boolean {\n return !this.bankAccount && this.type in LoanVehicleTypeEnum;\n }\n\n /**\n * Get the last payment for passed financial year\n * @param year financial year for filter\n */\n getLastPaymentByYear(year: number): LoanPayment {\n const finYear: FinancialYear = new FinancialYear(new Date(year.toString()));\n return last(this.payments.filter((payment: LoanPayment): boolean => payment.date > finYear.startDate && payment.date < finYear.endDate));\n }\n\n /**\n * The size of loan interest\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/212369955/Loans+vehicle+loans\n * @TODO Vik/Nicole: need to update documentation. Derek gave the right formulas to Mikhail\n */\n getInterest(): number {\n return new LoanPaymentCollection(this.payments).paymentDue - this.amount;\n }\n\n /**\n * The last payment size\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/212369955/Loans+vehicle+loans\n * @TODO Vik/Nicole: need to update documentation. Derek gave the right formulas to Mikhail\n */\n getBalloonPayment(): number {\n const lastPaymentDueAmount: number = new LoanPaymentCollection(this.payments).last.paymentDue;\n return (lastPaymentDueAmount - this.repaymentAmount) > 0 ? lastPaymentDueAmount - this.repaymentAmount : 0;\n }\n\n /**\n * Percent of ballon payment from all payments\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/212369955/Loans+vehicle+loans\n * @TODO Vik/Nicole: need to update documentation. Derek gave the right formulas to Mikhail\n */\n getBalloonPaymentPercentage(): number {\n return this.getBalloonPayment() / new LoanPaymentCollection(this.payments).paymentDue * 100;\n }\n\n get monthlyRepaymentAmount(): number {\n switch (this.repaymentFrequency) {\n case LoanRepaymentFrequencyEnum.WEEKLY:\n return this.repaymentAmount * FinancialYear.weeksInYear / FinancialYear.monthsInYear;\n case LoanRepaymentFrequencyEnum.FORTNIGHTLY:\n return this.repaymentAmount * FinancialYear.weeksInYear / FinancialYear.monthsInYear / 2;\n default:\n return this.repaymentAmount;\n }\n }\n\n get interestTypeLabel(): string {\n return LoanInterestTypeLabelEnum[LoanInterestTypeEnum[this.interestType]];\n }\n\n get repaymentTypeLabel(): string {\n return LoanRepaymentTypeLabelEnum[LoanRepaymentTypeEnum[this.repaymentType]];\n }\n}\n","import { BankAccountProperty as BankAccountPropertyBase } from '../../db/Models/bank/bank-account-property';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { Property } from '../property';\n\nexport class BankAccountProperty extends BankAccountPropertyBase {\n @Type(() => Property)\n property: Property;\n\n @Transform(({ value }) => isNaN(value) ? 100 : value)\n @Expose() percent: number;\n}\n","export enum BasiqJobStepEnum {\n FAILED = -1,\n VERIFY_CREDENTIALS = 1,\n RETRIEVE_ACCOUNTS = 2,\n RETRIEVE_TRANSACTIONS = 3\n}\n","import { BankConnection as BankConnectionBase } from '../../db/Models/bank/bank-connection';\nimport { BasiqJob } from './basiq';\nimport { Bank } from './bank';\nimport { Type } from 'class-transformer';\nimport { BankConnectionStatusEnum, BankProviderEnum } from '../../db/Enums';\nimport { BasiqJobStepEnum } from '../../db/Models/bank/basiq-job-step.enum';\n\nexport class BankConnection extends BankConnectionBase {\n @Type(() => BasiqJob)\n basiqJob: BasiqJob;\n\n @Type(() => Bank)\n bank: Bank;\n\n @Type(() => Date)\n lastSuccessImportDate: Date;\n\n isPending(): boolean {\n return this.status === BankConnectionStatusEnum.PENDING;\n }\n\n isActive(): boolean {\n return this.status === BankConnectionStatusEnum.ACTIVE;\n }\n\n isReconnecting(): boolean {\n return this.status === BankConnectionStatusEnum.RECONNECTING;\n }\n\n setPending(): void {\n this.status = BankConnectionStatusEnum.PENDING;\n }\n\n isOpenBanking(): boolean {\n return this.provider === BankProviderEnum.OPEN_BANKING;\n }\n\n isBasiq(): boolean {\n return this.provider !== BankProviderEnum.MANUAL;\n }\n\n isBasiqAvailable(): boolean {\n return this.provider === BankProviderEnum.MANUAL && this.bank.provider !== BankProviderEnum.MANUAL;\n }\n\n isOpenBankingAvailable(): boolean {\n return this.provider === BankProviderEnum.WEB_SCRAPPER && this.bank.provider === BankProviderEnum.OPEN_BANKING && !this.isReconnecting();\n }\n\n isLoginSuccess(): boolean {\n return this.basiqJob?.step > BasiqJobStepEnum.VERIFY_CREDENTIALS;\n }\n\n isAccountsRetrieved(): boolean {\n return this.basiqJob?.step > BasiqJobStepEnum.RETRIEVE_ACCOUNTS;\n }\n\n isJobFailed(): boolean {\n return this.basiqJob?.step === BasiqJobStepEnum.FAILED;\n }\n\n isTemporaryUnavailable(): boolean {\n return this.isJobFailed() && this.isActive();\n }\n}\n","import { BankAccount as BankAccountBase } from '../../db/Models/bank/bank-account';\nimport { BankAccountStatusEnum, BankAccountTypeEnum } from '../../db/Enums';\nimport { Loan } from '../loan';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { BankAccountBalance } from '../../db/Models';\nimport { FinancialYear } from '../financial-year';\nimport { BankAccountProperty } from './bank-account-property';\nimport { BankConnection } from './bank-connection';\nimport { Transform, Type } from 'class-transformer';\nimport { SoleBusinessAllocation } from '../sole';\nimport { Bank } from './bank';\n\nexport class BankAccount extends BankAccountBase {\n // list of properties related with this bank account\n @Type(() => BankAccountProperty)\n bankAccountProperties: BankAccountProperty[];\n\n @Type(() => SoleBusinessAllocation)\n businessAllocations: SoleBusinessAllocation[]\n\n @Type(() => BankAccountBalance)\n balances: BankAccountBalance[];\n\n // bank account's loan\n @Type(() => Loan)\n loan: Loan;\n\n @Type(() => BankConnection)\n bankConnection: BankConnection;\n\n // @TODO Alex: temp hack: remove when TT-2107 ready. Backend shoud return Mortgage type as Loan type\n @Transform(({ value }) => value === 4 ? BankAccountTypeEnum.LOAN : value)\n type: BankAccountTypeEnum;\n\n get bank(): Bank {\n return this.bankConnection.bank;\n }\n\n get bsb(): string {\n return this.accountNumber.slice(0, 6);\n }\n\n get number(): string {\n return this.accountNumber.trim().slice(6);\n }\n\n /**\n * Get last digits of account number\n */\n get partialAccountNumber(): string {\n return `xxxx${this.accountNumber.slice(-4)}`;\n }\n\n get balance(): number {\n return FinancialYear.isCurrent() ? this.currentBalance : this.getOpeningBalance(FinancialYear.year + 1);\n }\n\n /**\n * Get current opening balance amount\n */\n getOpeningBalance(year: number = FinancialYear.year): number {\n return this.getBalanceByYear(year)?.openingBalance || 0;\n }\n\n /**\n * Get bank account balance for current financial year\n */\n getBalanceByYear(year: number): BankAccountBalance {\n return this.balances.find((balance: BankAccountBalance): boolean => balance.financialYear === year);\n }\n\n /**\n * check if bank account type is one of savings accounts\n */\n isSavingsAccount(): boolean {\n return this.type === BankAccountTypeEnum.INVESTMENT ||\n this.type === BankAccountTypeEnum.TERM_DEPOSIT ||\n this.type === BankAccountTypeEnum.SAVINGS;\n }\n\n /**\n * check if bank account type is Loan\n */\n isLoan(): boolean {\n return this.type === BankAccountTypeEnum.LOAN;\n }\n\n /**\n * check if bank account type is Credit card\n */\n isCreditCard(): boolean {\n return this.type === BankAccountTypeEnum.CREDIT_CARD;\n }\n\n /**\n * check if bank account related to work tank\n */\n isWorkTank(): boolean {\n return !this.isPropertyTank() && !this.isSoleTank();\n }\n\n /**\n * check if bank account related to work tank\n */\n isPropertyTank(): boolean {\n return !!this.bankAccountProperties.length;\n }\n\n /**\n * check if bank account related to sole tank\n */\n isSoleTank(): boolean {\n return !!this.businessAllocations.length;\n }\n\n get tankType(): TankTypeEnum {\n switch (true) {\n case this.isPropertyTank():\n return TankTypeEnum.PROPERTY;\n case this.isSoleTank():\n return TankTypeEnum.SOLE;\n default:\n return TankTypeEnum.WORK;\n }\n }\n\n /**\n * Get Bank account property by id\n * @param id Id of property\n */\n getPropertyById(id: number): BankAccountProperty {\n return this.bankAccountProperties.find((bankAccountProperty: BankAccountProperty): boolean => bankAccountProperty.property.id === id);\n }\n\n /**\n * check if bank account is related with passed property by id\n * @param propertyId Property id for checking\n */\n hasProperty(propertyId: number): boolean {\n return !!this.getPropertyById(propertyId);\n }\n\n /**\n * Get decimal percentage for property\n * @param propertyId Id of property\n */\n getPropertyPercentage(propertyId: number): number {\n if (!this.hasProperty(propertyId)) {\n return 0;\n }\n\n return this.getPropertyById(propertyId).percent / 100;\n }\n\n /**\n * Get balance amount for property by id\n * @param propertyId Id of property\n */\n getPropertyBalanceAmount(propertyId: number): number {\n return this.currentBalance * this.getPropertyPercentage(propertyId);\n }\n\n getMonthlyRepaymentAmount(propertyId: number): number {\n return this.loan ? this.loan.monthlyRepaymentAmount * this.getPropertyPercentage(propertyId): 0;\n }\n\n /**\n * Check if bank account is active (has 'active' status or hasn't been paid out/refinanced)\n */\n isActive(): boolean {\n return this.status === BankAccountStatusEnum.ACTIVE;\n }\n\n /**\n * first import (transactions) of basiq accounts\n */\n isFirstImport(): boolean {\n return !this.lastTransactionDate && !this.isManual;\n }\n\n /**\n * Check if passed user id is owner of bank account\n */\n isOwner(userId: number): boolean {\n return this.bankConnection.user.id === userId;\n }\n\n /**\n * Loan is paid if it has no unallocated transactions and the bank balance is $0.\n */\n isLoanPaid(taxTankBalance: number): boolean {\n const shouldPayoutLoanAccount: boolean = this.isActive() && this.isLoan() && taxTankBalance === 0;\n\n // we don't check current balance for basiq accounts, because basiq doesn't provide us last transactions (can't do for closed accounts),\n // that's why balance won't be 0 (updated by basiq)\n if (shouldPayoutLoanAccount && this.isManual) {\n return this.currentBalance === 0;\n }\n\n return shouldPayoutLoanAccount;\n }\n}\n","import { BankAccount } from './bank-account';\nimport { IChartData } from '../../interfaces/chart-data.interface';\n\n/**\n * bank account collection UI class with frontend specific data\n */\nexport class BankAccountChartData {\n private bankAccounts: BankAccount[];\n\n constructor(\n bankAccounts: BankAccount[]\n ) {\n this.bankAccounts = bankAccounts;\n }\n\n /**\n * set value of pie chart data\n */\n getBalancePieChartData(): IChartData[] {\n return this.bankAccounts.map((bankAccount: BankAccount) => ({\n name: bankAccount.accountName,\n data: Math.abs(bankAccount.currentBalance)\n }));\n }\n\n /**\n * set value of bar chart data\n */\n getBalanceBarChartData(): IChartData[] {\n return [{\n name: 'Balance',\n data: this.bankAccounts.map((bankAccount: BankAccount) => ({\n label: bankAccount.accountName,\n value: bankAccount.currentBalance\n }))\n }];\n }\n}\n","import { BankAccountTypeEnum } from '../../db/Enums/bank/bank-account-type.enum';\n\n/**\n * Const which contains array of bank account types\n */\nexport const BANK_ACCOUNT_TYPES: {key: number, value: string}[] = [\n {key: BankAccountTypeEnum.CREDIT_CARD, value: 'Credit Card Accounts'},\n {key: BankAccountTypeEnum.TERM_DEPOSIT, value: 'Deposit Accounts'},\n {key: BankAccountTypeEnum.INVESTMENT, value: 'Investment Accounts'},\n {key: BankAccountTypeEnum.LOAN, value: 'Loan Accounts'},\n {key: BankAccountTypeEnum.OFFSET, value: 'Offset'},\n {key: BankAccountTypeEnum.SAVINGS, value: 'Savings Accounts'},\n {key: BankAccountTypeEnum.TRANSACTION, value: 'Transaction Accounts'},\n];\n","import { BankTransaction } from './bank-transaction';\nimport { IChartData } from '../../interfaces/chart-data.interface';\nimport { IChartSerie } from '../../interfaces/chart-serie.interface';\nimport { MonthNumberEnum } from '../financial-year/month-number.enum';\nimport { MonthNameShortEnum } from '../financial-year/month-name-short.enum';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * bank transactions collection UI class with frontend specific data\n */\nexport class BankTransactionChartData {\n private bankTransactions: BankTransaction[];\n\n constructor(\n bankTransactions: BankTransaction[]\n ) {\n this.bankTransactions = bankTransactions;\n }\n\n /**\n * get value of bar chart data\n */\n getCashInOutBarChartData(months?: MonthNumberEnum[]): IChartData[] {\n const chartData: IChartData[] = this.calculateCashInOutBarChartData();\n\n if (!months) {\n return chartData;\n }\n\n return this.filterChartDataByMonths(months, chartData);\n }\n\n /**\n * get value of line chart data\n */\n getBalanceLineChartData(months?: MonthNumberEnum[]): IChartData[] {\n const chartData: IChartData[] = this.calculateBalanceLineChartData();\n\n if (!months) {\n return chartData;\n }\n\n return this.filterChartDataByMonths(months, chartData);\n }\n\n /**\n * set bar chart data\n */\n private calculateCashInOutBarChartData(): IChartData[] {\n const chartData: IChartData[] = [{\n name: 'Cash In',\n data: []\n }, {\n name: 'Cash Out',\n data: []\n }];\n\n for (const key in MonthNameShortEnum) {\n if (MonthNameShortEnum.hasOwnProperty(key)) {\n const bankTransactionsForMonth: BankTransaction[] = this.bankTransactions.filter((bankTransaction: BankTransaction) => +bankTransaction.date.getMonth() === +MonthNumberEnum[key]);\n\n const cashInForMonth: number = bankTransactionsForMonth\n .filter((bankTransaction: BankTransaction) => bankTransaction.isCredit())\n .reduce((sum: number, bankTransaction: BankTransaction) => sum += bankTransaction.allocatedAmount, 0);\n\n const cashOutForMonth: number = bankTransactionsForMonth\n .filter((bankTransaction: BankTransaction) => bankTransaction.isDebit())\n .reduce((sum: number, bankTransaction: BankTransaction) => sum += bankTransaction.allocatedAmount, 0);\n\n chartData[0].data.push({\n label: MonthNameShortEnum[key],\n value: cashInForMonth\n });\n\n chartData[1].data.push({\n label: MonthNameShortEnum[key],\n value: cashOutForMonth\n });\n }\n }\n\n return chartData;\n }\n\n\n /**\n * set line chart data\n */\n private calculateBalanceLineChartData(): IChartData[] {\n const chartData: IChartData[] = [{\n name: 'Balance',\n data: []\n }];\n\n for (const key in MonthNameShortEnum) {\n if (MonthNameShortEnum.hasOwnProperty(key)) {\n const bankTransactionsForMonth: BankTransaction[] = this.bankTransactions.filter((bankTransaction: BankTransaction) => +bankTransaction.date.getMonth() === +MonthNumberEnum[key]);\n\n const balanceForMonth: number = bankTransactionsForMonth.reduce((sum: number, bankTransaction: BankTransaction) => {\n if (bankTransaction.isCredit()) {\n return sum += bankTransaction.allocatedAmount;\n } \n return sum -= bankTransaction.allocatedAmount;\n \n }, 0);\n\n chartData[0].data.push({\n label: MonthNameShortEnum[key],\n value: balanceForMonth\n });\n }\n }\n\n return chartData;\n }\n\n /**\n * filter chart data for passed months\n */\n private filterChartDataByMonths(months: number[], chartData: IChartData[]): IChartData[] {\n const monthsNames: string[] = months.map((month: number) => MonthNumberEnum[month]).map((key: string) => MonthNameShortEnum[key]);\n const filteredChartData: IChartData[] = cloneDeep(chartData);\n filteredChartData.forEach((chartDataItem: IChartData) => {\n chartDataItem.data = chartDataItem.data.filter((serie: IChartSerie) => monthsNames.includes(serie.label));\n });\n return filteredChartData;\n }\n}\n","export enum BankTransactionSummaryFieldsEnum {\n AMOUNT = 'amount',\n ALLOCATED_AMOUNT = 'allocatedAmount'\n}\n","import { BankAccountTypeEnum } from '../../db/Enums';\n\n/**\n * @TODO credit card has nothing to do with loan\n */\nexport const TYPE_LOAN: BankAccountTypeEnum[] = [\n BankAccountTypeEnum.CREDIT_CARD,\n BankAccountTypeEnum.LOAN\n];\n","import { BorrowingExpenseLoan as BorrowingExpenseLoanBase} from '../../db/Models/loan/borrowing-expense-loan';\n\nexport class BorrowingExpenseLoan extends BorrowingExpenseLoanBase {\n}\n","import { BorrowingExpense as BorrowingExpenseBase } from '../../db/Models/loan/borrowing-expense';\n\nexport class BorrowingExpense extends BorrowingExpenseBase {\n}\n","export enum ChatViewTypeEnum {\n MESSAGES,\n ATTACHMENTS\n}\n","import { Chat as ChatBase } from '../../db/Models/firm/chat';\r\nimport { ChatStatusEnum } from '../../db/Enums/chat-status.enum';\r\nimport { User } from '../user/user';\r\nimport { Type } from 'class-transformer';\r\n\r\nexport class Chat extends ChatBase {\r\n @Type(() => User)\r\n employee: User;\r\n\r\n @Type(() => User)\r\n client: User;\r\n\r\n @Type(() => Date)\r\n updatedAt: Date;\r\n\r\n // @TODO temporary disabled\r\n // @Type(() => User)\r\n // typingUsers: User[] = [];\r\n\r\n /**\r\n * Check if chat is active\r\n */\r\n isActive(): boolean {\r\n return this.status === ChatStatusEnum.ACTIVE;\r\n }\r\n}\r\n","/**\n * Enum with asset entity types\n */\nexport enum AssetEntityTypeEnum {\n PROPERTIES = 'properties',\n FOLDERS = 'folders',\n DEPRECIATIONS = 'depreciations',\n TRANSACTIONS = 'transactions',\n MESSAGES = 'messages'\n}\n","/**\r\n * Enum with asset types\r\n */\r\nexport enum AssetTypeEnum {\r\n PROPERTY = 'property',\r\n DOCUMENT = 'document',\r\n MESSAGE = 'message',\r\n USER_PHOTO = 'userPhoto',\r\n PROPERTY_PHOTO = 'propertyPhoto',\r\n FIRM_PHOTO = 'firmPhoto',\r\n}\r\n","import { MessageDocument as MessageDocumentBase } from '../../db/Models/firm/message-document';\r\nimport { IAsset } from '../../interfaces/asset.interface';\r\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\r\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\r\nimport { User } from '../user/user';\r\nimport { Type } from 'class-transformer';\r\nimport { AppFile } from '../file';\r\n\r\nexport class MessageDocument extends MessageDocumentBase implements IAsset {\r\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.MESSAGES;\r\n type: AssetTypeEnum = AssetTypeEnum.MESSAGE;\r\n\r\n @Type(() => User)\r\n user: User;\r\n\r\n @Type(() => AppFile)\r\n file: AppFile;\r\n}\r\n","import { Message as MessageBase } from '../../db/Models/firm/message';\r\nimport { User } from '../user/user';\r\nimport { MessageDocument } from './message-document';\r\nimport { Expose, Type } from 'class-transformer';\r\nimport { Chat } from './chat';\r\n\r\n\r\nexport class Message extends MessageBase {\r\n @Type(() => Date)\r\n createdAt: Date;\r\n\r\n @Type(() => User)\r\n employee: User;\r\n\r\n @Type(() => Chat)\r\n chat: Chat;\r\n\r\n @Type(() => MessageDocument)\r\n @Expose() documents: MessageDocument[];\r\n\r\n /**\r\n * Check if message created today or not\r\n */\r\n isToday(): boolean {\r\n const now: Date = new Date();\r\n return this.createdAt.getFullYear() === now.getFullYear() &&\r\n this.createdAt.getMonth() === now.getMonth() &&\r\n this.createdAt.getDate() === now.getDate();\r\n }\r\n\r\n /**\r\n * Check if message sent from firm\r\n */\r\n isFromEmployee(): boolean {\r\n return !!this.employee;\r\n }\r\n\r\n /**\r\n * Check if message read\r\n */\r\n isRead(): boolean {\r\n return !!this.readAt;\r\n }\r\n}\r\n","/**\n * @TODO Alex remove\n */\nexport enum AppEventTypeEnum {\n CLIENT_MOVEMENT_CLOSED,\n BANK_CONNECTION_ADDED,\n BANK_TRANSACTION_ALLOCATED,\n BANK_TRANSACTIONS_ADDED,\n BANK_TRANSACTIONS_DELETED,\n BASIQ_CONSENT_UPDATED,\n BASIQ_CONNECTION_UPDATED,\n BASIQ_JOB_CREATED,\n BASIQ_LOGIN_SUCCESS,\n BASIQ_LOGIN_FAILED,\n BASIQ_ACCOUNTS_RETRIEVED,\n CLIENT_INVITE_ACCEPTED,\n CLIENT_OPEN_CHAT,\n CLIENT_TRANSFER_TO_OTHER_EMPLOYEE,\n CURRENT_USER_GET_FAILED,\n DEPRECIATION_DELETED,\n DEPRECIATIONS_CREATED,\n INCOME_SOURCES_CREATED,\n INCOME_SOURCES_UPDATED,\n INCOME_SOURCES_FORECASTS_CREATED,\n INCOME_SOURCES_FORECASTS_UPDATED,\n LOAN_UPDATED,\n LOAN_PAYOUT_UPDATED,\n MESSAGE_CREATED,\n MESSAGE_FILE_CREATED,\n MESSAGE_FILE_DELETED,\n NOTIFICATION_ADDED,\n PROPERTY_DEPRECIATION_CALCULATION_UPDATED,\n PROPERTY_UPDATED,\n PROPERTY_UPDATED_WITH_DOCUMENT,\n PROPERTY_DOCUMENT_ADDED,\n PROPERTY_MOVEMENT_CREATED,\n PROPERTY_MOVEMENT_UPDATED,\n PROPERTY_MOVEMENT_DELETED,\n PROPERTY_SHARE_UPDATED,\n PROPERTY_SALE_ADDED,\n PROPERTY_SALE_DELETED,\n PROPERTY_SUBSCRIPTION_ADDED,\n PROPERTY_SUBSCRIPTION_DELETED,\n PROPERTY_VALUATION_DOCUMENT_CREATED,\n SERVICE_SUBSCRIPTION_UPDATED,\n SOLE_BUSINESS_CREATED,\n SOLE_DEPRECIATION_METHOD_UPDATED,\n SOLE_DETAILS_CREATED,\n SOLE_DETAILS_UPDATED,\n SOLE_INVOICE_PUBLISHED,\n TAX_REVIEW_UPDATED,\n TRANSACTION_ALLOCATION_CREATED,\n TRANSACTION_ALLOCATION_DELETED,\n TRANSACTION_CREATED,\n TRANSACTION_DELETED,\n TRANSACTION_UPDATED,\n TRANSACTIONS_CREATED,\n VEHICLE_CLAIM_UPDATED,\n VEHICLE_CLAIM_CREATED,\n VEHICLE_CLAIM_DETAILS_UPDATED,\n VEHICLE_CLAIM_DETAILS_CREATED,\n VEHICLE_LOGBOOK_CREATED,\n VEHICLE_LOGBOOK_UPDATED,\n VEHICLE_LOGBOOK_DELETED,\n VEHICLE_LOGBOOK_BEST_PERIOD_UPDATED\n}\n","import { ObservableModel } from '../../db/Models/observable-model';\nimport { AppEventTypeEnum } from './app-event-type.enum';\n\n/**\n * any event happened in the app, which needs to be handled somehow (distributed to other part of the app)\n */\nexport class AppEvent<T> {\n constructor(public type: AppEventTypeEnum, public payload: T) {\n }\n}\n\n/**\n * @TODO Alex (TT-1777): temp name, replace AppEvent or rename this class when all services refactored\n */\nexport class AppEvent2 {\n constructor(\n public name: string,\n // Pass null for deleted items, otherwise always pass changed items even if you don't need it\n public items: ObservableModel[]\n ) {}\n}\n","import { ServiceNotification as ServiceNotificationBase } from '../../db/Models/service-notification';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { User } from '../user/user';\nimport { UserEventTypeTypeEnum } from '../../db/Enums/user-event-type-type.enum';\n\nexport class Notification extends ServiceNotificationBase {\n @Type(() => User)\n sender: User;\n\n // notification redirection link\n @Expose({toClassOnly: true})\n @Transform(({obj}) => {\n switch (true) {\n // @TODO vik\n // case NOTIFICATION_EVENT_TYPES.employeeInvite.includes(obj.eventType):\n // return '/client/users/firms';\n // case NOTIFICATION_EVENT_TYPES.bankConnection.includes(obj.eventType):\n // return '/client/bank-feeds';\n // case NOTIFICATION_EVENT_TYPES.clientInvite.includes(obj.eventType):\n // return '/client/users/invitations';\n // case NOTIFICATION_EVENT_TYPES.propertyShare.includes(obj.eventType):\n // return '/client/users/shares';\n // case NOTIFICATION_EVENT_TYPES.employeeInviteFromClient.includes(obj.eventType):\n // return '/firm/clients/invites';\n default:\n return '';\n }\n })\n redirectionLink: string;\n\n get eventType(): UserEventTypeTypeEnum {\n return this.userEvent.type.type;\n }\n\n /**\n * Check if notification is from user or not\n */\n isFromUser(): boolean {\n return !!this.sender;\n }\n}\n","import { DocumentFolder as DocumentFolderBase } from '../../db/Models/document/document-folder';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class DocumentFolder extends DocumentFolderBase implements MpTrackableInterface {\n getMpData() {\n return { 'Name': this.name };\n }\n}\n","import { Document as DocumentBase } from '../../db/Models/document/document';\nimport { DocumentFolder } from './document-folder';\nimport { DocumentInterface } from '../../interfaces';\nimport { AppFile } from '../file';\nimport { Type } from 'class-transformer';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class Document extends DocumentBase implements DocumentInterface, MpTrackableInterface {\n @Type(() => DocumentFolder)\n folder: DocumentFolder;\n\n @Type(() => AppFile)\n file: AppFile;\n\n get parent(): DocumentFolder {\n return this.folder;\n }\n\n getMpData() {\n return {};\n }\n}\n","/**\n * Enum with document types which used to API url prefix\n */\nexport enum DocumentApiUrlPrefixEnum {\n FOLDERS = 'folders',\n PROPERTIES = 'properties'\n}\n","export const DOCUMENT_FILE_TYPES: {[key: string]: string[]} = {\n image: [\n 'image/png',\n 'image/jpg',\n 'image/jpeg',\n 'image/tiff',\n 'image/bmp'\n ],\n all: [\n 'image/png',\n 'image/jpg',\n 'image/jpeg',\n 'image/tiff',\n 'image/bmp',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/pdf',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/csv'\n ]\n};\n","import {Type} from 'class-transformer';\nimport {AbstractModel} from '../../db/Models';\nimport {HoldingType} from './holding-type';\n\nexport class HoldingTypeExchange extends AbstractModel {\n code?: string;\n name?: string;\n currency?: string;\n closeTime?: string;\n timezone?: string;\n\n @Type(() => Date)\n exchangeUpdatedAt?: Date;\n\n @Type(() => HoldingType)\n holdingTypes?: HoldingType[];\n}\n","import { Type } from 'class-transformer';\nimport { HoldingTypeCategoryEnum } from '../../db/Enums';\nimport { User } from '../user';\nimport { AbstractModel } from '../../db/Models';\nimport { HoldingTypeExchange } from './holding-type-exchange';\nimport { AppFile } from '../file';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class HoldingType extends AbstractModel implements MpTrackableInterface {\n category?: HoldingTypeCategoryEnum;\n name?: string;\n ticker?: string;\n price?: number;\n openPrice?: number;\n highPrice?: number;\n lowPrice?: number;\n volume?: number;\n ema50d?: number;\n ema200d?: number;\n highPrice250d?: number;\n lowPrice250d?: number;\n avgVolume14d?: number;\n avgVolume50d?: number;\n avgVolume200d?: number;\n marketCap?: number;\n beta?: number;\n adjustedPrice?: number;\n isDelisted?: boolean;\n peRatio?: number;\n description?: string;\n dividendPercent?: number;\n @Type(() => AppFile)\n file: AppFile;\n @Type(() => Date)\n lastUpdateDateOnExchange?: Date;\n @Type(() => Date)\n updatedAt?: Date;\n @Type(() => User)\n user?: User;\n @Type(() => HoldingTypeExchange)\n exchange?: HoldingTypeExchange;\n\n /**\n * @TODO Alex move to translation file\n */\n get categoryLabel(): string {\n switch (this.category) {\n case HoldingTypeCategoryEnum.STOCK:\n return 'Shares';\n case HoldingTypeCategoryEnum.CRYPTO:\n return 'Cryptos';\n case HoldingTypeCategoryEnum.COLLECTIBLE:\n return 'Collectibles';\n case HoldingTypeCategoryEnum.UNLISTED_STOCK:\n return 'Unlisted stock';\n case HoldingTypeCategoryEnum.UNLISTED_UNIT:\n return 'Unlisted unit';\n default:\n return 'Other';\n }\n }\n\n isOther(): boolean {\n return [\n HoldingTypeCategoryEnum.COLLECTIBLE,\n HoldingTypeCategoryEnum.UNLISTED_STOCK,\n HoldingTypeCategoryEnum.UNLISTED_UNIT,\n HoldingTypeCategoryEnum.OTHER\n ].includes(this.category);\n }\n\n isShare(): boolean {\n return this.category === HoldingTypeCategoryEnum.STOCK;\n }\n\n isCrypto(): boolean {\n return this.category === HoldingTypeCategoryEnum.CRYPTO;\n }\n\n getMpData() {\n return { category: HoldingTypeCategoryEnum[this.category], name: this.name };\n }\n}\n","import { Transform, Type } from 'class-transformer';\nimport { Holding } from './holding';\nimport { AppFile } from '../file';\nimport { AssetSale } from '../asset-sale';\nimport { MpTrackableInterface } from '../../interfaces';\nimport { HoldingType } from './holding-type';\n\nexport class HoldingSale extends AssetSale implements MpTrackableInterface {\n quantity: number;\n price: number;\n fee: number;\n total: number;\n\n @Transform(({ value }) => ({ id: value.id }), { toPlainOnly: true })\n holding?: Holding;\n\n @Type(() => AppFile)\n file: AppFile;\n\n /**\n * netCapitalGain is different from grossCapitalGain only when 1 year rule applied\n */\n isOneYearExemptionApplicable(): boolean {\n return this.grossCapitalGain !== this.netCapitalGain;\n }\n\n get concession(): string {\n return this.isOneYearExemptionApplicable() ? '50% (1 year rule)' : 'None';\n }\n\n getCostBase(holding: Holding): number {\n return this.getPurchasePrice(holding) + holding.fee;\n }\n\n /**\n * Purchase price of sold items\n */\n getPurchasePrice(holding: Holding): number {\n return holding.price * this.quantity;\n }\n\n get netCost(): number {\n return this.cost - this.fee;\n }\n\n get cost(): number {\n return this.price * this.quantity;\n }\n\n getMpData(type: HoldingType) {\n return { holding: type.name, concession: this.concession };\n }\n}\n","import { Expose, Transform, Type, plainToClass } from 'class-transformer';\nimport { User } from '../user';\nimport { HoldingType } from './holding-type';\nimport { AppFile } from '../file';\nimport { HoldingSale } from './holding-sale';\nimport { Collection } from '../../collections';\nimport { AbstractModel } from '../../db/Models';\nimport { FinancialYear } from '../financial-year';\nimport { HoldingTypeCategoryEnum } from '../../db/Enums';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class Holding extends AbstractModel implements MpTrackableInterface {\n isTaxFree = false;\n quantity: number;\n currentQuantity: number;\n ownershipPercent?: number;\n price: number;\n fee: number;\n\n @Type(() => Date)\n date: Date;\n\n @Type(() => User)\n user: User;\n\n @Type(() => HoldingType)\n type: HoldingType;\n\n @Type(() => AppFile)\n file: AppFile;\n\n @Type(() => HoldingSale)\n @Transform(({ value }) => new Collection<HoldingSale>(value))\n sales: Collection<HoldingSale>;\n\n /**\n * @TODO Artem/Alex looks bad, come up with a better solution\n * get current category, in holding we are interested in 3 main categories: stock/crypto/other\n */\n @Transform(({ obj }) => {\n const type: HoldingType = plainToClass(HoldingType, obj.type)\n if (type) {\n return type.isOther() ? null : type.category\n }\n if (obj.category) {\n return [\n HoldingTypeCategoryEnum.COLLECTIBLE,\n HoldingTypeCategoryEnum.UNLISTED_STOCK,\n HoldingTypeCategoryEnum.UNLISTED_UNIT,\n HoldingTypeCategoryEnum.OTHER\n ].includes(obj.category) ? null : obj.category;\n }\n return HoldingTypeCategoryEnum.STOCK;\n }, { toClassOnly: true })\n @Expose({ toClassOnly: true }) category: HoldingTypeCategoryEnum;\n\n /**\n * Get total purchasing price\n */\n get purchaseValue(): number {\n // Price and entity may be empty when we use HoldingForm.currentValue\n if (!this.price || !this.quantity) {\n return 0;\n }\n\n return this.price * this.quantity;\n }\n\n /**\n * Get current market price\n * @TODO vik/alex no need to pass holdingType, should come from backend\n */\n get marketValue(): number {\n return this.quantity * this.type.price;\n }\n\n /**\n * Get percent difference between current and buy price\n * @TODO vik/alex no need to pass holdingType, should come from backend\n */\n get growthCoefficient(): number {\n return this.type.price / this.price - 1;\n }\n\n heldMoreYear(): boolean {\n const yearTime: number = 1000 * 60 * 60 * 24 * 365;\n\n return (new FinancialYear().startDate.getTime() - this.date.getTime()) > yearTime;\n }\n\n isSold(): boolean {\n return this.currentQuantity === 0;\n }\n\n getMpData() {\n return { type: this.type.name, date: this.formatDate(this.date) };\n }\n}\n","import { Transaction } from '../transaction';\nimport { Holding } from './holding';\nimport { AbstractModel } from '../../db/Models';\nimport { Type } from 'class-transformer';\nimport { HoldingType } from './holding-type';\n\n/**\n * Helper class for holding reinvest functionality.\n * Reinvest - get dividends and directly buy holdings\n */\nexport class HoldingReinvest extends AbstractModel {\n @Type(() => Transaction)\n transaction: Transaction;\n\n @Type(() => Holding)\n holding: Holding;\n\n @Type(() => HoldingType)\n holdingType: HoldingType;\n}\n","import { BudgetRule as BudgetRuleBase } from '../../db/Models/budget/budget-rule';\nimport { Type } from 'class-transformer';\nimport { Budget } from './budget';\nimport { ChartAccounts } from '../chart-accounts';\n\nexport class BudgetRule extends BudgetRuleBase {\n @Type(() => Budget)\n budget: Budget;\n\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n}\n","import { Budget as BudgetBase } from '../../db/Models/budget/budget';\nimport { Type } from 'class-transformer';\nimport { BudgetRule } from './budget-rule';\nimport { User } from '../user';\nimport { Collection } from '../../collections';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class Budget extends BudgetBase implements MpTrackableInterface {\n @Type(() => BudgetRule)\n rules: BudgetRule[];\n\n @Type(() => User)\n user: User;\n\n get rulesCollection(): Collection<BudgetRule> {\n return new Collection(this.rules);\n }\n\n getMpData() {\n return {};\n }\n}\n","import { Type } from 'class-transformer';\nimport { TaxReturnCategory as TaxReturnCategoryBase } from '../../db/Models';\nimport { TaxReturnItem } from './tax-return-item';\n\nexport class TaxReturnCategory extends TaxReturnCategoryBase {\n @Type(() => Date)\n createdAt?: Date;\n\n @Type(() => Date)\n updatedAt?: Date;\n\n @Type(() => TaxReturnItem)\n taxReturnItems?: TaxReturnItem[];\n\n @Type(() => TaxReturnCategory)\n parent?: TaxReturnCategory;\n}\n","import { Type } from 'class-transformer';\nimport { TaxReturnItem as TaxReturnItemBase } from '../../db/Models';\nimport { TaxReturnCategory } from './tax-return-category';\nimport { TaxReturn } from './tax-return';\nimport { TaxReturnItemEnum } from '../../db/Enums';\n\nexport class TaxReturnItem extends TaxReturnItemBase {\n // used for business schedule report, the order is important\n static BUSINESS_SCHEDULE_LIST: number[] = [\n TaxReturnItemEnum.NO_ABN_GIVEN,\n TaxReturnItemEnum.VOLUNTARY_AGREEMENT,\n TaxReturnItemEnum.LABOUR_HIRE_OR_OTHER,\n TaxReturnItemEnum.OTHER_BUSINESS_INCOME,\n TaxReturnItemEnum.ASSESSABLE_GOVERNMENT_PAYMENTS,\n TaxReturnItemEnum.PURCHASES_AND_OTHER_COSTS,\n TaxReturnItemEnum.COMMISSION_EXPENSES,\n TaxReturnItemEnum.SUPERANNUATION_EXPENSES,\n TaxReturnItemEnum.BAD_DEBTS,\n TaxReturnItemEnum.LEASE_EXPENSES,\n TaxReturnItemEnum.RENT_EXPENSES,\n TaxReturnItemEnum.INTEREST_EXPENSES_WITHIN_AUSTRALIA,\n TaxReturnItemEnum.INTEREST_EXPENSES_OVERSEAS,\n TaxReturnItemEnum.DEPRECIATION_EXPENSES,\n TaxReturnItemEnum.MOTOR_VEHICLE_EXPENSES,\n TaxReturnItemEnum.ALL_OTHER_EXPENSES\n ];\n\n @Type(() => Date)\n createdAt?: Date;\n\n @Type(() => Date)\n updatedAt?: Date;\n\n @Type(() => TaxReturnCategory)\n taxReturnCategory?: TaxReturnCategory;\n\n @Type(() => TaxReturn)\n taxReturns?: TaxReturn[];\n}\n","import { Type } from 'class-transformer';\nimport { TaxReturn as TaxReturnBase } from '../../db/Models';\nimport { TaxReturnItem } from './tax-return-item';\n\nexport class TaxReturn extends TaxReturnBase {\n @Type(() => TaxReturnItem)\n taxReturnItems?: TaxReturnItem[];\n}\n","import { Injectable } from '@angular/core';\nimport { AppEvent, AppEvent2 } from '../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../models/event/app-event-type.enum';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { ObservableModel } from '../../db/Models/observable-model';\n\n/**\n * @TODO Alex (TT-1777): replace old logic with the new when all services ready\n * @TODO Alex (TT-1777): rename old logic and keep it for custom events\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n private eventSubject: Subject<AppEvent<any>> = new Subject();\n private eventSubject2: Subject<AppEvent2> = new Subject();\n\n /**\n * subscription to specific event type\n */\n on(eventType: AppEventTypeEnum | AppEventTypeEnum[]): Observable<any> {\n return this.eventSubject.pipe(\n filter((event: AppEvent<any>): boolean => [].concat(eventType).includes(event.type)),\n map((event: AppEvent<any>): any => event.payload)\n );\n }\n\n on2(...names: string[]): Observable<ObservableModel[]> {\n return this.eventSubject2.pipe(\n filter((event: AppEvent2): boolean => [].concat(names).includes(event.name)),\n map((event: AppEvent2): any => event.items)\n );\n }\n\n /**\n * deliver new event\n */\n dispatch<T>(event: AppEvent<T>): void {\n this.eventSubject.next(event);\n }\n\n dispatch2(event: AppEvent2): void {\n this.eventSubject2.next(event);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport * as mixpanel from 'mixpanel-browser';\n\n/**\n * Service to work with mixpanel https://docs.mixpanel.com/docs/tracking/reference/javascript\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MixpanelService {\n constructor(@Inject('environment') private environment: any) {\n }\n\n init(): void {\n if (!this.environment.enableMixpanel) {\n return;\n }\n\n mixpanel.init(this.environment.mixpanelToken);\n }\n\n identify(id: string): void {\n if (!this.environment.enableMixpanel) {\n return;\n }\n\n mixpanel.identify(id);\n }\n\n reset(): void {\n if (!this.environment.enableMixpanel) {\n return;\n }\n\n mixpanel.reset();\n }\n\n track(event: string, properties: { [key: string]: any } = {}): void {\n if (!this.environment.enableMixpanel) {\n return;\n }\n\n mixpanel.track(event, properties);\n }\n\n trackPageView(): void {\n if (!this.environment.enableMixpanel) {\n return;\n }\n\n mixpanel['track_pageview']();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { User } from '../../models';\nimport { plainToClass } from 'class-transformer';\nimport { MixpanelService } from '../mixpanel/mixpanel.service';\n\nconst NAME_TOKEN = 'token';\nconst NAME_REFRESH_TOKEN = 'refreshToken';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class JwtService extends JwtHelperService {\n private mpService: MixpanelService = inject(MixpanelService);\n\n getToken(): string {\n return localStorage[NAME_TOKEN];\n }\n\n getRefreshToken(): string {\n return localStorage[NAME_REFRESH_TOKEN];\n }\n\n saveTokens(tokens: { token: string, refreshToken: string }): void {\n localStorage[NAME_TOKEN] = tokens.token;\n localStorage[NAME_REFRESH_TOKEN] = tokens.refreshToken;\n this.mpService.identify(this.getUser().id);\n }\n\n destroyTokens(): void {\n localStorage.removeItem(NAME_TOKEN);\n localStorage.removeItem(NAME_REFRESH_TOKEN);\n }\n\n getUser(): User {\n const token = this.decodeToken<any>();\n if(!token) {\n return null;\n }\n\n return plainToClass(User, { id: token.id, roles: token.roles, email: token.username, status: token.status });\n }\n\n isMe(userId: number): boolean {\n return this.getUser().id === userId;\n }\n}\n","import { Inject, Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { EventSourcePolyfill } from 'event-source-polyfill/src/eventsource.min.js';\nimport { JwtService } from '../auth/jwt.service';\n\n/**\n * server sent events service\n * https://symfony.com/doc/current/mercure.html\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SseService {\n constructor(\n private zone: NgZone,\n private jwtService: JwtService,\n @Inject('environment') private environment: any\n ) {\n }\n\n /**\n * list to url for server events\n */\n on(topic: string): Observable<object> {\n const url: URL = new URL(this.environment.mercureUrl);\n url.searchParams.append('topic', `${this.environment.apiV2}/users/${this.jwtService.decodeToken().username}/${topic}`);\n // tslint:disable-next-line:typedef\n return new Observable((observer) => {\n const es: EventSourcePolyfill = new EventSourcePolyfill(url, {\n headers: {\n Authorization: 'Bearer ' + this.jwtService.getToken(),\n }\n });\n\n es.onmessage = (event: MessageEvent): void => {\n this.zone.run((): void => observer.next(event));\n };\n })\n .pipe(\n map((messageEvent: MessageEvent): object => JSON.parse(messageEvent.data))\n );\n }\n}\n","// replace array element with the new one (only arrays of objects)\r\nexport function replace(array: any[], item: any, matchField = 'id'): void {\r\n const index: number = array.findIndex((i: any) => i[matchField] === item[matchField]);\r\n array.splice(index, 1, item);\r\n}\r\n","// sort array of objects by field\r\nexport function sort(array: any[], field = 'id', isDesc = true): void {\r\n array.sort((a: any, b: any): number => {\r\n if (a[field] > b[field]) { return !isDesc ? 1 : -1; }\r\n if (a[field] < b[field]) { return !isDesc ? -1 : 1; }\r\n return 0;\r\n });\r\n}\r\n","// sort array of objects by field\r\nexport function sortDeep(array: any[], fieldsQueue: string[] = ['id'], isDesc = true): void {\r\n array.sort((a: any, b: any): number => {\r\n const aValue: any = getValue(a, fieldsQueue);\r\n const bValue: any = getValue(b, fieldsQueue);\r\n\r\n if (aValue > bValue) { return !isDesc ? 1 : -1; }\r\n if (aValue < bValue) { return !isDesc ? -1 : 1; }\r\n return 0;\r\n });\r\n}\r\n\r\nfunction getValue(obj: any, fields: string[]): any {\r\n let value: any = obj;\r\n fields.forEach((field: string) => {\r\n value = value[field];\r\n });\r\n return value;\r\n}\r\n","/**\n * Convert single object or array into array\n */\nexport function toArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? data : [data];\n}\n","import {Injectable} from '@angular/core';\nimport {Collection} from '../collections';\nimport { plainToClass } from 'class-transformer';\nimport {AbstractModel} from '../db/Models';\nimport clone from 'lodash/clone';\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class DataService<BaseModel, Model extends AbstractModel, CollectionModel extends Collection<Model>> {\n data: BaseModel[];\n\n /**\n * Model class for instances creating\n */\n abstract modelClass;\n\n /**\n * Collection Model class for instances creating\n */\n abstract collectionClass;\n\n /**\n * Cached array of service class instances\n */\n protected cache: CollectionModel;\n\n /**\n * @TODO use excludeExtraneousValues when all models refactored (exposed all needed properties)\n * Create new instance of class\n * @param model Single object or array from which will be created model instance(s)\n */\n protected createModelInstance(model: BaseModel): Model {\n // excludePrefixes - class-transformer option is using to ignore hydra fields\n return plainToClass(this.modelClass, model, { excludePrefixes: ['@'] });\n }\n\n protected createCollectionInstance(collectionClass: new (items: Model[]) => CollectionModel, items: Model[]): CollectionModel {\n return new collectionClass(items);\n }\n\n /**\n * never return cache directly to prevent update\n */\n getCache(): CollectionModel {\n return clone(this.cache);\n }\n\n /**\n * never return cache directly to prevent update\n */\n getCacheFirst(): Model {\n return clone(this.cache?.first);\n }\n\n /**\n * @TODO vik any[] because of problems with base models extending abstractModel\n */\n setCache(data: any[]): void {\n this.cache = this.createCollectionInstance(\n this.collectionClass,\n data.map((item) => this.createModelInstance(item))\n );\n }\n}\n","import { ToastTypeEnum } from './toast-type.enum';\n\n/**\n * Common toast message class\n */\nexport class Toast {\n type: ToastTypeEnum;\n title: string;\n message: string;\n duration = 3000;\n autoClose = true;\n date: Date;\n onCloseClick: () => {};\n onCTAClick: () => {};\n}\n","export enum ToastTypeEnum {\n INFO,\n SUCCESS,\n WARNING,\n ERROR\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { Toast } from '../../models/toast/toast';\nimport { plainToClass } from 'class-transformer';\nimport { ToastTypeEnum } from '../../models/toast/toast-type.enum';\n\n/**\n * popup notifications service (toast, snackbar).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastService {\n toast$: ReplaySubject<Toast> = new ReplaySubject<Toast>(1);\n\n get(): Observable<Toast> {\n return this.toast$.asObservable();\n }\n\n add(toast: Toast): void {\n // set date to prevent closing of equal toasts (extra case)\n toast.date = new Date(),\n this.toast$.next(toast);\n }\n\n success(message: string): void {\n this.add(plainToClass(Toast, {\n type: ToastTypeEnum.SUCCESS,\n title: 'Success!',\n message,\n }))\n }\n\n warning(message: string): void {\n this.add(plainToClass(Toast, {\n type: ToastTypeEnum.WARNING,\n title: 'Notification!',\n message,\n }))\n }\n\n error(message: string): void {\n this.add(plainToClass(Toast, {\n type: ToastTypeEnum.ERROR,\n title: 'Error!',\n message,\n }))\n }\n\n info(message: string): void {\n this.add(plainToClass(Toast, {\n type: ToastTypeEnum.INFO,\n title: 'Information',\n message,\n }))\n }\n}\n","import { Inject, Injectable, inject } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { catchError, first, map } from 'rxjs/operators';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { EventDispatcherService, SseService } from '../../event';\nimport { classToPlain } from 'class-transformer';\nimport { IEventListener } from '../../../interfaces';\nimport { Collection } from '../../../collections';\nimport { AbstractModel, ObservableModel } from '../../../db/Models';\nimport { AppEvent2 } from '../../../models';\nimport { toArray } from '../../../functions/array';\nimport { RestMethod } from './rest-method.type';\nimport { HttpMethod } from './http-method.type';\nimport { DataService } from '../../data.service';\nimport { UserRolesEnum } from '../../../db/Enums/user-roles.enum';\nimport { MixpanelService } from '../../mixpanel/mixpanel.service';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { ToastService } from '../../toast';\nimport intersection from 'lodash/intersection';\n\n/**\n * Abstract base service that implements common services functionality\n * and describe abstract methods/properties that have to be implemented in child services\n * Model - entity service is working with\n * BaseModel - base entity model that extends by Model\n * CollectionModel - entity collection class\n */\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class RestService<BaseModel, Model extends AbstractModel, CollectionModel extends Collection<Model>>\n extends DataService<BaseModel, Model, CollectionModel> implements IEventListener {\n\n /**\n * Url part for service entity API\n */\n protected abstract endpointUri: string;\n /**\n * Subject for service cache\n */\n protected cacheSubject: ReplaySubject<CollectionModel> = new ReplaySubject(1);\n /**\n * Flag for work with API platform\n */\n protected isApiPlatform: boolean;\n /**\n * List of methods unavailable for current API\n * @TODO Alex: add and handle enabled methods too\n * @TODO Alex: disable batch by default\n */\n disabledMethods: RestMethod[] = [];\n protected mpService: MixpanelService = inject(MixpanelService);\n protected sseService: SseService = inject(SseService);\n protected toastService: ToastService = inject(ToastService);\n roles: UserRolesEnum[] = [];\n\n /**\n * disable cache update by requests, update only by SSE events\n */\n disableCache: boolean = false;\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n super();\n // @TODO Alex remove, bad idea to call empty method overrided in child (because it will be called with parent context)\n this.listenEvents();\n // @TODO Alex remove, bad idea to call empty method overrided in child (because it will be called with parent context)\n this.listenSSE();\n }\n\n protected get apiUrl(): string {\n return `${this.environment.apiV2}/${this.endpointUri}`;\n }\n\n setCache(data: any[], next = false): void {\n super.setCache(data);\n\n if (next) {\n this.cacheSubject.next(this.cache);\n }\n }\n\n /**\n * Refresh cache with actual backend data\n */\n refreshCache(): void {\n this.cache = undefined;\n this.get();\n }\n\n /**\n * Get data from backend and fill the cache\n */\n protected fetch(path = this.apiUrl): Observable<CollectionModel> {\n this.handleAccessError('get');\n\n if (!this.hasRoles()) {\n this.setCache([], true);\n return this.cacheSubject.asObservable();\n }\n\n // Set cache as empty collection to avoid multiple requests before cache filled\n this.setCache([]);\n return this.http.get(path)\n .pipe(\n map((response: object) => this.isApiPlatform ? response['hydra:member'] : toArray(response)),\n map((response: BaseModel[]) => {\n this.setCache(response, true);\n\n return this.cache;\n })\n );\n }\n\n get(path: string = this.apiUrl): Observable<CollectionModel> {\n if (!this.cache) {\n this.fetch(path).pipe(first()).subscribe();\n }\n\n return this.cacheSubject.asObservable();\n }\n\n getFirst(): Observable<Model> {\n this.handleAccessError('get');\n\n return this.get().pipe(\n map((collection: CollectionModel) => collection.first)\n );\n }\n\n hasInCache(id: number): boolean {\n return !!this.getCache().findBy('id', id);\n }\n\n getArray(): Observable<Model[]> {\n return this.get().pipe(map((collection: CollectionModel) => collection.toArray()));\n }\n\n /**\n * Create a new Model instance in database\n */\n post(model: Model, mpData?: AbstractModel, path: string = this.apiUrl): Observable<Model> {\n this.handleAccessError('post');\n\n return this.http.post(path, classToPlain(model))\n .pipe(\n map((response: BaseModel) => {\n const result: Model = this.createModelInstance(response);\n this.handleResponse([result], 'post', mpData);\n\n return result;\n }),\n catchError((error: HttpErrorResponse) => {\n this.handleResponseError([model], 'post', mpData);\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Create multiple new Model instances in database\n */\n postBatch(models: Model[]): Observable<Model[]> {\n this.handleAccessError('postBatch');\n\n return this.http.post(this.apiUrl, classToPlain(models))\n .pipe(\n map((response: BaseModel[]) => {\n const result: Model[] = response.map((item: BaseModel): Model => this.createModelInstance(item));\n this.handleResponse(result, 'post');\n\n return result;\n }),\n catchError((error: HttpErrorResponse) => {\n this.handleResponseError(models, 'post');\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Change an existing Model instance in database\n */\n put(model: Model, mpData?: AbstractModel, path = `${this.apiUrl}/${model.id}`): Observable<Model> {\n this.handleAccessError('put');\n\n return this.http.put(path, classToPlain(model))\n .pipe(\n map((response: BaseModel) => {\n const result: Model = this.createModelInstance(response);\n this.handleResponse([result], 'put', mpData);\n\n return result;\n }),\n catchError((error: HttpErrorResponse) => {\n this.handleResponseError([model], 'put', mpData);\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Change multiple existing Model instances in database\n */\n putBatch(models: Model[]): Observable<Model[]> {\n this.handleAccessError('putBatch');\n\n return this.http.put(this.apiUrl, classToPlain(models))\n .pipe(\n map((response: BaseModel[]) => {\n const result: Model[] = response.map((item: BaseModel): Model => this.createModelInstance(item));\n this.handleResponse(result, 'put');\n\n return result;\n }),\n catchError((error: HttpErrorResponse) => {\n this.handleResponseError(models, 'put');\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Remove a Model instance from database\n */\n delete(model: Model, mpData?: AbstractModel): Observable<void> {\n this.handleAccessError('delete');\n\n return this.http.delete(`${this.apiUrl}/${model.id}`)\n .pipe(\n map(() => {\n this.handleResponse([model], 'delete', mpData);\n }),\n catchError((error: HttpErrorResponse) => {\n this.handleResponseError([model], 'delete', mpData);\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Remove multiple Model instances from database\n */\n deleteBatch(models: Model[]): Observable<void> {\n this.handleAccessError('deleteBatch');\n\n return this.http.post(`${this.apiUrl}/delete`, classToPlain(models))\n .pipe(\n map(() => {\n this.handleResponse(models, 'delete');\n }),\n catchError((error: HttpErrorResponse) => {\n this.handleResponseError(models, 'delete');\n\n return observableThrowError(error);\n })\n );\n }\n\n protected track(response: Model[], method: HttpMethod, mpData?: AbstractModel, postfix = '') {\n // check if result exist, sometimes response may be empty (for example ClientInvite accept/reject/etc)\n if (!response[0]) {\n return;\n }\n\n // no other way to check interface\n if ('getMpData' in response[0]) {\n response.forEach((model) => {\n this.mpService.track(`${method}${this.modelClass.name}${postfix}`, model['getMpData'](mpData))\n });\n }\n }\n\n protected handleResponseError(response: Model[], method: HttpMethod, mpData?: AbstractModel) {\n // @TODO error notification?\n this.track(response, method, mpData, 'Error');\n }\n\n /**\n * Handle response data - update cache and dispatch event if it is needed\n */\n protected handleResponse(response: Model[], method: HttpMethod, mpData?: AbstractModel) {\n this.track(response, method, mpData);\n\n if (this.getCache() && !this.disableCache) {\n this.updateCache(response, method);\n }\n\n // dispatch event for interested services\n if (response[0] instanceof ObservableModel) {\n this.dispatchEvent(method, response);\n }\n }\n\n /**\n * Update cache with passed items. Add/Update detects automatically, Delete via optional flag\n */\n protected updateCache(items: Model[], method: HttpMethod): void {\n let cache: CollectionModel;\n\n switch (method) {\n case 'post':\n cache = this.cache.push(...items);\n break;\n\n case 'put':\n // @TODO Alex old instance\n items.forEach((item: Model) => {\n cache = this.cache.replaceBy('id', item.id, item);\n });\n break;\n\n case 'delete':\n cache = this.cache.removeBy('id', items.map((item: Model) => item.id));\n break;\n\n case 'get':\n cache = this.createCollectionInstance(this.collectionClass, items);\n }\n\n this.setCache(cache.toArray(), true);\n }\n\n /**\n * Generate and dispatch rest event\n */\n protected dispatchEvent(method: HttpMethod, items: Model[]): void {\n const eventName: string = (this.modelClass as typeof ObservableModel).getEventName(method);\n this.eventDispatcherService.dispatch2(new AppEvent2(eventName, items));\n }\n\n /**\n * Check if method is not disabled. Throw exception otherwise.\n * Some entities does not have endpoints for all methods.\n */\n private handleAccessError(method: RestMethod): void {\n if (!this.disabledMethods.includes(method)) {\n return;\n }\n\n throw new Error(`Method ${method}() is not allowed for ${this.constructor.name}`);\n }\n\n /**\n * Subscribe to http events and run callback.\n * CSE - Cleint Sent Events\n * @param modelClass\n * @param methods The list of http methods should be listened for\n * @param callback The function to be called when event triggered\n */\n protected listenCSE(modelClass: typeof ObservableModel, methods: HttpMethod[], callback: Function): void {\n callback = callback.bind(this);\n\n methods.forEach((method: HttpMethod) => {\n this.eventDispatcherService.on2(modelClass.getEventName(method)).subscribe((data: ObservableModel[]) => {\n callback(data);\n });\n })\n }\n\n /**\n * check if user has subscription role to access api\n */\n hasRoles(): boolean {\n if (!this.roles.length) {\n return true;\n }\n\n return !!intersection(JSON.parse(localStorage.getItem('roles')), this.roles).length;\n }\n\n /**\n * // @TODO Alex remove\n * Method that call all listeners. Empty by default. Should be redefined by child services if required\n */\n listenEvents(): void {}\n\n /**\n * Listen SSE events\n */\n listenSSE(): void {}\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BankAccount as BankAccountBase, BankConnection as BankConnectionBase } from '../../../../db/Models';\nimport { AppEventTypeEnum, BankAccount, BankConnection, BankTransaction, PropertyShare } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { IEventListener } from '../../../../interfaces';\nimport { BankAccountCollection } from '../../../../collections';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { EventDispatcherService, SseService } from '../../../event';\nimport { ToastService } from '../../../toast';\nimport { HttpClient } from '@angular/common/http';\n\n/**\n * Service that handling user's bank accounts logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankAccountService extends RestService<BankAccountBase, BankAccount, BankAccountCollection> implements IEventListener {\n endpointUri = 'bank-accounts';\n modelClass: typeof BankAccount = BankAccount;\n collectionClass: typeof BankAccountCollection = BankAccountCollection;\n disabledMethods: RestMethod[] = ['post', 'putBatch', 'delete', 'deleteBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n protected sseService: SseService,\n @Inject('environment') protected environment: any,\n ) {\n super(http, eventDispatcherService, environment);\n this.listenConnections();\n }\n\n /**\n * Listen system notifications and update cache when got basiq notification received\n */\n listenEvents(): void {\n this.listenToEventDispatcherChanges();\n this.listenCSE(BankTransaction, ['post', 'delete'], this.refreshCache);\n this.listenCSE(PropertyShare, ['put'], this.refreshCache);\n this.listenCSE(BankConnection, ['post'], this.refreshCache);\n }\n\n /**\n * Update bank account current balance\n * @TODO Vik: refactor once backend updated (should be separated endpoint for BankAccountBalance entity)\n */\n updateCurrentBalance(bankAccount: BankAccount): Observable<BankAccount> {\n return this.http.put(`${this.apiUrl}/${bankAccount.id}/balance`, bankAccount)\n .pipe(\n map((response: object) => {\n const updatedBankAccount: BankAccount = plainToClass(BankAccount, response);\n this.handleResponse([updatedBankAccount], 'put');\n\n return updatedBankAccount;\n })\n );\n }\n\n /**\n * Listen to EventDispatcherService events\n */\n private listenToEventDispatcherChanges(): void {\n this.eventDispatcherService.on([\n AppEventTypeEnum.LOAN_PAYOUT_UPDATED,\n AppEventTypeEnum.BANK_TRANSACTIONS_ADDED\n ]).subscribe(() => {\n this.refreshCache();\n });\n }\n\n /**\n * @TODO don't refresh the whole cache, update what's needed\n * manualConnection moved to basiq, old manual bankAccounts closed to let user add automated bankAccounts (because there is no reliable way to merge)\n */\n private listenConnections(): void {\n this.sseService.on(`bankConnections`).subscribe((connection: BankConnectionBase): void => {\n this.refreshCache();\n });\n }\n}\n","export enum BankConnectionMessagesEnum {\n ACTIVATE = 'Live bank feeds are deactivated, activate to start receiving daily bank transactions',\n ACTIVATED = 'Bank transactions will be delivered daily',\n DEACTIVATE = 'Deactivate to stop receiving daily bank transactions',\n CONFIRM_DEACTIVATE = 'We are unable to deliver daily bank transactions to deactivated banks',\n DEACTIVATED = 'Your live bank feeds are deactivated',\n RECONNECT = 'Disconnected, There has been an issue with your bank connection. Please reconnect to continue receiving bank transactions',\n UPGRADE = 'Upgrade needed from traditional feeds to an Open Banking connection to continue receiving bank transactions',\n CONFIRM_UPGRADE = 'Upgrading to open banking improves stability and data integrity',\n AUTOMATE = 'Upgrade from manual imports to an Open Banking connection to receive daily bank transactions',\n CONFIRM_AUTOMATE = 'When you upgrade we will deactivate your manual bank and create a new bank in TaxTank with live transactions delivered daily. Manual banks can still be viewed at any time',\n MANAGE = 'Select more banks to share with TaxTank',\n CONFIRM_MANAGE = 'Reconnect your bank to select more accounts to share with TaxTank',\n PENDING = 'We are organising banks and accounts, we will let you know when you are good to go',\n INVALID_CREDENTIALS = 'Invalid credentials',\n WRONG_LOGIN_DATA = 'Please enter the login you used before',\n LOGIN_SUCCESS = 'Login success, importing financial data',\n ACCOUNTS_RETRIEVED = 'Financial data received, you can add bank accounts now',\n JOB_ID_RECEIVED = 'Receiving information from bank',\n TEMPORARY_UNAVAILABLE = 'The bank is temporarily unavailable, please check back later'\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { BankConnection as BankConnectionBase } from '../../../../db/Models';\nimport { plainToClass } from 'class-transformer';\nimport { RestMethod, RestService } from '../../rest';\nimport { BankConnection } from '../../../../models';\nimport { IEventListener } from '../../../../interfaces';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { Collection } from '../../../../collections';\nimport { ToastService } from '../../../toast';\nimport { EventDispatcherService, SseService } from '../../../event';\nimport { BankConnectionMessagesEnum } from './bank-connection-messages.enum';\n\n/**\n * BankConnection means user account at specific bank (usually each user has only one at the same bank)\n * service handles BankConnection management\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankConnectionService extends RestService<BankConnectionBase, BankConnection, Collection<BankConnection>> implements IEventListener {\n isApiPlatform = true;\n modelClass: typeof BankConnection = BankConnection;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'bank-connections';\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'delete', 'deleteBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n protected sseService: SseService,\n @Inject('environment') protected environment: any,\n ) {\n super(http, eventDispatcherService, environment);\n this.listenBankConnections();\n }\n\n /**\n * there is no put BankConnection method, we have to post to update\n * POST endpoint is using for create and for update.\n */\n post(bankConnection: BankConnection): Observable<BankConnection> {\n return this.http.post(this.apiUrl, bankConnection)\n .pipe(\n map((response: BankConnectionBase) => {\n const result: BankConnection = plainToClass(BankConnection, response);\n\n if (bankConnection.id) {\n this.handleResponse([result], 'put');\n } else {\n this.handleResponse([result], 'post');\n\n if (result.isBasiq()) {\n switch (true) {\n case result.isLoginSuccess():\n this.toastService.success(BankConnectionMessagesEnum.LOGIN_SUCCESS);\n break;\n case result.isAccountsRetrieved():\n this.toastService.success(BankConnectionMessagesEnum.ACCOUNTS_RETRIEVED);\n break;\n }\n }\n }\n\n return result;\n }),\n catchError((error: HttpErrorResponse) => {\n // Show error when user provided wrong login data\n if (error.status === 401) {\n this.toastService.error(BankConnectionMessagesEnum.INVALID_CREDENTIALS);\n }\n\n // Show error when user provided another login (not login he used before)\n if (error.status === 400) {\n this.toastService.error(BankConnectionMessagesEnum.WRONG_LOGIN_DATA);\n }\n\n return observableThrowError(error);\n })\n )\n }\n\n activate(bankConnection: BankConnection): Observable<BankConnection> {\n return this.put(bankConnection, null, `${this.apiUrl}/${bankConnection.id}/activate`);\n }\n\n deactivate(bankConnection: BankConnection): Observable<BankConnection> {\n return this.put(bankConnection, null, `${this.apiUrl}/${bankConnection.id}/deactivate`);\n }\n\n /**\n * connection's status updated in background on backend, so reset cache required to inform user\n */\n listenBankConnections(): void {\n this.sseService.on(`bankConnections`).subscribe((bankConnection: BankConnectionBase): void => {\n this.refreshCache();\n });\n }\n}\n","export enum UserEventTypeTypeEnum {\n REGISTERED = 1000,\n PASSWORD_RESET_REQUEST = 1001,\n APP_FEATURES = 1010,\n SUBSCRIBED = 2000,\n UNSUBSCRIBED = 2001,\n SUBSCRIPTION_UPDATE = 2004,\n SUBSCRIPTION_TRIAL_UPDATE = 2005,\n SUBSCRIPTION_PAYMENT_FAILED = 2006,\n CLIENT_INVITE = 2010,\n CLIENT_INVITE_TO_REGISTER = 2011,\n FIRM_INVITE_ACCEPTED = 2012,\n FIRM_INVITE_REJECTED = 2013,\n FIRM_INVITE_REGISTERED = 2014,\n PROPERTY_SHARE_INVITE = 2020,\n PROPERTY_SHARE_INVITE_TO_REGISTER = 2021,\n PROPERTY_SHARE_INVITE_ACCEPTED = 2022,\n PROPERTY_SHARE_INVITE_REJECTED = 2023,\n PROPERTY_SHARE_INVITE_REGISTERED = 2024,\n PROPERTY_SHARE_CHANGE_REQUESTED = 2025,\n PROPERTY_SHARE_CHANGE_ACCEPTED = 2026,\n PROPERTY_SHARE_CHANGE_REJECTED = 2027,\n OWNER_SUBSCRIBED = 2028,\n OWNER_UNSUBSCRIBED = 2029,\n BASIQ_NEW_ACCOUNTS = 2030,\n BASIQ_FIRST_IMPORT_COMPLETE = 2031,\n BASIQ_AUTHORIZATION_FAIL = 2032,\n TRANSACTION_ALLOCATE_REMINDER = 2033,\n REGISTRATION_INVITE = 2040,\n REGISTRATION_INVITE_ACCEPTED = 2041,\n CLIENT_EMAIL_CONFIRMED = 2050,\n TAX_REVIEW_REQUESTED = 2060,\n FIRM_INVITE_TO_REGISTER = 3000,\n FIRM_INVITE = 3001,\n CLIENT_INVITE_ACCEPTED = 3002,\n CLIENT_INVITE_REJECTED = 3003,\n CLIENT_INVITE_REGISTERED = 3004,\n FIRM_NEW_CLIENT = 3005,\n FIRM_LOST_CLIENT = 3006,\n EMPLOYEE_INVITE = 3010,\n EMPLOYEE_LOST_CLIENT = 3011,\n EMPLOYEE_NEW_CLIENT = 3012,\n EMPLOYEE_INVITE_ACCEPTED = 3013,\n EMPLOYEE_EMAIL_CONFIRMED = 3020,\n TAX_REVIEW_RECEIVED = 3030,\n}\n","import { Injectable } from '@angular/core';\nimport { BankTransaction as BankTransactionBase } from '../../../../db/Models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RestMethod, RestService } from '../../rest';\nimport { plainToClass } from 'class-transformer';\nimport { AppEvent, AppEventTypeEnum, BankTransaction, FinancialYear, Notification } from '../../../../models';\nimport { IEventListener } from '../../../../interfaces';\nimport { UserEventTypeTypeEnum } from '../../../../db/Enums/user-event-type-type.enum';\nimport { BankTransactionCollection } from '../../../../collections';\n\n/**\n * Service for bank transactions business logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankTransactionService extends RestService<BankTransactionBase, BankTransaction, BankTransactionCollection> implements IEventListener {\n endpointUri = 'bank-transactions';\n modelClass: typeof BankTransaction = BankTransaction;\n collectionClass: typeof BankTransactionCollection = BankTransactionCollection;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'deleteBatch'];\n\n listenEvents(): void {\n this.listenBankTransactionsImport();\n }\n\n /**\n * Get list of bank transactions for provided financial year\n * @TODO VIK/Alex: consider to use one endpoint to get bank transactions for 2 fin years\n */\n getByYear(finYear: number): Observable<BankTransaction[]> {\n return this.http.get(`${this.environment.apiV2}/bank-transactions?financialYear=${finYear}`)\n .pipe(\n map((bankTransactionsBase: BankTransactionBase[]) => bankTransactionsBase.map((bankTransaction: BankTransaction) => plainToClass(BankTransaction, bankTransaction)))\n );\n }\n\n /**\n * import bank transactions from csv file\n * @param bankAccountId Bank account id we import bank transactions for\n * @param file File with bank transactions for import\n */\n import(bankAccountId: number, file: File): Observable<BankTransaction[]> {\n const formData: FormData = new FormData();\n formData.append('file', file);\n\n return this.http.post(`${this.environment.apiV2}/bank-accounts/${bankAccountId}/bank-transaction-imports`, formData)\n .pipe(\n map((response: BankTransactionBase[]) => {\n const result: BankTransaction[] = response\n .map((baseTransaction: BankTransactionBase) => plainToClass(BankTransaction, baseTransaction))\n // we are interesting only current fin year bank transactions\n .filter((bankTransaction: BankTransaction) => new FinancialYear().includes(bankTransaction.date));\n // push new items to cache only if we already have cache. Otherwise cache will contain only new items.\n if (this.cache) {\n this.handleResponse(result, 'post');\n }\n\n return result;\n })\n );\n }\n\n /**\n * @TODO move to sse when backend send mercure event\n */\n private listenBankTransactionsImport(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification: Notification) => {\n if (!notification.isRead && notification.eventType === UserEventTypeTypeEnum.BASIQ_FIRST_IMPORT_COMPLETE) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_TRANSACTIONS_ADDED, []));\n this.refreshCache();\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractModel } from '../../../../db/Models';\nimport { Observable } from 'rxjs';\nimport { BasiqToken } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { Collection } from '../../../../collections';\n\n/**\n * @TODO Alex shouldn't be a separated service, move to basiqService or interceptor\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BasiqTokenService extends RestService<AbstractModel, BasiqToken, Collection<BasiqToken>> {\n protected endpointUri = 'basiq/tokens';\n modelClass: typeof BasiqToken = BasiqToken;\n collectionClass: typeof Collection = Collection;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n\n /**\n * Access token to use basiq flow\n */\n get(): Observable<Collection<BasiqToken>> {\n if (this.getCacheFirst() && this.getCacheFirst().isExpired()) {\n this.cache = undefined;\n }\n\n return super.get();\n }\n\n protected createModelInstance(tokenResponse: AbstractModel): BasiqToken {\n const now: number = new Date().getTime();\n return new BasiqToken(tokenResponse['access_token'], new Date(now + tokenResponse['expires_in'] * 1000));\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { filter, map } from 'rxjs/operators';\nimport { BankAccount as BankAccountBase } from '../../../../db/Models';\nimport { RestMethod, RestService } from '../../rest';\nimport { IEventListener } from '../../../../interfaces';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../../event';\nimport { BankConnectionService } from '../bank-connection';\nimport { BankAccountCollection } from '../../../../collections';\nimport { plainToClass } from 'class-transformer';\nimport { UserEventTypeTypeEnum } from '../../../../db/Enums/user-event-type-type.enum';\nimport {\n AppEvent,\n AppEventTypeEnum,\n BankAccount, BankConnection, BasiqJobResponse,\n Notification\n} from '../../../../models';\nimport { Observable } from 'rxjs';\n\n/**\n * @TODO vik move removeBasiq here from connectionService\n * basiq is a middleman between bank and user\n * service is responsible for fetching bank related information\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BasiqService extends RestService<BankAccountBase, BankAccount, BankAccountCollection> implements IEventListener {\n static basiqApiUrl = 'https://au-api.basiq.io';\n static basiqConsentUrl = 'https://consent.basiq.io/home';\n\n /**\n * Basiq does not provide a hook, so we have to check job status manually every x seconds\n */\n static retrieveAccountsCheckInterval = 3000;\n\n /**\n * How long we will wait accounts retrieving, break after timeout if not retireved\n */\n static retrieveAccountsTimeout = 20000;\n\n /**\n * Flag shows retrieve accounts time is out\n */\n isRetrieveAccountsTimeOut: boolean;\n\n /**\n * Timeout for retrieve accounts status checking.\n * Stop watch retrieve accounts status when time is out.\n */\n retrieveAccountsTimer;\n\n protected endpointUri = 'basiq/accounts';\n collectionClass: typeof BankAccountCollection = BankAccountCollection;\n modelClass: typeof BankAccount = BankAccount;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any,\n // this inject required to init bank connection service and listen basiq login event\n private bankConnectionService: BankConnectionService\n ) {\n super(http, eventDispatcherService, environment);\n }\n\n /**\n * Listen events from Event Dispatcher service\n */\n listenEvents(): void {\n this.listenNotifications();\n }\n\n /**\n * remove basiq connection to create a new one (because basiq has no update option),\n * used for upgrade to openBanking and manage shared bank accounts flow\n */\n deleteBasiq(connection: BankConnection): Observable<any> {\n return this.http.put(`${this.environment.apiV2}/bank-connections/${connection.id}/remove-basiq`, {})\n .pipe(\n map((connection) => {\n return connection;\n // @TODO Alex token should be inside this service\n // this.redirectToBasiqConsent(token.value, connection.bank.externalId, true);\n })\n );\n }\n\n revokeConsent(): Observable<any> {\n return this.http.delete(`${this.environment.apiV2}/basiq/consent`);\n }\n\n /**\n * Open basiq consent ui to allow user to log in to bank\n * @param token User's basiq token\n * @param bankId External id of selected bank\n * @param consentExist\n */\n redirectToBasiqConsent(token: string, bankId: string, consentExist: boolean = false): void {\n // keep bank id because we need it after redirect from basiq\n localStorage.setItem('basiqBankId', bankId);\n window.location.replace(`${BasiqService.basiqConsentUrl}?token=${token}&institutionId=${bankId}${consentExist ? '&action=connect' : ''}`);\n }\n\n /**\n * Open basiq consent ui to allow user to manage basiq access to his bank data\n * @param token User's basiq token\n */\n redirectToBasiqRevoke(token: string): void {\n window.location.replace(`${BasiqService.basiqConsentUrl}?token=${token}&action=manage`);\n }\n\n /**\n * Get Basiq job result\n */\n retrieveJob(jobId: string): Observable<BasiqJobResponse> {\n return this.http.get(`${BasiqService.basiqApiUrl}/jobs/${jobId}`)\n .pipe(\n map((response: object) => plainToClass(BasiqJobResponse, response))\n );\n }\n\n /**\n * Recoursive method, watch basiq job retrieve accounts status\n * @param jobId id of basiq job to check\n * @returns observable boolean. True - accounts retrieved, false - accounts not retrieved (time is out)\n */\n watchBankAccountsRetrieved(jobId: string): Observable<boolean> {\n // init timeout for the first iteration of recoursion\n if (!this.retrieveAccountsTimer) {\n this.isRetrieveAccountsTimeOut = false;\n\n this.retrieveAccountsTimer = setTimeout(() => {\n this.isRetrieveAccountsTimeOut = true;\n }, BasiqService.retrieveAccountsTimeout);\n }\n\n return this.retrieveJob(jobId)\n .pipe(\n // continue when time is out or when accounts retireved successfully\n filter((response: BasiqJobResponse) => {\n // stop watcher when accounts retrieved successfully or time is out\n if (this.isRetrieveAccountsTimeOut || response.getRetrieveAccountsStep().isSuccess()) {\n clearTimeout(this.retrieveAccountsTimer);\n return true;\n }\n\n // continue watch retrieve accounts status\n setTimeout(() => {\n this.watchBankAccountsRetrieved(jobId);\n }, BasiqService.retrieveAccountsCheckInterval);\n\n return false;\n }),\n map((response: BasiqJobResponse) => {\n // no need to keep bank id anymore\n localStorage.removeItem('basiqBankId');\n\n return response.getRetrieveAccountsStep().isSuccess();\n })\n );\n }\n\n /**\n * listen to notifications to update basiq accounts list\n */\n private listenNotifications(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification: Notification): void => {\n if (!notification.isRead && notification.eventType === UserEventTypeTypeEnum.BASIQ_NEW_ACCOUNTS) {\n this.refreshCache();\n }\n });\n }\n}\n","export enum BasiqMessagesEnum {\n REVOKE_CONFIRM_TITLE = 'Are you sure you want to revoke consent for bank feeds?',\n REVOKE_CONFIRM_MESSAGE = 'Revoking consent will stop live feeds and delete all historic bank feed data in TaxTank. This will impede the functionality of both bank feeds and equity graphs. This cannot be undone.',\n REVOKE_SUCCESS = 'Consent to bank feeds has been revoked.'\n}\n","import { Injectable } from '@angular/core';\nimport { Bank as BankBase } from '../../../db/Models';\nimport { Bank } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Collection } from '../../../collections';\n\n/**\n * Service that handling banks logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankService extends RestService<BankBase, Bank, Collection<Bank>> {\n modelClass: typeof Bank = Bank;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'banks';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { Budget as BudgetBase } from '../../../db/Models';\nimport { Budget } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { Collection } from '../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BudgetService extends RestService<BudgetBase, Budget, Collection<Budget>> {\n modelClass: typeof Budget = Budget;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'budgets';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","export enum BudgetMessagesEnum {\n CREATED = 'Budget created',\n UPDATED = 'Budget updated',\n DELETED = 'Budget deleted',\n CONFIRM_DELETE = 'Are you sure you want to delete budgeting?'\n}\n","import { Injectable } from '@angular/core';\nimport { RestMethod, RestService } from '../../rest';\nimport { ChartAccountsDepreciation as ChartAccountsDepreciationBase } from '../../../../db/Models';\nimport { ChartAccountsDepreciation } from '../../../../models';\nimport { Collection } from '../../../../collections';\n\n/**\n * Service to work with depreciation chart accounts\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsDepreciationService extends RestService<ChartAccountsDepreciationBase, ChartAccountsDepreciation, Collection<ChartAccountsDepreciation>> {\n endpointUri = 'chart-accounts-depreciations';\n modelClass: typeof ChartAccountsDepreciation = ChartAccountsDepreciation;\n collectionClass: typeof Collection = Collection;\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ChartAccountsCategoryEnum } from '../../../db/Enums';\nimport { ChartAccounts as ChartAccountsBase } from '../../../db/Models';\nimport { plainToClass } from 'class-transformer';\nimport { CHART_ACCOUNTS_CATEGORIES, ChartAccounts, ChartAccountsHeading } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { ChartAccountsCollection } from '../../../collections';\n\n/**\n * Chart accounts service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsService extends RestService<ChartAccountsBase, ChartAccounts, ChartAccountsCollection> {\n protected endpointUri = 'chart-accounts';\n modelClass: typeof ChartAccounts = ChartAccounts;\n collectionClass: typeof ChartAccountsCollection = ChartAccountsCollection;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n\n /**\n * Get list of chart accounts headings by catogory with chart accounts inside\n */\n getChartAccountsHeadings(categories: ChartAccountsCategoryEnum[] = CHART_ACCOUNTS_CATEGORIES.all): Observable<ChartAccountsHeading[]> {\n return this.get()\n .pipe(\n map((chartAccounts: ChartAccountsCollection) => {\n const filteredChartAccounts: ChartAccounts[] = chartAccounts.toArray()\n .filter((ca: ChartAccounts) => categories.includes(ca.category));\n\n const headings: ChartAccountsHeading[] = [];\n\n filteredChartAccounts.forEach((ca: ChartAccounts) => {\n let heading: ChartAccountsHeading = headings.find((h: ChartAccountsHeading) => h.id === ca.heading?.id);\n\n if (!heading) {\n heading = plainToClass(ChartAccountsHeading, ca.heading);\n heading.chartAccounts = [];\n headings.push(heading);\n }\n\n heading.chartAccounts.push(ca);\n });\n\n return headings;\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Chat as ChatBase } from '../../../db/Models';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService, SseService } from '../../event';\nimport { RestMethod, RestService } from '../rest';\nimport { plainToClass } from 'class-transformer';\nimport { Chat, Message } from '../../../models';\nimport { ChatCollection } from '../../../collections';\nimport { IEventListener } from '../../../interfaces';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Service for work with chats\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChatService extends RestService<ChatBase, Chat, ChatCollection> implements IEventListener {\n modelClass: typeof Chat = Chat;\n collectionClass: typeof ChatCollection = ChatCollection;\n endpointUri = 'chats';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n super(http, eventDispatcherService, environment);\n this.listenChats();\n this.listenMessages();\n }\n\n get(path: string = this.apiUrl): Observable<ChatCollection> {\n // users contact ttAdvisor through intercom support\n return super.get(path).pipe(\n map((chats) => chats.filter((chat) => chat.employee.email !== this.environment.ttAdvisor))\n );\n }\n\n /**\n * Listen chats events\n */\n listenChats(): void {\n this.sseService.on(`chats`).subscribe((chatBase: ChatBase): void => {\n const array: Chat[] = this.cache.toArray();\n // chat instance from event\n const eventChat: Chat = plainToClass(Chat, chatBase);\n // chat instance from cache\n const cachedChat: Chat = array.find((chat: Chat): boolean => chat.id === eventChat.id);\n\n switch (true) {\n // add new chat\n case (!cachedChat):\n this.handleResponse([eventChat], 'post');\n break;\n\n // remove deactivated chat\n case !eventChat.isActive():\n this.handleResponse([eventChat], 'delete');\n break;\n\n // update chat with new firm (reassign)\n case eventChat.employee.id !== cachedChat.employee.id:\n this.handleResponse([eventChat], 'put');\n break;\n\n // @TODO typing works bad with mat-tabs on user-area. Need to refactor typing functionality\n // update cache with typing user\n // default:\n // cachedChat.typingUsers.push(new User(eventChat.typingUser));\n // replace(cache, _.clone(cachedChat));\n }\n });\n }\n\n /**\n * Update chat's 'updatedAt' field with the last chat's message date for chat list sorting\n */\n private listenMessages(): void {\n this.listenCSE(Message, ['post'], (messages: Message[]) => {\n const message: Message = messages[0];\n const cache: Chat[] = this.cache.toArray();\n const updatedChat: Chat = cache.find((chat: Chat): boolean => chat?.id === message.chat?.id);\n\n updatedChat.updatedAt = message?.createdAt;\n\n this.handleResponse([updatedChat], 'put');\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Message as MessageBase } from '../../../db/Models';\nimport { HttpClient } from '@angular/common/http';\nimport { plainToClass } from 'class-transformer';\nimport { Message } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { EventDispatcherService, SseService } from '../../event';\nimport { MessageCollection } from '../../../collections';\nimport { IEventListener } from '../../../interfaces';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Service for work with messages\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService extends RestService<MessageBase, Message, MessageCollection> implements IEventListener {\n modelClass: typeof Message = Message;\n collectionClass: typeof MessageCollection = MessageCollection;\n endpointUri = 'messages';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n super(http, eventDispatcherService, environment);\n this.listenMessages();\n }\n\n /**\n * Overwrite default methods because we need to handle messages via SSE events only\n */\n post(message: Message): Observable<Message> {\n return this.http.post(this.apiUrl, message)\n .pipe(\n map((response: MessageBase) => plainToClass(Message, response))\n );\n }\n\n /**\n * Overwrite default methods because we need to handle messages via SSE events only\n */\n put(message: Message): Observable<Message> {\n return this.http.put(`${this.apiUrl}/${message.id}`, message)\n .pipe(\n map((response: MessageBase) => plainToClass(Message, response))\n );\n }\n\n /**\n * subscribe to new chat messages\n */\n private listenMessages(): void {\n this.sseService.on(`messages`).subscribe((messageBase: MessageBase): void => {\n const message: Message = plainToClass(Message, messageBase);\n // update existing message if read and add new message if not read\n if (this.cache.findBy('id', message.id)) {\n this.handleResponse([message], 'put');\n } else {\n this.handleResponse([message], 'post');\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MessageDocument as MessageDocumentBase } from '../../../db/Models';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IEventListener } from '../../../interfaces';\nimport { plainToClass } from 'class-transformer';\nimport { Message, MessageDocument } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { MessageDocumentCollection } from '../../../collections';\n\n/**\n * Service for work with Message Documents\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageDocumentService extends RestService<MessageDocumentBase, MessageDocument, MessageDocumentCollection> implements IEventListener {\n modelClass: typeof MessageDocument = MessageDocument;\n collectionClass: typeof MessageDocumentCollection = MessageDocumentCollection;\n endpointUri = 'message-documents';\n disabledMethods: RestMethod[] = ['postBatch', 'deleteBatch', 'put', 'putBatch'];\n isApiPlatform = true;\n\n /**\n * SSE and Event Dispatcher Services listeners\n */\n listenEvents(): void {\n this.listenMessages();\n }\n\n /**\n * listen new messages event to update documents cache\n */\n listenMessages(): void {\n this.listenCSE(Message, ['post'], (messages: Message[]) => {\n const message: Message = messages[0];\n\n if (message.documents?.length) {\n const array: MessageDocument[] = this.cache.toArray();\n const documentsIds: number[] = this.cache.getIds();\n\n message.documents.forEach((document: MessageDocument): void => {\n document.chat = message.chat;\n\n if (!documentsIds.includes(document.id)) {\n array.push(document);\n }\n });\n\n this.cache = new MessageDocumentCollection(array);\n this.cacheSubject.next(this.cache);\n }\n });\n }\n\n /**\n * Upload file to chat\n */\n add(chatId: number, file: File): Observable<MessageDocument> {\n const formData: FormData = new FormData();\n formData.append('file', file);\n formData.append('chat', chatId.toString());\n\n return this.http.post(`${this.apiUrl}`, formData)\n .pipe(\n map((documentBase: MessageDocumentBase): MessageDocument => {\n const document: MessageDocument = plainToClass(MessageDocument, documentBase);\n this.handleResponse([document], 'post');\n\n return document;\n })\n );\n }\n\n /**\n * Upload multiple files to chat\n */\n addBatch(chatId: number, files: File[]): Observable<MessageDocument[]> {\n return combineLatest(\n files.map((file: File): Observable<MessageDocument> => this.add(chatId, file))\n ).pipe(\n map((docsBase: MessageDocumentBase[]): MessageDocument[] => docsBase.map((docBase: MessageDocumentBase): MessageDocument => plainToClass(MessageDocument, docBase)))\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Depreciation as DepreciationBase } from '../../../db/Models';\nimport { map } from 'rxjs/operators';\nimport { RestMethod, RestService } from '../rest';\nimport {\n AppEventTypeEnum,\n BankAccount,\n Depreciation,\n FinancialYear,\n Loan\n} from '../../../models';\nimport { DepreciationCollection } from '../../../collections';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DepreciationService extends RestService<DepreciationBase, Depreciation, DepreciationCollection> {\n modelClass: typeof Depreciation = Depreciation;\n collectionClass: typeof DepreciationCollection = DepreciationCollection;\n endpointUri = 'depreciations';\n disabledMethods: RestMethod[] = ['post', 'putBatch', 'deleteBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n super(http, eventDispatcherService, environment);\n }\n\n /**\n * Listen to Depreciations events\n */\n listenEvents(): void {\n this.listenToUpdatedLoan();\n this.listenVehicleClaimChanges();\n this.listenToUpdatedBankAccount();\n this.listenSoleDepreciationMethodChanges();\n this.listenPropertyDepreciationCalculationChanges();\n }\n\n getOpenBalance(depreciation: Depreciation): Observable<number> {\n return this.http.post(`${this.apiUrl}/opening-balance?financialYear=${new FinancialYear().year}`, depreciation)\n .pipe(\n map((response: number) => response || 0)\n );\n }\n\n /**\n * Listen to EventDispatcherService event related to updated bank loan\n */\n private listenToUpdatedLoan(): void {\n this.listenCSE(Loan, ['put'], this.refreshCache);\n }\n\n /**\n * Listen to EventDispatcherService event related to updated bank account\n */\n private listenToUpdatedBankAccount(): void {\n this.listenCSE(BankAccount, ['put'], (bankAccounts: BankAccount[]) => {\n if (bankAccounts.find(ba => ba.isPropertyTank())) {\n this.refreshCache();\n }\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated vehicle claim\n */\n private listenVehicleClaimChanges(): void {\n this.eventDispatcherService.on([\n AppEventTypeEnum.VEHICLE_CLAIM_CREATED,\n AppEventTypeEnum.VEHICLE_CLAIM_UPDATED,\n AppEventTypeEnum.VEHICLE_CLAIM_DETAILS_UPDATED\n ]).subscribe(() => {\n this.refreshCache();\n })\n }\n\n /**\n * @TODO Alex: create common method resetCacheOn(events: AppEventType[])\n */\n private listenSoleDepreciationMethodChanges(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.SOLE_DEPRECIATION_METHOD_UPDATED).subscribe(() => {\n this.refreshCache();\n })\n }\n\n /**\n * @TODO Alex: create common method resetCacheOn(events: AppEventType[])\n */\n private listenPropertyDepreciationCalculationChanges(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_DEPRECIATION_CALCULATION_UPDATED).subscribe(() => {\n this.refreshCache();\n });\n }\n\n private listenTransactions(): void {\n // @TODO reset cache only when required (transaction has depreciation)\n this.eventDispatcherService.on(AppEventTypeEnum.TRANSACTION_DELETED).subscribe(() => {\n this.refreshCache();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DepreciationCapitalProject as DepreciationCapitalProjectBase } from '../../../../db/Models/depreciation/depreciation-capital-project';\nimport { DepreciationCapitalProject } from '../../../../models';\nimport { Collection } from '../../../../collections';\nimport { RestMethod, RestService } from '../../rest';\n\n/**\n * Service for work with DepreciationCapitalProjects\n * @TODO Alex: refactor with new rest when backend ready (TT-3571)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DepreciationCapitalProjectService extends RestService<DepreciationCapitalProjectBase, DepreciationCapitalProject, Collection<DepreciationCapitalProject>> {\n modelClass: typeof DepreciationCapitalProject = DepreciationCapitalProject;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'depreciation-capital-projects';\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","export enum DocumentFolderMessagesEnum {\n CREATED = 'Folder created!',\n UPDATED = 'Folder updated!',\n CONFIRM_DELETE = 'Are you sure you want to delete the folder?',\n DELETED = 'Folder deleted!'\n}\n","import { Injectable } from '@angular/core';\nimport { DocumentFolder as DocumentFolderBase } from '../../../../db/Models/document/document-folder';\nimport { DocumentFolder } from '../../../../models/document/document-folder';\nimport { RestMethod, RestService } from '../../rest';\nimport { Collection } from '../../../../collections';\n\n/**\n * Service to handle document-folders and depending documents logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentFolderService extends RestService<DocumentFolderBase, DocumentFolder, Collection<DocumentFolder>> {\n endpointUri = 'folders';\n collectionClass: typeof Collection = Collection;\n modelClass: typeof DocumentFolder = DocumentFolder;\n disabledMethods: RestMethod[] = ['deleteBatch', 'postBatch', 'putBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { Document as DocumentBase } from '../../../db/Models/document/document';\nimport { Document } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { Collection } from '../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentService extends RestService<DocumentBase, Document, Collection<Document>> {\n endpointUri = 'folder-documents';\n modelClass: typeof Document = Document;\n collectionClass: typeof Collection = Collection;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch'];\n protected isApiPlatform = true;\n}\n","export enum DocumentMessagesEnum {\n CREATED = 'Document created!',\n UPDATED = 'Document updated!',\n CONFIRM_DELETE = 'Are you sure you want to delete the document?',\n DELETED = 'Document deleted!'\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { JwtService } from './jwt.service';\nimport { catchError, map } from 'rxjs/operators';\nimport { AuthTokens } from '../../interfaces';\nimport { MixpanelService } from '../mixpanel/mixpanel.service';\nimport { throwError as observableThrowError } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n isLoggedInSubject: BehaviorSubject<boolean>;\n\n constructor(\n private http: HttpClient,\n private jwtService: JwtService,\n private mpService: MixpanelService,\n @Inject('environment') private environment: any\n ) {\n this.isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());\n }\n\n setAuth(response: AuthTokens) {\n this.jwtService.saveTokens(response);\n this.isLoggedInSubject.next(true);\n }\n\n login(username: string, password: string) {\n return this.http.post(`${this.environment.apiV2}/login`, { username, password }).pipe(\n map((response: any) => {\n this.setAuth(response);\n this.mpService.track('login');\n return response;\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('loginError', { username });\n return observableThrowError(error);\n })\n );\n }\n\n refresh(refreshToken: string) {\n return this.http.post(`${this.environment.apiV2}/token/refresh`, { refreshToken }).pipe(\n map((response: any) => {\n this.setAuth(response);\n return response;\n })\n );\n }\n\n logoutFront(url = '/login'): void {\n localStorage.clear();\n this.mpService.track('logout');\n this.mpService.reset();\n location.replace(url);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { BehaviorSubject } from 'rxjs';\nimport { ToastService } from '../../toast';\nimport { JwtService } from '../../auth';\nimport { FacebookAuthOptions } from './facebook-auth-options.interface';\nimport { FacebookStatusResponse } from './facebook-status-response.interface';\nimport { Router } from '@angular/router';\nimport { AuthTokens } from '../../../interfaces';\nimport { MixpanelService } from '../../mixpanel/mixpanel.service';\n\n/**\n * FaceBook instance, https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/facebook-js-sdk/index.d.ts\n */\ndeclare let FB: any;\nconst ERROR_EMAIL_PERMISSION = 'Access to email denied. Please provide access to email in facebook.';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FacebookService {\n isLoggedInSubject: BehaviorSubject<boolean>;\n isFacebookEnabled: boolean;\n static authOptions: FacebookAuthOptions = {\n scope: 'email, public_profile',\n auth_type: 'rerequest',\n return_scopes: true\n }\n\n /**\n * @TODO when google login will be done, it needs to be moved to an abstract class\n */\n constructor(\n private http: HttpClient,\n private toastService: ToastService,\n private jwtService: JwtService,\n private router: Router,\n private mpService: MixpanelService,\n @Inject('environment') private environment: any\n ) {\n this.isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());\n this.isFacebookEnabled = !!environment['facebookAppId'];\n }\n\n async login(redirectUrl = '/client'): Promise<any> {\n const accessToken: string = await this.getAccessToken();\n\n this.http.post(`${this.environment.apiV2}/users/authentication/facebook`, { accessToken })\n .subscribe((response: { token: string, refreshToken: string }) => {\n this.setAuth(response);\n this.router.navigate([redirectUrl]);\n }, (error: HttpErrorResponse) => {\n this.toastService.error(error.error.violations[0].message);\n this.logout();\n });\n }\n\n /**\n * save user's auth tokens\n * @TODO move to abstract class\n */\n private setAuth(response: AuthTokens) {\n this.jwtService.saveTokens(response);\n this.isLoggedInSubject.next(true);\n this.mpService.track('loginFB');\n }\n\n /**\n * get facebook auth access token\n */\n private getAccessToken(): Promise<string> {\n return new Promise<string>((resolve) => {\n FB.login((response: FacebookStatusResponse) => {\n // authResponse will be empty if you close the Facebook login window or enter incorrect user data\n if (!response.authResponse) {\n return;\n }\n\n if (!response.authResponse.grantedScopes.includes('email')) {\n this.toastService.error(ERROR_EMAIL_PERMISSION);\n return;\n }\n\n resolve(response.authResponse.accessToken);\n }, FacebookService.authOptions);\n });\n }\n\n /**\n * logout user from facebook.\n * Need to logout when user is trying to login with facebook with manually registered email\n */\n private logout(): Promise<any> {\n return new Promise((resolve, reject) => {\n FB.logout((response) => {\n resolve(response);\n });\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { ToastService } from '../../toast';\nimport { JwtService } from '../../auth';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\nimport { AuthTokens } from '../../../interfaces';\nimport { MixpanelService } from '../../mixpanel/mixpanel.service';\n\n/**\n * google environment. use type: @types/gapi.client\n * https://www.npmjs.com/package/@types/gapi.client\n */\ndeclare let google: any;\n\n/**\n * Google instance\n * https://developers.google.com/identity/oauth2/web/guides/overview\n * https://developers.google.com/identity/gsi/web/guides/overview\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleService {\n isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());\n isGoogleEnabled = !!this.environment['googleClientId'];\n // depending on the level of access\n googleScope = 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email';\n\n constructor(\n private http: HttpClient,\n private toastService: ToastService,\n private jwtService: JwtService,\n private router: Router,\n private mpService: MixpanelService,\n @Inject('environment') private environment: any\n ) {\n }\n\n /**\n * prompt for user consent and obtain an access token to work with user data\n * requestAccessToken() method to trigger the token UX flow and obtain an access token.\n * https://developers.google.com/identity/oauth2/web/guides/use-token-model\n */\n\n // prompt for user consent and obtain an access token to work with user data\n login(): void {\n return google.accounts.oauth2.initTokenClient({\n client_id: this.environment['googleClientId'],\n scope: this.googleScope,\n callback: (response : {access_token: string}) => {\n this.setAuth(response.access_token);\n },\n }).requestAccessToken();\n }\n\n /**\n * requestAccessToken() method to trigger the token UX flow and obtain an access token:\n * Choose their account;\n * sign-in to the Google Account if not already signed-in;\n * grant consent for your web app to access each requested scope.\n */\n private setAuth(accessToken: string, redirectUrl = '/client'): void {\n this.http.post(`${this.environment.apiV2}/users/authentication/google`, { accessToken })\n .subscribe((response: AuthTokens) => {\n this.jwtService.saveTokens(response);\n this.isLoggedInSubject.next(true);\n this.mpService.track('loginGoogle');\n this.router.navigate([redirectUrl]);\n }, (error: HttpErrorResponse) => {\n this.toastService.error(error.error.violations[0].message);\n this.logout();\n });\n }\n\n /**\n * When the user signs out of your website, you need to call the method\n * google.accounts.id.disableAutoSelect to record the status in cookies.\n * https://developers.google.com/identity/oauth2/web/guides/use-token-model\n */\n private logout(): void {\n google.accounts.id.disableAutoSelect();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestMethod, RestService } from '../rest';\nimport { File as FileBase } from '../../../db/Models';\nimport { Collection } from '../../../collections';\nimport { AppFile } from '../../../models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileService extends RestService<FileBase, AppFile, Collection<AppFile>> {\n protected endpointUri = 'files';\n modelClass: typeof AppFile = AppFile;\n collectionClass: typeof Collection = Collection;\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n\n getById(id: number): Observable<AppFile> {\n return this.http.get(this.apiUrl + '/' + id).pipe(map((response: FileBase) => plainToClass(AppFile, response)));\n }\n\n getLink(id: number): Observable<string> {\n return this.http.get(this.apiUrl + '/' + id + '/view').pipe(map((response: string) => response));\n }\n\n upload(file: File): Observable<AppFile> {\n const formData: FormData = new FormData();\n formData.append('file', file);\n\n return this.http.post(this.apiUrl, formData).pipe(\n map((fileBase: FileBase) => plainToClass(AppFile, fileBase))\n );\n }\n\n download(file: AppFile) {\n return this.http.get(`${this.apiUrl}/${file.id}/download`, { responseType: 'blob' });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ClientIncomeTypes } from '../../../../models/client/client-income-types';\nimport { ClientIncomeTypes as ClientIncomeTypesBase } from '../../../../db/Models/client/client-income-types';\nimport {RestMethod, RestService} from '../../rest';\nimport {Collection} from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientIncomeTypesService extends RestService<ClientIncomeTypesBase, ClientIncomeTypes, Collection<ClientIncomeTypes>>{\n modelClass: typeof ClientIncomeTypes = ClientIncomeTypes;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'client-income-types';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'delete', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { ClientInvite as ClientInviteBase } from '../../../../db/Models/firm/client-invite';\nimport { catchError, map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { AppEvent, AppEventTypeEnum, ClientInvite } from '../../../../models';\nimport { IEventListener } from '../../../../interfaces';\nimport { ClientInviteCollection } from '../../../../collections';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport last from 'lodash/last';\nimport merge from 'lodash/merge';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientInviteService extends RestService<ClientInviteBase, ClientInvite, ClientInviteCollection> implements IEventListener {\n protected endpointUri = 'clients/invites';\n collectionClass: typeof ClientInviteCollection = ClientInviteCollection;\n modelClass: typeof ClientInvite = ClientInvite;\n \n getFirmInvites(): Observable<ClientInviteCollection> {\n return super.get(`${this.apiUrl}/all`);\n }\n\n /**\n * Get invite which employee is TaxTank Advisor\n * @TODO move to collection? but we need to inject enviroment \n */\n getTTAdvisor(): Observable<ClientInvite> {\n return this.get().pipe(\n map((invites: ClientInviteCollection) => invites.findBy('employee.email', this.environment.ttAdvisor))\n );\n }\n\n /**\n * Import clients from CSV file\n */\n import(file: File): Observable<ClientInvite[]> {\n const formData: FormData = new FormData();\n formData.append('file', file);\n\n // cant use parent method because of different parameters\n return this.http.post(`${this.apiUrl}/import`, formData).pipe(\n map((clientInvite: ClientInvite[]) => clientInvite)\n );\n }\n\n /**\n * Accept client invitation from firm to user\n */\n accept(invite: ClientInvite): Observable<void> {\n // cant use parent method because of custom specific handler\n return this.http.put(`${this.apiUrl}/${invite.id}/accept`, invite).pipe(\n map(() => {\n // @TODO remove when TaxReviewService refactored with the new rest and use there listenCSE instead\n // TaxReviewService is listening client invites acception. With the new rest we are using listenCSE method, but old rest does not have this method.\n // We need to refactor TaxReviewService with new rest first, then we can listenCSE and remove manual events\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_INVITE_ACCEPTED, null));\n\n this.handleResponse([invite], 'delete');\n })\n );\n }\n\n /**\n * Reject client invitation from firm to user\n */\n reject(invite: ClientInvite): Observable<ClientInvite> {\n return super.put(invite, null, `${this.apiUrl}/${invite.id}/reject`);\n }\n\n /**\n * Resend invitation from firm to client\n */\n resend(invite: ClientInvite): Observable<ClientInvite> {\n // cant use parent method because of custom specific handler\n return this.http.post(`${this.apiUrl}/${invite.id}/resend`, null)\n .pipe(\n map((inviteBase: ClientInviteBase) => plainToClass(ClientInvite, inviteBase)),\n map((resentInvite: ClientInvite) => {\n this.handleResponse([resentInvite], 'put');\n\n return resentInvite;\n })\n );\n }\n\n /**\n * Send invitation from client to firm\n */\n inviteFirmByUser(invite: ClientInvite): Observable<ClientInvite> {\n return super.post(invite, null, `${this.environment.apiV2}/firms/invite`)\n .pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.error.email) {\n this.toastService.error(error.error.email[0]);\n } else {\n this.toastService.error(error.error);\n }\n\n return throwError(error);\n })\n );\n }\n\n /**\n * Listem clientInvites db changes via mercure to update cache\n * @TODO make it universal and move to parent\n */\n listenSSE(): void {\n this.sseService.on('clientInvites')\n .pipe(map((clientInvite: ClientInviteBase) => plainToClass(ClientInvite, clientInvite)))\n .subscribe((clientInvite: ClientInvite) => {\n\n // we got empty body when item deleted so we should get id from Api Platform data (@id)\n const id = clientInvite.id ?? +last(clientInvite['@id'].split('/'));\n\n switch (true) {\n case !clientInvite.id:\n this.updateCache([merge(clientInvite, {id})], 'delete');\n break;\n\n case this.hasInCache(id):\n this.updateCache([clientInvite], 'put');\n break;\n\n case !this.hasInCache(id):\n this.updateCache([clientInvite], 'post');\n }\n })\n }\n}\n","export enum ClientInviteMessages {\n TT_ADVISOR_INVITED = 'You have Invited TaxTank Support successfully',\n TT_INVITE_ACCEPT = 'You successfully accepted the invitation',\n REVOKE_TT_ADVISOR_CONFIRM = 'Are you sure you want to revoke access?',\n TT_ADVISOR_REVOKED = 'Access revoked',\n SEND_INVITE_MESSAGES_TITLE = 'TaxTank support is here to help',\n SEND_INVITE_MESSAGES_DESCRIPTION = 'Before inviting TaxTank support be sure to check out our help articles and message our support team.',\n TT_ACCOUNTANT_INVITED = 'Accountant invitation has been sent successfully',\n TT_ACCOUNTANT_INVETED_TOOLTIP = 'Need an accountant? TaxTank Accountants delivers virtual accounting service exclusive to TaxTank subscribers. ' +\n 'Experience a fast, seamless, and cost-effective lodgement service that rewards your TaxTank efforts throughout the year.' +\n ' Our team of experienced accountants brings their expertise in tax and TaxTank to the virtual realm. It all starts with a 15-minute ' +\n 'consultation that sets the stage for personalised service. With us, you’ll receive the best of both worlds at tax time.',\n CONFIRM_REJECT = 'Are you sure you want to reject this invitation?',\n REJECTED = 'Invitation rejected',\n ACCEPTED = 'Client invitation accepted'\n}\n","import { Injectable } from '@angular/core';\nimport { ClientMovement as ClientMovementBase } from '../../../../db/Models/firm/client-movement';\nimport { Observable, forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ClientMovementCollection } from '../../../../collections/client-movement.collection';\nimport { FirmTypeEnum } from '../../../../db/Enums/firm-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { ClientMovement } from '../../../../models/client/client-movement';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport { ClientInvite } from '../../../../models';\nimport { RestMethod } from '../../rest';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientMovementService extends RestService<ClientMovementBase, ClientMovement, ClientMovementCollection> implements IEventListener {\n protected endpointUri = 'client-movements';\n collectionClass: typeof ClientMovementCollection = ClientMovementCollection;\n modelClass: typeof ClientMovement = ClientMovement;\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'delete', 'deleteBatch'];\n\n listenEvents(): void {\n // @TODO handle with mercure\n this.listenCSE(ClientInvite, ['post', 'put', 'delete'], this.refreshCache);\n }\n\n getActive(): Observable<ClientMovementCollection> {\n return this.get().pipe(\n map((clientMovements: ClientMovementCollection): ClientMovementCollection => clientMovements.active)\n );\n }\n\n getTTAdvisor(): Observable<ClientMovement> {\n return this.getActive()\n .pipe(\n map((movements: ClientMovementCollection) => movements.findBy('employee.email', this.environment.ttAdvisor) || null)\n );\n }\n\n getActiveByFirmType(type: FirmTypeEnum): Observable<ClientMovementCollection> {\n return this.getActive().pipe(\n map((clientMovements: ClientMovementCollection): ClientMovementCollection => clientMovements.getByFirmType(type))\n );\n }\n\n /**\n * Method is using for transfer client between employees.\n * On backend we close passed movement and create a new one instead\n */\n put(movement: ClientMovement): Observable<ClientMovement> {\n // extend base 'add' method and pass into it movement without id\n return super.post(plainToClass(ClientMovement, Object.assign({}, movement, {id: null}))).pipe(\n map((updatedMovement: ClientMovement) => {\n // remove provided movement from cache\n this.cache = this.cache.filter((item: ClientMovement) => item.id !== movement.id);\n this.updateCache([updatedMovement], 'post');\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_TRANSFER_TO_OTHER_EMPLOYEE, [updatedMovement.client]));\n\n return updatedMovement;\n })\n );\n }\n\n /**\n * There is no actually direct updating of client movement, but we are using this method for transfer clients between employees\n */\n putBatch(clientMovements: ClientMovement[]): Observable<ClientMovement[]> {\n const batch: Observable<ClientMovement>[] = clientMovements.map((clientMovement: ClientMovement) => this.put(clientMovement));\n \n return forkJoin(batch);\n }\n\n /**\n * Reject current firm\n */\n close(clientMovement: ClientMovement): Observable<void> {\n clientMovement.dateTo = new Date();\n // cant use parent method because of custom specific handler\n return this.http.put(`${this.environment.apiV2}/client-movements/${clientMovement.id}/close`, clientMovement)\n .pipe(\n map((): void => {\n // @TODO remove when TaxReviewService refactored with the new rest and use there listenCSE instead\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_MOVEMENT_CLOSED, null));\n\n this.cache = this.cache.filter((movement: ClientMovement): boolean => movement.id !== clientMovement.id);\n this.updateCache([clientMovement], 'delete');\n })\n );\n }\n \n /**\n * Listem clientMovements db changes via mercure to update cache\n * @TODO make it universal and move to parent\n */\n listenSSE(): void {\n this.sseService.on('clientMovements')\n .pipe(map((clientMovement: ClientMovementBase) => plainToClass(ClientMovement, clientMovement)))\n .subscribe((clientMovement: ClientMovement) => {\n this.hasInCache(clientMovement.id) ? this.updateCache([clientMovement], 'put') : this.updateCache([clientMovement], 'post');\n })\n }\n}\n","import { Inject, Injectable, inject } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event';\nimport { classToPlain, plainToClass } from 'class-transformer';\nimport { ToastService } from '../../toast';\nimport { IEventListener } from '../../../interfaces';\nimport { UserRolesEnum } from '../../../db/Enums/user-roles.enum';\nimport { MixpanelService } from '../../mixpanel/mixpanel.service';\n\n/**\n * Abstract base service that implements common services functionality\n * and describe abstract methods/properties that have to be implemented in child services\n * Model - entity service is working with\n * BaseModel - base entity model that extends by Model\n * @TODO TT-1777 Alex: remove when all services refactored\n */\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class RestService<BaseModel, Model extends BaseModel> implements IEventListener {\n // url part for service entity API. Have to be defined in extended classes\n abstract url: string;\n // Model class for instances creating\n abstract modelClass;\n // @TODO Make cache Readonly\n // cached array of service class instances\n protected cache: Model[];\n // subject for service cache\n protected cacheSubject: ReplaySubject<Model[]> = new ReplaySubject<Model[]>(1);\n // flag for work with API platform\n protected isHydra: boolean;\n messageCreated: string;\n messageCreatedBatch: string;\n messageUpdated: string;\n messageUpdatedBatch: string;\n messageDeleted: string;\n messageDeletedBatch: string;\n protected mpService: MixpanelService = inject(MixpanelService);\n roles: UserRolesEnum[] = [];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any,\n protected toastService: ToastService\n ) {\n this.listenEvents();\n }\n\n protected get apiUrl(): string {\n return `${this.environment.apiV2}/${this.url}`;\n }\n\n /**\n * get list of base class instances directly from backend\n */\n protected fetch(path = this.apiUrl, cache = true): Observable<Model[]> {\n if (cache) {\n this.setCache([]);\n }\n\n return this.http.get(path)\n .pipe(\n map((response: BaseModel[]): Model[] => {\n const items: Model[] = (this.isHydra ? response['hydra:member'] : response)\n .map((item: BaseModel): Model => this.createModelInstance(item));\n if (cache) {\n this.setCache(items, true);\n }\n return items;\n })\n );\n }\n\n /**\n * get cached list of all instances\n */\n get(path: string = this.apiUrl): Observable<Model[]> {\n if (!this.cache) {\n this.fetch(path).pipe(first()).subscribe();\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * get instance by id from cache\n * @param id ID of required item\n */\n findById(id: number): Observable<Model> {\n return this.get()\n .pipe(\n map((items: Model[]) => items.find((item: Model) => item['id'] === id))\n );\n }\n\n find(id: number): Model {\n return this.cache.find((item: Model) => item['id'] === id);\n }\n\n /**\n * add new instance and update cache\n */\n private create(data: object, shouldUpdateCache = true): Observable<Model> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(data))\n .pipe(\n map((newItem: BaseModel) => {\n if (!shouldUpdateCache) {\n return null\n }\n\n const newInstance: Model = this.createModelInstance(newItem);\n if (this.cache) {\n this.cache.push(newInstance);\n this.updateCache();\n }\n\n if (this.messageCreated) {\n this.toastService.success(this.messageCreated);\n }\n\n return newInstance;\n })\n );\n }\n\n /**\n * @TODO Alex TT-1777 rename to post\n */\n add(model: Model, shouldUpdateCache = true): Observable<Model> {\n return this.create(classToPlain(model), shouldUpdateCache);\n }\n\n /**\n * @TODO Alex TT-1777 rename to upload\n */\n postForm(file: File, params: { [key: string]: string } = {}): Observable<Model> {\n const formData: FormData = new FormData();\n formData.append('file', file);\n for (const key in params) {\n formData.append(key, params[key]);\n }\n\n return this.create(formData);\n }\n\n /**\n * Add several new items\n * @param models Array of new items for saving\n * @param queryParams query parameters for request\n * @TODO Alex TT-1777 rename to postBatch\n */\n addBatch(models: Model[], queryParams: object = {}): Observable<Model[]> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(models), queryParams)\n .pipe(\n map((newItems: BaseModel[]) => {\n const newInstances: Model[] = newItems.map((item: BaseModel) => this.createModelInstance(item));\n if (this.cache) {\n this.cache.push(...newInstances);\n this.updateCache();\n }\n\n if (this.messageCreatedBatch) {\n this.toastService.success(this.messageCreatedBatch);\n }\n\n return newInstances;\n })\n );\n }\n\n /**\n * Update item\n * @param model Existing instance for updating\n * @param queryParams query parameters for request\n * @TODO Alex TT-1777 rename to put\n */\n update(model: Model, queryParams: object = {}): Observable<Model> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${model['id']}`, classToPlain(model), queryParams)\n .pipe(\n map((updatedItem: BaseModel) => {\n const updatedInstance: Model = this.createModelInstance(updatedItem);\n replace(this.cache, updatedInstance);\n this.updateCache();\n\n if (this.messageUpdated) {\n this.toastService.success(this.messageUpdated);\n }\n\n return updatedInstance;\n })\n );\n }\n\n /**\n * Update several items\n * @param models Array of items for updating\n * @param queryParams query parameters for request\n * TODO Alex TT-1777 rename to putBatch\n */\n updateBatch(models: Model[], queryParams: object = {}): Observable<Model[]> {\n return this.http.put(`${this.environment.apiV2}/${this.url}`, classToPlain(models), queryParams)\n .pipe(\n map((updatedItems: BaseModel[]) => {\n const updatedInstances: Model[] = updatedItems.map((item: BaseModel) => this.createModelInstance(item));\n updatedInstances.forEach((instance: Model) => {\n replace(this.cache, instance);\n });\n\n if (this.messageUpdatedBatch) {\n this.toastService.success(this.messageUpdatedBatch);\n }\n\n this.updateCache();\n return updatedInstances;\n })\n );\n }\n\n /**\n * delete instance of class\n * @param model Class instance for deleting\n */\n delete(model: Model): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/${this.url}/${model['id']}`)\n .pipe(\n map(() => {\n this.setCache(this.cache.filter((item: Model) => item['id'] !== model['id']), true);\n\n if (this.messageDeleted) {\n this.toastService.success(this.messageDeleted);\n }\n })\n );\n }\n\n /**\n * delete multiple instances of class\n * @param models Class instances array for deleting\n */\n deleteBatch(models: Model[]): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/delete`, classToPlain(models))\n .pipe(\n map(() => {\n const ids: number[] = models.map((model: Model): number => model['id']);\n this.setCache(this.cache.filter((item: Model) => !ids.includes(item['id'])), true);\n\n if (this.messageDeletedBatch) {\n this.toastService.success(this.messageDeletedBatch);\n }\n })\n );\n }\n\n /**\n * clear service cache\n */\n refreshCache(): void {\n this.setCache(undefined);\n this.get();\n }\n\n setCache(data: any[], next = false): void {\n this.cache = data;\n\n if (next) {\n this.updateCache();\n }\n }\n\n /**\n * Update cache subject with current cache array value\n */\n protected updateCache(): void {\n this.cacheSubject.next(this.cache.slice());\n }\n\n /**\n * @TODO use excludeExtraneousValues when all models refactored (exposed all needed properties)\n * Create new instance of class\n * @param model instance that we will use as constructor options\n */\n protected createModelInstance(model: BaseModel | object): Model {\n return plainToClass(this.modelClass, model, { excludePrefixes: ['@'] });\n }\n\n /**\n * Method that call all listeners. Empty by default. Should be redefined by child services if required\n */\n listenEvents(): void {}\n}\n","export enum EmployeeMessagesEnum {\n ROLE_GRANTED = 'Manager role granted to ',\n ROLE_REMOVED = 'Manager role took away from ',\n CONFIRM_GRANT = 'Are you sure you want to make this user manager?',\n CONFIRM_REMOVE = 'Are you sure you want to remove manager right from this user?',\n CONFIRM_DEACTIVATE = 'Are you sure you want to deactivate the employee account?',\n CONFIRM_ACTIVATE = 'Are you sure you want to activate the employee account?',\n ACTIVATED = 'Employee account activated',\n DEACTIVATED = 'Employee account deactivated',\n DEACTIVATE_ERROR = 'All clients must be transferred prior to removing an accountant'\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { User as UserBase } from '../../../../db/Models/user/user';\nimport { catchError, map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { replace } from '../../../../functions/array';\nimport _ from 'lodash';\nimport { plainToClass } from 'class-transformer';\nimport { User } from '../../../../models/user/user';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { EmployeeMessagesEnum } from './employee-messages.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmployeeService extends RestService<UserBase, User> {\n url = 'employees';\n modelClass: typeof User = User;\n messages: typeof EmployeeMessagesEnum = EmployeeMessagesEnum;\n\n /**\n * Grant/Remove Manager role to employee\n * @param employee\n */\n toggleManagerRole(employee: User): Observable<User> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${employee.id}`, {})\n .pipe(\n map((updatedEmployeeBase: UserBase): User => {\n const tempCache: User[] = this.cache;\n const updatedEmployee: User = plainToClass(User, updatedEmployeeBase);\n replace(tempCache, updatedEmployee);\n this.cache = _.cloneDeep(tempCache);\n this.updateCache();\n return updatedEmployee;\n })\n );\n }\n\n activateEmployee(employee: User, path = `${this.environment.apiV2}/${this.url}/${employee.id}/activate`): Observable<User> {\n return this.http.put(path, {})\n .pipe(\n map((updatedEmployeeBase: UserBase): User => {\n const tempCache: User[] = this.cache;\n const updatedEmployee: User = plainToClass(User, updatedEmployeeBase);\n replace(tempCache, updatedEmployee);\n this.cache = _.cloneDeep(tempCache);\n this.updateCache();\n return updatedEmployee;\n })\n );\n }\n\n deactivateEmployee(employee: User, path = `${this.environment.apiV2}/${this.url}/${employee.id}/deactivate`): Observable<User> {\n return this.http.put(path, {})\n .pipe(\n map((updatedEmployeeBase: UserBase): User => {\n const tempCache: User[] = this.cache;\n const updatedEmployee: User = plainToClass(User, updatedEmployeeBase);\n replace(tempCache, updatedEmployee);\n this.cache = _.cloneDeep(tempCache);\n this.updateCache();\n return updatedEmployee;\n }),\n catchError((error: HttpErrorResponse) => {\n // Show error when user provided another login (not login he used before)\n if (error.status === 400) {\n this.toastService.error(this.messages.DEACTIVATE_ERROR);\n }\n\n return observableThrowError(error);\n })\n );\n }\n}\n","import { EmployeeInvite as EmployeeInviteBase } from '../../db/Models/firm/employee-invite';\r\nimport { Type } from 'class-transformer';\r\nimport { RegistrationInvite } from '../registration-invite/registration-invite';\r\nimport { User } from '../user/user';\r\n\r\nexport class EmployeeInvite extends EmployeeInviteBase {\r\n @Type(() => RegistrationInvite)\r\n registrationInvite: RegistrationInvite;\r\n\r\n @Type(() => User)\r\n employee: User;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { EmployeeInvite as EmployeeInviteBase } from '../../../../db/Models/firm/employee-invite';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../../functions/array';\nimport _ from 'lodash';\nimport { plainToClass } from 'class-transformer';\nimport { EmployeeInvite } from '../../../../models/employee/employee-invite';\nimport { RestService } from '../../rest/rest-old.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmployeeInviteService extends RestService<EmployeeInviteBase, EmployeeInvite> {\n url = 'employees/invites';\n modelClass: typeof EmployeeInvite = EmployeeInvite;\n\n /**\n * Import employees for firm from CSV file\n * @param file\n */\n import(file: File): Observable<EmployeeInvite[]> {\n const formData: FormData = new FormData();\n formData.append('file', file);\n\n return this.http.post(`${this.environment.apiV2}/${this.url}/import`, formData)\n .pipe(\n map((employeeInvite: EmployeeInvite[]) => employeeInvite)\n );\n }\n\n /**\n * Resend invitation from firm to client\n * @param invite\n */\n resend(invite: EmployeeInvite): Observable<EmployeeInvite> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/resend`, null)\n .pipe(\n map((resentInviteBase: EmployeeInviteBase): EmployeeInvite => {\n const updatedInvite: EmployeeInvite = plainToClass(EmployeeInvite, resentInviteBase);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: EmployeeInvite[] = _.cloneDeep(this.cache);\n replace(tempCache, plainToClass(EmployeeInvite, updatedInvite));\n this.cache = tempCache;\n this.updateCache();\n return updatedInvite;\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { plainToClass } from 'class-transformer';\nimport { ClientPortfolioReport } from '../../../../models/client/client-portfolio-report';\nimport { ClientPortfolioReportCollection } from '../../../../collections/client-portfolio-report.collection';\n\n// @Todo refactor with BaseRest service\n/**\n * Service to work with employee clients tax summary data\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientPortfolioReportService {\n url = 'portfolio-reports';\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n get(): Observable<ClientPortfolioReportCollection> {\n return this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: object[]) => {\n const clientReports: ClientPortfolioReport[] = response.map((item: object) => plainToClass(ClientPortfolioReport, item));\n return new ClientPortfolioReportCollection(clientReports);\n })\n );\n }\n}\n","export enum FirmMessagesEnum {\n LOGO_UPDATED = 'Firm logo updated',\n DATA_UPDATED = 'Firm data updated'\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FirmTypeEnum } from '../../../db/Enums/firm-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { Firm } from '../../../models/firm/firm';\nimport { Firm as FirmBase } from '../../../db/Models/firm/firm';\n\n// @TODO Alex: think about extend base rest service\n@Injectable({\n providedIn: 'root'\n})\nexport class FirmService {\n firm: Firm;\n firmSubject: ReplaySubject<Firm> = new ReplaySubject<Firm>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') protected environment: any\n ) {}\n\n /**\n * Register new firm\n * @param data: firm and firm owner data to register\n */\n register(data: Firm): Observable<Firm> {\n return this.http.post(`${this.environment.apiV2}/firms/registration`, data)\n .pipe(\n map((firm: FirmBase): Firm => plainToClass(Firm, firm))\n );\n }\n\n get(): Observable<Firm> {\n if (!this.firm) {\n this.http.get(`${this.environment.apiV2}/firms/current`)\n .pipe(\n map((firm: FirmBase): Firm => plainToClass(Firm, firm))\n )\n .subscribe((firm: Firm): void => {\n this.firm = firm;\n this.firmSubject.next(this.firm);\n });\n }\n\n return this.firmSubject.asObservable();\n }\n\n update(firm: Firm): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/firms/current`, firm)\n .pipe(\n map((updatedItem: FirmBase) => {\n const updatedInstance: Firm = plainToClass(Firm, updatedItem);\n this.firmSubject.next(updatedInstance);\n })\n );\n }\n\n /**\n * get list of all registered firms\n */\n getAll(): Observable<Firm[]> {\n return this.http.get(`${this.environment.apiV2}/firms`)\n .pipe(\n map((response: object): Firm[] => response['hydra:member'].map((firmBase: FirmBase): Firm => plainToClass(Firm, firmBase)))\n );\n }\n\n getByType(type: FirmTypeEnum): Observable<Firm[]> {\n return this.getAll().pipe(\n map((firms: Firm[]): Firm[] => firms.filter((firm: Firm) => firm.type === type))\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { IncomeSourceForecast as IncomeSourceForecastBase } from '../../../../db/Models/incomeSource/income-source-forecast';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest-old.service';\nimport { IncomeSourceForecast, AppEvent, AppEventTypeEnum, IncomeSource } from '../../../../models';\nimport { IEventListener } from '../../../../interfaces';\n\n/**\n * Service to work with Other Income Forecasts\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IncomeSourceForecastService extends RestService<IncomeSourceForecastBase, IncomeSourceForecast> implements IEventListener {\n modelClass: typeof IncomeSourceForecast = IncomeSourceForecast;\n url = 'income-source-forecasts';\n\n /**\n * Listen to Income Sources events\n */\n listenEvents(): void {\n this.listenToAddedIncomeSources();\n this.listenToUpdatedIncomeSources();\n }\n\n /**\n * @TODO vik refactor\n * Listen to EventDispatcherService event related to added Income Sources\n */\n private listenToAddedIncomeSources(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_CREATED)\n .pipe(\n map((incomeSources: IncomeSource[]) => incomeSources\n .filter((incomeSource: IncomeSource) => !incomeSource.isWorkIncome()))\n )\n .subscribe((incomeSources: IncomeSource[]) => {\n\n const incomeSourceForecasts: IncomeSourceForecast[] = this.assignIncomeSourceForecasts(incomeSources);\n if (incomeSourceForecasts.length) {\n this.addBatch(incomeSourceForecasts).subscribe((createdIncomeSourceForecasts: IncomeSourceForecast[]) => {\n this.eventDispatcherService\n .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, createdIncomeSourceForecasts));\n });\n }\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated Income Sources\n */\n private listenToUpdatedIncomeSources(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_UPDATED)\n .subscribe((incomeSources: IncomeSource[]) => {\n const incomeSourceForecasts: IncomeSourceForecast[] = this.assignIncomeSourceForecasts(incomeSources);\n if (incomeSourceForecasts.length) {\n this.updateBatch(incomeSourceForecasts).subscribe((updatedIncomeSourceForecasts: IncomeSourceForecast[]) => {\n this.eventDispatcherService\n .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED, updatedIncomeSourceForecasts));\n });\n }\n });\n }\n\n /**\n * Assign other income forecasts based on provided income sources\n * @param incomeSources by which other income forecasts will be assigned\n */\n private assignIncomeSourceForecasts(incomeSources: IncomeSource[]): IncomeSourceForecast[] {\n return incomeSources.map((incomeSource: IncomeSource) => {\n incomeSource.incomeSourceForecasts = incomeSource.incomeSourceForecasts\n .map((incomeSourceForecast: IncomeSourceForecast) => {\n incomeSourceForecast.incomeSource = plainToClass(IncomeSource, {id: incomeSource.id});\n return incomeSourceForecast;\n });\n return incomeSource.incomeSourceForecasts;\n }).flat();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SalaryForecast as SalaryForecastBase } from '../../../../db/Models/incomeSource/salary-forecast';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SalaryForecast } from '../../../../models/income-source/salary-forecast';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { IncomeSource } from '../../../../models/income-source/income-source';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n/**\n * Service to work with Salary Forecasts\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SalaryForecastService extends RestService<SalaryForecastBase, SalaryForecast> implements IEventListener {\n modelClass: typeof SalaryForecast = SalaryForecast;\n url = 'salary-forecasts';\n\n /**\n * Listen to Income Sources events\n */\n listenEvents(): void {\n this.listenToAddedIncomeSources();\n this.listenToUpdatedIncomeSources();\n }\n\n /**\n * Listen to EventDispatcherService event related to added Income Sources\n */\n private listenToAddedIncomeSources(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_CREATED)\n .pipe(\n map((incomeSources: IncomeSource[]) => incomeSources\n .filter((incomeSource: IncomeSource) => incomeSource.isWorkIncome()))\n )\n .subscribe((incomeSources: IncomeSource[]) => {\n\n const salaryForecasts: SalaryForecast[] = this.assignSalaryForecasts(incomeSources);\n if (salaryForecasts.length) {\n this.addBatch(salaryForecasts).subscribe((createdSalaryForecasts: SalaryForecast[]) => {\n this.eventDispatcherService\n .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, createdSalaryForecasts));\n });\n }\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated Income Sources\n */\n private listenToUpdatedIncomeSources(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_UPDATED)\n .subscribe((incomeSources: IncomeSource[]) => {\n const salaryForecasts: SalaryForecast[] = this.assignSalaryForecasts(incomeSources);\n if (salaryForecasts.length) {\n this.updateBatch(salaryForecasts).subscribe((updatedSalaryForecasts: SalaryForecast[]) => {\n this.eventDispatcherService\n .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED, updatedSalaryForecasts));\n });\n }\n });\n }\n\n /**\n * Assign salary forecasts based on provided income sources\n * @param incomeSources by which salary forecasts will be assigned\n */\n private assignSalaryForecasts(incomeSources: IncomeSource[]): SalaryForecast[] {\n return incomeSources.map((incomeSource: IncomeSource) => {\n incomeSource.salaryForecasts = incomeSource.salaryForecasts\n .map((salaryForecast: SalaryForecast) => {\n salaryForecast.incomeSource = plainToClass(IncomeSource, {id: incomeSource.id});\n return salaryForecast;\n });\n return incomeSource.salaryForecasts;\n }).flat();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { SoleForecast as SoleForecastBase } from '../../../../db/Models/sole/sole-forecast';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleForecast } from '../../../../models/income-source/sole-forecast';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { IncomeSource } from '../../../../models/income-source/income-source';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleForecastService extends RestService<SoleForecastBase, SoleForecast> implements IEventListener {\n modelClass: typeof SoleForecast = SoleForecast;\n url = 'sole-forecasts';\n\n /**\n * Listen to Income Sources events\n */\n listenEvents(): void {\n this.listenToAddedIncomeSources();\n this.listenToUpdatedIncomeSources();\n this.listenBusinessCreated();\n }\n\n /**\n * Listen to EventDispatcherService event related to added Income Sources\n */\n private listenToAddedIncomeSources(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_CREATED)\n .pipe(\n map((incomeSources: IncomeSource[]) => incomeSources\n .filter((incomeSource: IncomeSource) => incomeSource.isSoleIncome()))\n )\n .subscribe((incomeSources: IncomeSource[]) => {\n\n const soleForecasts: SoleForecast[] = this.assignSoleForecasts(incomeSources);\n if (soleForecasts.length) {\n this.addBatch(soleForecasts).subscribe((createdSoleForecasts: SoleForecast[]) => {\n this.eventDispatcherService\n .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, createdSoleForecasts));\n });\n }\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated Income Sources\n */\n private listenToUpdatedIncomeSources(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_UPDATED)\n .subscribe((incomeSources: IncomeSource[]) => {\n const soleForecasts: SoleForecast[] = this.assignSoleForecasts(incomeSources);\n if (soleForecasts.length) {\n const method = soleForecasts[0].id ? 'updateBatch' : 'addBatch';\n this[method](soleForecasts).subscribe((updatedSoleForecasts: SoleForecast[]) => {\n this.eventDispatcherService\n .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED, updatedSoleForecasts));\n });\n }\n });\n }\n\n /**\n * Assign sole forecasts based on provided income sources\n * @param incomeSources by which sole forecasts will be assigned\n */\n private assignSoleForecasts(incomeSources: IncomeSource[]): SoleForecast[] {\n return incomeSources.map((incomeSource: IncomeSource) => {\n incomeSource.soleForecasts = incomeSource.soleForecasts\n .map((soleForecast: SoleForecast) => {\n soleForecast.incomeSource = plainToClass(IncomeSource, { id: incomeSource.id });\n return soleForecast;\n });\n return incomeSource.soleForecasts;\n }).flat();\n }\n\n /**\n * Listen business created because we create sole forests together with business\n */\n private listenBusinessCreated() {\n this.eventDispatcherService.on(AppEventTypeEnum.SOLE_BUSINESS_CREATED).subscribe(() => {\n this.refreshCache();\n })\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IncomeSource as IncomeSourceBase } from '../../../db/Models/incomeSource/income-source';\nimport { RestService } from '../rest/rest-old.service';\nimport { SalaryForecast, IncomeSource, AppEvent, AppEventTypeEnum } from '../../../models';\nimport { replace } from '../../../functions/array';\nimport { IncomeSourceTypeEnum } from '../../../db/Enums/income-source/income-source-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { IEventListener } from '../../../interfaces';\n\n/**\n * Service to work with income sources\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IncomeSourceService extends RestService<IncomeSourceBase, IncomeSource> implements IEventListener {\n url = 'income-sources';\n modelClass = IncomeSource;\n\n listenEvents(): void {\n this.listenSoleBusinessCreated();\n }\n\n /**\n * Get income sources tax calculation\n * @param salaryForecast for which tax should be calculated\n */\n getTaxCalculation(salaryForecast: SalaryForecast): Observable<SalaryForecast> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/tax-calculation`, salaryForecast)\n .pipe(\n map((response: any) => plainToClass(SalaryForecast, response))\n );\n }\n\n /**\n * Add batch of income sources\n * @param incomeSources to add\n */\n addBatch(incomeSources: IncomeSource[]): Observable<IncomeSource[]> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, incomeSources)\n .pipe(\n map((addedIncomeSources: IncomeSourceBase[]) => {\n // assign respond income sources to provided income sources\n const assignedIncomeSources: IncomeSource[] = addedIncomeSources\n .map((incomeSource: IncomeSource, index: number) => Object.assign(plainToClass(IncomeSource, {}), incomeSource, incomeSources[index]));\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_CREATED, assignedIncomeSources));\n\n this.cache.push(...assignedIncomeSources);\n this.updateCache();\n return assignedIncomeSources;\n })\n );\n }\n\n /**\n * Update batch of income sources\n */\n\n updateBatch(incomeSources: IncomeSource[], queryParams: object = {}): Observable<IncomeSource[]> {\n return this.http.put(`${this.environment.apiV2}/${this.url}`, incomeSources, queryParams)\n .pipe(\n map((updatedItems: IncomeSource[]) => {\n const updatedInstances: IncomeSource[] = updatedItems.map(\n (item: IncomeSource) => this.createModelInstance(item)\n );\n updatedInstances.forEach((instance: IncomeSource) => {\n replace(this.cache, instance);\n });\n\n if (incomeSources[0].forecasts.length) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_UPDATED, incomeSources));\n }\n\n this.updateCache();\n return updatedInstances;\n })\n );\n }\n\n /**\n * Get income sources by provided types\n * @param types\n */\n getByTypes(types: IncomeSourceTypeEnum[]): Observable<IncomeSource[]> {\n return this.get()\n .pipe(\n map((incomeSources: IncomeSource[]) => incomeSources\n .filter((incomeSource: IncomeSource) => types.includes(incomeSource.type))));\n }\n\n /**\n * Sole businesses create together with income source\n */\n private listenSoleBusinessCreated() {\n this.eventDispatcherService.on(AppEventTypeEnum.SOLE_BUSINESS_CREATED).subscribe(() => {\n // @TODO Alex/Vik (TT-1777): we clear cache a lot, a better and easier way required, add todo and task to refactor\n this.refreshCache();\n });\n }\n}\n","export enum IncomeSourceMessagesEnum {\n CREATED = 'Employment details have been created',\n UPDATED = 'Employment details have been updated.',\n DELETED = 'This employer, and the related forecasts, have been deleted.',\n CLOSE_ERROR = 'End date can`t be before your final payment, please enter a date on or after the xx/xx/xxxx',\n DELETE_CONFIRM = 'Are you sure you want to delete employer?',\n DELETE_ERROR = 'You have received payments from this employer so it cannot be deleted. Instead please select the edit icon and add an end date.'\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { plainToClass } from 'class-transformer';\nimport { BorrowingExpense } from '../../../../models/borrowing-expense/borrowing-expense';\nimport { Loan } from '../../../../models/loan/loan';\nimport { BorrowingExpenseLoan } from '../../../../models/borrowing-expense/borrowing-expense-loan';\n\n/**\n * @TODO Alex (TT-1777): Refactor with rest service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BorrowingExpenseService {\n _borrowingExpenses: BorrowingExpense[];\n borrowingExpensesSubject: ReplaySubject<BorrowingExpense[]> = new ReplaySubject<BorrowingExpense[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') protected environment: any\n ) { }\n\n /**\n * Get borrowing expenses\n */\n get(): Observable<BorrowingExpense[]> {\n if (!this._borrowingExpenses) {\n this.http.get(`${this.environment.apiV2}/borrowing-expenses`)\n .pipe(\n map((response: any) => response.map((item: any) => plainToClass(BorrowingExpense, item)))\n )\n .subscribe((borrowingExpenses: BorrowingExpense[]) => {\n this._borrowingExpenses = borrowingExpenses;\n this.borrowingExpensesSubject.next(this._borrowingExpenses);\n });\n }\n\n return this.borrowingExpensesSubject.asObservable();\n }\n\n getLoanBorrowingExpenses(loan?: Loan): Observable<any> {\n return this.get()\n .pipe(\n map((borrowingExpenses: BorrowingExpense[]) => {\n // Loan borrowing expenses array\n const borrowingExpensesLoan: BorrowingExpenseLoan[] = [];\n // Combined array of borrowing expenses list & loan borrowing expenses\n const combinedBorrowingExpenses: BorrowingExpenseLoan[] = [];\n\n\n borrowingExpenses.forEach((borrowingExpense: BorrowingExpense, index: number) => {\n // Fill borrowingExpensesLoan with values based on borrowingExpenses list\n borrowingExpensesLoan.push(plainToClass(BorrowingExpenseLoan, {\n borrowingExpense: borrowingExpense,\n loan: loan,\n amount: 0,\n id: null,\n createdAt: null,\n updatedAt: null,\n createdBy: null,\n updatedBy: null\n }));\n\n combinedBorrowingExpenses\n .push(Object.assign(plainToClass(BorrowingExpenseLoan, {} as BorrowingExpenseLoan), borrowingExpenses[index], borrowingExpensesLoan[index]));\n\n // Find current loan borrowing expense in loan object by index\n const targetBorrowingExpense: any = loan.borrowingExpenses.find((updBorrowingExpensesLoan: BorrowingExpenseLoan) =>\n updBorrowingExpensesLoan.borrowingExpense.id === borrowingExpensesLoan[index].borrowingExpense.id);\n\n // ... and set its value to current loan borrowing expense in combinedBorrowingExpenses array\n combinedBorrowingExpenses[index].amount = targetBorrowingExpense ? targetBorrowingExpense.amount : 0;\n\n return combinedBorrowingExpenses;\n });\n\n return combinedBorrowingExpenses;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Loan as LoanBase } from '../../../db/Models';\nimport { map } from 'rxjs/operators';\nimport { RestMethod, RestService } from '../rest';\nimport { plainToClass } from 'class-transformer';\nimport { AppEvent, AppEventTypeEnum, BankAccount, Loan, LoanPayout } from '../../../models';\nimport { IEventListener } from '../../../interfaces';\nimport { LoanCollection } from '../../../collections';\n\n/**\n * Service that handling loans logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoanService extends RestService<LoanBase, Loan, LoanCollection> implements IEventListener {\n endpointUri = 'bank-accounts/loans';\n modelClass: typeof Loan = Loan;\n collectionClass: typeof LoanCollection = LoanCollection;\n disabledMethods: RestMethod[] = ['post', 'delete', 'deleteBatch'];\n\n /**\n * Listen to Loans events\n */\n listenEvents(): void {\n // Update list of loans when added/changed loan bank account\n this.listenCSE(BankAccount, ['post', 'put'], (bankAccounts: BankAccount[]) => {\n if (bankAccounts.find(ba => !!ba.loan)) {\n this.refreshCache();\n }\n });\n\n this.listenCSE(LoanPayout, ['post', 'put', 'delete'], this.refreshCache);\n }\n\n /**\n * Calculate loan payments\n */\n calculateLoanPayments(loan: Loan): Observable<any> {\n return this.http.post(`${this.apiUrl}/calculation`, loan).pipe(\n map((response: any) => plainToClass(Loan, response))\n );\n }\n\n /**\n * Add new loan payout\n * @TODO Vik (TT-2670): fix api (remove loan id from URL)\n * @TODO Alex: move to separated service\n */\n addPayoutLoan(loan: Loan, paidOutLoan: LoanPayout): Observable<any> {\n return this.http.post(`${this.environment.apiV2}/loans/${loan.id}/payout`, paidOutLoan).pipe(\n map((response: any) => {\n loan.payout = plainToClass(LoanPayout, response);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.LOAN_PAYOUT_UPDATED, null));\n // reset cache to fetch loans with updated data\n this.refreshCache();\n })\n );\n }\n\n /**\n * Delete loan payout\n * @TODO (TT-2670): Vik: fix api (remove loan id from URL)\n * @TODO Alex: move to separated service\n */\n deletePayoutLoan(loan: Loan, payout: LoanPayout): Observable<any> {\n return this.http.delete(`${this.environment.apiV2}/loans/${loan.id}/payout/${payout.id}`).pipe(\n map(() => {\n loan.payout = null;\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.LOAN_PAYOUT_UPDATED, null));\n // reset cache to fetch loans with updated data\n this.refreshCache();\n })\n );\n }\n\n /**\n * Update loan payout\n *\n * @TODO Vik (TT-2670): fix api (remove loan id from URL)\n * @TODO Alex: move to separated service\n */\n updatePayoutLoan(loan: Loan, paidOutLoan: LoanPayout): Observable<any> {\n return this.http.put(`${this.environment.apiV2}/loans/${loan.id}/payout/${paidOutLoan.id}`, paidOutLoan).pipe(\n map((response: any) => {\n loan.payout = plainToClass(LoanPayout, response);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.LOAN_PAYOUT_UPDATED, null));\n // reset cache to fetch loans with updated data\n this.refreshCache();\n })\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport { RestMethod, RestService } from '../../rest';\nimport {BorrowingReport as BorrowingReportBase} from '../../../../db/Models/property/borrowing-report';\nimport {BorrowingReport} from '../../../../models';\nimport { ChatCollection, Collection } from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BorrowingReportService extends RestService<BorrowingReportBase, BorrowingReport, Collection<BorrowingReport>>{\n endpointUri = 'borrowing-reports';\n isApiPlatform = true;\n modelClass: typeof BorrowingReport = BorrowingReport;\n collectionClass: typeof Collection = Collection;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","export enum BorrowingReportMessagesEnum {\n POST = 'Borrowing report successfully added',\n PUT = 'Borrowing report successfully updated',\n DELETE = 'Borrowing report successfully reset'\n}\n","import { Injectable } from '@angular/core';\nimport { PropertyCategory as PropertyCategoryBase } from '../../../../db/Models';\nimport { RestMethod, RestService } from '../../rest';\nimport { PropertyCategory } from '../../../../models';\nimport { Collection } from '../../../../collections';\n\n/**\n * Service for work with Property Categories\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyCategoryService extends RestService<PropertyCategoryBase, PropertyCategory, Collection<PropertyCategory>>{\n modelClass: typeof PropertyCategory = PropertyCategory;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'properties/categories';\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { Property, PropertyCategoryMovement } from '../../../../models';\nimport { PropertyCategoryMovement as PropertyCategoryMovementBase } from '../../../../db/Models';\nimport { RestMethod, RestService } from '../../rest';\nimport { PropertyCategoryMovementCollection } from '../../../../collections';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyCategoryMovementService extends RestService<PropertyCategoryMovementBase, PropertyCategoryMovement, PropertyCategoryMovementCollection> {\n modelClass: typeof PropertyCategoryMovement = PropertyCategoryMovement;\n collectionClass: typeof PropertyCategoryMovementCollection = PropertyCategoryMovementCollection;\n endpointUri = 'properties/category-movements';\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n\n post(movement: PropertyCategoryMovement, property: Property): Observable<PropertyCategoryMovement> {\n return super.post(movement, property, `${this.environment.apiV2}/properties/${movement.property.id}/category-movements`);\n }\n}\n","export enum PropertyDocumentMessagesEnum {\n CREATED = 'Property document created',\n UPDATED = 'Property document updated',\n CONFIRM_DELETE = 'Are you sure you want to delete the document?',\n DELETED = 'Property document deleted'\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { PropertyDocument as PropertyDocumentBase } from '../../../../db/Models';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { RestMethod, RestService } from '../../rest';\nimport { AppEventTypeEnum, Property, PropertyDocument } from '../../../../models';\nimport { IEventListener } from '../../../../interfaces';\nimport { Collection } from '../../../../collections';\n\n/**\n * Class for work with Property Documents\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyDocumentService extends RestService<PropertyDocumentBase, PropertyDocument, Collection<PropertyDocument>> implements IEventListener {\n modelClass: typeof PropertyDocument = PropertyDocument;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'property-documents';\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch'];\n protected isApiPlatform = true;\n\n /**\n * Add new Property Document\n */\n upload(file: File, propertyId: number): Observable<PropertyDocument> {\n // create formData object with provided file\n const formDataDocument: FormData = new FormData();\n formDataDocument.append('file', file);\n\n return this.http.post(`${this.environment.apiV2}/properties/${propertyId}/documents`, formDataDocument).pipe(\n map((documentBase: PropertyDocumentBase): PropertyDocument => {\n const newDocument: PropertyDocument = plainToClass(PropertyDocument, documentBase);\n\n if (this.cache) {\n this.updateCache([newDocument], 'post');\n }\n\n return newDocument;\n })\n );\n }\n\n listenEvents(): void {\n this.listenPropertyUpdateWithDocument();\n }\n\n private listenPropertyUpdateWithDocument(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT).subscribe((property: Property): void => {\n this.upload(property.documentFile, property.id).subscribe();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaxExemption as BaseTaxExemption } from '../../../db/Models';\nimport { TaxExemption } from '../../../models';\nimport { Collection } from '../../../collections';\nimport { DataService } from '../../data.service';\nimport TaxExemptions from '../../../db/Json/property/tax-exemption.json';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxExemptionService extends DataService<BaseTaxExemption, TaxExemption, Collection<TaxExemption>> {\n modelClass: typeof TaxExemption = TaxExemption;\n collectionClass: typeof Collection = Collection;\n\n constructor() {\n super();\n this.setCache(TaxExemptions);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertySale as PropertySaleBase } from '../../../../db/Models';\nimport { PropertySale } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { PropertySaleCollection } from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertySaleService extends RestService<PropertySaleBase, PropertySale, PropertySaleCollection> {\n modelClass: typeof PropertySale = PropertySale;\n collectionClass: typeof PropertySaleCollection = PropertySaleCollection;\n endpointUri = 'properties/sales';\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError as observableThrowError } from 'rxjs';\nimport { PropertyShare as PropertyShareBase } from '../../../../db/Models';\nimport { AppEventTypeEnum, PropertySale, PropertyShare, User } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { IEventListener } from '../../../../interfaces';\nimport { PropertyShareCollection } from '../../../../collections';\nimport { catchError, map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n// @TODO check and improve logic during refactoring\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyShareService extends RestService<PropertyShareBase, PropertyShare, PropertyShareCollection> implements IEventListener {\n // api url parameter for properties shares\n endpointUri = 'properties/shares';\n modelClass: typeof PropertyShare = PropertyShare;\n collectionClass: typeof PropertyShareCollection = PropertyShareCollection;\n disabledMethods: RestMethod[] = ['deleteBatch', 'putBatch', 'postBatch'];\n\n /**\n * Listen to Event Dispatcher events\n */\n listenEvents(): void {\n this.listenUserUpdated();\n this.listenSalesChanges();\n }\n\n /**\n * Re-invite property share\n * @param share user to share property\n */\n reinvite(share: PropertyShare): Observable<void> {\n return this.http.post(`${this.apiUrl}/${share.id}/reinvite`, {})\n .pipe(\n map(() => {\n this.mpService.track('reinvitePropertyShare', share.getMpData());\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('reinvitePropertyShareError', share.getMpData());\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Listen to User updated event\n */\n private listenUserUpdated(): void {\n this.eventDispatcherService.on2(User.getEventName('put')).subscribe((): void => {\n this.refreshCache();\n });\n }\n\n /**\n * @Todo Alex refactor after PropertyShare functionality in PropertyService will be cleared up\n */\n private listenSalesChanges(): void {\n this.listenCSE(PropertySale, ['post', 'delete'], this.refreshCache);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestMethod, RestService } from '../../rest';\nimport { PropertyValuation as PropertyValuationBase } from '../../../../db/Models';\nimport { Property, PropertyValuation } from '../../../../models';\nimport { Collection } from '../../../../collections';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * @TODO Alex: refacotor with api platform (old endpoint)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyValuationService extends RestService<PropertyValuationBase, PropertyValuation, Collection<PropertyValuation>> {\n protected endpointUri = 'properties';\n modelClass: typeof PropertyValuation = PropertyValuation;\n collectionClass: typeof Collection<PropertyValuation> = Collection<PropertyValuation>;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch'];\n protected isApiPlatform = true;\n\n get(propertyId: string): Observable<Collection<PropertyValuation>> {\n return this.http.get(`${this.apiUrl}/${propertyId}/valuations`)\n .pipe(\n map((valuations: PropertyValuationBase[]) => new Collection<PropertyValuation>(valuations.map((valuation: PropertyValuationBase) => plainToClass(PropertyValuation, valuation))))\n );\n }\n\n post(valuation: PropertyValuation, property: Property): Observable<PropertyValuation> {\n return super.post(valuation, property, `${this.apiUrl}/${property.id}/valuations`);\n }\n\n put(valuation: PropertyValuation, property: Property): Observable<PropertyValuation> {\n return super.put(valuation, property, `${this.apiUrl}/${property.id}/valuations/${valuation.id}`);\n }\n}\n","export enum PropertyValuationMessages {\n CREATED = 'Property valuation created',\n UPDATED = 'Property valuation updated'\n}\n","export enum PropertyMessagesEnum {\n PHOTO_UPDATED = 'Property photo updated',\n PROPERTY_UPDATED = 'Property updated'\n}\n","import { Injectable } from '@angular/core';\nimport {\n Property as PropertyBase,\n PropertySubscription as PropertySubscriptionBase\n} from '../../../db/Models';\nimport { Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport {\n AppEvent, AppEventTypeEnum,\n Property, PropertyCategoryMovement, PropertySale, PropertyShare, PropertySubscription, PropertyValuation\n} from '../../../models';\nimport { IEventListener } from '../../../interfaces';\nimport merge from 'lodash/merge';\nimport { RestMethod, RestService } from '../rest';\nimport { PropertyCollection } from '../../../collections';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n/**\n * @Todo Alex remove functionality related to PropertyShare\n * @TODO Alex (TT-1777): replace all event listeners with the new this.listen()\n * Service for work with Property\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyService extends RestService<PropertyBase, Property, PropertyCollection> implements IEventListener {\n modelClass: typeof Property = Property;\n collectionClass: typeof PropertyCollection = PropertyCollection;\n endpointUri = 'properties';\n disabledMethods: RestMethod[] = ['deleteBatch'];\n\n put(property: Property): Observable<Property> {\n return super.put(property)\n // @TODO Alex (TT-1777): handle this events and refactor\n .pipe(\n map((updatedProperty: Property): Property => {\n if (property.documentFile) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT, property));\n } else {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED, property));\n }\n\n return updatedProperty;\n })\n );\n }\n\n listenEvents(): void {\n this.listenShareInviteAccepted();\n // @TODO Alex: consider to refactor property movements logic similar to client-movements\n this.listenMovementsChanges();\n this.listenSalesChanges();\n this.listenValuations();\n }\n\n /**\n * Update cache when share invitation accepted\n */\n private listenShareInviteAccepted(): void {\n this.listenCSE(PropertyShare, ['put'], this.refreshCache);\n }\n\n /**\n * Update cache when property category changed\n */\n private listenMovementsChanges(): void {\n this.listenCSE(PropertyCategoryMovement, ['post', 'put', 'delete'], this.refreshCache);\n }\n\n /**\n * Update cache when property sales changed\n */\n private listenSalesChanges(): void {\n this.listenCSE(PropertySale, ['post', 'delete'], this.refreshCache);\n }\n\n private listenValuations(): void {\n this.listenCSE(PropertyValuation, ['post', 'put'], this.refreshCache);\n }\n\n updateDepreciationCalculation(property: Property): Observable<void> {\n const propertyToUpdate: Property = plainToClass(Property, { id: property.id, depreciationCalculation: property.depreciationCalculation })\n\n return this.put(propertyToUpdate)\n .pipe(\n map((updatedProperty: Property) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_DEPRECIATION_CALCULATION_UPDATED, updatedProperty));\n })\n );\n }\n\n /**\n * Activate deactivated property\n */\n activate(property: Property): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/property-subscriptions`, { property })\n .pipe(\n map((propertySubscriptionBase: PropertySubscriptionBase) => {\n const newPropertySubscription: PropertySubscription = plainToClass(PropertySubscription, propertySubscriptionBase);\n const activatedProperty: Property = plainToClass(Property, Object.assign({}, property, { subscriptions: [newPropertySubscription] }));\n\n this.mpService.track(`postPropertySubscription`, {\n 'Property': property.name,\n });\n\n this.updateCache([activatedProperty], 'put');\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('postPropertySubscriptionError', {\n 'Property': property.name,\n });\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Deactivate activated property\n */\n deactivate(property: Property): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/property-subscriptions/${property.getCurrentSubscription().id}`)\n .pipe(\n map(() => {\n const deactivatedProperty: Property = plainToClass(Property, Object.assign({}, property, { subscriptions: [] }));\n\n this.mpService.track(`deletePropertySubscription`, {\n 'Property': property.name,\n });\n\n this.updateCache([deactivatedProperty], 'put');\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('deletePropertySubscriptionError', {\n 'Property': property.name,\n });\n\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Update property photo\n * @param property Property instance for photo update\n * @param photoFormData FormData with property photo image\n */\n updatePhoto(property: Property, photoFormData: FormData): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/properties/${property.id}/photo?_method=PUT`, photoFormData)\n .pipe(\n map((photoLink: string): void => {\n this.updateCache([plainToClass(Property, merge(property, { photo: photoLink }))], 'put');\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ServiceNotification as NotificationBase } from '../../../db/Models/service-notification';\nimport { Notification } from '../../../models/notification/notification';\nimport { HttpClient } from '@angular/common/http';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../rest/rest-old.service';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { SseService } from '../../event/sse.service';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport clone from 'lodash/clone'\nimport { ToastService } from '../../toast/toast.service';\nimport { Toast } from \"../../../models/toast/toast\";\nimport { ToastTypeEnum} from \"../../../models/toast/toast-type.enum\";\n\n/**\n * Service to handle service notifications logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ServiceNotificationService extends RestService<NotificationBase, Notification> {\n modelClass: typeof Notification = Notification;\n url = 'service-notifications';\n isHydra = true;\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any,\n protected toastService: ToastService,\n private sseService: SseService\n ) {\n super(http, eventDispatcherService, environment, toastService);\n this.listenNotifications();\n }\n\n /**\n * subscribe to new chat messages\n */\n private listenNotifications(): void {\n this.sseService.on(`serviceNotification`).subscribe((notificationBase: NotificationBase): void => {\n const notification: Notification = plainToClass(Notification, notificationBase);\n const cache: Notification[] = clone(this.cache);\n // update existing notification if read and add new notification if not read\n if (notification.isRead) {\n replace(cache, notification);\n } else {\n cache.unshift(notification);\n this.toastService.add(plainToClass(Toast, {\n type: ToastTypeEnum.INFO,\n title: 'Information',\n message: notification.message,\n // read notification when user manually closed toast\n onCloseClick: () => {\n notification.isRead = true;\n this.update(notification).subscribe();\n }\n }))\n }\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n // @TODO TT-2280 Alex wrong event, it's updated, added or deleted. Not just added\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.NOTIFICATION_ADDED, notification));\n });\n }\n}\n","export enum SoleBusinessMessagesEnum {\n LOGO_UPDATED = 'Logo updated successfully'\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleBusiness as SoleBusinessBase } from '../../../../db/Models/sole/sole-business';\nimport { SoleBusiness } from '../../../../models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleBusinessService extends RestService<SoleBusinessBase, SoleBusiness>{\n modelClass: typeof SoleBusiness = SoleBusiness;\n url = 'sole-businesses';\n isHydra = true;\n\n add(soleBusiness: SoleBusiness): Observable<SoleBusiness> {\n return super.add(soleBusiness).pipe(\n map((business: SoleBusiness) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_BUSINESS_CREATED, business));\n\n return business;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleBusinessActivity as SoleBusinessActivityBase } from '../../../../db/Models/sole/sole-business-activity';\nimport { SoleBusinessActivity } from '../../../../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleBusinessActivityService extends RestService<SoleBusinessActivityBase, SoleBusinessActivity>{\n modelClass: typeof SoleBusinessActivity = SoleBusinessActivity;\n url = 'sole-business-activities';\n isHydra = true;\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleBusinessLoss as SoleBusinessLossBase } from '../../../../db/Models/sole/sole-business-loss';\nimport { SoleBusinessLoss } from '../../../../models';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleBusinessLossService extends RestService<SoleBusinessLossBase, SoleBusinessLoss> implements IEventListener {\n modelClass: typeof SoleBusinessLoss = SoleBusinessLoss;\n url = 'sole-business-losses';\n isHydra = true;\n\n listenEvents(): void {\n this.listenBusinessCreated();\n }\n\n /**\n * Listen business created because we create prior year losses together with business\n */\n private listenBusinessCreated() {\n this.eventDispatcherService.on(AppEventTypeEnum.SOLE_BUSINESS_CREATED).subscribe(() => {\n this.refreshCache();\n })\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../../rest/rest-old.service';\nimport { SoleBusinessLossOffsetRule } from '../../../../../models';\n\n/**\n * @TODO vik replace with json when the final list is confirmed\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleBusinessLossOffsetRuleService extends RestService<SoleBusinessLossOffsetRule, SoleBusinessLossOffsetRule> {\n modelClass: typeof SoleBusinessLossOffsetRule = SoleBusinessLossOffsetRule;\n url = 'sole-business-loss-offset-rules';\n isHydra = true;\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleContact as SoleContactBase } from '../../../../db/Models/sole/sole-contact';\nimport { SoleContact } from '../../../../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleContactService extends RestService<SoleContactBase, SoleContact> {\n modelClass: typeof SoleContact = SoleContact;\n url = 'sole-contacts';\n isHydra = true;\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { SoleDepreciationMethod } from '../../../../models';\nimport { SoleDepreciationMethod as SoleDepreciationMethodBase } from '../../../../db/Models/sole/sole-depreciation-method';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { ToastService } from '../../../toast/toast.service';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n/**\n * @TODO Alex: extend rest service when refactored\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleDepreciationMethodService implements IEventListener {\n cache: SoleDepreciationMethod;\n cacheSubject: ReplaySubject<SoleDepreciationMethod> = new ReplaySubject<SoleDepreciationMethod>(1);\n url = 'sole-depreciation-methods';\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any,\n private eventDispatcherService: EventDispatcherService,\n private toastService: ToastService\n ) {\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenSoleDetailsChanges();\n }\n\n get(): Observable<SoleDepreciationMethod> {\n if (!this.cache) {\n this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: object): SoleDepreciationMethod => plainToClass(SoleDepreciationMethod, response['hydra:member'][0]))\n )\n .subscribe((soleDepreciationMethod: SoleDepreciationMethod): SoleDepreciationMethod => {\n this.cache = soleDepreciationMethod;\n this.cacheSubject.next(this.cache);\n\n return soleDepreciationMethod;\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n update(soleDepreciationMethod: SoleDepreciationMethod): Observable<SoleDepreciationMethod> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${soleDepreciationMethod.id}`, soleDepreciationMethod)\n .pipe(\n map((soleDepreciationMethodBase: SoleDepreciationMethodBase): SoleDepreciationMethod => {\n const method: SoleDepreciationMethod = plainToClass(SoleDepreciationMethod, soleDepreciationMethodBase);\n\n this.cache = method;\n this.cacheSubject.next(this.cache);\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_DEPRECIATION_METHOD_UPDATED, method));\n\n return this.cache;\n }),\n catchError((error: HttpErrorResponse) => {\n this.toastService.error(error.error['hydra:description']);\n\n return observableThrowError(error);\n })\n );\n }\n\n private listenSoleDetailsChanges(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.SOLE_DETAILS_CREATED, AppEventTypeEnum.SOLE_DETAILS_UPDATED])\n .subscribe(() => {\n this.cache = null;\n this.get().subscribe();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { SoleDetails } from '../../../../models';\nimport { SoleDetails as SoleDetailsBase } from '../../../../db/Models/sole/sole-details';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { EventDispatcherService } from '../../../event';\nimport { AppEvent, AppEventTypeEnum } from '../../../../models';\n\n/**\n * @TODO TT-1777 Alex: extend from rest service when it refactored\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleDetailsService {\n cache: SoleDetails;\n cacheSubject: ReplaySubject<SoleDetails> = new ReplaySubject<SoleDetails>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') protected environment: any,\n private eventDispatcherService: EventDispatcherService\n ) {\n }\n\n get(): Observable<SoleDetails> {\n if (!this.cache) {\n this.http.get(`${this.environment.apiV2}/sole-details`)\n .pipe(\n map((response: object): SoleDetails => plainToClass(SoleDetails, response['hydra:member'][0]))\n )\n .subscribe((soleDetails: SoleDetails): SoleDetails => {\n // undefined when user not created sole details\n if (!soleDetails) {\n soleDetails = plainToClass(SoleDetails, {});\n }\n\n this.cache = soleDetails;\n this.cacheSubject.next(this.cache);\n\n return soleDetails;\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n add(soleDetails: SoleDetails): Observable<SoleDetails> {\n return this.http.post(`${this.environment.apiV2}/sole-details`, soleDetails).pipe(\n map((soleDetailsBase: SoleDetailsBase): SoleDetails => {\n this.cache = plainToClass(SoleDetails, soleDetailsBase);\n this.cacheSubject.next(this.cache);\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_DETAILS_CREATED, soleDetails));\n\n return this.cache;\n })\n );\n }\n\n update(soleDetails: SoleDetails): Observable<SoleDetails> {\n return this.http.put(`${this.environment.apiV2}/sole-details/${soleDetails.id}`, soleDetails).pipe(\n map((soleDetailsBase: SoleDetailsBase): SoleDetails => {\n this.cache = plainToClass(SoleDetails, soleDetailsBase);\n this.cacheSubject.next(this.cache);\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_DETAILS_UPDATED, soleDetails));\n\n return this.cache;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleInvoice as SoleInvoiceBase } from '../../../../db/Models/sole/sole-invoice';\nimport { SoleInvoice } from '../../../../models';\nimport { SoleInvoiceStatusesEnum } from '../../../../db/Enums/sole-invoice-statuses.enum';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport last from 'lodash/last';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport { UserRolesEnum } from '../../../../db/Enums/user-roles.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleInvoiceService extends RestService<SoleInvoiceBase, SoleInvoice> implements IEventListener {\n modelClass: typeof SoleInvoice = SoleInvoice;\n url = 'sole-invoices';\n isHydra = true;\n roles = [UserRolesEnum.SOLE_TANK];\n\n listenEvents(): void {\n this.listenAllocations();\n }\n\n add(invoice: SoleInvoice): Observable<SoleInvoice> {\n return super.add(invoice).pipe(\n map((newInvoice) => {\n // invoice published right away skipping draft status\n if (newInvoice.isPending()) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_INVOICE_PUBLISHED, newInvoice));\n }\n\n return newInvoice;\n })\n )\n }\n\n update(invoice: SoleInvoice): Observable<SoleInvoice> {\n return super.update(invoice).pipe(\n map((updatedInvoice) => {\n if (!updatedInvoice.isDraft()) {\n // @TODO vik use different event to reload transactions\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_INVOICE_PUBLISHED, updatedInvoice));\n }\n\n return updatedInvoice;\n })\n )\n }\n\n updateStatus(invoice: SoleInvoice, status: SoleInvoiceStatusesEnum): Observable<SoleInvoice> {\n // @TODO use id only to avoid unexpected changes\n return this.update(Object.assign({}, invoice, {status})).pipe(\n map((updatedInvoice: SoleInvoice) => {\n if (updatedInvoice.isPending()) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SOLE_INVOICE_PUBLISHED, updatedInvoice));\n }\n\n return updatedInvoice;\n })\n );\n }\n\n send(invoice: SoleInvoice, file: File) {\n const formData: FormData = new FormData();\n formData.append('file', file);\n\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invoice.id}/send`, formData);\n }\n\n /**\n * @TODO use backend\n * Return the next number from the last invoice.\n * Basically needed to create a new invoice to show its number when the invoice has not yet been sent to the backend\n */\n getNewInvoiceNumber(): number {\n if (!this.cache) {\n return 0;\n }\n\n const number = last(this.cache)?.number ?? 0;\n return number + 1;\n }\n\n private listenAllocations() {\n this.eventDispatcherService.on([\n AppEventTypeEnum.TRANSACTION_ALLOCATION_CREATED,\n AppEventTypeEnum.TRANSACTION_ALLOCATION_DELETED\n ]).subscribe(() => {\n this.refreshCache();\n })\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { SoleInvoiceTemplate as SoleInvoiceTemplateBase } from '../../../../db/Models/sole/sole-invoice-template';\nimport { SoleInvoiceTemplate } from '../../../../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SoleInvoiceTemplateService extends RestService<SoleInvoiceTemplateBase, SoleInvoiceTemplate>{\n modelClass: typeof SoleInvoiceTemplate = SoleInvoiceTemplate;\n url = 'sole-invoice-templates';\n isHydra = true;\n}\n","import {Injectable} from '@angular/core';\nimport {RestService} from '../../rest/rest-old.service';\nimport {BasReport as BasReportBase} from '../../../../db/Models/sole/bas-report';\nimport {BasReport} from '../../../../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BasReportService extends RestService<BasReportBase, BasReport>{\n modelClass: typeof BasReport = BasReport;\n url = 'bas-reports';\n isHydra = true;\n}\n","import { Injectable } from '@angular/core';\nimport {Collection} from '../../../../collections';\nimport {RestMethod, RestService} from '../../rest';\nimport {ServicePayment} from '../../../../models/service-subscription/service-payment';\nimport {ServicePayment as ServicePaymentBase} from '../../../../db/Models';\nimport {Observable, of} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicePaymentService extends RestService<ServicePaymentBase, ServicePayment, Collection<ServicePayment>>{\n isApiPlatform = true;\n endpointUri = 'service-payments';\n modelClass: typeof ServicePayment = ServicePayment;\n collectionClass: typeof Collection = Collection;\n disabledMethods: RestMethod[] = ['post', 'put', 'putBatch', 'delete', 'deleteBatch'];\n\n /**\n * Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link\n */\n getInvoiceUrl(payment: ServicePayment): Observable<string> {\n if (!payment.isInvoiceLinkExpired()) {\n return of(payment.receipt);\n }\n\n return this.http.get(`${this.environment.apiV2}/service-payments/${payment.id}/invoice-url`) as Observable<string>;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { RestService } from '../../rest';\nimport { ServicePaymentMethod as ServicePaymentMethodBase } from '../../../../db/Models/subscription/service-payment-method';\nimport { ServicePaymentMethod } from '../../../../models';\nimport { Collection } from '../../../../collections';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { EventDispatcherService, SseService } from '../../../event';\nimport { HttpClient } from '@angular/common/http';\nimport { plainToClass } from 'class-transformer';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicePaymentMethodService extends RestService<ServicePaymentMethodBase, ServicePaymentMethod, Collection<ServicePaymentMethod>> {\n protected endpointUri = 'service-payment-methods';\n collectionClass: typeof Collection = Collection;\n modelClass: typeof ServicePaymentMethod = ServicePaymentMethod;\n isApiPlatform = true;\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n super(http, eventDispatcherService, environment);\n this.listenPaymentMethods();\n }\n\n /**\n * Get Stripe client secret required for Payment form initialization\n */\n getSecret(): Observable<string> {\n return this.http.get(`${this.apiUrl}/setup-intent-secret`)\n .pipe(\n map((response) => response as string)\n );\n }\n\n setAsDefault(paymentMethod: ServicePaymentMethod): Observable<ServicePaymentMethod> {\n return this.http.put(`${this.apiUrl}/${paymentMethod.id}/default`, {})\n .pipe(\n map((updatedPaymentMethod: ServicePaymentMethodBase) => plainToClass(ServicePaymentMethod, updatedPaymentMethod))\n );\n }\n\n listenPaymentMethods(): void {\n this.sseService.on('servicePaymentMethods').subscribe((newPaymentMethod: ServicePaymentMethodBase) => {\n const paymentMethodFromCache: ServicePaymentMethod = this.cache.findBy('id', newPaymentMethod.id);\n\n // backend send empty object when payment method deleted\n if (!newPaymentMethod.id) {\n return;\n }\n\n // replace cache item in cache when exist\n if (paymentMethodFromCache) {\n this.handleResponse([plainToClass(ServicePaymentMethod, newPaymentMethod)], 'put');\n\n return;\n }\n\n // add a new payment method to cache\n this.handleResponse([plainToClass(ServicePaymentMethod, newPaymentMethod)], 'post');\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ServicePrice as ServicePriceBase } from '../../../../db/Models';\nimport { ServicePrice } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { ServicePriceCollection } from '../../../../collections';\n\n/**\n * Service that handling banks logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicePriceService extends RestService<ServicePriceBase, ServicePrice, ServicePriceCollection> {\n protected endpointUri = 'service-prices';\n modelClass: typeof ServicePrice = ServicePrice;\n isApiPlatform = true;\n collectionClass: typeof ServicePriceCollection = ServicePriceCollection;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n}\n","export enum SubscriptionMessagesEnum {\n PROMOCODE_ERROR = 'This promo code can’t be applied to your subscription. Please contact support.',\n SUCCEEDED = 'Success! Payment received.',\n SUCCEEDED_FREE = `Success! We'll update you soon.`,\n PROCESSING = `Payment processing. We'll update you when payment is received.`,\n REQUIRES_PAYMENT_METHOD = 'Payment failed. Please try another payment method.',\n ERROR = 'Something went wrong.'\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { classToPlain, plainToClass } from 'class-transformer';\nimport { EventDispatcherService, SseService } from '../../../event';\nimport { AppEvent, AppEventTypeEnum, ServicePromoCode, ServiceSubscription } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { ServiceSubscription as ServiceSubscriptionBase } from '../../../../db/Models';\nimport { ServiceSubscriptionCollection } from '../../../../collections';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { SubscriptionMessagesEnum } from './subscription-messages.enum';\n\n/**\n * @TODO Alex refactor\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SubscriptionService extends RestService<ServiceSubscriptionBase, ServiceSubscription, ServiceSubscriptionCollection> {\n isApiPlatform = true;\n endpointUri = 'service-subscriptions';\n modelClass: typeof ServiceSubscription = ServiceSubscription;\n collectionClass: typeof ServiceSubscriptionCollection = ServiceSubscriptionCollection;\n disabledMethods: RestMethod[] = ['putBatch', 'delete', 'deleteBatch'];\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n super(http, eventDispatcherService, environment);\n\n this.listenSubscriptions();\n }\n\n startTrial(subscription: ServiceSubscription): Observable<ServiceSubscription> {\n return this.http.post(`${this.apiUrl}/trial`, subscription)\n .pipe(\n map((response: ServiceSubscriptionBase) => {\n const newSubscription: ServiceSubscription = plainToClass(ServiceSubscription, response);\n\n this.handleResponse([newSubscription], 'post');\n\n return newSubscription;\n })\n );\n }\n\n postStripeSubscription(subscription: ServiceSubscription): Observable<string | void> {\n return this.http.post(this.apiUrl, classToPlain(subscription))\n .pipe(\n map((response: string) => response),\n catchError((error: HttpErrorResponse) => {\n this.toastService.error(SubscriptionMessagesEnum.PROMOCODE_ERROR);\n\n return observableThrowError(error);\n })\n );\n }\n\n getActive(): Observable<ServiceSubscriptionCollection> {\n return this.get().pipe(map((subscriptions) => subscriptions.getActive()));\n }\n\n getTrials(): Observable<ServiceSubscriptionCollection> {\n return this.get().pipe(map((subscriptions) => subscriptions.getTrials()));\n }\n\n getActiveTrials(): Observable<ServiceSubscriptionCollection> {\n return this.getActive().pipe(map((subscriptions) => subscriptions.getTrials()));\n }\n\n /**\n * Get difference between current subscription and selected new subscription\n */\n getProrationCost(subscription: ServiceSubscription): Observable<number> {\n return this.http.put(`${this.environment.apiV2}/service-subscriptions/${subscription.id}/proration-cost`, subscription).pipe(\n map((prorationCost: number) => prorationCost)\n );\n }\n\n /**\n * @TODO it's not a change, it's request to change\n * Change subscription plan\n */\n changeSubscription(subscription: ServiceSubscription): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/service-subscriptions/${subscription.id}`, subscription);\n }\n\n cancel(subscription: ServiceSubscription): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/service-subscriptions/${subscription.id}/cancel`, {});\n }\n\n renew(subscription: ServiceSubscription): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/service-subscriptions/${subscription.id}/renewal`, {});\n }\n\n getCoupon(code: string): Observable<any> {\n return this.http.get(`${this.environment.apiV2}/service-promo-codes`, {\n params: { code }\n }).pipe(map((response: object) => plainToClass(ServicePromoCode, response))\n );\n }\n\n private listenSubscriptions(): void {\n this.sseService.on(`serviceSubscriptions`)\n .subscribe((serviceSubscription: ServiceSubscriptionBase): void => {\n const subscription: ServiceSubscription = plainToClass(ServiceSubscription, serviceSubscription);\n // update existing message if read and add new message if not read\n if (this.cache.findBy('id', subscription.id)) {\n this.handleResponse([subscription], 'put');\n } else {\n this.handleResponse([subscription], 'post');\n }\n\n // @TODO vik test and remove\n setTimeout(() => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED, null));\n this.toastService.success('Subscription successfully updated!!!');\n }, 2000);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestMethod, RestService } from '../../rest';\nimport { ServiceProduct as ServiceProductBase } from '../../../../db/Models';\nimport { ServiceProduct } from '../../../../models';\nimport { ServiceProductCollection } from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ServiceProductService extends RestService<ServiceProductBase, ServiceProduct, ServiceProductCollection>{\n collectionClass: typeof ServiceProductCollection = ServiceProductCollection;\n modelClass: typeof ServiceProduct = ServiceProduct;\n protected endpointUri = 'service-products';\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n isApiPlatform = true;\n}\n","export enum TaxReviewStatusEnum {\n NEW = 0,\n IN_PROGRESS = 1,\n WAITING_FOR_CLIENT = 2,\n WAITING_FOR_APPROVAL = 3,\n APPROVED = 4,\n SENT = 5,\n COMPLETED = 6,\n AMEND = 7,\n CANCELLED = 8\n}\n","import { TaxReview as TaxReviewBase } from '../../db/Models/firm/accountant/tax-review';\nimport { TaxReviewStatusEnum } from '../../db/Enums/tax-review-status.enum';\nimport { User } from '../user/user';\nimport { Type } from 'class-transformer';\n\nexport class TaxReview extends TaxReviewBase {\n @Type(() => User)\n client: User;\n\n @Type(() => User)\n employee: User;\n status: TaxReviewStatusEnum;\n\n /**\n * if tax review status is 'Cancelled'\n */\n isCancelled(): boolean {\n return this.status === TaxReviewStatusEnum.CANCELLED;\n }\n\n /**\n * if tax review status is 'New'\n */\n isNew(): boolean {\n return this.status === TaxReviewStatusEnum.NEW;\n }\n\n /**\n * if tax review status is 'In progress'\n */\n isInProgress(): boolean {\n return this.status === TaxReviewStatusEnum.IN_PROGRESS;\n }\n\n /**\n * if tax review status is 'Waiting for client'\n */\n isWaitingForClient(): boolean {\n return this.status === TaxReviewStatusEnum.WAITING_FOR_CLIENT;\n }\n\n /**\n * if tax review status is 'Waiting for approval'\n */\n isWaitingForApproval(): boolean {\n return this.status === TaxReviewStatusEnum.WAITING_FOR_APPROVAL;\n }\n\n /**\n * if tax review status is 'Approved'\n */\n isApproved(): boolean {\n return this.status === TaxReviewStatusEnum.APPROVED;\n }\n\n /**\n * if tax review status is 'Completed'\n */\n isCompleted(): boolean {\n return this.status === TaxReviewStatusEnum.COMPLETED;\n }\n\n /**\n * if tax review status is 'Sent'\n */\n isSent(): boolean {\n return this.status === TaxReviewStatusEnum.SENT;\n }\n\n /**\n * if tax review status is 'Amend'\n */\n isAmend(): boolean {\n return this.status === TaxReviewStatusEnum.AMEND;\n }\n\n /**\n * If tax review is inactive\n */\n isInactive(): boolean {\n return this.isCancelled() || this.isCompleted();\n }\n\n /**\n * If tax review is active\n */\n isActive(): boolean {\n return this.isNew() ||\n this.isInProgress() ||\n this.isWaitingForClient() ||\n this.isWaitingForApproval() ||\n this.isApproved() ||\n this.isSent() ||\n this.isAmend();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaxReview as TaxReviewBase } from '../../../../db/Models/firm/accountant/tax-review';\nimport { RestService } from '../../rest/rest-old.service';\nimport { TaxReview } from '../../../../models/tax-review/tax-review';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport _ from 'lodash';\n\n/**\n * Service to work with tax review history\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxReviewHistoryService extends RestService<TaxReviewBase, TaxReview> implements IEventListener {\n url = 'tax-reviews/history';\n modelClass: typeof TaxReview = TaxReview;\n\n listenEvents(): void {\n this.listenTaxReviewUpdate();\n }\n\n /**\n * Update tax review history cache when single tax review updated.\n */\n private listenTaxReviewUpdate(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.TAX_REVIEW_UPDATED).subscribe((taxReview: TaxReview): void => {\n const tempCache: TaxReview[] = _.cloneDeep(this.cache);\n // insert element at the beginning of the array\n tempCache.unshift(taxReview);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaxReview as TaxReviewBase } from '../../../db/Models/firm/accountant/tax-review';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport _ from 'lodash';\nimport { replace } from '../../../functions/array';\nimport { RestService } from '../rest/rest-old.service';\nimport { plainToClass } from 'class-transformer';\nimport { TaxReview } from '../../../models/tax-review/tax-review';\nimport { AppEvent, AppEventTypeEnum, Notification, User } from '../../../models';\nimport { IEventListener } from '../../../interfaces';\nimport { UserEventTypeTypeEnum } from '../../../db/Enums/user-event-type-type.enum';\n\n/**\n * Service to work with tax review\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxReviewService extends RestService<TaxReviewBase, TaxReview> implements IEventListener {\n url = 'tax-reviews';\n modelClass: typeof TaxReview = TaxReview;\n\n /**\n * Listen events from SSE and Event Dispatcher services\n */\n listenEvents(): void {\n this.listenFirmChanges();\n this.listenClientTransfer();\n this.listenNotifications();\n }\n\n /**\n * Add new Tax Review (request from client to firm)\n * @param finYear\n */\n request(finYear: number): Observable<TaxReview> {\n return this.http.post(`${this.environment.apiV2}/${this.url}?financialYear=${finYear}`, {})\n .pipe(\n map((newTaxReview: TaxReviewBase): TaxReview => {\n const taxReview: TaxReview = plainToClass(TaxReview, newTaxReview);\n const tempCache: TaxReview[] = _.cloneDeep(this.cache);\n tempCache.push(taxReview);\n this.cache = tempCache;\n this.updateCache();\n return taxReview;\n })\n );\n }\n\n /**\n * Update tax review\n * @param taxReview to be updated\n */\n update(taxReview: TaxReview): Observable<TaxReview> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${taxReview.id}`, taxReview)\n .pipe(\n map((updatedTaxReview: TaxReviewBase) => {\n const updatedInstance: TaxReview = plainToClass(TaxReview, updatedTaxReview);\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.TAX_REVIEW_UPDATED, updatedInstance));\n\n const tempCache: TaxReview[] = _.cloneDeep(this.cache);\n replace(tempCache, updatedInstance);\n this.cache = tempCache;\n this.updateCache();\n\n return updatedInstance;\n })\n );\n }\n\n /**\n * Clear cache when user reject firm\n */\n private listenFirmChanges(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.CLIENT_MOVEMENT_CLOSED, AppEventTypeEnum.CLIENT_INVITE_ACCEPTED])\n .subscribe((): void => {\n this.refreshCache();\n });\n }\n\n /**\n * Update firm for all transferred clients\n * @private\n */\n private listenClientTransfer(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.CLIENT_TRANSFER_TO_OTHER_EMPLOYEE)\n .subscribe((transferredClients: User[]): void => {\n const tempCache: TaxReview[] = _.cloneDeep(this.cache);\n\n transferredClients.forEach((transferredClient: User): void => {\n const taxReviewIndex: number = tempCache.findIndex((taxReview: TaxReview): boolean => taxReview.id === transferredClient.id);\n // @TODO vik\n // tempCache[taxReviewIndex].employee = transferredClient.accountant;\n });\n\n this.cache = tempCache;\n this.updateCache();\n });\n }\n\n private listenNotifications(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification: Notification) => {\n if (!notification.isRead && notification.eventType === UserEventTypeTypeEnum.FIRM_INVITE_ACCEPTED) {\n this.refreshCache();\n }\n });\n }\n}\n","export enum TaxReviewMessagesEnum {\n CONFIRM_CREATE = 'My TaxTank is up to date, please review and start my tax return.',\n CREATED = 'Tax review requested',\n CONFIRM_AMEND = 'Are you sure you want to amend your tax review?',\n AMENDED = 'Tax review amended',\n CONFIRM_RESPOND = 'Please lodge, I\\'ve signed my return electronically',\n CONFIRM_CANCEL = 'I’m not ready for my review and need to cancel',\n CONFIRM_COMPLETED = 'Please amend my return, I\\'ve added the additional information required',\n CONFIRM_WAITING_CLIENT = 'I\\'ve added the required information and ready to continue.',\n RESPONDED = 'Tax review responded',\n CONFIRM_DELETE = 'Please cancel the amendment, I\\'m not ready to continue',\n DELETED = 'Tax review deleted',\n CONFIRM_CLOSE_FY_TOP_TITLE = 'What does this action do?',\n CONFIRM_CLOSE_FY_TOP_DESCRIPTION = 'Closing the prior year will update the opening balances for capital losses, business losses and forecasts in the current year',\n CONFIRM_CLOSE_FY_BOTTOM_TITLE = 'When should you close?',\n CONFIRM_CLOSE_FY_BOTTOM_DESCRIPTION = 'You should close the prior year when your 22-23 return is complete to ensure all carry forward balances are correct.',\n REQUEST_REVIEW_TOOLTIP = 'Are you ready for your tax return to be prepared? Notify your accountant that you\\'re good to go. Then simply watch this space to monitor the status as your accountant progresses from start to finish for a hassle-free tax time!'\n}\n","import { TaxReturnCategorySectionEnum } from '../../db/Enums/tax-return/tax-return-category-section.enum';\nimport {AbstractModel} from '../../db/Models/abstract-model';\n\n/**\n * Used in tax summary reports to show specific details relating to an amount in the report.\n * See structure in ReportItem class.\n * Example an amount of $550 for property income could be comprised of 2 different property amounts of $300 and $250.\n * This is useful in providing drill-down information for the tax summary report.\n */\nexport class ReportItemDetails extends AbstractModel {\n amount: number;\n name: string;\n type: number;\n section: TaxReturnCategorySectionEnum;\n}\n","import { TaxReturnCategory } from '../../db/Models/tax-return/tax-return-category';\nimport { ReportItemDetails } from './report-item-details';\nimport { Transform, Type } from 'class-transformer';\nimport { ReportItemCollection } from '../../collections/tax-summary/report-item.collection';\nimport { AbstractModel } from '../../db/Models/abstract-model';\nimport { Collection } from '../../collections/collection';\n\n/**\n * @Todo no base model - should be generated on backend side\n * Used in tax summary reports to show amounts relating to a tax return category entity and details of what this\n * amount is comprised of. Example here shows an amount of $951.96 and also details of what this amount is comprised of:\n */\nexport class ReportItem extends AbstractModel {\n amount: number;\n taxReturnCategory: TaxReturnCategory;\n title: string;\n\n @Type(() => ReportItem)\n @Transform(({value}) => new ReportItemCollection(value))\n items: ReportItemCollection;\n\n /**\n * @Todo Alex: We need to apply this everywhere - transform an array into a collection,\n * but at the moment we can't do this due to inheritance from the base model.\n * Potential solution: Inherit Collection from Array\n */\n @Type(() => ReportItemDetails)\n @Transform(({value}) => new Collection<ReportItemDetails>(value))\n details: Collection<ReportItemDetails>;\n\n /**\n * Get amount for one income source\n * @param name Name of income source for filter\n */\n getAmountByIncomeSourceName(name: string): number {\n return this.details.find((detail: ReportItemDetails): boolean => detail.name === name)?.amount || 0;\n }\n}\n","import { TaxSummarySectionEnum } from '../../db/Enums/tax-summary-section.enum';\nimport { ReportItem } from './report-item';\nimport { ReportItemCollection } from '../../collections/tax-summary/report-item.collection';\nimport { Transform, Type } from 'class-transformer';\n\n/**\n * Base class for each sections of Tax Summary report, contains common properties/methods\n * See also TaxSummary model\n */\nexport class TaxSummarySection {\n section: TaxSummarySectionEnum;\n netAmount: number;\n\n @Type(() => ReportItem)\n @Transform(({value}) => new ReportItemCollection(value))\n items: ReportItemCollection;\n\n // id that will be added as HTML Id\n @Transform(({obj}) => {\n switch (obj.section) {\n case TaxSummarySectionEnum.WORK_TANK:\n return 'taxSummaryWorkTank';\n case TaxSummarySectionEnum.PROPERTY_TANK:\n return 'taxSummaryPropertyTank';\n case TaxSummarySectionEnum.OTHER_TANK:\n return 'taxSummaryOtherIncome';\n case TaxSummarySectionEnum.SOLE_TANK:\n return 'taxSummarySoleTank';\n default:\n return 'taxSummaryTotal';\n }\n })\n id?: string;\n}\n","import { TaxSummarySection } from './tax-summary-section';\nimport { Type } from 'class-transformer';\nimport { ReportItemCollection, TAX_RETURN_CATEGORIES } from '../../collections';\nimport { TaxReturnCategoryListEnum } from '../../db/Enums';\nimport { TaxSummarySectionEnum } from '../../db/Enums/tax-summary-section.enum';\nimport { SoleBusiness } from '../sole';\n\n/**\n * @Todo refactor with base model when it will be provided\n * Tax summary report structure\n */\nexport class TaxSummary {\n @Type(() => TaxSummarySection)\n work: TaxSummarySection;\n\n @Type(() => TaxSummarySection)\n property: TaxSummarySection;\n\n @Type(() => TaxSummarySection)\n other: TaxSummarySection;\n\n @Type(() => TaxSummarySection)\n sole: TaxSummarySection;\n\n @Type(() => TaxSummarySection)\n summary: TaxSummarySection;\n\n projectedTaxPosition: number;\n\n get sections(): TaxSummarySection[] {\n return [this.work, this.property, this.other, this.sole, this.summary];\n }\n\n getReportItems(sections: TaxSummarySection[]): ReportItemCollection {\n return new ReportItemCollection([].concat(...sections.map((section) => section.items.toArray())));\n }\n\n get taxPercent(): number {\n // Check if netAmount is not 0 to avoid division by zero\n if (!this.summary.netAmount) {\n return 0;\n }\n\n return this.summary.items.findByCategory(TaxReturnCategoryListEnum.GROSS_TAX_PAYABLE).amount / this.summary.netAmount;\n }\n\n /**\n * Work Net Cash = Income - tax withheld - expenses - interest\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get workNetCash(): number {\n const taxWithheld: number = this.summary.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.work.taxWithheld, TaxSummarySectionEnum.WORK_TANK);\n\n return this.workNetTotal - Math.abs(taxWithheld);\n }\n\n get income(): number {\n return this.getReportItems([this.work, this.property, this.sole, this.other]).sumByCategories([\n ...TAX_RETURN_CATEGORIES.work.income,\n ...TAX_RETURN_CATEGORIES.property.income,\n ...TAX_RETURN_CATEGORIES.sole.income,\n ...TAX_RETURN_CATEGORIES.other.income,\n ]);\n }\n\n get expense(): number {\n return this.getReportItems([this.work, this.property, this.sole, this.other]).sumByCategories([\n ...TAX_RETURN_CATEGORIES.work.expenses,\n ...TAX_RETURN_CATEGORIES.property.expenses,\n ...TAX_RETURN_CATEGORIES.sole.expenses,\n ...TAX_RETURN_CATEGORIES.other.expenses,\n ]);\n }\n\n get netCash(): number {\n return this.workNetCash + this.propertyNetCash + this.soleNetCash + this.otherNetCash;\n }\n\n get netTotal(): number {\n return this.workNetTotal + this.propertyNetTotal + this.soleNetTotal + this.otherNetTotal;\n }\n\n /**\n * Work Net Total = Income - expenses - interest\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get workNetTotal(): number {\n const income: number = this.work.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.work.income, TaxSummarySectionEnum.WORK_TANK);\n const expenses: number = this.work.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.work.expenses, TaxSummarySectionEnum.WORK_TANK);\n const interest: number = this.summary.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.work.interest, TaxSummarySectionEnum.WORK_TANK);\n\n return income - Math.abs(expenses) - Math.abs(interest);\n }\n\n /**\n * Property Net Cash (Cash Position) = Rental Income - expenses - interest\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get propertyNetCash(): number {\n const income: number = this.property.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.property.income, TaxSummarySectionEnum.PROPERTY_TANK);\n const expenses: number = this.property.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.property.expenses, TaxSummarySectionEnum.PROPERTY_TANK);\n const interest: number = this.property.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.property.interest, TaxSummarySectionEnum.PROPERTY_TANK);\n\n return income - Math.abs(expenses) - Math.abs(interest);\n }\n\n /**\n * Property Net Total (Tax Position) = Rental Income - expenses - interest - depreciation\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get propertyNetTotal(): number {\n const depreciation: number = this.property.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.property.depreciation, TaxSummarySectionEnum.PROPERTY_TANK);\n\n return this.propertyNetCash - Math.abs(depreciation);\n }\n\n /**\n * Other Net Cash = gross income – expenses – tax withheld - tax instalments\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get otherNetCash(): number {\n const income: number = this.other.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.income, TaxSummarySectionEnum.OTHER_TANK);\n const expenses: number = this.other.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.expenses, TaxSummarySectionEnum.OTHER_TANK);\n const taxWithheld: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_WITHHELD], TaxSummarySectionEnum.OTHER_TANK);\n const taxInstalments: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_INSTALMENTS], TaxSummarySectionEnum.OTHER_TANK);\n\n return income - Math.abs(expenses) - Math.abs(taxWithheld) - Math.abs(taxInstalments);\n }\n\n /**\n * Other Net Total = Gross income - expenses + tax offsets + tax instalments + franking credits\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get otherNetTotal(): number {\n const income: number = this.other.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.income, TaxSummarySectionEnum.OTHER_TANK);\n const expenses: number = this.other.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.expenses, TaxSummarySectionEnum.OTHER_TANK);\n const taxOffsets: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_OFFSETS], TaxSummarySectionEnum.SUMMARY);\n const taxInstallments: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_INSTALMENTS], TaxSummarySectionEnum.OTHER_TANK);\n const frankingCredits: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.FRANKING_CREDITS], TaxSummarySectionEnum.OTHER_TANK);\n\n return income - Math.abs(expenses) + Math.abs(taxOffsets) + Math.abs(taxInstallments) + Math.abs(frankingCredits);\n }\n\n /**\n * Sole Net Cash = gross income – expenses\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get soleNetCash(): number {\n const depreciation: number = this.sole.items.sumByCategories(TAX_RETURN_CATEGORIES.sole.depreciation);\n const loss: number = this.sole.items.sumByCategories(TAX_RETURN_CATEGORIES.sole.loss);\n const lossCurrent: number = this.sole.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.sole.lossCurrent, TaxSummarySectionEnum.SOLE_TANK);\n\n return this.soleNetTotal - depreciation - loss + lossCurrent;\n }\n\n /**\n * Sole Net Total = Gross income - expenses\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/217677990/Dashboard+Main\n */\n get soleNetTotal(): number {\n // income + expenses + depreciation + loss\n const profit: number = this.sole.items.sumByCategories([TaxReturnCategoryListEnum.BUSINESS_INCOME_OR_LOSS]);\n const lossCurrent: number = this.sole.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.sole.lossCurrent, TaxSummarySectionEnum.SOLE_TANK);\n\n return profit - lossCurrent;\n }\n\n getDeferredBusinessLoss(business: SoleBusiness): number {\n return this.sole.items\n .findByCategory(TaxReturnCategoryListEnum.DEFERRED_BUSINESS_LOSSES).items\n .findBy('title', `Item 15c - ${business.name}`)?.amount;\n }\n\n getBusinessCloseBalance(business: SoleBusiness): number {\n return this.sole.items\n .findByCategory(TaxReturnCategoryListEnum.BUSINESS_INCOME_OR_LOSS).items\n .findBy('title', `Item 15c - ${business.name}`)?.amount;\n }\n}\n","/**\n * Enum for tax summary types\n */\nexport enum TaxSummaryTypeEnum {\n ACTUALS = 'actuals',\n FORECASTS = 'forecasts'\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { plainToClass } from 'class-transformer';\nimport { TaxSummary } from '../../../models/tax-summary/tax-summary';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { TaxSummaryTypeEnum } from '../../../models/tax-summary/tax-summary-type.enum';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service to work with tax summary logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxSummaryService implements IEventListener {\n taxSummaryActualsSubject: ReplaySubject<TaxSummary> = new ReplaySubject<TaxSummary>(1);\n taxSummaryForecastsSubject: ReplaySubject<TaxSummary> = new ReplaySubject<TaxSummary>(1);\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any\n ) {\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenToIncomeSourceForecastsEvents();\n }\n\n /**\n * Get actual tax summary items\n */\n getActuals(): Observable<TaxSummary> {\n this.http.get(`${this.environment.apiV2}/tax-summary/${TaxSummaryTypeEnum.ACTUALS}`, {})\n .subscribe((response: object): TaxSummary => {\n const taxSummary: TaxSummary = plainToClass(TaxSummary, response);\n this.taxSummaryActualsSubject.next(taxSummary);\n return taxSummary;\n }\n );\n return this.taxSummaryActualsSubject.asObservable();\n }\n\n /**\n * Get forecast tax summary items\n */\n getForecast(): Observable<TaxSummary> {\n this.http.get(`${this.environment.apiV2}/tax-summary/${TaxSummaryTypeEnum.FORECASTS}`, {})\n .subscribe((response: object): TaxSummary => {\n const taxSummary: TaxSummary = plainToClass(TaxSummary, response);\n this.taxSummaryForecastsSubject.next(taxSummary);\n return taxSummary;\n }\n );\n return this.taxSummaryForecastsSubject.asObservable();\n }\n\n /**\n * Listen to EventDispatcherService events related to Income source forecasts\n */\n private listenToIncomeSourceForecastsEvents(): void {\n this.eventDispatcherService\n .on([AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED])\n .subscribe((): void => {\n this.getForecast().subscribe();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../../rest';\nimport { AllocationRule as AllocationRuleBase } from '../../../../../db/Models/transaction/allocation-rule';\nimport { AllocationRule } from '../../../../../models';\nimport { AllocationRuleCollection } from '../../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AllocationRuleService extends RestService<AllocationRuleBase, AllocationRule, AllocationRuleCollection> {\n protected endpointUri = 'allocation-rules';\n collectionClass: typeof AllocationRuleCollection = AllocationRuleCollection;\n modelClass: typeof AllocationRule = AllocationRule;\n isApiPlatform = true;\n}\n","import { Injectable } from '@angular/core';\nimport { TransactionAllocation as TransactionAllocationBase } from '../../../../db/Models/transaction/transaction-allocation';\nimport { AppEvent, AppEventTypeEnum, Depreciation, Transaction, TransactionAllocation } from '../../../../models';\nimport { RestService } from '../../rest/rest-old.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IEventListener } from '../../../../interfaces';\n\n/**\n * @TODO move to new rest\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TransactionAllocationService extends RestService<TransactionAllocationBase, TransactionAllocation> implements IEventListener {\n // API URL param for transaction allocations\n url = 'transaction-allocations';\n modelClass = TransactionAllocation;\n\n /**\n * Add single transaction allocation\n */\n add(allocation: TransactionAllocation): Observable<TransactionAllocation> {\n return this.addBatch([allocation]).pipe(\n map((newAllocations: TransactionAllocation[]): TransactionAllocation => newAllocations[0])\n );\n }\n\n addBatch(models: TransactionAllocation[], queryParams?: object): Observable<TransactionAllocation[]> {\n return super.addBatch(models, queryParams)\n .pipe(\n map((allocations: TransactionAllocation[]) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.TRANSACTION_ALLOCATION_CREATED, allocations));\n return allocations;\n })\n )\n }\n\n delete(model: TransactionAllocation): Observable<void> {\n return super.delete(model)\n .pipe(\n map(() => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.TRANSACTION_ALLOCATION_DELETED, null));\n })\n )\n }\n\n deleteBatch(models: TransactionAllocation[]): Observable<void> {\n return super.deleteBatch(models)\n .pipe(\n map(() => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.TRANSACTION_ALLOCATION_DELETED, null));\n })\n )\n }\n\n /**\n * get list of transactions allocations related with passed bank transactions list\n */\n getByTransactions(transactions: Transaction[]): Observable<TransactionAllocation[]> {\n const ids: number[] = transactions.map((transaction: Transaction) => transaction.id);\n return this.get()\n .pipe(\n map((transactionAllocations: TransactionAllocation[]) => transactionAllocations.filter((allocation: TransactionAllocation) => ids.includes(allocation.transaction.id)))\n );\n }\n\n listenEvents(): void {\n this.onTransactionsCreated();\n this.watchDepreciations();\n this.onTransactionDeleted();\n }\n\n /**\n * Reset cache on transactions created\n */\n private onTransactionsCreated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.TRANSACTIONS_CREATED).subscribe((transactions: Transaction[]): void => {\n // @TODO Alex hack: research and refactor cache update logic, dont reset cache each time transactions changed\n if (transactions[0].isTransfer) {\n return;\n }\n // Update allocations cache to synchronize data and fire subscriptions\n this.refreshCache();\n });\n }\n\n /**\n * Reset cache on depreciation created\n */\n private watchDepreciations(): void {\n // @TODO reset cache only when required (depreciation has transaction with allocations)\n this.eventDispatcherService.on2(...Depreciation.getEventNames('post', 'delete')).subscribe(() => {\n this.refreshCache();\n });\n }\n\n /**\n * Reset cache on transaction deleted\n */\n private onTransactionDeleted(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.TRANSACTION_DELETED).subscribe((): void => {\n // @TODO Alex hack: research and refactor cache update logic, dont reset cache each time transactions changed\n // Update allocations cache to synchronize data and fire subscriptions\n this.refreshCache();\n });\n }\n}\n","import { EventEmitter, Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Transaction as TransactionBase } from '../../../db/Models/transaction/transaction';\nimport { map } from 'rxjs/operators';\nimport { replace, sort } from '../../../functions/array';\nimport { TransactionOperationEnum } from '../../../db/Enums/transaction-operation.enum';\nimport { RestService } from '../rest/rest-old.service';\nimport { AppEvent, AppEventTypeEnum, Depreciation, Transaction } from '../../../models';\nimport _ from 'lodash';\nimport { PropertyCategoryListEnum } from '../../../db/Enums/property/property-category-list.enum';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event';\nimport { ToastService } from '../../toast';\nimport { IEventListener } from '../../../interfaces';\nimport { classToPlain } from 'class-transformer';\n/**\n * Service for transactions business logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TransactionService extends RestService<TransactionBase, Transaction> implements IEventListener {\n // url part for Transaction API\n url = 'transactions';\n modelClass = Transaction;\n transactionDeleted: EventEmitter<Transaction> = new EventEmitter<Transaction>();\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any,\n protected toastService: ToastService\n ) {\n super(http, eventDispatcherService, environment, toastService);\n }\n\n /**\n * Listen events from Event Dispatcher services\n */\n listenEvents(): void {\n this.listenDepreciationChange();\n this.listenPropertyShareUpdate();\n this.listenVehicleClaimChanges();\n this.listenPropertyForecastUpdate();\n this.listenInvoicesPublish();\n }\n\n /**\n * get list of all user's TaxTank transactions\n */\n get(): Observable<Transaction[]> {\n return super.get().pipe(\n // assign child transactions (fees) to parent transactions\n map((transactions: Transaction[]): Transaction[] => {\n transactions.forEach((transaction: Transaction): void => {\n transaction.transactions = transactions\n // get list of child transactions\n .filter((t: Transaction): boolean => t.parentTransaction && t.parentTransaction.id === transaction.id);\n });\n sort(transactions, 'date', false);\n return transactions;\n })\n );\n }\n\n /**\n * Add single new transaction\n * @param model New Transaction instance for saving\n */\n add(model: Transaction): Observable<Transaction> {\n // we don't have POST API endpoint for single transaction\n return this.addBatch([model])\n .pipe(\n map((newTransactions: Transaction[]): Transaction => {\n // @TODO alex\n this.eventDispatcherService.dispatch(\n new AppEvent<Transaction>(AppEventTypeEnum.TRANSACTION_CREATED, newTransactions[0])\n );\n\n return newTransactions[0];\n })\n );\n }\n\n /**\n * get transactions related with property\n */\n getByPropertyId(propertyId: number): Observable<Transaction[]> {\n return this.get()\n .pipe(\n map((transactions: Transaction[]): Transaction[] => transactions.filter((transaction: Transaction): boolean => transaction.property?.id === propertyId))\n );\n }\n\n /**\n * get list of transactions with tank type 'Work'\n */\n getWorkTransactions(): Observable<Transaction[]> {\n return this.get()\n .pipe(\n map((transactions: Transaction[]): Transaction[] => transactions.filter((transaction: Transaction): boolean => transaction.isWorkTank()))\n );\n }\n\n /**\n * Get list of property holding costs (transactions related to vacant land property)\n */\n getPropertyHoldingCosts(propertyId: number): Observable<Transaction[]> {\n return super.fetch(`${this.environment.apiV2}/${this.url}?propertyId=${propertyId}&propertyCategoryId=${PropertyCategoryListEnum.VACANT_LAND}`, false);\n }\n\n /**\n * get list of taxable transactions with tank type 'Work'\n */\n getTaxableWorkTransactions(): Observable<Transaction[]> {\n return this.getWorkTransactions()\n .pipe(\n map((transactions: Transaction[]): Transaction[] => transactions.filter((transaction: Transaction): boolean => !!transaction.chartAccounts.taxReturnItem))\n );\n }\n\n /**\n * add multiple transactions\n * @param transactions List of new Transaction instances for saving\n */\n addBatch(transactions: Transaction[]): Observable<Transaction[]> {\n transactions = _.cloneDeep(transactions);\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(transactions))\n .pipe(\n map((response: TransactionBase[]) => {\n const addedTransactions: Transaction[] = response.map((item: TransactionBase) => this.createModelInstance(item));\n\n transactions.forEach((transaction: Transaction, index: number) => {\n // @TODO Viktor: implement API for saving of nested transactions\n // add child transactions if exist\n if (transaction.transactions.length) {\n transaction.transactions.forEach((childTransaction: Transaction) => {\n childTransaction.parentTransaction = this.createModelInstance({ id: addedTransactions[index].id });\n });\n this.addBatch(transaction.transactions).subscribe();\n }\n\n // add transfer transaction to cache\n if (transaction.operation === TransactionOperationEnum.TRANSFER) {\n addedTransactions.push(addedTransactions[0].transfer);\n }\n });\n\n if (this.cache) {\n this.cache.push(...addedTransactions);\n this.updateCache();\n }\n\n this.eventDispatcherService.dispatch(\n new AppEvent<Transaction[]>(AppEventTypeEnum.TRANSACTIONS_CREATED, addedTransactions)\n );\n\n return addedTransactions;\n })\n );\n }\n\n /**\n * update existing transaction\n * @param transaction Transaction instance for updating\n */\n update(transaction: Transaction): Observable<Transaction> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${transaction.id}`, classToPlain(transaction))\n .pipe(\n map((response: TransactionBase) => {\n const updatedTransaction: Transaction = this.createModelInstance(response);\n // @TODO Viktor: implement API for saving of nested transactions\n if (transaction.transactions.length) {\n // add parent transaction to child transactions\n transaction.transactions.forEach((childTransaction: Transaction) => {\n childTransaction.parentTransaction = this.createModelInstance({ id: updatedTransaction.id });\n });\n // separate child transactions by id existing to define add or update action.\n const childTransactionsToUpdate: Transaction[] = transaction.transactions.filter((t: Transaction) => t.id);\n const childTransactionsToAdd: Transaction[] = transaction.transactions.filter((t: Transaction) => !t.id);\n\n // update child transactions\n if (childTransactionsToUpdate.length) {\n this.updateBatch(childTransactionsToUpdate).subscribe();\n }\n\n // add child transactions\n if (childTransactionsToAdd.length) {\n this.addBatch(childTransactionsToAdd).subscribe();\n }\n }\n\n this.replaceInCache(updatedTransaction);\n\n return updatedTransaction;\n })\n );\n }\n\n /**\n * update multiple transactions\n * @param transactions list of transactions for updating\n */\n updateBatch(transactions: Transaction[]): Observable<Transaction[]> {\n return this.http.put(`${this.environment.apiV2}/${this.url}`, classToPlain(transactions))\n .pipe(\n map((response: TransactionBase[]) => {\n const updatedTransactions: Transaction[] = response.map((item: TransactionBase) => this.createModelInstance(item));\n\n updatedTransactions.forEach((updatedTransaction: Transaction) => {\n replace(this.cache, updatedTransaction);\n });\n\n this.updateCache();\n return updatedTransactions;\n })\n );\n }\n\n /**\n * delete transaction and related transactions\n * @param model\n */\n delete(model: Transaction): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/${this.url}/${model.id}`)\n .pipe(\n map((): void => {\n this.cache = this.cache.filter((transaction: Transaction): boolean => {\n // when delete transfer we delete actually 2 transactions\n if (model.isTransfer) {\n const ids: number[] = [model.id];\n\n // get id of related transfer transaction\n if (model.transfer) {\n // just take id if we delete source transaction\n ids.push(model.transfer.id);\n } else {\n // find source transaction id if we delete destination transaction\n ids.push(this.cache.find((t: Transaction): boolean => t.transfer.id === model.id).id);\n }\n\n return !ids.includes(transaction.id);\n }\n\n return transaction.id !== model.id && transaction.parentTransaction?.id !== model.id;\n });\n\n this.eventDispatcherService.dispatch(\n new AppEvent<Transaction>(AppEventTypeEnum.TRANSACTION_DELETED, model)\n );\n\n this.updateCache();\n this.transactionDeleted.emit(model);\n })\n );\n }\n\n /**\n * @TODO Alex wrong place for this logic, move to model\n * calculate gross income amount based on transaction amount and taxes (fees)\n * @param transaction Transaction instance for calculation\n */\n calculateGrossAmount(transaction: Transaction): number {\n let amount: number = transaction.amount || 0;\n\n // gross income amount includes amount of fees for property tank and tax for work tank\n if (transaction.isPropertyTank()) {\n amount += transaction.transactions.reduce((sum: number, item: Transaction) => sum + item.amount, 0);\n } else {\n // @TODO Alex: fix logic after TT-641 ready\n amount += (transaction.tax || 0);\n }\n\n return amount;\n }\n\n /**\n * Listen to EventDispatcherService event related to Depreciation changing\n */\n private listenDepreciationChange(): void {\n // @TODO reset cache only when required (depreciation has transaction)\n this.eventDispatcherService.on2(...Depreciation.getEventNames('post', 'delete')).subscribe(() => {\n this.refreshCache();\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to Property Share changing\n */\n private listenPropertyShareUpdate(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_SHARE_UPDATED).subscribe(() => this.refreshCache());\n }\n\n private listenVehicleClaimChanges(): void {\n this.eventDispatcherService.on([\n AppEventTypeEnum.VEHICLE_CLAIM_CREATED,\n AppEventTypeEnum.VEHICLE_CLAIM_UPDATED,\n AppEventTypeEnum.VEHICLE_CLAIM_DETAILS_UPDATED\n ]).subscribe(() => {\n this.refreshCache();\n })\n }\n\n /**\n * property forecast includes claimPercent which affects property related expenses\n * @TODO Alex move to forecast api instead of property\n */\n private listenPropertyForecastUpdate(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.PROPERTY_UPDATED]).subscribe(() => {\n this.refreshCache();\n });\n }\n\n private replaceInCache(transactionToReplace: Transaction): void {\n replace(this.cache, transactionToReplace);\n this.updateCache();\n }\n\n private listenInvoicesPublish(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.SOLE_INVOICE_PUBLISHED).subscribe(() => {\n this.refreshCache();\n })\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Inject, Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {VideoSource} from './video-source.interface';\nimport {TutorialVideoResponse} from './tutorial-video-response.interface';\n\n// @TODO Artem: implement cache and extend rest?\n@Injectable({\n providedIn: 'root'\n})\nexport class TutorialVideoService {\n static googleUrl = `https://www.googleapis.com/drive/v3/files?fields=*&mimeType='video/mp4'&orderBy=name`;\n static parents = '1uLMLzi8WUy2go9xhfzJEwgFwOM43dukM';\n\n constructor(\n private http: HttpClient,\n @Inject('environment') protected environment: any\n ) {\n }\n\n get(): Observable<VideoSource[]> {\n return this.http.get(`${TutorialVideoService.googleUrl}&q='${TutorialVideoService.parents}'+in+parents&key=${this.environment.googleDriveId}`)\n .pipe(\n map((response: TutorialVideoResponse) => {\n // video has a title like \"1. Title\".\n response.files.forEach((item: VideoSource) => {\n item.name = item.name.split('.', 2 )[1]\n })\n return response.files;\n })\n )\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Vehicle as VehicleBase } from '../../../db/Models/vehicle/vehicle';\nimport { Vehicle } from '../../../models';\nimport { RestService } from '../rest/rest.service';\nimport { Collection } from '../../../collections';\n\n/**\n * Service that allows to work with WorkTank operations\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleService extends RestService<VehicleBase, Vehicle, Collection<Vehicle>> {\n protected endpointUri = 'vehicles';\n collectionClass: typeof Collection<Vehicle> = Collection<Vehicle>;\n modelClass: typeof Vehicle = Vehicle;\n}\n","export enum VehicleMessagesEnum {\n CREATED = 'Vehicle created successfully',\n UPDATED = 'Vehicle updated successfully',\n CONFIRM_DELETE = 'Are you sure you want to delete this vehicle?',\n DELETED = 'Vehicle deleted successfully'\n}\n","import { Injectable } from '@angular/core';\nimport { VehicleClaim as VehicleClaimBase } from '../../../db/Models/vehicle/vehicle-claim';\nimport { VehicleClaim } from '../../../models';\nimport { RestService } from '../rest/rest-old.service';\nimport { AppEventTypeEnum } from '../../../models';\nimport { IEventListener } from '../../../interfaces';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { AppEvent } from '../../../models';\nimport { plainToClass } from 'class-transformer';\nimport { UserRolesEnum } from '../../../db/Enums/user-roles.enum';\nimport { BestVehicleLogbookCollection } from '../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleClaimService extends RestService<VehicleClaimBase, VehicleClaim> implements IEventListener {\n modelClass: typeof VehicleClaim = VehicleClaim;\n url = 'vehicle-claims';\n roles = [UserRolesEnum.WORK_TANK, UserRolesEnum.SOLE_TANK];\n\n listenEvents() {\n this.listenVehicleClaimDetailsChanges();\n }\n\n add(model: VehicleClaim): Observable<VehicleClaim> {\n return super.add(model).pipe(\n map((vehicleClaim: VehicleClaim) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_CREATED, vehicleClaim));\n\n return vehicleClaim;\n })\n );\n }\n\n update(model: VehicleClaim, queryParams: object = {}): Observable<VehicleClaim> {\n return super.update(model, queryParams).pipe(\n map((vehicleClaim: VehicleClaim) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_UPDATED, vehicleClaim));\n\n return vehicleClaim;\n })\n );\n }\n\n /**\n * Details changes may affect vehicle claims:\n * when details method changed, all claims current values become 0\n */\n private listenVehicleClaimDetailsChanges(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_CLAIM_DETAILS_UPDATED)\n .subscribe(() => {\n this.refreshCache();\n })\n }\n\n /**\n * Update workUsage for all vehicle claims if logbook best period changed\n * @TODO Vik: Best period move this and related logic to backend\n */\n private updateWorkUsage(bestLogbooks: BestVehicleLogbookCollection): void {\n // no need to update if cache not exist\n if (!this.cache) {\n return;\n }\n\n // @TODO Vik (TT-2210): need batch endpoint for this update\n // @TODO Alex (TT-2210): fix frontend when endpoint ready\n const batch$: Observable<VehicleClaim>[] = this.cache.map((claim: VehicleClaim) => {\n const claimToUpdate: VehicleClaim = plainToClass(\n VehicleClaim,\n Object.assign({}, claim, {workUsage: bestLogbooks.getWorkUsageByClaim(claim)})\n );\n\n return this.update(claimToUpdate);\n })\n\n combineLatest(batch$).subscribe();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { VehicleClaimDetails as VehicleClaimDetailsBase } from '../../../db/Models/vehicle/vehicle-claim-details';\nimport { VehicleClaimDetails } from '../../../models';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { plainToClass } from 'class-transformer';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * @TODO TT-1777 Alex: extend from rest service when it refactored\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleClaimDetailsService {\n cache: VehicleClaimDetails;\n cacheSubject: ReplaySubject<VehicleClaimDetails> = new ReplaySubject<VehicleClaimDetails>(1);\n url = 'vehicle-claim-details';\n\n constructor(\n @Inject('environment') protected environment: any,\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService\n ) {\n }\n\n get(): Observable<VehicleClaimDetails> {\n if (!this.cache) {\n this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: object): VehicleClaimDetails => plainToClass(VehicleClaimDetails, response['hydra:member'][0], {excludePrefixes: ['@']}))\n )\n .subscribe((vehicleClaimDetails: VehicleClaimDetails) => {\n this.cache = vehicleClaimDetails;\n this.cacheSubject.next(this.cache);\n })\n }\n\n return this.cacheSubject.asObservable();\n }\n\n add(details: VehicleClaimDetails): Observable<VehicleClaimDetails> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, details).pipe(\n map((newDetails: VehicleClaimDetailsBase) => {\n const details: VehicleClaimDetails = plainToClass(VehicleClaimDetails, newDetails);\n\n this.cache = details;\n this.cacheSubject.next(details);\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_DETAILS_CREATED, details))\n\n return details;\n })\n )\n }\n\n update(details: VehicleClaimDetails): Observable<VehicleClaimDetails> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${details.id}`, details).pipe(\n map((updatedDetails: VehicleClaimDetailsBase) => {\n const details: VehicleClaimDetails = plainToClass(VehicleClaimDetails, updatedDetails, {excludePrefixes: ['@']});\n\n this.cache = details;\n this.cacheSubject.next(details);\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_DETAILS_UPDATED, details))\n\n return details;\n })\n )\n }\n\n /**\n * Set vehicle claim details as manual\n * @TODO Vik: Best period move this and related logic to backend\n */\n private updateToManual(): void {\n // no need to update if cache not exist\n if (!this.cache) {\n return;\n }\n\n const vehicleClaimDetails: VehicleClaimDetails = plainToClass(\n VehicleClaimDetails,\n Object.assign({}, this.cache, {isManual: true})\n );\n\n this.update(vehicleClaimDetails).subscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { VehicleLogbook as VehicleLogbookBase } from '../../../../db/Models/vehicle/vehicle-logbook';\nimport { VehicleLogbook } from '../../../../models';\nimport { RestService } from '../../rest/rest.service';\nimport { VehicleLogbookCollection } from '../../../../collections';\n\n/**\n * Vehicle logbook service. Allows user to add, update or delete vehicle trips\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleLogbookService extends RestService<VehicleLogbookBase, VehicleLogbook, VehicleLogbookCollection> {\n protected endpointUri = 'vehicles/logbooks';\n collectionClass: typeof VehicleLogbookCollection = VehicleLogbookCollection;\n modelClass: typeof VehicleLogbook = VehicleLogbook;\n}\n","export enum VehicleLogbookMessages {\n CREATED = 'Vehicle logbook created successfully',\n UPDATED = 'Vehicle logbook updated successfully',\n CONFIRM_DELETE = 'Are you sure you want to delete this trip?',\n DELETED = 'Vehicle logbook deleted successfully'\n}\n","import { Injectable } from '@angular/core';\nimport { AnnualClientDetails as AnnualClientDetailsBase } from '../../../../db/Models';\nimport { AnnualClientDetails } from '../../../../models';\nimport { RestMethod, RestService } from '../../rest';\nimport { Collection } from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnnualClientDetailsService extends RestService<AnnualClientDetailsBase, AnnualClientDetails, Collection<AnnualClientDetails>> {\n modelClass: typeof AnnualClientDetails = AnnualClientDetails;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'annual-client-details';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch', 'delete'];\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { Occupation } from '../../../../models/user/occupation';\n\n/**\n * Service that works with Occupations\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class OccupationService {\n _occupations: Occupation[];\n occupationsSubject: ReplaySubject<Occupation[]> = new ReplaySubject<Occupation[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) { }\n\n /**\n * Get list of occupations\n */\n getOccupations(): Observable<Occupation[]> {\n if (!this._occupations) {\n this.http.get(`${this.environment.apiV2}/occupations`)\n .pipe(\n map((response: any) => response.map((item: object) => plainToClass(Occupation, item)))\n )\n .subscribe((occupations: Occupation[]) => {\n this._occupations = occupations;\n this.occupationsSubject.next(occupations);\n });\n }\n\n return this.occupationsSubject.asObservable();\n }\n}\n","import { UserEventTypeCategory as UserEventTypeCategoryBase } from '../../db/Models/user/user-event-type-category';\n\nexport class UserEventTypeCategory extends UserEventTypeCategoryBase {\n}\n","export enum UserEventTypeFrequencyEnum {\n\tDAILY = 1,\n\tWEEKLY = 2,\n\tMONTHLY = 3,\n}\n","import { UserEventType as UserEventTypeBase } from '../../db/Models/user/user-event-type';\nimport { UserEventTypeCategory } from './user-event-type-category';\nimport { UserEventSetting } from './user-event-setting';\nimport { Type, plainToClass } from 'class-transformer';\nimport { LoanInterestTypeEnum, LoanInterestTypeLabelEnum } from '../../db/Enums/bank/loan';\nimport { UserEventTypeFrequencyEnum } from '../../db/Enums/user-event-type-frequency.enum';\n\nexport class UserEventType extends UserEventTypeBase {\n @Type(() => UserEventTypeCategory)\n category: UserEventTypeCategory;\n\n toSetting(): UserEventSetting {\n return plainToClass(UserEventSetting, {\n byEmail: this.byEmail,\n byNotification: this.byNotification,\n frequency: this.frequency,\n type: this,\n });\n }\n\n get frequencyLabel(): string {\n return this.frequency ? UserEventTypeFrequencyEnum[UserEventTypeFrequencyEnum[this.frequency]] : null;\n }\n}\n","import { UserEventSetting as UserEventSettingBase } from '../../db/Models/user/user-event-setting';\nimport { Exclude, Type } from 'class-transformer';\nimport { UserEventType } from './user-event-type';\nimport { MpTrackableInterface } from '../../interfaces';\n\nexport class UserEventSetting extends UserEventSettingBase implements MpTrackableInterface {\n @Type(() => UserEventType)\n type: UserEventType;\n // flag indicates that the setting is updating now saved or not\n @Exclude({ toPlainOnly: true })\n isUpdating?: boolean = false;\n\n getMpData() {\n return { type: this.type.name, byEmail: this.byEmail, byNotification: this.byNotification, frequency: this.type.frequencyLabel }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UserEventSetting } from '../../../../models/user-event/user-event-setting';\nimport { UserEventSetting as UserEventSettingBase } from '../../../../db/Models/user/user-event-setting';\nimport { RestMethod, RestService } from '../../rest';\nimport { UserEventSettingCollection } from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserEventSettingService extends RestService<UserEventSettingBase, UserEventSetting, UserEventSettingCollection> {\n modelClass: typeof UserEventSetting = UserEventSetting;\n collectionClass: typeof UserEventSettingCollection = UserEventSettingCollection;\n endpointUri = 'user-event-settings';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'delete', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { UserEventType as UserEventTypeBase } from '../../../../db/Models/user/user-event-type';\nimport { UserEventType } from '../../../../models/user-event/user-event-type';\nimport { RestMethod, RestService } from '../../rest';\nimport { UserEventSettingCollection, UserEventTypeCollection } from '../../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserEventTypeService extends RestService<UserEventTypeBase, UserEventType, UserEventTypeCollection> {\n modelClass: typeof UserEventType = UserEventType;\n collectionClass: typeof UserEventTypeCollection = UserEventTypeCollection;\n endpointUri = 'user-event-types';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n}\n\n","export enum UserMessagesEnum {\n PHOTO_UPDATED = 'Profile photo updated',\n USER_DATA_UPDATED = 'Data was successfully updated!',\n CLIENT_DETAILS_UPDATED = 'Client details updated'\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest-old.service';\nimport { RegistrationInvite as RegistrationInviteBase } from '../../../../db/Models/user/registration-invite';\nimport { RegistrationInvite } from '../../../../models/registration-invite/registration-invite';\n\n/**\n * Service to work with invitations for unregistered users\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UsersInviteService extends RestService<RegistrationInviteBase, RegistrationInvite> {\n modelClass: typeof RegistrationInvite = RegistrationInvite;\n url = 'users/invite';\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { User as UserBase } from '../../../db/Models/user/user';\nimport { AppEventTypeEnum, User, } from '../../../models';\nimport { EventDispatcherService } from '../../event';\nimport { catchError, map } from 'rxjs/operators';\nimport { RestMethod, RestService } from '../rest';\nimport { Collection } from '../../../collections';\nimport { throwError as observableThrowError } from 'rxjs';\nimport { AccountSetupItem } from '../../../models/account-setup/account-setup-item';\nimport clone from 'lodash/clone';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService extends RestService<UserBase, User, Collection<User>> {\n modelClass: typeof User = User;\n collectionClass: typeof Collection = Collection;\n endpointUri = 'users';\n isApiPlatform = false;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch', 'delete'];\n\n listenEvents(): void {\n this.listenServiceSubscriptionUpdated();\n this.listenBasiqConsentUpdated();\n }\n\n fetch(): Observable<Collection<User>> {\n return super.fetch(`${this.apiUrl}/current`).pipe(map((users) => {\n // @TODO vik use separated service to handle global user storage\n localStorage.setItem('userId', this.getCacheFirst().id.toString());\n localStorage.setItem('financialYear', this.getCacheFirst().financialYear.toString());\n localStorage.setItem('roles', JSON.stringify(this.getCacheFirst().roles));\n\n return users;\n }));\n }\n\n register(data: object): Observable<object> {\n return this.http.post(`${this.apiUrl}/registration`, data)\n .pipe(map((user) => {\n this.mpService.identify(user['id']);\n\n return user;\n }));\n }\n\n changePassword(currentPassword: string, newPassword: string): Observable<object> {\n return this.http.put(`${this.apiUrl}/password/change`, { currentPassword, newPassword })\n .pipe(\n map((response: any) => {\n this.mpService.track('passwordChange');\n return response;\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('passwordChangeError');\n return observableThrowError(error);\n })\n );\n }\n\n recoveryPassword(email: string): Observable<object> {\n return this.http.put(`${this.apiUrl}/password/recovery`, { email })\n .pipe(\n map((response: any) => {\n this.mpService.track('passwordRecovery', { email });\n return response;\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('passwordRecoveryError', { email });\n return observableThrowError(error);\n })\n );\n }\n\n resetPassword(newPassword: string, resetToken: string): Observable<object> {\n return this.http.put(`${this.apiUrl}/password/reset`, { newPassword, resetToken })\n .pipe(\n catchError((error: HttpErrorResponse) => {\n // success tracked on back-end side to attach it to existing user before login\n this.mpService.track('passwordResetError', { resetToken });\n return observableThrowError(error);\n })\n );\n }\n\n resendConfirmationEmail(email: string): Observable<object> {\n return this.http.post(`${this.apiUrl}/confirmation/resend`, { email })\n .pipe(\n map((response: any) => {\n this.mpService.track('emailConfirmResend', { email });\n return response;\n }),\n catchError((error: HttpErrorResponse) => {\n this.mpService.track('emailConfirmResendError', { email });\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Confirm registered user\n */\n confirm(verificationCode: string): Observable<object> {\n return this.http.post(`${this.apiUrl}/confirmation`, { verificationCode })\n .pipe(\n catchError((error: HttpErrorResponse) => {\n // success tracked on back-end side to attach it to existing user before login\n this.mpService.track('emailConfirmError', { verificationCode });\n return observableThrowError(error);\n })\n );\n }\n\n /**\n * Search existing user\n */\n search(email: string): Observable<User> {\n return this.http.get(`${this.apiUrl}/search`, { params: { email } }).pipe(\n map((userBase: UserBase) => this.createModelInstance(userBase))\n );\n }\n\n finishOnboarding(user: User): Observable<User> {\n return this.put(user, null, `${this.apiUrl}/status`);\n }\n\n updatePhoto(photo: FormData): Observable<void> {\n return this.http.post(`${this.apiUrl}/photo?_method=PUT`, photo).pipe(\n map((photoUrl: string) => {\n this.setCache([Object.assign(this.getCacheFirst(), { photo: photoUrl })], true);\n })\n );\n }\n\n createBasiq(): Observable<string> {\n return this.http.post(`${this.environment.apiV2}/basiq/user`, {})\n .pipe(\n map((basiqId: string) => {\n this.setCache([Object.assign(this.getCacheFirst(), { basiqId })], true);\n\n return basiqId;\n })\n );\n }\n\n skipSetupItem(item: AccountSetupItem): Observable<User> {\n const user = clone(this.getCacheFirst());\n user.blacklistSetupItems.push(item);\n\n return this.put(user);\n }\n\n /**\n * Update cache when user's service subscription is updated\n */\n private listenServiceSubscriptionUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED).subscribe(() => this.refreshCache());\n }\n\n /**\n * Update cache when user's basiq consent flag is updated\n */\n private listenBasiqConsentUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_CONSENT_UPDATED).subscribe(() => this.refreshCache());\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { MixpanelService } from '../../../mixpanel/mixpanel.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FinancialYearService {\n constructor(protected http: HttpClient, @Inject('environment') protected environment: any, private mpService: MixpanelService) {}\n\n switch(year: number): Observable<void> {\n return this.http.get(`${this.environment.apiV2}/financial-year/switch`,\n { params: new HttpParams({ fromString: `financialYear=${year}` }) }\n ).pipe(\n map(() => {\n localStorage.setItem('financialYear', year.toString());\n this.mpService.track('switchYear', { year });\n window.location.reload();\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Holding as HoldingBase } from '../../../db/Models';\nimport { Holding, HoldingSale } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { HoldingCollection } from '../../../collections';\nimport { IEventListener } from '../../../interfaces';\nimport { UserRolesEnum } from '../../../db/Enums/user-roles.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HoldingService extends RestService<HoldingBase, Holding, HoldingCollection> implements IEventListener {\n modelClass: typeof Holding = Holding;\n collectionClass: typeof HoldingCollection = HoldingCollection;\n endpointUri = 'holdings';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n roles = [UserRolesEnum.HOLDING_TANK];\n\n listenEvents(): void {\n this.listenCSE(HoldingSale, ['post', 'put', 'delete'], this.refreshCache);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HoldingType as HoldingTypeBase } from '../../../db/Models';\nimport { HoldingType } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { HoldingTypeCollection } from '../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HoldingTypeService extends RestService<HoldingTypeBase, HoldingType, HoldingTypeCollection> {\n modelClass: typeof HoldingType = HoldingType;\n collectionClass: typeof HoldingTypeCollection = HoldingTypeCollection;\n endpointUri = 'holding-types';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { HoldingSale as HoldingSaleBase } from '../../../db/Models';\nimport { HoldingSale } from '../../../models';\nimport { RestMethod, RestService } from '../rest';\nimport { Collection } from '../../../collections';\nimport {HoldingSaleCollection} from '../../../collections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HoldingSaleService extends RestService<HoldingSaleBase, HoldingSale, Collection<HoldingSale>> {\n modelClass = HoldingSale;\n collectionClass = HoldingSaleCollection;\n endpointUri = 'holding-sales';\n isApiPlatform = true;\n disabledMethods: RestMethod[] = ['postBatch', 'putBatch', 'deleteBatch'];\n}\n","import {Injectable} from '@angular/core';\nimport {HoldingTypeExchange as HoldingTypeExchangeBase} from '../../../db/Models';\nimport {Collection} from '../../../collections';\nimport {HoldingTypeExchange} from '../../../models';\nimport HoldingTypeExchanges from '../../../db/Json/holding/holding-type-exchange.json';\nimport {DataService} from '../../data.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HoldingTypeExchangeService extends DataService<HoldingTypeExchangeBase, HoldingTypeExchange, Collection<HoldingTypeExchange>> {\n modelClass: typeof HoldingTypeExchange = HoldingTypeExchange;\n collectionClass: typeof Collection = Collection;\n\n constructor() {\n super();\n this.setCache(HoldingTypeExchanges);\n }\n}\n","export enum HoldingMessagesEnum {\n CREATED = 'Holding created successfully',\n UPDATED = 'Holding updated successfully',\n CONFIRM_DELETE = 'Are you sure you want to delete this holding?',\n DELETED = 'Holding deleted successfully',\n DELETE_ASSET_ERROR = 'In the \"SOLD\" section click on the \"REDO\" button for the current asset',\n REINVESTED = 'Reinvested successfully'\n}\n","export enum HoldingSaleMessagesEnum {\n CREATED = 'Holding sold successfully',\n UPDATED = 'Sale updated successfully',\n CONFIRM_DELETE = 'Are you sure you want to delete this holding sale?',\n DELETED = 'Sale deleted successfully',\n}\n","export enum HoldingTypeMessagesEnum {\n CREATED = 'Holding type created successfully',\n UPDATED = 'Holding type updated successfully',\n CONFIRM_DELETE = 'Are you sure you want to delete this holding type?',\n DELETED = 'Holding type deleted successfully',\n}\n","import {Injectable} from '@angular/core';\nimport {IncomeSourceType as IncomeSourceTypeBase} from '../../../db/Models';\nimport {Collection} from '../../../collections';\nimport {IncomeSourceType} from '../../../models';\nimport IncomeSourceTypes from '../../../db/Json/income-source/income_source_type.json';\nimport {DataService} from '../../data.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IncomeSourceTypeService extends DataService<IncomeSourceTypeBase, IncomeSourceType, Collection<IncomeSourceType>> {\n modelClass: typeof IncomeSourceType = IncomeSourceType;\n collectionClass: typeof Collection = Collection;\n\n constructor() {\n super();\n this.setCache(IncomeSourceTypes);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ChartAccountsValue as ChartAccountsValueBase} from '../../../db/Models';\nimport {Collection} from '../../../collections';\nimport { ChartAccountsValue, FinancialYear } from '../../../models';\nimport ChartAccountsValues from '../../../db/Json/chart-accounts/chart-accounts-value.json';\nimport {DataService} from '../../data.service';\nimport { ChartAccountsListEnum } from '../../../db/Enums';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsValueService extends DataService<ChartAccountsValueBase, ChartAccountsValue, Collection<ChartAccountsValue>> {\n modelClass: typeof ChartAccountsValue = ChartAccountsValue;\n collectionClass: typeof Collection = Collection;\n\n constructor() {\n super();\n this.setCache(ChartAccountsValues);\n }\n\n /**\n * $ amount u can claim per 1km\n */\n getKmsRate(isSole: boolean): number {\n const chartAccountsId = isSole ? ChartAccountsListEnum.KLMS_TRAVELLED : ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK;\n return this.getCache().find(\n (ca) => ca.chartAccounts.id === chartAccountsId && new FinancialYear().year === ca.financialYear\n ).value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaxReturnItem as TaxReturnItemBase } from '../../../db/Models';\nimport { Collection } from '../../../collections';\nimport { TaxReturnItem } from '../../../models';\nimport TaxReturnItems from '../../../db/Json/tax-return/tax-return-item.json';\nimport { DataService } from '../../data.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxReturnItemService extends DataService<TaxReturnItemBase, TaxReturnItem, Collection<TaxReturnItem>> {\n modelClass: typeof TaxReturnItem = TaxReturnItem;\n collectionClass: typeof Collection = Collection;\n\n constructor() {\n super();\n this.setCache(TaxReturnItems);\n }\n}\n","export enum SetupItemTypeEnum {\n\tCLIENT = 1,\n\tEMPLOYEE = 2,\n}","import { Injectable } from '@angular/core';\nimport { AccountSetupItemCollection } from '../../../collections';\nimport { SetupItem } from '../../../db/Models/setup-item';\nimport { AccountSetupItem } from '../../../models/account-setup/account-setup-item';\nimport { RestService, RestMethod } from '../rest';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SetupItemService extends RestService<SetupItem, AccountSetupItem, AccountSetupItemCollection> {\n protected endpointUri: string = 'setup-items';\n protected isApiPlatform: boolean = true;\n modelClass: typeof AccountSetupItem = AccountSetupItem;\n collectionClass: typeof AccountSetupItemCollection = AccountSetupItemCollection;\n disabledMethods: RestMethod[] = ['post', 'postBatch', 'put', 'putBatch', 'delete', 'deleteBatch'];\n}\n","import { Injectable } from '@angular/core';\nimport { AccountSetupItem } from '../../models/account-setup/account-setup-item';\nimport {\n BankAccountService,\n ClientInviteService,\n ClientMovementService,\n EmployeeInviteService,\n EmployeeService,\n FirmService,\n HoldingService,\n IncomeSourceService,\n PropertyService,\n SoleBusinessService,\n TransactionAllocationService,\n TransactionService,\n UserService,\n VehicleClaimService\n} from '../http';\nimport { ClientInvite, IncomeSource, Transaction, User } from '../../models';\nimport { AccountSetupItemCollection, ClientInviteCollection, ClientMovementCollection, IncomeSourceCollection, TransactionCollection } from '../../collections';\nimport { Observable, combineLatest, of } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport intersection from 'lodash/intersection';\nimport clone from 'lodash/clone';\nimport { UserRolesEnum } from '../../db/Enums/user-roles.enum';\nimport { SetupItemTypeEnum } from '../../db/Enums/setup-item-type.enum';\nimport { EmployeeInvite } from '../../db/Models';\nimport { Firm } from '../../models/firm/firm';\nimport { SetupItemService } from '../http/setup-item/setup-item.service';\n\n/**\n * Service handling user's account setup process.\n * Checks required steps and their completion\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AccountSetupService {\n items: AccountSetupItemCollection;\n user: User;\n\n constructor(\n private setupItemService: SetupItemService,\n private propertyService: PropertyService,\n private incomeSourceService: IncomeSourceService,\n private bankAccountsService: BankAccountService,\n private transactionAllocationService: TransactionAllocationService,\n private vehicleClaimService: VehicleClaimService,\n private transactionService: TransactionService,\n private soleBusinessService: SoleBusinessService,\n private holdingService: HoldingService,\n private userService: UserService,\n private clientMovementService: ClientMovementService,\n private clientInviteService: ClientInviteService,\n private employeeService: EmployeeService,\n private employeeInviteService: EmployeeInviteService,\n private firmService: FirmService\n ) {\n }\n\n /**\n * Get list of account setup items for current user/firm\n */\n get(type: SetupItemTypeEnum): Observable<AccountSetupItemCollection> {\n return combineLatest([\n this.setupItemService.get(),\n this.userService.getFirst()\n ])\n .pipe(\n mergeMap(([items, user]: [AccountSetupItemCollection, User]) => {\n this.items = items;\n this.user = user;\n\n return type === SetupItemTypeEnum.CLIENT ? this.getClientItems$() : this.getFirmItems$();\n })\n );\n }\n\n getClientItems$(): Observable<AccountSetupItemCollection> {\n const batch: Observable<AccountSetupItem>[] = [];\n\n if (this.user.hasRoles(UserRolesEnum.WORK_TANK)) {\n batch.push(\n // Salary item is completed when user added salary income source\n this.setItemStatus(\n this.items.findBy('isSalary', true),\n this.getIncomeSources(true)\n ),\n // Other income is a part of work tank, completed when user added at least one other income source\n this.setItemStatus(\n this.items.findBy('isOtherIncome', true),\n this.getIncomeSources()\n )\n );\n }\n\n // Rental income item is completed when user added at least one property\n if (this.user.hasRoles(UserRolesEnum.PROPERTY_TANK)) {\n batch.push(\n this.setItemStatus(\n this.items.findBy('isProperty', true),\n this.propertyService.getArray()\n )\n );\n }\n\n // Sole business item is completed when user added at least one business\n if (this.user.hasRoles(UserRolesEnum.SOLE_TANK)) {\n batch.push(\n this.setItemStatus(\n this.items.findBy('isSoleBusiness', true),\n this.soleBusinessService.get()\n )\n );\n }\n\n // holdings item is completed when user added at least one holding\n if (this.user.hasRoles(UserRolesEnum.HOLDING_TANK)) {\n batch.push(\n this.setItemStatus(\n this.items.findBy('isHoldings', true),\n this.holdingService.getArray()\n )\n );\n }\n\n if (this.user.hasRoles([UserRolesEnum.WORK_TANK, UserRolesEnum.PROPERTY_TANK, UserRolesEnum.SOLE_TANK, UserRolesEnum.HOLDING_TANK])) {\n // Bank feeds item is completed when user added at least one bank account (basiq or manual)\n batch.push(this.getBankFeedsItem());\n\n // Logbook item is completed when user has at least one vehicle claim with any method (kms or logbook)\n batch.push(this.getLogbookItem());\n\n // Allocation item is completed when user added at least one transaction allocation\n batch.push(\n this.setItemStatus(\n this.items.findBy('isTransactionAllocate', true),\n this.transactionAllocationService.get()\n )\n );\n }\n\n return combineLatest(batch).pipe(map((items: AccountSetupItem[]) => new AccountSetupItemCollection(items)));\n }\n\n getFirmItems$(): Observable<AccountSetupItemCollection> {\n const batch: Observable<AccountSetupItem>[] = [];\n\n batch.push(\n // Firm Details item is completed when user filled some general information\n this.firmService.get().pipe(map((firm: Firm) => {\n const item = this.items.findBy('isFirmDetails', true);\n if (firm.address || firm.phone || firm.file || firm.shortName) {\n item.isCompleted = true;\n }\n\n return item;\n }))\n );\n\n batch.push(\n // Invite team item is completed when firm has employees except firm owner or firm has invited employees.\n this.setItemStatus(\n this.items.findBy('isInviteTeam', true),\n combineLatest([\n this.employeeService.get(),\n this.employeeInviteService.get()\n ]).pipe(map(([employees, invites]: [User[], EmployeeInvite[]]) => {\n // we always have at least 1 employee (firm owner), so we should check other employees except firm owner\n if (employees.length) {\n employees = clone(employees).splice(0, 1);\n }\n\n return [...employees, ...invites];\n }))\n )\n )\n\n batch.push(\n // Invite clients item is completed when firm has clients or firm has invited clients.\n this.setItemStatus(\n this.items.findBy('isInviteClients', true),\n combineLatest([this.clientMovementService.getActive(), this.clientInviteService.getFirmInvites()])\n .pipe(\n map(([movements, invites]: [ClientMovementCollection, ClientInviteCollection]) => [...movements.toArray(), ...invites.toArray()])\n )\n )\n )\n\n return combineLatest(batch).pipe(map((items: AccountSetupItem[]) => new AccountSetupItemCollection(items)));\n }\n\n /**\n * Check and update isCompleted flag for passed item\n */\n private setItemStatus(item: AccountSetupItem, request: Observable<object[]>): Observable<AccountSetupItem> {\n return request.pipe(\n map((result: object[]): AccountSetupItem => {\n const isSkipped = !!this.user.blacklistSetupItems.find((skippedItem: AccountSetupItem) => skippedItem.id === item.id);\n\n if (result.length || isSkipped) {\n item.isCompleted = true;\n } else {\n item.isCompleted = false;\n }\n\n return item;\n })\n );\n }\n\n /**\n * @TODO Alex: work with collection when services refactored\n * @TODO Vik: waiting for income sources refactoring\n */\n private getIncomeSources(isSalary = false): Observable<IncomeSource[]> {\n return this.incomeSourceService.get().pipe(\n map((incomeSources: IncomeSource[]): IncomeSource[] => {\n const collection: IncomeSourceCollection = new IncomeSourceCollection(incomeSources);\n if (isSalary) {\n return collection.getSalary();\n }\n\n return collection.items.filter((incomeSource: IncomeSource) => incomeSource.isOtherIncome());\n })\n )\n }\n\n /**\n * Show logbook item when user has at least 1 vehicle transaction\n */\n private getLogbookItem(): Observable<AccountSetupItem> {\n return this.transactionService.get()\n .pipe(\n // @TODO Alex: remove map when services start work with collections\n map((transactions: Transaction[]) => new TransactionCollection(transactions)),\n mergeMap((transactions: TransactionCollection) => {\n if (transactions.getVehicleTransactions().length) {\n return this.setItemStatus(\n this.items.findBy('isWorkLogbook', true),\n this.vehicleClaimService.get()\n );\n }\n\n return of(null);\n })\n );\n }\n\n /**\n * Hide bank feeds item when user has only holding tank\n */\n private getBankFeedsItem(): Observable<AccountSetupItem> {\n const bankFeedsRoles = [UserRolesEnum.PROPERTY_TANK, UserRolesEnum.WORK_TANK, UserRolesEnum.SOLE_TANK];\n\n if (!intersection(bankFeedsRoles, this.user.roles).length) {\n return of(null);\n }\n\n return this.setItemStatus(\n this.items.findBy('isBankFeeds', true),\n this.bankAccountsService.getArray()\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, Subscriber } from 'rxjs';\n\n/**\n * Service to work with Rewardful (affiliate program) API\n * https://developers.rewardful.com/javascript-api/overview#executing-code-when-rewardful-loads\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RewardfulService {\n\n constructor(\n @Inject('environment') private environment: any\n ) {\n }\n\n getReferralCode(): Observable<string> {\n return new Observable((observer: Subscriber<string>) => {\n if (!this.environment.rewardfulId) {\n return observer.next(null);\n }\n\n window['rewardful']('ready', () => {\n observer.next(window['Rewardful'].referral);\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nconst KEY = '_switch_user';\n\n/**\n * provides user management to managers (users with ROLE_ACCOUNTANT for now, more in future)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSwitcherService {\n /**\n * get switched username\n */\n get(): string {\n return localStorage[KEY];\n }\n\n /**\n * switch to user (username should be used for correct work of backend)\n */\n set(username: string): void {\n localStorage[KEY] = username;\n window.location.replace('/client/dashboard');\n }\n\n /**\n * go back to original user\n */\n reset(): void {\n localStorage.removeItem(KEY);\n window.location.replace('/firm/dashboard');\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { IAsset } from '../../interfaces';\nimport { UserSwitcherService } from '../user';\n\n/**\n * Service to work with assets (documents, receipts, e.t.c.)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetsService {\n // client that was switched from manager account\n impersonatedClient: string;\n\n constructor(\n private http: HttpClient,\n private userSwitcherService: UserSwitcherService,\n @Inject('environment') private environment: any\n ) {\n this.impersonatedClient = this.userSwitcherService.get();\n }\n\n /**\n * Get asset link\n * @param asset to get the link for\n */\n getLink(asset: IAsset): Observable<any> {\n return this.http.get(`${this.environment.apiV2}/assets/${asset.type}/${asset.id}`);\n }\n\n /**\n * Download asset\n * @param asset which should be downloaded\n * @TODO refactor\n */\n download(asset: IAsset): string {\n return `${this.environment.apiV2}/assets/${asset.type}/${asset.id}/download?bearer=${localStorage.getItem('token')}${this.impersonatedClient ? `&_switch_user=${this.impersonatedClient}` : ''}`;\n }\n\n // @Todo refactor to event dispatcher\n /**\n * Delete asset\n * @param entityId: id of asset main entity (property, folder, transaction, e.t.c.)\n * @param asset which should be deleted\n */\n delete(entityId: number, asset: IAsset): any {\n return this.http.delete(`${this.environment.apiV2}/${asset.entityType}/${entityId}/${asset.type}/${asset.id}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BankTransactionCollection } from '../../collections/bank-transaction.collection';\nimport { BankTransaction } from '../../models/bank/bank-transaction';\nimport { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\n\n/**\n * @TODO move to collection\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankTransactionCalculationService {\n /**\n * Sum of allocations for passed bank transactions\n */\n getAllocatedAmount(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): number {\n return allocations.getByBankTransactionsIds(bankTransactions.getIds()).amount;\n }\n\n /**\n * Difference between total bank transactions amount and sum of allocations for passed bank transactions\n */\n getUnallocatedAmount(bankTransactionCollection: BankTransactionCollection, allocations: TransactionAllocationCollection) {\n return bankTransactionCollection.getAmount() - allocations.amount;\n }\n\n /**\n * Check if bank transaction is allocated\n */\n isAllocated(bankTransaction: BankTransaction, allocations: TransactionAllocationCollection): boolean {\n return bankTransaction.amount === this.getAllocatedAmount(new BankTransactionCollection([bankTransaction]), allocations);\n }\n\n /**\n * Get collection of allocated bank transactions\n * @TODO Alex: consider to move to collection\n */\n getAllocatedBankTransactions(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): BankTransactionCollection {\n return new BankTransactionCollection(\n bankTransactions.items.filter((bankTransaction: BankTransaction): boolean => this.isAllocated(bankTransaction, allocations))\n );\n }\n\n /**\n * Get collection of unallocated bank transactions\n * @TODO Alex: consider to move to collection\n */\n getUnallocated(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): BankTransactionCollection {\n return new BankTransactionCollection(\n bankTransactions.items.filter((bankTransaction: BankTransaction): boolean => !this.isAllocated(bankTransaction, allocations))\n );\n }\n\n /**\n * Allocated sum of credit transactions\n */\n getCreditAmount(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): number {\n return allocations.getByBankTransactionsIds(bankTransactions.creditTransactions.getIds()).amount;\n }\n\n /**\n * Allocated sum of debit transactions\n */\n getDebitAmount(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): number {\n return allocations.getByBankTransactionsIds(bankTransactions.debitTransactions.getIds()).amount;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BankAccountCollection } from '../../collections/bank-account.collection';\nimport { BankTransactionCollection } from '../../collections/bank-transaction.collection';\nimport { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\nimport { BankTransactionCalculationService } from './bank-transaction-calculation.service';\nimport { BankAccount } from '../../models/bank/bank-account';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BankAccountCalculationService {\n constructor(\n private bankTransactionCalculationService: BankTransactionCalculationService\n ) {\n }\n\n /**\n * Sum of bank accounts opening balances and their bank transactions allocated amounts\n */\n getTaxTankBalance(\n bankAccounts: BankAccountCollection | BankAccount,\n bankTransactions: BankTransactionCollection,\n allocations: TransactionAllocationCollection\n ): number {\n // wrap in a collection if a single bank account was provided\n const bankAccountCollection: BankAccountCollection = bankAccounts instanceof BankAccount ?\n new BankAccountCollection([bankAccounts]) :\n bankAccounts;\n\n return bankAccountCollection.getOpeningBalance() +\n this.bankTransactionCalculationService.getAllocatedAmount(bankTransactions.getByBankAccountsIds(bankAccountCollection.getIds()), allocations);\n }\n\n /**\n * get difference between total loans amount and total cash amount\n */\n getNetPosition(\n bankAccounts: BankAccountCollection,\n bankTransactions: BankTransactionCollection,\n allocations: TransactionAllocationCollection\n ): number {\n return bankAccounts.currentBalance - this.getTaxTankBalance(bankAccounts.getLoanAccounts(), bankTransactions, allocations);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { CurrencyPipe, DatePipe, PercentPipe } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExportFormatterService {\n constructor(private currencyPipe: CurrencyPipe, private percentPipe: PercentPipe, private datePipe: DatePipe) {}\n\n format(rows: ExportCell[][]): string[][] {\n return rows.map((row: ExportCell[]) => row.map((column: ExportCell) => {\n switch (column.type) {\n case ExportCellTypeEnum.DATE:\n return this.datePipe.transform(column.value, 'dd/MM/YYYY').toString();\n case ExportCellTypeEnum.CURRENCY:\n return this.currencyPipe.transform(column.value).toString();\n case ExportCellTypeEnum.PERCENT:\n return this.percentPipe.transform(column.value).toString();\n default:\n return column.value.toString();\n }})\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { filter, map, mergeMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HeaderTitleService {\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n ) {\n }\n\n handleTitle(): Observable<any> {\n return this.router.events.pipe(\n filter((event: any) => event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n map((route: any) => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }),\n filter((route: any) => route.outlet === 'primary'),\n mergeMap((route: any) => route.data)\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { User } from '../../models';\n\n/**\n * Service to work with intercom\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IntercomService {\n constructor(\n @Inject('environment') private environment: any\n ) {\n }\n\n /**\n * Init object with user credentials\n * @param user\n */\n initUser(user: User): object {\n return {\n app_id: this.environment.intercomAppId,\n email: user.email,\n user_hash: user.hashedEmail\n };\n }\n\n /**\n * Init connection for provided data\n * @param user\n */\n initConnection(user: User): void {\n const connectionCredentials: object = this.initUser(user);\n\n (<any>window).Intercom('boot', connectionCredentials);\n }\n}\n","import { jsPDF } from 'jspdf';\nimport { UserOptions, applyPlugin } from 'jspdf-autotable';\napplyPlugin(jsPDF);\n\n/**\n * jspdf-autotable is a plugin, adding table functionality to jspdf object without new class,\n * we need to let ts knows about that by defining an interface and extending jsPdf class (to avoid ts error)\n */\nexport class JsPdf extends jsPDF {\n autoTable: (options: UserOptions) => jsPDF;\n}\n","/**\n * Settings for generated PDF file from DOM elements\n */\nexport const FILE_SETTINGS: { [key: string]: any } = {\n margin: 10,\n filename: 'export.pdf',\n html2canvas: {\n scale: 2,\n useCORS: true,\n },\n pagebreak: {\n mode: 'avoid-all'\n },\n jsPDF: {\n unit: 'mm',\n format: 'a3',\n orientation: 'portrait'\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PdfSettings } from '../../../models/pdf/pdf-settings';\nimport { Observable, from } from 'rxjs';\nimport html2pdf from 'html2pdf.js';\nimport { FILE_SETTINGS } from './file-settings';\nimport merge from 'lodash/merge';\n\n/**\n * @TODO mikhail better typehint\n *\n * Service to generate and export PDF file from provided HTML elements\n * The file is generated using the html2pdf library in order to get a canvas at the output,\n * in which all the styles that the user sees on the page will be saved\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfFromDomElementService {\n private init(elements: NodeListOf<HTMLElement>, fileSettings?: PdfSettings): any {\n const options = FILE_SETTINGS;\n if (fileSettings) {\n merge(options, fileSettings);\n }\n\n // HTML container in which the exported DOM elements will be placed\n const htmlWrapper: HTMLElement = document.createElement('div');\n\n elements.forEach((element: HTMLElement) => {\n htmlWrapper.append(element.cloneNode(true));\n });\n\n // Set PDF options, save file and return result as Observable\n return html2pdf().from(htmlWrapper).set(options);\n }\n\n download(elements: NodeListOf<HTMLElement>, fileSettings?: PdfSettings): Observable<unknown> {\n return from(\n this.init(elements, fileSettings)\n .save()\n .then()\n );\n }\n\n export(elements: NodeListOf<HTMLElement>, filename: string = FILE_SETTINGS.filename): Observable<unknown> {\n return from(\n this.init(elements)\n .outputPdf('blob')\n .then((blob: Blob) => new File([blob], filename, { type: 'application/pdf' }))\n );\n }\n}\n","/**\n * Settings for generated PDF file from tables (HTML table, data-table, e.t.c.)\n */\nexport const FILE_SETTINGS: { [key: string]: { [key: string]: any } } = {\n text: {\n fontSize: 12,\n fontSizeSubtitle: 10,\n fontName: 'helvetica',\n fontStyle: '',\n fontWeight: 'bold',\n positionX: 14,\n positionY: 10,\n positionSubtitleX: 14,\n positionSubtitleY: 20,\n positionDescriptionX: 14,\n positionDescriptionY: 26,\n colorWhite: '#ffffff',\n colorBlack: '#000000',\n colorPrimary: '#00b7f0'\n },\n logo: {\n src: '/assets/img/icons/logo.png',\n width: 30,\n height: 7,\n positionX: 42,\n positionY: 6\n },\n titleCoords: {\n top: 15\n },\n contentCoords: {\n top: 15,\n left: 14\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FILE_SETTINGS } from './file-settings';\nimport {JsPdf} from '../js-pdf';\n\n/**\n * Service with base functionality to export tables (HTML table, data-table, e.t.c.) as PDF file\n * The file is generated using the jsPDF library to set custom table styles\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfFromTableService {\n\n /**\n * Set basic options for PDF table\n */\n protected setTableOptions(pdf: JsPdf, tableCaption = ''): object {\n const lastTableCoords = pdf['lastAutoTable'].finalY || FILE_SETTINGS.contentCoords.top;\n // get caption height based on caption content height\n const captionHeight: number = pdf.getTextDimensions(pdf.splitTextToSize(tableCaption, pdf.internal.pageSize.width)).h;\n pdf.text(tableCaption, FILE_SETTINGS.contentCoords.left, lastTableCoords + FILE_SETTINGS.contentCoords.top);\n\n return {\n headStyles: {\n fillColor: FILE_SETTINGS.text.colorPrimary,\n },\n footStyles: {\n fillColor: FILE_SETTINGS.text.colorWhite,\n textColor: FILE_SETTINGS.text.colorBlack\n },\n startY: lastTableCoords + captionHeight + FILE_SETTINGS.titleCoords.top,\n didParseCell: (data) => {\n // Align last column content to right\n if (data.table.columns.length > 1 && (data.column.index === data.table.columns.length - 1)) {\n data.cell.styles.halign = 'right'\n }\n }\n }\n }\n\n protected setDocumentTitle(doc: JsPdf, title?: string): void {\n doc.setFontSize(FILE_SETTINGS.text.fontSize)\n .setFont(FILE_SETTINGS.text.fontName, FILE_SETTINGS.text.fontStyle, FILE_SETTINGS.text.fontWeight)\n .text(title, FILE_SETTINGS.text.positionX, FILE_SETTINGS.text.positionY);\n }\n\n protected setDocumentLogo(doc: JsPdf): void {\n const logo = new Image();\n logo.src = FILE_SETTINGS.logo.src;\n doc.addImage(\n logo,\n 'PNG',\n doc.internal.pageSize.width - FILE_SETTINGS.logo.positionX,\n FILE_SETTINGS.logo.positionY,\n FILE_SETTINGS.logo.width,\n FILE_SETTINGS.logo.height\n )\n }\n\n protected setDocumentSubtitle(doc: JsPdf, subtitle?: string) {\n doc.setFontSize(FILE_SETTINGS.text.fontSizeSubtitle)\n .text(subtitle, FILE_SETTINGS.text.positionSubtitleX, FILE_SETTINGS.text.positionSubtitleY)\n .setTextColor(FILE_SETTINGS.text.colorPrimary);\n }\n\n protected setDocumentDescription(doc: JsPdf, description?: string) {\n doc.setFontSize(FILE_SETTINGS.text.fontSize)\n .text(description, FILE_SETTINGS.text.positionDescriptionX, FILE_SETTINGS.text.positionDescriptionY)\n .setTextColor(FILE_SETTINGS.text.colorPrimary);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ExportDataTable } from '../../../../models/export/export-data-table';\nimport { PdfSettings } from '../../../../models/pdf/pdf-settings';\nimport { ExportFormatterService } from '../../../export';\nimport { PdfFromTableService } from '../pdf-from-table.service';\nimport { JsPdf } from '../../js-pdf';\n\n/**\n * Service to generate and export PDF file from provided array-like data tables\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfFromDataTableService extends PdfFromTableService {\n constructor(private formatter: ExportFormatterService) {\n super();\n }\n\n export(dataTables: ExportDataTable[], fileSettings: PdfSettings): void {\n const document= this.generate(dataTables, fileSettings);\n document.save(`${fileSettings.filename}.pdf`);\n }\n\n /**\n * Generate PDF file from provided list of data tables\n */\n private generate(dataTables: ExportDataTable[], fileSettings: PdfSettings): JsPdf {\n const pdf = new JsPdf(fileSettings.orientation);\n\n this.setDocumentTitle(pdf, fileSettings.title);\n this.setDocumentLogo(pdf);\n this.setDocumentSubtitle(pdf, fileSettings.subtitle);\n this.setDocumentDescription(pdf, fileSettings.description);\n\n dataTables.forEach((dataTable: ExportDataTable) => {\n pdf.autoTable(\n {\n head: [dataTable.header],\n body: this.formatter.format(dataTable.body),\n foot: this.formatter.format(dataTable.footer),\n ...this.setTableOptions(pdf, dataTable.caption)\n });\n });\n\n return pdf;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PdfSettings } from '../../../../models/pdf/pdf-settings';\nimport { PdfFromTableService } from '../pdf-from-table.service';\nimport { JsPdf } from '../../js-pdf';\n\n/**\n * Service to generate and export PDF file from provided HTML tables\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfFromHtmlTableService extends PdfFromTableService {\n export(tables: NodeListOf<HTMLTableElement>, fileSettings: PdfSettings): void {\n const document = this.generateFile(tables, fileSettings);\n document.save(`${fileSettings.filename}.pdf`);\n }\n\n /**\n * Generate PDF file from provided list of HTML tables\n */\n private generateFile(tables: NodeListOf<HTMLTableElement>, fileSettings: PdfSettings): JsPdf {\n const pdf = new JsPdf(fileSettings.orientation);\n\n this.setDocumentTitle(pdf, fileSettings.title);\n this.setDocumentLogo(pdf);\n\n tables.forEach((table: HTMLTableElement) => {\n // Add table caption if not provided\n if (!table.caption) {\n table.createCaption();\n table.caption.innerText = ''\n }\n\n pdf.autoTable({\n html: table,\n ...this.setTableOptions(pdf, table.caption.innerText)\n });\n });\n\n return pdf;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Endpoint } from '../../models/endpoint/endpoint';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PreloaderService {\n activePreloaders: BehaviorSubject<Endpoint[]> = new BehaviorSubject<Endpoint[]>([]);\n\n constructor() { }\n\n get(): Observable<Endpoint[]> {\n return this.activePreloaders.asObservable();\n }\n\n add(endpoint: Endpoint): void {\n const activePreloaders: Endpoint[] = this.activePreloaders.getValue();\n activePreloaders.push(endpoint);\n this.activePreloaders.next(activePreloaders);\n }\n\n delete(endpoint: Endpoint): void {\n let activePreloaders: Endpoint[] = this.activePreloaders.getValue();\n activePreloaders = activePreloaders.filter((preloader: Endpoint): boolean => preloader !== endpoint);\n this.activePreloaders.next(activePreloaders);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { ChartData } from '../../../models/chart/chart-data';\nimport { ChartSerie } from '../../../models/chart/chart-serie';\n\n/**\n * Service for get property equity position half-year history chart data\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class EquityPositionChartService {\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) { }\n\n get(): Observable<ChartData[]> {\n // @TODO refactor backend\n return this.http.get(`${this.environment.apiV2}/properties/categories/equity`)\n .pipe(\n map((response: any[]): ChartData[] => response.map((item: any) => plainToClass(ChartData, {\n name: item.category.name,\n data: item.equity.map((serie: any) => plainToClass(ChartSerie, {\n label: serie.date,\n value: serie.amount\n }))\n })))\n );\n }\n}\n","export enum BadgeColorEnum {\r\n DEFAULT = 'default',\r\n GREEN = 'green',\r\n GOLD = 'gold',\r\n GRAY = 'gray'\r\n}\r\n","import { BadgeColorEnum } from './badge-color.enum';\r\nimport { AbstractModel } from '../../db/Models/abstract-model';\r\n\r\n/**\r\n * Class for UI element badge\r\n */\r\nexport class Badge extends AbstractModel {\r\n color: BadgeColorEnum;\r\n text = '';\r\n\r\n constructor(\r\n text: string,\r\n color?: BadgeColorEnum\r\n ) {\r\n super();\r\n this.text = text;\r\n this.color = color || BadgeColorEnum.DEFAULT;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BankAccountCollection } from '../../../collections/bank-account.collection';\nimport { DepreciationCollection } from '../../../collections/depreciation.collection';\nimport { LoanCollection } from '../../../collections/loan/loan.collection';\nimport { PropertyCollection } from '../../../collections/property/property.collection';\nimport { TransactionCollection } from '../../../collections/transaction/transaction.collection';\nimport { Property } from '../../../models/property/property';\nimport { BankAccount } from '../../../models/bank/bank-account';\nimport { Dictionary } from '../../../models/dictionary/dictionary';\nimport { Badge } from '../../../models/badge/badge';\nimport { BadgeColorEnum } from '../../../models/badge/badge-color.enum';\n\n/**\n * Service with calculations methods for properties related with other entities.\n * Logic here works like collections methods but for several entities\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyCalculationService {\n getTaxPosition(transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n // @TODO hack: math abs added because we have mismatching of real values signs\n return transactions.grossClaimAmount - Math.abs(depreciations.claimAmount);\n }\n\n getTaxPosition$(\n transactions$: Observable<TransactionCollection>,\n depreciations$: Observable<DepreciationCollection>\n ): Observable<number> {\n return combineLatest([\n transactions$,\n depreciations$\n ]).pipe(\n map(([transactions, depreciations]: [TransactionCollection, DepreciationCollection]): number => this.getTaxPosition(transactions, depreciations))\n );\n }\n\n taxPositionGrowth(properties: PropertyCollection, transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n const forecastedTaxPosition: number = properties.sumBy('forecastedTaxPosition');\n // check if forecastedTaxPosition = 0 to avoid division by zero\n if (!forecastedTaxPosition) {\n return 0;\n }\n\n return (this.getTaxPosition(transactions, depreciations) - forecastedTaxPosition) / forecastedTaxPosition;\n }\n\n taxPositionGrowth$(\n properties$: Observable<PropertyCollection>,\n transactions$: Observable<TransactionCollection>,\n depreciations$: Observable<DepreciationCollection>\n ): Observable<number> {\n return combineLatest([\n properties$,\n transactions$,\n depreciations$\n ]).pipe(\n map(([properties, transactions, depreciations]: [PropertyCollection, TransactionCollection, DepreciationCollection]): number => this.taxPositionGrowth(properties, transactions, depreciations))\n );\n }\n\n getRentalReturn(properties: PropertyCollection, transactions: TransactionCollection): number {\n return transactions.claimIncome / properties.marketValue;\n }\n\n getLoanAmount(properties: PropertyCollection, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n return properties.items.reduce((totalAmount: number, property: Property): number => totalAmount + bankAccounts.items\n .reduce((propertyAmount: number, bankAccount: BankAccount): number => propertyAmount + bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.amount || 0), 0), 0);\n }\n\n getLoanValue(properties: PropertyCollection, bankAccounts: BankAccountCollection): number {\n return properties.items.reduce((totalAmount: number, property: Property): number => totalAmount + bankAccounts.items\n .reduce((propertyAmount: number, bankAccount: BankAccount): number => propertyAmount + bankAccount.getPropertyBalanceAmount(property.id), 0), 0);\n }\n\n /**\n * LVR\n */\n\n getLvr(properties: PropertyCollection, bankAccounts: BankAccountCollection): number {\n // Math abs is required for correct percentage calculation\n return Math.abs(this.getLoanValue(properties, bankAccounts)) / properties.marketValue;\n }\n\n getLvr$(\n properties$: Observable<PropertyCollection>,\n bankAccounts$: Observable<BankAccountCollection>\n ): Observable<number> {\n return combineLatest([\n properties$,\n bankAccounts$\n ]).pipe(\n map(([properties, bankAccounts]: [PropertyCollection, BankAccountCollection]): number => this.getLvr(properties, bankAccounts))\n );\n }\n\n getLvrCommencement(properties: PropertyCollection, loans: LoanCollection, bankAccounts: BankAccountCollection): number {\n // Math abs is required for correct percentage calculation\n return Math.abs(this.getLoanAmount(properties, bankAccounts, loans)) / properties.purchasePrice;\n }\n\n getLvrCommencement$(\n properties$: Observable<PropertyCollection>,\n bankAccounts$: Observable<BankAccountCollection>,\n loans$: Observable<LoanCollection>\n ): Observable<number> {\n return combineLatest([\n properties$,\n bankAccounts$,\n loans$\n ]).pipe(\n map(([properties, bankAccounts, loans]: [PropertyCollection, BankAccountCollection, LoanCollection]): number => this.getLvrCommencement(properties, loans, bankAccounts))\n );\n }\n\n getLvrGrowth(properties: PropertyCollection, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n const lvr: number = this.getLvr(properties, bankAccounts);\n const lvrCommencement: number = this.getLvrCommencement(properties, loans, bankAccounts);\n if (!lvrCommencement) {\n // check if lvrCommencement = 0 to avoid division by zero\n return 0;\n }\n\n return (this.getLvr(properties, bankAccounts) - lvrCommencement) / lvrCommencement;\n }\n\n getLvrGrowth$(\n properties$: Observable<PropertyCollection>,\n bankAccounts$: Observable<BankAccountCollection>,\n loans$: Observable<LoanCollection>\n ): Observable<number> {\n return combineLatest([\n properties$,\n bankAccounts$,\n loans$\n ]).pipe(\n map(([properties, bankAccounts, loans]: [PropertyCollection, BankAccountCollection, LoanCollection]): number => this.getLvrGrowth(properties, bankAccounts, loans))\n );\n }\n\n /**\n * Equity position = Market value - current loan value\n */\n getEquityPosition(properties: PropertyCollection, bankAccounts: BankAccountCollection): number {\n // Math abs is required for correct percentage calculation\n return properties.marketValue - Math.abs(this.getLoanValue(properties, bankAccounts));\n }\n\n /**\n * Purchase Equity = Purchase price - initial loan value\n */\n getPurchaseEquity(properties: PropertyCollection, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n // Math abs is required for correct percentage calculation\n return properties.purchasePrice - Math.abs(this.getLoanAmount(properties, bankAccounts, loans));\n }\n\n getEquityGrowth(properties: PropertyCollection, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n const purchaseEquity: number = this.getPurchaseEquity(properties, bankAccounts, loans);\n // check if purchaseEquity = 0 to avoid division by zero\n if (!purchaseEquity) {\n return 0;\n }\n\n return (this.getEquityPosition(properties, bankAccounts) - purchaseEquity) / purchaseEquity;\n }\n\n /**\n * Get dictionary of badges for each property in collection\n */\n getBadgesByProperty(properties: PropertyCollection, transactions: TransactionCollection, depreciations: DepreciationCollection): Dictionary<Badge> {\n const badgesByProperty = new Dictionary([]);\n\n properties.toArray().forEach((property: Property) => {\n badgesByProperty.add(property.id, this.getBadge(property, properties, transactions, depreciations));\n });\n\n return badgesByProperty;\n }\n\n getCashPositionGrowth(properties: PropertyCollection, transactions: TransactionCollection): number {\n const forecastedCashPosition: number = properties.sumBy('forecastedCashPosition');\n\n // check if forecastedCashPosition = 0 to avoid division by zero\n if (!forecastedCashPosition) {\n return 0;\n }\n\n return (transactions.grossClaimAmount - forecastedCashPosition) / forecastedCashPosition;\n }\n\n /**\n * Get Badge for single property in collection\n */\n private getBadge(property: Property, properties: PropertyCollection, transactions: TransactionCollection, depreciations: DepreciationCollection): Badge {\n // best performance properties could be only from active properties list\n const activeProperties: PropertyCollection = properties.getActiveProperties();\n const bestPerformanceGrowthProperty: Property = activeProperties.getBestPerformanceGrowthProperty();\n const bestPerformanceTaxProperty: Property = activeProperties.getBestPerformanceTaxProperty(\n transactions, depreciations\n );\n\n switch (true) {\n case !property.isActive:\n return new Badge('Inactive', BadgeColorEnum.GRAY);\n case property.id === bestPerformanceTaxProperty.id && property.id === bestPerformanceGrowthProperty.id:\n return new Badge('Best performance growth & tax', BadgeColorEnum.GOLD);\n case property.id === bestPerformanceTaxProperty.id:\n return new Badge('Best performance tax', BadgeColorEnum.GOLD);\n case property.id === bestPerformanceGrowthProperty.id:\n return new Badge('Best performance growth', BadgeColorEnum.GREEN);\n default:\n return new Badge('Monitoring performance');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ChartAccountsService, DepreciationService, PropertyService, TransactionService, } from '../../http';\nimport { Observable, combineLatest } from 'rxjs';\nimport { Property } from '../../../models/property/property';\nimport { CHART_ACCOUNTS_CATEGORIES, Transaction } from '../../../models';\nimport { DepreciationCollection } from '../../../collections/depreciation.collection';\nimport { CollectionDictionary } from '../../../collections/collection-dictionary';\nimport { TransactionCollection } from '../../../collections';\nimport { map } from 'rxjs/operators';\nimport { PropertyCollection } from '../../../collections';\nimport {\n PropertyReportItemTransactionCollection\n} from '../../../collections/report/property/property-report-item-transaction.collection';\nimport {\n PropertyReportItemDepreciationCollection\n} from '../../../collections/report/property/property-report-item-depreciation.collection';\nimport { PropertyReportItemCollection } from '../../../collections/report/property/property-report-item.collection';\nimport { ChartAccountsCollection } from '../../../collections/chart-accounts.collection';\n\n/**\n * Service to handle Property transactions report items data (get income / expense report items, e.t.c.)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyTransactionReportService {\n properties: Property[];\n transactions: TransactionCollection;\n depreciations: DepreciationCollection;\n chartAccounts: ChartAccountsCollection;\n\n constructor(\n private propertyService: PropertyService,\n private transactionService: TransactionService,\n private depreciationService: DepreciationService,\n private chartAccountsService: ChartAccountsService\n ) {\n }\n\n /**\n * Get collection of report items based on transactions & depreciations\n */\n get(): Observable<CollectionDictionary<PropertyReportItemCollection>> {\n return combineLatest([\n this.propertyService.get() as Observable<PropertyCollection>,\n this.getTransactions() as Observable<TransactionCollection>,\n this.getDepreciations() as Observable<DepreciationCollection>,\n this.chartAccountsService.get() as Observable<ChartAccountsCollection>\n ]).pipe(\n map(([properties, transactions, depreciations, chartAccounts]) => {\n return this.create(transactions, depreciations, properties, chartAccounts).groupBy('propertyId');\n })\n )\n }\n\n private create(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n properties: PropertyCollection,\n chartAccounts: ChartAccountsCollection\n ): PropertyReportItemCollection {\n return new PropertyReportItemCollection([\n ...new PropertyReportItemTransactionCollection(transactions, properties, chartAccounts).items,\n ...new PropertyReportItemDepreciationCollection(depreciations, properties, chartAccounts).items,\n ]);\n }\n\n /**\n * Get collection of property transactions\n */\n private getTransactions(): Observable<TransactionCollection> {\n return this.transactionService.get().pipe(\n map((transactions: Transaction[]) => new TransactionCollection(transactions)\n .getByChartAccountsCategories(CHART_ACCOUNTS_CATEGORIES.property))\n )\n }\n\n /**\n * Get list of asset & capital property depreciations\n */\n private getDepreciations(): Observable<DepreciationCollection> {\n return this.depreciationService.get().pipe(\n map((depreciations: DepreciationCollection) => depreciations\n .getByChartAccountsCategories(CHART_ACCOUNTS_CATEGORIES.property)\n // we don't need borrowing expenses for this report\n .getWithoutBorrowingExpenses())\n )\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SoleInvoiceCollection, TransactionAllocationCollection, TransactionCollection } from '../../collections';\nimport { Dictionary } from '../../models/dictionary/dictionary';\nimport { SoleInvoice, Transaction } from '../../models';\nimport { CollectionDictionary } from '../../collections/collection-dictionary';\nimport { BankTransactionCollection } from '../../collections/bank-transaction.collection';\n\n\n/**\n * @TODO Alex: refactor, move methods to collections and models, remove this service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TransactionCalculationService {\n /**\n * Sum of allocations for passed transactions\n */\n getAllocatedAmount(transactions: TransactionCollection, allocations: TransactionAllocationCollection): number {\n return allocations.getByTransactionsIds(transactions.getIds()).amount;\n }\n\n /**\n * Check if transaction is allocated\n */\n isAllocated(transaction: Transaction, allocations: TransactionAllocationCollection): boolean {\n return transaction.isAllocated(allocations);\n }\n\n /**\n * Get collection of allocated transactions\n * @TODO Alex: consider to move to collection\n */\n getAllocatedTransactions(transactions: TransactionCollection, allocations: TransactionAllocationCollection): TransactionCollection {\n return new TransactionCollection(\n transactions.items.filter((transaction: Transaction): boolean => transaction.isAllocated(allocations))\n );\n }\n\n getUnallocatedInvoices(invoices: SoleInvoiceCollection, allocations: TransactionAllocationCollection): SoleInvoiceCollection {\n return invoices.filter((invoice: SoleInvoice) => {\n const invoiceAllocatedAmount: number = allocations.filterBy('transaction.id', invoice.getTransactionsIds()).sumBy('amount');\n return invoice.grossPrice > invoiceAllocatedAmount;\n });\n }\n\n /**\n * Get invoices paid amounts grouped by invoice id\n */\n getInvoicePaidAmountById(allocations: TransactionAllocationCollection, invoices: SoleInvoiceCollection): Dictionary<number> {\n const allocationsByTransactionId = allocations.groupBy('transaction.id');\n const dictionary: Dictionary<number> = new Dictionary([]);\n\n invoices.toArray().forEach((invoice: SoleInvoice) => {\n // fully paid if user marked invoice as paid with cash\n const amount = invoice.isPaidCash() ? invoice.grossPrice\n : allocationsByTransactionId.merge(invoice.itemsCollection.mapBy('transaction.id')).amount || 0;\n dictionary.add(invoice.id, amount);\n });\n\n return dictionary;\n }\n\n getInvoicesUnallocatedAmount(invoices: SoleInvoiceCollection, allocations: TransactionAllocationCollection): number {\n return invoices.sumBy('grossPrice') - allocations.filterBy('transaction.id', invoices.getTransactionsIds()).sumBy('amount');\n }\n\n getTransactionsByInvoices(invoices: SoleInvoiceCollection, transactions: TransactionCollection): CollectionDictionary<TransactionCollection> {\n const transactionsByInvoices = new TransactionCollection([]).groupBy();\n\n invoices.toArray().forEach((invoice: SoleInvoice) => {\n transactionsByInvoices.add(invoice.id, transactions.filterBy('id', invoice.getTransactionsIds()));\n });\n\n return transactionsByInvoices;\n }\n\n getAllocationsByInvoices(invoices: SoleInvoiceCollection, allocations: TransactionAllocationCollection): CollectionDictionary<TransactionAllocationCollection> {\n const allocationsByInvoices = new TransactionAllocationCollection([]).groupBy();\n\n invoices.toArray().forEach((invoice: SoleInvoice) => {\n allocationsByInvoices.add(invoice.id, allocations.filterBy('transaction.id', invoice.getTransactionsIds()));\n });\n\n return allocationsByInvoices;\n }\n\n getBankTransactionsUnallocatedAmount(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): number {\n return bankTransactions.sumBy('amount') - allocations.getByBankTransactionsIds(bankTransactions.getIds()).sumBy('amount');\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as xlsx from 'xlsx';\nimport * as FileSaver from 'file-saver';\nimport { ExportableCollection } from \"../../collections\";\nimport { ExportDataTable } from \"../../models/export/export-data-table\";\n\nconst EXCEL_TYPE: string = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * Service to work with XLSX (generate, download, e.t.c.)\n */\nexport class XlsxService {\n /**\n * Export file form provided HTML tables\n */\n exportTables(tables: NodeListOf<HTMLTableElement>, title: string, fileName: string): void {\n const excelFile: BlobPart = this.generateFromTables(tables, title);\n const data: Blob = new Blob([excelFile], {\n type: EXCEL_TYPE\n });\n\n FileSaver.saveAs(data, `${fileName}.xlsx`);\n }\n\n private generateFromTables(tables: NodeListOf<HTMLTableElement>, title?: string): BlobPart {\n // create new workbook\n const workbook: xlsx.WorkBook = xlsx.utils.book_new();\n // create empty worksheet\n const worksheet: xlsx.WorkSheet = {\n SheetNames: [],\n Sheets: {}\n };\n\n tables.forEach((data: HTMLTableElement) => {\n // add caption for the current table\n xlsx.utils.sheet_add_aoa(worksheet, [[data.caption?.innerText]], {origin: -1});\n // add table table data to the worksheet\n xlsx.utils.sheet_add_dom(worksheet, data, {origin: -1, raw: true});\n // set empty row after current table\n xlsx.utils.sheet_add_aoa(worksheet, [], {origin: -1});\n });\n\n xlsx.utils.book_append_sheet(workbook, worksheet);\n return xlsx.write(workbook, { bookType: 'xlsx', type: 'array' });\n }\n\n getFileName = (name: string) => {\n let sheetName = name || \"ExportResult\";\n let fileName = `${sheetName}`;\n return {\n sheetName,\n fileName\n };\n };\n\n /**\n * @TODO vik/artem work with ExportDataTable instead of ExportableCollection\n * @TODO vik/artem why so much code? here is 6 rows solution https://stackoverflow.com/questions/64939994/how-to-export-array-of-objects-to-an-excel-in-angular-8\n */\n exportArrayToExcel(exportableCollection: ExportableCollection<any>, name?: string, params? : any) {\n const workbook: xlsx.WorkBook = xlsx.utils.book_new();\n // create empty worksheet\n const worksheet: xlsx.WorkSheet = {\n SheetNames: [],\n Sheets: {}\n };\n\n const exportData: ExportDataTable = exportableCollection.export(params)\n const exportAoa = exportableCollection.getBodyAoa(exportData);\n let { sheetName, fileName } = this.getFileName(name);\n\n xlsx.utils.sheet_add_aoa(worksheet, [exportData.header], {origin: -1});\n // add table table data to the worksheet\n xlsx.utils.sheet_add_aoa(worksheet, exportAoa, {origin: -1});\n // set empty row after current table\n xlsx.utils.sheet_add_aoa(worksheet, [], {origin: -1});\n\n xlsx.utils.book_append_sheet(workbook, worksheet);\n const excelFile: BlobPart = xlsx.write(workbook, { bookType: 'xlsx', type: 'array' });\n\n const data: Blob = new Blob([excelFile], {\n type: EXCEL_TYPE\n });\n FileSaver.saveAs(data, `${fileName}.xlsx`);\n }\n}\n","import { BehaviorSubject, Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { JwtService, AuthService } from '../services';\n\nconst MESSAGE_DEFAULT_500_ERROR = 'Unexpected error! Please try again later. You can send us via chat your questions.';\n\n/**\n * JWT Interceptor add jwt token to each request related with TaxTank API\n */\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n isRefreshingToken = false;\n tokenSubject: BehaviorSubject<string> = new BehaviorSubject<string>(null);\n\n constructor(\n public jwtService: JwtService,\n private authService: AuthService,\n @Inject('environment') private environment: any\n ) {}\n\n addToken(req: HttpRequest<any>): HttpRequest<any> {\n return req.clone({\n setHeaders: { Authorization: 'Bearer ' + this.jwtService.getToken() },\n withCredentials: true\n });\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // skip third party requests\n if (!request.url.includes(this.environment.api_uri)) {\n return next.handle(request);\n }\n\n // add token to every api request\n return next.handle(this.addToken(request)).pipe(\n // handle errors\n catchError((err: HttpErrorResponse) => {\n if (err instanceof HttpErrorResponse) {\n switch ((err as HttpErrorResponse).status) {\n // unexpected errors\n case 405:\n case 500:\n this.handle500Error();\n break;\n // expected errors\n case 401:\n return this.handle401Error(request, next, err);\n case 400:\n case 403:\n // @TODO in most cases 404 is not an error, handle in components\n // case 404:\n this.showErrorMessages(err);\n break;\n }\n }\n\n return observableThrowError(err);\n })\n );\n }\n\n /**\n * @TODO log\n * @TODO waiting for backend to handle errors in a better way\n */\n handle400Error(err: HttpErrorResponse): void {\n // this.snackBar.open(err.error['hydra:description'], '', {\n // panelClass: 'error'\n // });\n }\n\n /**\n * @TODO log\n * @TODO waiting for backend to handle errors in a better way\n */\n handle403Error(err: HttpErrorResponse): void {\n // this.snackBar.open(err.error['hydra:description'], '', {\n // panelClass: 'error'\n // });\n }\n\n /**\n * @TODO log\n */\n handle500Error(): void {\n // this.snackBar.open(MESSAGE_DEFAULT_500_ERROR, '', {\n // panelClass: 'error'\n // });\n }\n\n handle401Error(req: HttpRequest<any>, next: HttpHandler, err: HttpErrorResponse) {\n // skip 401 errors not from JWT (basiq login case or other)\n if (!err.error.message?.includes('JWT Token')) {\n return observableThrowError(err);\n }\n\n if (req.url.includes('token/refresh') || req.url.includes('login')) {\n if (req.url.includes('token/refresh')) {\n this.authService.logoutFront();\n }\n\n return observableThrowError(err);\n }\n\n // refreshing token, wait until it's done and retry the request\n if (this.isRefreshingToken) {\n return this.tokenSubject.pipe(\n filter(token => token != null),\n take(1),\n switchMap(token => next.handle(this.addToken(req)))\n );\n // refresh token\n }\n // subsequent requests should wait until refresh token is ready\n this.isRefreshingToken = true;\n this.tokenSubject.next(null);\n\n return this.authService.refresh(this.jwtService.getRefreshToken()).pipe(\n switchMap((tokens: { token: string, refreshToken: string }) => {\n this.tokenSubject.next(tokens.token);\n return next.handle(this.addToken(req));\n }),\n catchError(() => {\n this.authService.logoutFront();\n return observableThrowError(err);\n }),\n finalize(() => {\n this.isRefreshingToken = false;\n })\n );\n\n }\n\n /**\n * Handle error messages\n * @param errorResponse from which messages should be taken\n *\n * @TODO move to separated interceptor\n */\n private showErrorMessages(errorResponse: HttpErrorResponse): void {\n if (!errorResponse.error.violations) {\n // this.snackBar.open('Something went wrong', '', {\n // panelClass: 'error'\n // });\n\n return;\n }\n errorResponse.error.violations.forEach((violation: object): void => {\n // this.snackBar.open(violation['message'], '', {\n // panelClass: 'error'\n // });\n });\n }\n}\n","import { Observable } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpParams, HttpRequest\n} from '@angular/common/http';\nimport { UserSwitcherService } from '../services/user/user-switcher.service';\n\n/**\n * Impersonate current's user (manager) to client experience with help of special header\n */\n@Injectable()\nexport class UserSwitcherInterceptor implements HttpInterceptor {\n\n constructor(\n public userSwitcherService: UserSwitcherService,\n @Inject('environment') private environment: any\n ) {\n }\n\n /**\n * add token header if request url contain TaxTank API URL\n */\n switch(req: HttpRequest<any>, username: string): HttpRequest<any> {\n // skip third party api requests\n if (!req.url.includes(this.environment.api_uri) || !username) {\n return req;\n }\n \n return req.clone({ params: req.params.set('_switch_user', username) });\n\n // @TODO move to header solution when backend can support it\n // return req.clone({\n // setHeaders: {\n // HTTP_X_SWITCH_USER: username\n // }\n // });\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(this.switch(request, this.userSwitcherService.get()));\n }\n}\n","/**\r\n * Available request methods\r\n */\r\ndeclare type RequestMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\n/**\r\n * Backend endpoint class\r\n */\r\nexport class Endpoint {\r\n method: RequestMethod;\r\n pattern: string;\r\n\r\n constructor(\r\n method: RequestMethod,\r\n pattern: string,\r\n ) {\r\n this.method = method;\r\n this.pattern = pattern;\r\n }\r\n\r\n /**\r\n * check url with regexp\r\n * @param url\r\n */\r\n test(url: string): boolean {\r\n return this.regexp.test(url);\r\n }\r\n\r\n /**\r\n * Get regexp for endpoint\r\n */\r\n get regexp(): RegExp {\r\n return new RegExp(`^${this.method} \\.\\*${this.pattern}$`);\r\n }\r\n}\r\n","import { Endpoint } from './endpoint';\r\n\r\n/**\r\n * List of all app endpoints\r\n * @TODO Alex/Vik: Create some smart system for preloader endpoints.\r\n */\r\nexport const ENDPOINTS: {[key: string]: Endpoint} = {\r\n ASSETS_GET: new Endpoint('GET', '\\\\/assets\\\\/\\.\\*\\\\/\\\\d+'),\r\n\r\n ALLOCATION_RULES_GET: new Endpoint('GET', '\\\\/allocation-rules'),\r\n ALLOCATION_RULES_POST: new Endpoint('POST', '\\\\/allocation-rules'),\r\n ALLOCATION_RULES_PUT: new Endpoint('PUT', '\\\\/allocation-rules\\\\/\\\\d+'),\r\n ALLOCATION_RULES_DELETE: new Endpoint('DELETE', '\\\\/allocation-rules\\\\/\\\\d+'),\r\n\r\n BANKS_GET: new Endpoint('GET', '\\\\/banks'),\r\n BANK_ACCOUNTS_GET: new Endpoint('GET', '\\\\/bank-accounts'),\r\n BANK_ACCOUNTS_POST: new Endpoint('POST', '\\\\/bank-accounts'),\r\n BANK_ACCOUNTS_PUT: new Endpoint('PUT', '\\\\/bank-accounts\\\\/\\\\d+'),\r\n BANK_CONNECTION_POST: new Endpoint('POST', '\\\\/bank-connections'),\r\n BANK_CONNECTIONS_GET: new Endpoint('GET', '\\\\/bank-connections'),\r\n BANK_TRANSACTIONS_GET: new Endpoint('GET', '\\\\/bank-transactions'),\r\n BANK_TRANSACTIONS_DELETE: new Endpoint('DELETE', '\\\\/bank-transactions\\\\/\\\\d+'),\r\n BANK_TRANSACTIONS_IMPORT_POST: new Endpoint('POST', '\\\\/bank-transactions\\\\/\\\\d+\\\\/import'),\r\n BASIQ_ACCOUNTS_GET: new Endpoint('GET', '\\\\/basiq\\\\/accounts'),\r\n BASIQ_TOKEN_GET: new Endpoint('GET', '\\\\/basiq\\\\/tokens'),\r\n BASIQ_DELETE: new Endpoint('PUT', '\\\\/bank-connections/\\\\d+\\\\/remove-basiq'),\r\n BASIQ_USER_POST: new Endpoint('POST', '\\\\/basiq\\\\/user'),\r\n\r\n BUDGETS_GET: new Endpoint('GET', '\\\\/budgets'),\r\n BUDGETS_POST: new Endpoint('POST', '\\\\/budgets'),\r\n BUDGETS_PUT: new Endpoint('PUT', '\\\\/budgets\\\\/\\\\d+'),\r\n BUDGETS_DELETE: new Endpoint('DELETE', '\\\\/budgets\\\\/\\\\d+'),\r\n\r\n BORROWING_EXPENSES_GET: new Endpoint('GET', '\\\\/borrowing-expenses'),\r\n\r\n CHARTS_INCOME_GET: new Endpoint('GET', '\\\\/charts\\\\/\\\\incomes'),\r\n CHARTS_EXPENSES_GET: new Endpoint('GET', '\\\\/charts\\\\/\\\\expenses'),\r\n CHART_ACCOUNTS_GET: new Endpoint('GET', '\\\\/chart-accounts'),\r\n CLIENTS_GET: new Endpoint('GET', '\\\\/clients'),\r\n CLIENTS_PUT: new Endpoint('PUT', '\\\\/clients'),\r\n CLIENTS_EXCLUDE_PUT: new Endpoint('PUT', '\\\\/clients\\\\/\\\\d+\\\\/exclude'),\r\n CLIENTS_INVITES_GET: new Endpoint('GET', '\\\\/clients\\\\/\\\\invites'),\r\n CLIENTS_INVITES_POST: new Endpoint('POST', '\\\\/clients\\\\/\\\\invites'),\r\n CLIENTS_INVITES_DELETE: new Endpoint('DELETE', '\\\\/clients\\\\/\\\\invites\\\\/\\\\d+'),\r\n CLIENTS_INVITES_ACCEPT_POST: new Endpoint('POST', '\\\\/clients\\\\/\\\\invites\\\\/\\\\d+\\\\/accept'),\r\n CLIENTS_INVITES_REJECT_POST: new Endpoint('POST', '\\\\/clients\\\\/\\\\invites\\\\/\\\\d+\\\\/reject'),\r\n CLIENTS_INVITES_RESEND_POST: new Endpoint('POST', '\\\\/clients\\\\/\\\\invites\\\\/\\\\d+\\\\/resend'),\r\n CLIENT_MOVEMENTS_CLOSE: new Endpoint('PUT', '\\\\/client-movements\\\\/\\\\d+\\\\/close'),\r\n CLIENT_MOVEMENTS_GET: new Endpoint('GET', '\\\\/client-movements'),\r\n CLIENT_MOVEMENTS_POST: new Endpoint('POST', '\\\\/client-movements'),\r\n CLIENT_INCOME_TYPES_POST: new Endpoint('POST', '\\\\/client-income-types'),\r\n COUNTRIES_GET: new Endpoint('GET', '\\\\/countries'),\r\n CORELOGIC_TOKEN_GET: new Endpoint('GET', '/access\\\\/oauth\\\\/token.*$'),\r\n\r\n ANNUAL_CLIENT_DETAILS_GET: new Endpoint('GET', '\\\\/annual-client-details'),\r\n ANNUAL_CLIENT_DETAILS_POST: new Endpoint('POST', '\\\\/annual-client-details'),\r\n ANNUAL_CLIENT_DETAILS_PUT: new Endpoint('PUT', '\\\\/annual-client-details\\\\/\\\\d+'),\r\n ANNUAL_CLIENT_DETAILS_DELETE: new Endpoint('DELETE', '\\\\/annual-client-details\\\\/\\\\d+'),\r\n\r\n DEPRECIATIONS_OPENING_GET: new Endpoint('GET', '\\\\/depreciations\\\\/\\\\opening-balance\\.\\*'),\r\n DEPRECIATIONS_GET: new Endpoint('GET', '\\\\/depreciations'),\r\n DEPRECIATIONS_POST: new Endpoint('POST', '\\\\/depreciations'),\r\n DEPRECIATIONS_PUT: new Endpoint('PUT', '\\\\/depreciations\\\\/\\\\d+'),\r\n DEPRECIATIONS_DELETE: new Endpoint('DELETE', '\\\\/depreciations\\\\/\\\\d+'),\r\n\r\n DOWNLOAD_FILE_GET: new Endpoint( 'GET', '\\\\/files\\\\/\\\\d+\\\\/download'),\r\n\r\n EMPLOYEES_GET: new Endpoint('GET', '\\\\/employees'),\r\n EMPLOYEES_INVITES_GET: new Endpoint('GET', '\\\\/employees\\\\/\\\\invites'),\r\n EMPLOYEES_INVITES_DELETE: new Endpoint('DELETE', '\\\\/employees\\\\/\\\\invites\\\\/\\\\d+'),\r\n EMPLOYEES_INVITE_POST: new Endpoint('POST', '\\\\/employees\\\\/\\\\invites'),\r\n EMPLOYEES_INVITES_REJECT_POST: new Endpoint('POST', '\\\\/employees\\\\/\\\\invites\\\\/\\\\d+\\\\/\\\\reject'),\r\n EMPLOYEES_INVITES_RESEND_POST: new Endpoint('POST', '\\\\/employees\\\\/\\\\invites\\\\/\\\\d+\\\\/\\\\resend'),\r\n EMPLOYEES_DEACTIVATE_PUT: new Endpoint('PUT', '\\\\/employees\\\\/\\\\d+\\\\/\\\\deactivate'),\r\n EMPLOYEES_ACTIVATE_PUT: new Endpoint('PUT', '\\\\/employees\\\\/\\\\d+\\\\/\\\\activate'),\r\n\r\n FACEBOOK_LOGIN_POST: new Endpoint('POST', '\\\\/users\\\\/authentication\\\\/facebook'),\r\n FILE_POST: new Endpoint('POST', '\\\\/api\\\\/files'),\r\n FIRM_GET: new Endpoint('GET', '\\\\/firms'),\r\n FIRM_CURRENT_GET: new Endpoint('GET', '\\\\/firms\\\\/current'),\r\n FIRM_CURRENT_PUT: new Endpoint('PUT', '\\\\/firms\\\\/current\\.\\*'),\r\n FIRM_INVITE_POST: new Endpoint('POST', '\\\\/firms\\\\/invite'),\r\n FIRM_REGISTRATION_POST: new Endpoint('POST', '\\\\/firms\\\\/registration'),\r\n\r\n FOLDERS_GET: new Endpoint('GET', '\\\\/folders'),\r\n FOLDERS_POST: new Endpoint('POST', '\\\\/folders'),\r\n FOLDERS_PUT: new Endpoint('PUT', '\\\\/folders\\\\/\\\\d+'),\r\n FOLDERS_DELETE: new Endpoint('DELETE', '\\\\/folders\\\\/\\\\d+'),\r\n\r\n DOCUMENTS_GET: new Endpoint('GET', '\\\\/folder-documents'),\r\n DOCUMENTS_POST: new Endpoint('POST', '\\\\/folder-documents'),\r\n DOCUMENTS_PUT: new Endpoint('PUT', '\\\\/folder-documents\\\\/\\\\d+'),\r\n DOCUMENTS_DELETE: new Endpoint('DELETE', '\\\\/folder-documents\\\\/\\\\d+'),\r\n\r\n GOOGLE_LOGIN_POST: new Endpoint('POST', '\\\\/users\\\\/authentication\\\\/google'),\r\n\r\n INCOME_SOURCES_GET: new Endpoint('GET', '\\\\/income-sources'),\r\n INCOME_SOURCES_POST: new Endpoint('POST', '\\\\/income-sources'),\r\n INCOME_SOURCES_PUT: new Endpoint('PUT', '\\\\/income-sources'),\r\n INCOME_SOURCES_DELETE: new Endpoint('DELETE', '\\\\/income-sources\\\\/\\\\d+'),\r\n INCOME_SOURCE_FORECAST_GET: new Endpoint('GET', '\\\\/income-source-forecasts'),\r\n INCOME_SOURCE_FORECAST_POST: new Endpoint('POST', '\\\\/income-source-forecasts'),\r\n INCOME_SOURCE_FORECAST_PUT: new Endpoint('PUT', '\\\\/income-source-forecasts'),\r\n INCOME_SOURCE_FORECAST_DELETE: new Endpoint('DELETE', '\\\\/income-source-forecasts\\\\/\\\\d+'),\r\n INCOME_SOURCE_TYPES_GET: new Endpoint('GET', '\\\\/income-source-types'),\r\n\r\n LOANS_GET: new Endpoint('GET', '\\\\/bank-accounts\\\\/loans'),\r\n LOANS_POST: new Endpoint('POST', '\\\\/bank-accounts\\\\/loans'),\r\n LOANS_PUT: new Endpoint('PUT', '\\\\/bank-accounts\\\\/loans/\\\\d+'),\r\n LOANS_PAYOUT_POST: new Endpoint('POST', '\\\\/loans\\\\/\\\\d+\\\\/payout'),\r\n LOANS_PAYOUT_PUT: new Endpoint('PUT', '\\\\/loans\\\\/\\\\d+\\\\/payout\\\\/\\\\d+'),\r\n LOANS_PAYOUT_DELETE: new Endpoint('DELETE', '\\\\/loans\\\\/\\\\d+\\\\/payout\\\\/\\\\d+'),\r\n LOANS_CALCULATION_POST: new Endpoint('POST', '\\\\/bank-accounts\\\\/loans\\\\/calculation'),\r\n LOGIN_POST: new Endpoint('POST', '\\\\/login'),\r\n\r\n HOLDINGS_GET: new Endpoint('GET', '\\\\/holdings'),\r\n HOLDINGS_POST: new Endpoint('POST', '\\\\/holdings'),\r\n HOLDINGS_PUT: new Endpoint('PUT', '\\\\/holdings\\\\/\\\\d+'),\r\n HOLDINGS_DELETE: new Endpoint('DELETE', '\\\\/holdings\\\\/\\\\d+'),\r\n HOLDING_TYPES_GET: new Endpoint('GET', '\\\\/holding-types'),\r\n HOLDING_TYPES_POST: new Endpoint('POST', '\\\\/holding-types'),\r\n HOLDING_TYPES_PUT: new Endpoint('PUT', '\\\\/holding-types\\\\/\\\\d+'),\r\n HOLDING_TYPES_DELETE: new Endpoint('DELETE', '\\\\/holding-types\\\\/\\\\d+'),\r\n HOLDING_SALES_GET: new Endpoint('GET', '\\\\/holding-sales'),\r\n HOLDING_SALES_POST: new Endpoint('POST', '\\\\/holding-sales'),\r\n HOLDING_SALES_PUT: new Endpoint('PUT', '\\\\/holding-sales\\\\/\\\\d+'),\r\n HOLDING_SALES_DELETE: new Endpoint('DELETE', '\\\\/holding-sales\\\\/\\\\d+'),\r\n\r\n NOTIFICATIONS_GET: new Endpoint('GET', '\\\\/service-notifications'),\r\n\r\n OCCUPATIONS_GET: new Endpoint('GET', '\\\\/occupations'),\r\n\r\n PROPERTIES_GET: new Endpoint('GET', '\\\\/properties'),\r\n PROPERTIES_POST: new Endpoint('POST', '\\\\/properties'),\r\n PROPERTY_PUT: new Endpoint('PUT', '\\\\/properties/\\\\d+'),\r\n PROPERTY_SUBSCRIPTIONS_DELETE: new Endpoint('DELETE', '\\\\/property-subscriptions\\\\/\\\\d+'),\r\n PROPERTY_SUBSCRIPTIONS_POST: new Endpoint('POST', '\\\\/property-subscriptions'),\r\n PROPERTIES_PUT: new Endpoint('PUT', '\\\\/properties'),\r\n PROPERTIES_CATEGORIES_EQUITY_GET: new Endpoint('GET', '\\\\/properties\\\\/categories\\\\/equity'),\r\n PROPERTIES_CATEGORIES_GET: new Endpoint('GET', '\\\\/properties\\\\/categories'),\r\n PROPERTIES_CATEGORIES_PUT: new Endpoint('PUT', '\\\\/properties\\\\/categories\\\\/\\\\d+'),\r\n PROPERTIES_CATEGORIES_POST: new Endpoint('POST', '\\\\/properties\\\\/categories'),\r\n PROPERTIES_CATEGORIES_MOVEMENTS_GET: new Endpoint('GET', '\\\\/properties\\\\/\\\\d+\\\\/category-movements'),\r\n PROPERTIES_CATEGORY_MOVEMENTS_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/category-movements'),\r\n PROPERTIES_CATEGORY_MOVEMENTS_PUT: new Endpoint('PUT', '\\\\/properties\\\\/\\\\d+\\\\/category-movements\\\\/\\\\d+'),\r\n PROPERTIES_SHARES_PUT: new Endpoint('PUT', '\\\\/properties\\\\/shares\\\\/\\\\d+'),\r\n PROPERTIES_SHARES_GET: new Endpoint('GET', '\\\\/properties\\\\/shares'),\r\n PROPERTIES_SHARES_POST: new Endpoint('POST', '\\\\/properties\\\\/shares'),\r\n PROPERTIES_DEACTIVATE_PUT: new Endpoint('PUT', '\\\\/properties\\\\/\\\\d+\\\\/deactivate'),\r\n PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_GET: new Endpoint('GET', '\\\\/properties\\\\/\\\\d+\\\\/depreciation-capital-projects'),\r\n PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/depreciation-capital-projects'),\r\n PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_PUT: new Endpoint('PUT', '\\\\/properties\\\\/\\\\d+\\\\/depreciation-capital-projects\\\\/\\\\d+'),\r\n PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_DELETE: new Endpoint('DELETE', '\\\\/properties\\\\/\\\\d+\\\\/depreciation-capital-projects\\\\/\\\\d+'),\r\n PROPERTIES_DOCUMENTS_GET: new Endpoint('GET', '\\\\/property-documents'),\r\n PROPERTIES_DOCUMENTS_POST: new Endpoint('POST', '\\\\/property-documents'),\r\n PROPERTIES_DOCUMENTS_PUT: new Endpoint('PUT', '\\\\/property-documents\\\\/\\\\d+'),\r\n PROPERTIES_DOCUMENTS_DELETE: new Endpoint('DELETE', '\\\\/property-documents\\\\/\\\\d+'),\r\n PROPERTIES_PHOTO_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/photo\\.\\*'),\r\n PROPERTIES_SALES_GET: new Endpoint('GET', '\\\\/properties\\\\/sales'),\r\n PROPERTIES_SUGGESTIONS_GET: new Endpoint('GET', '/property\\\\/\\\\w+\\\\/v2\\\\/.*$'),\r\n PROPERTIES_VALUATIONS_DOCUMENTS_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/valuations\\\\/\\\\d+\\\\/documents'),\r\n BORROWING_REPORTS_GET: new Endpoint('GET', '\\\\/borrowing-reports'),\r\n BORROWING_REPORTS_POST: new Endpoint('POST', '\\\\/borrowing-reports'),\r\n BORROWING_REPORTS_PUT: new Endpoint('PUT', '\\\\/borrowing-reports/\\\\d+'),\r\n\r\n // @TODO rename\r\n PRORATION_COST_POST: new Endpoint('PUT', '\\\\/service-subscriptions\\\\/\\\\d+\\\\/proration-cost'),\r\n\r\n SALARY_FORECAST_GET: new Endpoint('GET', '\\\\/salary-forecasts'),\r\n SALARY_FORECAST_POST: new Endpoint('POST', '\\\\/salary-forecasts'),\r\n SALARY_FORECAST_PUT: new Endpoint('PUT', '\\\\/salary-forecasts'),\r\n SERVICE_PRICES_GET: new Endpoint('GET', '\\\\/service-prices'),\r\n SERVICE_PRODUCTS_GET: new Endpoint('GET', '\\\\/service-products'),\r\n SERVICE_PAYMENTS_GET: new Endpoint('GET', '\\\\/service-payments'),\r\n SERVICE_SUBSCRIPTIONS_GET: new Endpoint('GET', '\\\\/service-subscriptions'),\r\n SERVICE_SUBSCRIPTIONS_POST: new Endpoint('POST', '\\\\/service-subscriptions'),\r\n SERVICE_SUBSCRIPTIONS_CANCEL: new Endpoint('PUT', '\\\\/service-subscriptions\\\\/\\\\d+\\\\/cancel'),\r\n SERVICE_SUBSCRIPTIONS_RENEW: new Endpoint('PUT', '\\\\/service-subscriptions\\\\/\\\\d+\\\\/renewal'),\r\n SERVICE_PAYMENT_INVOICE_URL_GET: new Endpoint('GET', '\\\\/service-payments\\\\/\\\\d+\\\\/invoice-url'),\r\n SERVICE_PAYMENT_METHODS_GET: new Endpoint('GET', '\\\\/service-payment-methods'),\r\n SERVICE_PAYMENT_METHODS_DELETE: new Endpoint('DELETE', '\\\\/service-payment-methods\\\\/\\\\d+'),\r\n SERVICE_PAYMENT_METHODS_GET_SECRET: new Endpoint('GET', '\\\\/service-payment-methods\\\\/setup-intent-secret'),\r\n SERVICE_PAYMENT_METHODS_DEFAULT_PUT: new Endpoint('PUT', '\\\\/service-payment-methods\\\\/\\\\d+\\\\/default'),\r\n SUBSCRIPTION_ITEMS_PUT: new Endpoint('PUT', '\\\\/service-subscriptions\\\\/\\\\d+\\\\/items'),\r\n\r\n SOLE_BUSINESSES_GET: new Endpoint('GET', '\\\\/sole-businesses'),\r\n SOLE_BUSINESSES_POST: new Endpoint('POST', '\\\\/sole-businesses'),\r\n SOLE_BUSINESSES_PUT: new Endpoint('PUT', '\\\\/sole-businesses\\\\/\\\\d+'),\r\n SOLE_BUSINESS_LOSSES_GET: new Endpoint('GET', '\\\\/sole-business-losses'),\r\n SOLE_BUSINESS_LOSSES_POST: new Endpoint('POST', '\\\\/sole-business-losses'),\r\n SOLE_BUSINESS_LOSSES_PUT: new Endpoint('PUT', '\\\\/sole-business-losses\\\\/\\\\d+'),\r\n SOLE_BUSINESS_LOSS_OFFSET_RULES_GET: new Endpoint('GET', '\\\\/sole-business-loss-offset-rules'),\r\n SOLE_BUSINESS_LOGO_POST: new Endpoint('POST', '\\\\/sole-businesses\\\\/\\\\d+\\\\/logo'),\r\n\r\n SOLE_CONTACTS_GET: new Endpoint('GET', '\\\\/sole-contacts'),\r\n SOLE_CONTACTS_POST: new Endpoint('POST', '\\\\/sole-contacts'),\r\n SOLE_CONTACTS_PUT: new Endpoint('PUT', '\\\\/sole-contacts\\\\/\\\\d+'),\r\n\r\n BAS_REPORTS_GET: new Endpoint('GET', '\\\\/bas-reports'),\r\n BAS_REPORTS_POST: new Endpoint('POST', '\\\\/bas-reports'),\r\n BAS_REPORTS_PUT: new Endpoint('PUT', '\\\\/bas-reports\\\\/\\\\d+'),\r\n\r\n BUSINESS_ACTIVITIES_GET: new Endpoint('GET', '\\\\/sole-business-activities'),\r\n\r\n SOLE_DEPRECIATION_METHODS_GET: new Endpoint('GET', '\\\\/sole-depreciation-methods'),\r\n SOLE_DEPRECIATION_METHODS_PUT: new Endpoint('PUT', '\\\\/sole-depreciation-methods\\\\/\\\\d+'),\r\n\r\n SOLE_DETAILS_GET: new Endpoint('GET', '\\\\/sole-details'),\r\n SOLE_DETAILS_PUT: new Endpoint('PUT', '\\\\/sole-details\\\\/\\\\d+'),\r\n\r\n SOLE_FORECASTS_POST: new Endpoint('POST', '\\\\/sole-forecasts'),\r\n SOLE_FORECASTS_PUT: new Endpoint('PUT', '\\\\/sole-forecasts\\\\/\\\\d+'),\r\n\r\n SOLE_INVOICES_GET: new Endpoint('GET', '\\\\/sole-invoices'),\r\n SOLE_INVOICES_POST: new Endpoint('POST', '\\\\/sole-invoices'),\r\n SOLE_INVOICES_PUT: new Endpoint('PUT', '\\\\/sole-invoices\\\\/\\\\d+'),\r\n SOLE_INVOICES_DELETE: new Endpoint('DELETE', '\\\\/sole-invoices\\\\/\\\\d+'),\r\n SOLE_INVOICES_EMAIL_POST: new Endpoint('POST', '\\\\/sole-invoices\\\\/\\\\d+\\\\/send'),\r\n SOLE_INVOICE_TEMPLATES_GET: new Endpoint('GET', '\\\\/sole-invoice-templates'),\r\n SOLE_INVOICE_TEMPLATES_POST: new Endpoint('POST', '\\\\/sole-invoice-templates'),\r\n SOLE_INVOICE_TEMPLATES_PUT: new Endpoint('PUT', '\\\\/sole-invoice-templates\\\\/\\\\d+'),\r\n SOLE_INVOICE_TEMPLATES_DELETE: new Endpoint('DELETE', '\\\\/sole-invoice-templates\\\\/\\\\d+'),\r\n\r\n TAX_EXEMPTIONS_GET: new Endpoint('GET', '\\\\/tax-exemptions'),\r\n\r\n TAX_CALCULATION_POST: new Endpoint('POST', '\\\\/tax-calculation'),\r\n TAX_REVIEWS_GET: new Endpoint('GET', '\\\\/tax-reviews'),\r\n TAX_REVIEWS_DELETE: new Endpoint('DELETE', '\\\\/tax-reviews\\\\/\\\\d+'),\r\n TAX_REVIEWS_POST: new Endpoint('POST', '\\\\/tax-reviews'),\r\n TAX_REVIEWS_PUT: new Endpoint('PUT', '\\\\/tax-reviews\\\\/\\\\d+'),\r\n TAX_SUMMARY_ACTUAL_GET: new Endpoint('GET', '\\\\/tax-summary\\\\/actuals'),\r\n TAX_SUMMARY_FORECAST_GET: new Endpoint('GET', '\\\\/tax-summary\\\\/forecasts'),\r\n TRANSACTION_DELETE: new Endpoint('DELETE', '\\\\/transactions\\\\/\\\\d+'),\r\n TRANSACTION_PUT: new Endpoint('PUT', '\\\\/transactions\\\\/\\\\d+'),\r\n TRANSACTIONS_GET: new Endpoint('GET', '\\\\/transactions'),\r\n TRANSACTIONS_POST: new Endpoint('POST', '\\\\/transactions'),\r\n TRANSACTIONS_PUT: new Endpoint('PUT', '\\\\/transactions'),\r\n TRANSACTIONS_ALLOCATIONS_GET: new Endpoint('GET', '\\\\/transactions-allocations'),\r\n TRANSACTIONS_ALLOCATIONS_POST: new Endpoint('POST', '\\\\/transactions-allocations'),\r\n TRANSACTIONS_ALLOCATIONS_DELETE: new Endpoint('DELETE', '\\\\/transactions-allocations\\\\/\\\\d+'),\r\n\r\n USER_CONFIRMATION_POST: new Endpoint('POST', '\\\\/users\\\\/confirmation'),\r\n USER_CONFIRMATION_RESEND_POST: new Endpoint('POST', '\\\\/users\\\\/confirmation\\\\/resend'),\r\n USER_CURRENT_GET: new Endpoint('GET', '\\\\/users\\\\/current'),\r\n USER_CURRENT_PASSWORD_PUT: new Endpoint('PUT', '\\\\/password\\\\/change'),\r\n USER_EVENT_SETTINGS_GET: new Endpoint('GET', '\\\\/user-event-settings'),\r\n USER_EVENT_TYPES_GET: new Endpoint('GET', '\\\\/user-event-types'),\r\n USER_INVITE_DELETE: new Endpoint('DELETE', '\\\\/users\\\\/invite\\\\/\\\\d+'),\r\n USER_INVITE_POST: new Endpoint('POST', '\\\\/users\\\\/invite'),\r\n USER_INVITE_RESEND_POST: new Endpoint('POST', '\\\\/users\\\\/invite/\\\\d+\\\\/resend'),\r\n USER_PUT: new Endpoint('PUT', '\\\\/users\\\\/\\\\d+'),\r\n USER_REGISTRATION_POST: new Endpoint('POST', '\\\\/users\\\\/registration'),\r\n USER_SEARCH_GET: new Endpoint('GET', '\\\\/users\\\\/search\\.\\*'),\r\n USER_UPDATE_PHOTO_POST: new Endpoint('POST', '\\\\/users\\\\/photo\\.\\*'),\r\n USER_STATUS_PUT: new Endpoint('PUT', '\\\\/users\\\\/status'),\r\n USER_RECOVERY_PASSWORD_PUT: new Endpoint('PUT', '\\\\/users\\\\/password\\\\/recovery'),\r\n USER_PASSWORD_RESET_PUT: new Endpoint('PUT', '\\\\/password\\\\/reset'),\r\n\r\n VEHICLES_GET: new Endpoint('GET', '\\\\/vehicles'),\r\n VEHICLES_POST: new Endpoint('POST', '\\\\/vehicles'),\r\n VEHICLES_PUT: new Endpoint('PUT', '\\\\/vehicles\\\\/\\\\d+'),\r\n VEHICLE_CLAIMS_GET: new Endpoint('GET', '\\\\/vehicle-claims'),\r\n VEHICLE_CLAIMS_POST: new Endpoint('POST', '\\\\/vehicle-claims'),\r\n VEHICLE_CLAIMS_PUT: new Endpoint('PUT', '\\\\/vehicle-claims\\\\/\\\\d+'),\r\n VEHICLE_LOGBOOKS_GET: new Endpoint('GET', '\\\\/vehicles\\\\/logbooks'),\r\n VEHICLE_LOGBOOKS_POST: new Endpoint('POST', '\\\\/vehicles\\\\/logbooks'),\r\n VEHICLE_LOGBOOKS_PUT: new Endpoint('PUT', '\\\\/vehicles\\\\/logbooks\\\\/\\\\d+'),\r\n VEHICLE_LOGBOOKS_DELETE: new Endpoint('DELETE', '\\\\/vehicles\\\\/logbooks\\\\/\\\\d+'),\r\n VEHICLE_CLAIM_DETAILS_GET: new Endpoint('GET', '\\\\/vehicle-claim-details'),\r\n VEHICLE_CLAIM_DETAILS_POST: new Endpoint('POST', '\\\\/vehicle-claim-details'),\r\n VEHICLE_CLAIM_DETAILS_PUT: new Endpoint('PUT', '\\\\/vehicle-claim-details\\\\/\\\\d+'),\r\n};\r\n","import { Injectable } from '@angular/core';\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { PreloaderService } from '../services';\nimport { Endpoint } from '../models/endpoint/endpoint';\nimport { ENDPOINTS } from '../models/endpoint/endpoints.const';\n\n/**\n * interceptor for preloader handling\n */\n@Injectable()\nexport class PreloaderInterceptor implements HttpInterceptor {\n\n constructor(\n private preloaderService: PreloaderService\n ) {}\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n const endpoint: Endpoint = this.findEndpoint(`${request.method} ${request.url}`);\n if (endpoint) {\n this.preloaderService.add(endpoint);\n\n return next.handle(request).pipe(\n finalize((): void => {\n this.preloaderService.delete(endpoint);\n })\n );\n }\n\n return next.handle(request);\n }\n\n private findEndpoint(requestPath: string): Endpoint {\n return Object.values(ENDPOINTS).find((endpoint: Endpoint): boolean => endpoint.test(requestPath));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\nimport { BasiqToken } from '../models/bank/basiq/basiq-token';\nimport { BasiqTokenService } from '../services/http/bank/basiq/basiq-token.service';\nimport { BasiqService } from '../services/http/bank/basiq/basiq.service';\n\n/**\n * Interceptor which adds user's basiq token to any http request to basiq api\n */\n@Injectable()\nexport class BasiqTokenInterceptor implements HttpInterceptor {\n\n constructor(\n private basiqTokenService: BasiqTokenService\n ) {\n }\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n // skip non-basiq requests\n if (!request.url.includes(BasiqService.basiqApiUrl)) {\n return next.handle(request);\n }\n\n return this.basiqTokenService.getFirst().pipe(\n mergeMap((token: BasiqToken) => next.handle(this.addToken(request, token)))\n );\n }\n\n private addToken(request: HttpRequest<unknown>, token: BasiqToken): HttpRequest<unknown> {\n return request.clone({\n setHeaders: {\n Authorization: 'Bearer ' + token.value\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\nimport { BasiqService } from '../services/http/bank/basiq/basiq.service';\nimport { UserService } from '../services/http/user/user.service';\n\n/**\n * Interceptor which check if client's basiq id exist and request it if not\n */\n@Injectable()\nexport class BasiqClientIdInterceptor implements HttpInterceptor {\n constructor(\n private userService: UserService\n ) {\n }\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n // Check if 'client id' URL segment contains null instead of id\n if (!request.url.startsWith(`${BasiqService.basiqApiUrl}/users/null`)) {\n return next.handle(request)\n }\n\n return this.userService.createBasiq().pipe(\n mergeMap((basiqClientId: string) => next.handle(this.addId(request, basiqClientId)))\n );\n }\n\n private addId(request: HttpRequest<unknown>, basiqClientId: string): HttpRequest<unknown> {\n return request.clone({\n url: request.url.replace('null', basiqClientId)\n });\n }\n}\n","import { NgModule } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { CorelogicInterceptor } from './corelogic-interceptor';\r\nimport { FinancialYearInterceptor } from './financial-year-interceptor';\r\nimport { JwtInterceptor } from './jwt-interceptor';\r\nimport { UserSwitcherInterceptor } from './user-switcher-interceptor';\r\nimport { PreloaderInterceptor } from './preloader.interceptor';\r\nimport { BasiqTokenInterceptor } from './basiq-token.interceptor';\r\nimport { BasiqClientIdInterceptor } from './basiq-client-id.interceptor';\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: CorelogicInterceptor,\r\n multi: true\r\n },\r\n // @TODO move to user module\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: FinancialYearInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: JwtInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: UserSwitcherInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: PreloaderInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: BasiqTokenInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: BasiqClientIdInterceptor,\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InterceptorsModule {\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InterceptorsModule } from './interceptors/interceptors.module';\n\n/**\n * https://angular.io/guide/creating-libraries\n */\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n InterceptorsModule\n ]\n})\nexport class TtCoreModule {\n public static forRoot(environment: object): ModuleWithProviders<TtCoreModule> {\n localStorage.setItem('api_uri', environment['api_uri']);\n\n return {\n ngModule: TtCoreModule,\n providers: [\n {\n provide: 'environment',\n useValue: environment\n }\n ]\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\n\n/**\n * extended version of currency pipe\n */\n@Pipe({\n name: 'appCurrency',\n standalone: true,\n})\nexport class AppCurrencyPipe extends CurrencyPipe implements PipeTransform {\n transform(value: number | string, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): any {\n // 2 non-zero decimals by default (43.43344 => 43.43, 0.0000114201553151 => $0.000011)\n digitsInfo = digitsInfo ?? '1.0-' + (value.toString().match(/[1-9]/)?.index || 2);\n\n return super.transform(value, currencyCode, display, digitsInfo, locale);\n }\n}\n","export enum ClientDetailsMedicareExemptionEnum {\n\tNO = 0,\n\tHALF = 1,\n\tFULL = 2,\n}\n","export enum ClientDetailsWorkDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}\n","export enum ClientDetailsWorkingHolidayMakerEnum {\n\tNO = 0,\n\tVISA417 = 1,\n\tVISA462 = 2,\n}\n","export enum DepreciationCalculationPercentEnum {\n\tPRIME_COST = 100,\n\tDIMINISHING = 200,\n\tCAPITAL = 2.5,\n\tLVP = 37.5,\n\tLVP_FIRST = 18.75,\n}\n","export enum DepreciationWriteOffAmountEnum {\n\tPLANT_EQUIPMENT = 300,\n\tBORROWING_EXPENSES = 100,\n}\n","export enum InviteStatusEnum {\n\tPENDING = 1,\n\tACCEPTED = 2,\n\tREJECTED = 3,\n}\n","export enum PropertyDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}\n","export enum PropertyShareAccessEnum {\n\tVIEW = 1,\n\tEDIT = 2,\n}\n","export enum RegistrationInviteStatusEnum {\n\tPENDING = 1,\n\tACCEPTED = 2,\n}\n","export enum ServiceNotificationStatusEnum {\n\tSENT = 1,\n\tDELIVERED = 2,\n\tREAD = 3,\n}\n","export enum ServiceNotificationTypeEnum {\n\tUSER = 1,\n\tSYSTEM = 2,\n}\n","export enum ServicePaymentStatusEnum {\n\tFAIL = 0,\n\tSUCCESS = 1,\n}\n","export enum ServicePriceRecurringIntervalEnum {\n\tDAY = 1,\n\tWEEK = 2,\n\tMONTH = 3,\n\tYEAR = 4,\n}\n","export enum SpareDocumentSpareTypeEnum {\n\tDOCUMENT = 1,\n\tRECEIPT = 2,\n}\n","export enum TaxCalculationMedicareExemptionEnum {\n\tHALF = 1,\n\tFULL = 2,\n}\n","export enum TaxCalculationTypeEnum {\n\tTAX_WITHHELD = 0,\n\tTAX_OFFSET_MIDDLE = 1,\n\tTAX_WITHHELD_ANNUAL = 2,\n\tMEDICARE = 3,\n\tETP_GENUINE = 4,\n\tETP_NON_GENUINE = 5,\n\tETP_DEATH_NON_DEPENDANT = 6,\n\tETP_DEATH_DEPENDANT = 7,\n\tTAX_OFFSET_LOW = 8,\n\tETP_TAX_FREE = 9,\n}\n","export enum TaxSummaryListEnum {\n\tINTEREST_DEDUCTIONS = 9,\n\tOTHER_RENTAL_DEDUCTIONS = 10,\n\tWORK_EXPENSES = 6,\n\tDEPRECIATION = 8,\n\tCAPITAL_WORKS = 11,\n\tOTHER_DEDUCTIONS = 17,\n\tSALARY = 1,\n\tGROSS_RENT = 7,\n\tTAXABLE_INCOME = 18,\n\tTAX_WITHHELD = 19,\n\tMEDICARE = 20,\n\tTAX_OFFSETS = 21,\n\tTAX_PAYABLE = 22,\n}\n","export enum TaxSummaryTaxSummaryEnum {\n\tINTEREST_DEDUCTIONS = 9,\n\tOTHER_RENTAL_DEDUCTIONS = 10,\n\tWORK_EXPENSES = 6,\n\tDEPRECIATION = 8,\n\tCAPITAL_WORKS = 11,\n\tOTHER_DEDUCTIONS = 17,\n\tSALARY = 1,\n\tGROSS_RENT = 7,\n\tTAXABLE_INCOME = 18,\n\tTAX_WITHHELD = 19,\n\tMEDICARE = 20,\n\tTAX_OFFSETS = 21,\n\tTAX_PAYABLE = 22,\n}\n","export enum TicketFeedbackEnum {\n\tHAPPY = 1,\n\tUNHAPPY = 2,\n}\n","export enum TicketStatusEnum {\n\tOPEN = 1,\n\tIN_PROGRESS = 2,\n\tMISSING_INFO = 3,\n\tIN_REVIEW = 4,\n\tCOMPLETED = 5,\n}\n","export enum TicketTypesEnum {\n\tCLIENT_REQUEST = 1,\n}\n","export enum UserEventStatusEnum {\n\tNO_NEED_ACTION = 1,\n\tNEED_ACTION = 2,\n\tDONE = 3,\n\tREFUSED = 4,\n\tOUTDATED = 5,\n}\n","export enum UserEventTypeUserTypeEnum {\n\tREGISTERED = 1000,\n\tPASSWORD_RESET = 1001,\n\tAPP_FEATURES = 1010,\n}\n","export enum UserEventTypeEmployeeTypeEnum {\n\tFIRM_INVITE_TO_REGISTER = 3000,\n\tFIRM_INVITE = 3001,\n\tCLIENT_INVITE_ACCEPTED = 3002,\n\tCLIENT_INVITE_REJECTED = 3003,\n\tCLIENT_INVITE_REGISTERED = 3004,\n\tFIRM_NEW_CLIENT = 3005,\n\tFIRM_LOST_CLIENT = 3006,\n\tEMPLOYEE_INVITE = 3010,\n\tEMPLOYEE_LOST_CLIENT = 3011,\n\tEMPLOYEE_NEW_CLIENT = 3012,\n\tEMPLOYEE_INVITE_ACCEPTED = 3013,\n\tEMAIL_CONFIRMED = 3020,\n\tTAX_REVIEW_REQUESTED = 3030,\n}\n","export enum UserEventTypeClientTypeEnum {\n\tSUBSCRIBED = 2000,\n\tUNSUBSCRIBED = 2001,\n\tSUBSCRIPTION_UPDATE = 2004,\n\tSUBSCRIPTION_TRIAL_UPDATE = 2005,\n\tCLIENT_INVITE = 2010,\n\tCLIENT_INVITE_TO_REGISTER = 2011,\n\tFIRM_INVITE_ACCEPTED = 2012,\n\tFIRM_INVITE_REJECTED = 2013,\n\tFIRM_INVITE_REGISTERED = 2014,\n\tPROPERTY_SHARE_INVITE = 2020,\n PROPERTY_SHARE_INVITE_TO_REGISTER = 2021,\n PROPERTY_SHARE_INVITE_ACCEPTED = 2022,\n PROPERTY_SHARE_INVITE_REJECTED = 2023,\n PROPERTY_SHARE_INVITE_REGISTERED = 2024,\n PROPERTY_SHARE_CHANGE_REQUESTED = 2025,\n PROPERTY_SHARE_CHANGE_ACCEPTED = 2026,\n PROPERTY_SHARE_CHANGE_REJECTED = 2027,\n\tBASIQ_NEW_ACCOUNTS = 2030,\n\tBASIQ_FIRST_IMPORT_COMPLETE = 2031,\n\tBASIQ_AUTHORIZATION_FAIL = 2032,\n\tTRANSACTION_ALLOCATE_REMINDER = 2033,\n\tREGISTRATION_INVITE = 2040,\n\tREGISTRATION_INVITE_ACCEPTED = 2041,\n\tEMAIL_CONFIRMED = 2050,\n\tTAX_REVIEW_REQUESTED = 2060,\n}\n","export enum UserMedicareExemptionEnum {\n\tNO = 0,\n\tHALF = 1,\n\tFULL = 2,\n}\n","export enum UserTitleEnum {\n MR = 1,\n MRS = 2,\n MS = 3,\n MISS = 4,\n DR = 5,\n}\n","export enum UserWorkDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}\n","export enum UserWorkingHolidayMakerEnum {\n\tNO = 0,\n\tVISA417 = 1,\n\tVISA462 = 2,\n}\n","export enum VehicleLogbookPurposeEnum {\n\tBUSINESS = 1,\n\tPERSONAL = 2,\n}\n","export enum AlphabetColorsEnum {\r\n A = '#9CC3D5',\r\n B = '#E69A8D',\r\n C = '#ED2B33',\r\n D = '#E3CD81',\r\n E = '#343148',\r\n F = '#2C5F2D',\r\n G = '#FFA177',\r\n H = '#435E55',\r\n I = '#2BAE66',\r\n J = '#3C1053',\r\n K = '#DD4132',\r\n L = '#FC766A',\r\n M = '#ADEFD1',\r\n N = '#79C000',\r\n O = '#D198C5',\r\n P = '#5B84B1',\r\n Q = '#A13941',\r\n R = '#D85A7F',\r\n S = '#00203F',\r\n T = '#42EADD',\r\n U = '#5F4B8B',\r\n V = '#FDDB27',\r\n W = '#CDB599',\r\n X = '#4B878B',\r\n Y = '#B0B8B4',\r\n Z = '#E3C9CE'\r\n}\r\n","export enum ExportFormatEnum {\n PDF = 'PDF',\n XLSX = 'XLSX'\n}\n","export enum IconsFileEnum {\n JPG = 'icon-image-jpg',\n PDF = 'icon-doc-pdf',\n DOC = 'icon-doc'\n}\n","import { Type } from 'class-transformer';\n\n// Todo extend from the base model when the backend is ready TT-555\nexport class IncomePosition {\n @Type(() => Date)\n date: Date;\n income: number;\n expenses: number;\n otherIncome: number;\n otherDeductions: number;\n incomeForecast: number;\n incomeSourceForecast: number;\n}\n","export enum PdfOrientationEnum {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape'\n}\n","import { PdfOrientationEnum } from './pdf-orientation.enum';\n\n/**\n * Class with entities for generated PDF file\n */\nexport class PdfSettings {\n title = '';\n filename = 'export';\n orientation: PdfOrientationEnum = PdfOrientationEnum.PORTRAIT;\n /**\n * Optional parameters: description and subtitle is after the title\n */\n description: string = '';\n subtitle: string = '';\n}\n","/**\n * Constant with list of URLs\n */\nexport const MODULE_URL_LIST: { [key: string]: string } = {\n dashboard: '/client/dashboard',\n propertyTank: '/client/property-tank',\n workTank: '/client/work-tank',\n spareTank: '/client/spare-tank',\n taxSummary: '/client/tax-summary',\n myAccount: '/client/my-account/subscription'\n};\n","/**\n * Enum with user event setting fields\n */\nexport enum UserEventSettingFieldEnum {\n BY_EMAIL = 'byEmail',\n BY_NOTIFICATION = 'byNotification',\n FREQUENCY = 'frequency'\n}\n","/**\n * Interface for inserts video (iframe, video)\n */\n\nexport interface VideoSource {\n name: string;\n src: string;\n webContentLink: string;\n videoMediaMetadata: {\n width: number,\n height: number,\n durationMillis: string\n }\n}\n","// deep clone for entity\nexport function cloneDeep(array: any): any {\n return JSON.parse(JSON.stringify(array));\n}\n","/**\n * Create date from string entity (or return null if entity is not parsable)\n * @param date\n */\nexport function createDate(date: string): Date {\n return Date.parse(date) ? new Date(date) : null;\n}\n","import { AppFile } from '../models';\nimport { IconsFileEnum } from '../models/file/icons-file.enum';\n\n/**\n * Function which returns icon depends on document extension\n * @param document\n */\nexport function getDocIcon(file: AppFile): IconsFileEnum {\n switch (file.mimeType) {\n case 'image/gif':\n case 'image/jpeg':\n case 'image/png':\n return IconsFileEnum.JPG;\n\n case 'application/pdf':\n return IconsFileEnum.PDF;\n\n default:\n return IconsFileEnum.DOC;\n }\n}\n","export function compareMatOptions(option: any, value: any): boolean {\r\n if (!option) {\r\n return false;\r\n }\r\n\r\n return option.id === value.id;\r\n}\r\n\r\nexport function displayMatOptions(option: object): string {\r\n if (!option) {\r\n return '';\r\n }\r\n\r\n return option['name'];\r\n}\r\n","/**\n * Compare function, that used for sortData method\n * @param a: first comparison argument\n * @param b: second comparison argument\n * @param isAsc: is ascending sorting flag\n */\nexport function compare(a: number | string, b: number | string, isAsc: boolean): number {\n return (a < b ? -1 : 1) * (isAsc ? 1 : -1);\n}\n","import { TaxReview } from '../models/tax-review/tax-review';\n\n/**\n * Filter predicate function to search inside TaxReview class fields\n * @param data in which query will be searched\n * @param filter: search query\n */\nexport function taxReviewFilterPredicate(data: TaxReview, filter: string): boolean {\n return data.client.fullName.toLowerCase().includes(filter) ||\n data.employee.fullName.toLowerCase().includes(filter);\n}\n","import { AbstractControl, AbstractControlOptions, AsyncValidatorFn, UntypedFormGroup, ValidatorFn } from '@angular/forms';\nimport { EventEmitter, Type } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\nimport isEqual from 'lodash/isEqual';\n\n/**\n * Abstract form class\n * @TODO rename to AbstractFormGroup\n * @TODO Alex TT-2190: refactor: check and improve logic\n */\nexport abstract class AbstractForm<Model> extends UntypedFormGroup {\n /**\n * Initial form value for comparison with changes to check saved/unsaved state\n */\n initialValue: Model;\n\n protected modelClass: Type<Model>;\n model: Model;\n submitted: boolean;\n\n /**\n * @TODO Alex bad name, it's also about unchanged\n * Flag display if some form values changed\n */\n unsaved = false;\n\n onSubmit: EventEmitter<Model> = new EventEmitter();\n\n protected constructor(\n controls: {[key: string]: AbstractControl},\n // @TODO vik required, otherwise modelClass won't exist\n model?: Model,\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(controls, validatorOrOpts, asyncValidator);\n this.model = model || this.createModelInstance();\n // @TODO Alex no idea how it works, since modelClass used in createModelInstance\n this.modelClass = this.model.constructor as new () => Model;\n this.initialValue = this.value;\n\n if (model && !model['id']) {\n this.markAsUnsaved();\n }\n\n this.listenValueChanges();\n }\n\n get saved(): boolean {\n return !this.unsaved;\n }\n\n get currentValue(): Model {\n return this.createModelInstance(Object.assign({}, this.model, this.getRawValue()));\n }\n\n /**\n * Check validation and return a new instance of generic model.\n * Merge form value to initial object\n * @param data Additional data object which be merged to form value\n * @param includeDisabledFields ignore disabled fields\n */\n submit(data: object = {}, includeDisabledFields = false): Model {\n this.submitted = true;\n this.markAllAsTouched();\n\n if (!this.disabled && !this.valid) {\n return null;\n }\n\n const value = includeDisabledFields ? this.getRawValue() : this.value;\n const model: Model = this.createModelInstance(Object.assign({}, this.model, value, data));\n\n this.onSubmit.emit(model);\n return model;\n }\n\n addControl(name: string, control: AbstractControl, options?: { emitEvent?: boolean }): this {\n // keep form state (enabled/disabled).\n // addControl enables form when added enabled form control\n // https://github.com/angular/angular/issues/23236\n if (this.disabled) {\n control.disable();\n }\n\n super.addControl(name, control, options);\n\n return this;\n }\n\n markAsUnsaved(): void {\n this.unsaved = true;\n }\n\n markAsSaved(): void {\n this.unsaved = false;\n }\n\n /**\n * @TODO use excludeExtraneousValues when all models refactored (exposed all needed properties)\n * @param data\n */\n createModelInstance(data: object = {}): Model {\n return plainToClass(this.modelClass, data);\n }\n\n /**\n * emit current form values\n */\n emitValues(): void {\n Object.values(this.controls).forEach((control: AbstractControl) => {\n if ([null, undefined].includes(control.value)) {\n return;\n }\n\n control.updateValueAndValidity({ onlySelf: false, emitEvent: true });\n });\n }\n\n private listenValueChanges(): void {\n this.valueChanges.subscribe(() => {\n !!this.model && !!this.model['id'] && isEqual(this.value, this.initialValue) ? this.markAsSaved() : this.markAsUnsaved();\n })\n }\n\n /**\n * upgraded version of patchValue to skip duplicated changes\n */\n patchField(name: string, value: any, distinctUntilChanged = true): void {\n const control = this.get(name);\n if (distinctUntilChanged && control.value === value) {\n return;\n }\n\n control.patchValue(value);\n }\n\n fieldChanged(name: string): boolean {\n return this.get(name).value !== this.initialValue[name];\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { Address, CorelogicSuggestion, Country } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { EventEmitter } from '@angular/core';\nimport { IEventListener } from '../../interfaces';\nimport { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { AddressTypeEnum } from '../../db/Enums/address-type.enum';\nimport { addressCorelogicValidator } from '../../validators/address-corelogic.validator';\nimport { merge } from 'rxjs';\n\n/**\n * Address form. Works with corelogic or manual address\n */\nexport class AddressForm extends AbstractForm<Address> implements IEventListener {\n /**\n * Min search query required length\n */\n static minSearchLength = 3;\n\n /**\n * Delay before corelogic request\n */\n static searchDelay = 500;\n\n /**\n * Regarding corelogic formatting, street number should not contain spaces\n */\n static streetNumberPattern = /^[^\\s]+$/;\n\n /**\n * Manual mode flag\n */\n isManual: boolean;\n\n /**\n * Emit event to search address in corelogic when user filled enough data for corelogic\n */\n onSearch: EventEmitter<string> = new EventEmitter();\n\n constructor(\n // no default value because Address form is always a child form. That's mean address value always passed and then default value never work.\n // even if null passed, default value will not work\n address: Address | null\n ) {\n super({\n // prefill search input with address string for edit case\n searchQuery: new UntypedFormControl(address?.address ? address.nameLong : null, Validators.required),\n type: new UntypedFormControl(address?.type || AddressTypeEnum.STREET, Validators.required),\n\n // corelogic fields (required for Australia and disabled for other countries)\n // @TODO not required temporary, waiting for corelogic support response why it can't find some suburbs (like Hamilton Island)\n corelogicLocId: new UntypedFormControl({ value: address?.corelogicLocId, disabled: true }),\n corelogicRefId: new UntypedFormControl({ value: address?.corelogicRefId, disabled: true }),\n\n // manual fields (using when address not found in corelogic)\n unitNumber: new UntypedFormControl({ value: address?.unitNumber, disabled: true }),\n address: new UntypedFormControl({ value: address?.address, disabled: true }),\n streetNumber: new UntypedFormControl({ value: address?.streetNumber, disabled: true }, [Validators.required, Validators.pattern(AddressForm.streetNumberPattern)]),\n street: new UntypedFormControl({ value: address?.street, disabled: true }, Validators.required),\n city: new UntypedFormControl({ value: address?.city, disabled: true }, Validators.required),\n state: new UntypedFormControl({ value: address?.state, disabled: true }, Validators.required),\n postcode: new UntypedFormControl({ value: address?.postcode, disabled: true }, Validators.required),\n country: new UntypedFormControl({ value: address?.country || Country.australia, disabled: true }, Validators.required)\n }, address);\n\n if (this.isAustraliaSelected()) {\n this.enableCorelogicFields();\n }\n\n this.listenEvents();\n }\n\n /**\n * Get search query for corelogic location search based on manual fields values\n */\n get manualSearchQuery(): string {\n // nothing to search when manual fields are invalid or when selected country is not Australia because we don't need to use corelogic for other countries\n if (!this.isManualSearchAvailable() || !this.isAustraliaSelected()) {\n return '';\n }\n\n // for manual mode we search corelogic for city (location) and ignore street\n return `${this.get('city').value} ${this.get('state').value} ${this.get('postcode').value}`;\n }\n\n listenEvents(): void {\n this.listenSearchQueryChanges();\n }\n\n /**\n * Handle corelogic suggestion select\n */\n onSelectSuggestion(suggestion?: CorelogicSuggestion): void {\n // if no suggestion then 'Add manually' option selected\n if (!suggestion && !this.isManual) {\n this.switchToManual();\n return;\n }\n\n this.patchValue({\n corelogicLocId: suggestion?.localityId ?? null,\n corelogicRefId: suggestion?.propertyId ?? null\n });\n }\n\n /**\n * Check if Australia is selected in country field\n */\n isAustraliaSelected(): boolean {\n return this.get('country').value?.id === Country.australia.id;\n }\n\n /**\n * Enable manual mode\n */\n private switchToManual(): void {\n this.isManual = true;\n this.get('searchQuery').disable();\n\n this.get('unitNumber').enable();\n this.get('address').enable();\n this.get('streetNumber').enable();\n this.get('street').enable();\n this.get('city').enable();\n this.get('state').enable();\n this.get('postcode').enable();\n this.get('country').enable();\n\n this.listenManualFieldsChanges();\n this.listenStreetFieldsChanges();\n this.listenCountryChanges();\n }\n\n /**\n * Emit event to search address in corelogic when search field changes\n */\n private listenSearchQueryChanges(): void {\n this.get('searchQuery').valueChanges\n .pipe(\n // delay to avoid search request for each value change\n debounceTime(AddressForm.searchDelay),\n // skip when value not changed\n distinctUntilChanged(),\n // value could be a string when user search and suggestion when user select option from autocomplete\n map((value: string | CorelogicSuggestion) => {\n // no need to search when value is not actually search string\n if (!value || value instanceof CorelogicSuggestion) {\n return '';\n }\n\n // trim to avoid spaces in searchQuery, we should not send request started or finished with spaces\n // uppercase to make search string similar to corelogic format\n return value.trim();\n }),\n // do nothing when query is too short\n filter((searchQuery: string) => searchQuery.length >= AddressForm.minSearchLength)\n )\n .subscribe((searchQuery: string) => {\n this.onSearch.emit(searchQuery);\n });\n }\n\n /**\n * Check if all fields required for manual corelogic search are filled before request sending\n */\n private isManualSearchAvailable(): boolean {\n return this.get('city').valid && this.get('state').valid && this.get('postcode').valid;\n }\n\n /**\n * When corelogic is required we have to search address even for manual address\n */\n private listenManualFieldsChanges(): void {\n // subscribe to whole form because no other fields may be changed in this case except manual address fields we need\n this.valueChanges\n .pipe(\n // delay to avoid search request for each value change\n debounceTime(AddressForm.searchDelay),\n // do nothing when not all required fields filled\n filter(() => this.isManualSearchAvailable() && this.isAustraliaSelected()),\n map(() => this.manualSearchQuery),\n // skip when value not changed\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.onSearch.emit(this.manualSearchQuery);\n });\n }\n\n /**\n * Address model has common field 'address' for street name and number because Corelogic returns this data as one string,\n * but we need separated fields in the form.\n *\n * Listen street and number changes and fill address with concatinated values\n */\n private listenStreetFieldsChanges(): void {\n merge(\n this.get('streetNumber').valueChanges,\n this.get('street').valueChanges\n ).subscribe(() => {\n this.get('address').setValue(`${this.get('streetNumber').value} ${this.get('street').value}`);\n })\n }\n\n private enableCorelogicFields(): void {\n this.get('corelogicLocId').enable();\n this.get('corelogicRefId').enable();\n }\n\n private disableCorelogicFields(): void {\n this.get('corelogicLocId').disable();\n this.get('corelogicRefId').disable();\n }\n\n /**\n * Corelogic loc id is required for Australian addresses\n */\n private listenCountryChanges(): void {\n this.get('country').valueChanges.subscribe(() => {\n if (this.isAustraliaSelected()) {\n this.enableCorelogicFields();\n return;\n }\n\n this.disableCorelogicFields();\n });\n }\n}\n","import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { Budget, BudgetRule, ChartAccounts } from '../../models';\nimport { AbstractForm } from '../abstract.form';\nimport { plainToClass } from 'class-transformer';\nimport { ChartAccountsCategoryEnum } from '../../db/Enums';\n\nexport class BudgetForm extends AbstractForm<Budget> {\n filteredRules: UntypedFormGroup[];\n\n constructor(budget: Budget) {\n super({\n rules: new UntypedFormArray((budget.rules || [plainToClass(BudgetRule, {})]).map((rule: BudgetRule) => new UntypedFormGroup({\n chartAccounts: new UntypedFormControl(rule.chartAccounts, Validators.required),\n amount: new UntypedFormControl(rule.amount, Validators.required)\n })))\n }, budget);\n\n this.filteredRules = this.rulesArray.controls as UntypedFormGroup[];\n }\n\n get rulesArray(): UntypedFormArray {\n return this.get('rules') as UntypedFormArray;\n }\n\n filterRules(searchQuery: string, categories: ChartAccountsCategoryEnum[]): void {\n let filteredRules: UntypedFormGroup[] = this.rulesArray.controls as UntypedFormGroup[];\n\n if (searchQuery) {\n filteredRules = filteredRules.filter((ruleGroup: UntypedFormGroup) => {\n if (ruleGroup.invalid) {\n return true;\n }\n\n const ruleAmount: string = ruleGroup.get('amount').value?.toString();\n const chartAccountsName: string = ruleGroup.get('chartAccounts').value?.name.toLowerCase();\n\n return chartAccountsName.includes(searchQuery) || ruleAmount.includes(searchQuery);\n });\n }\n\n filteredRules = filteredRules.filter((ruleGroup: UntypedFormGroup) => {\n const chartAccounts: ChartAccounts = ruleGroup.get('chartAccounts').value;\n\n if (!chartAccounts) {\n return true;\n }\n\n return categories.includes(chartAccounts?.category);\n });\n\n this.filteredRules = filteredRules;\n }\n\n addRule(): void {\n const formGroup: UntypedFormGroup = new UntypedFormGroup({\n chartAccounts: new UntypedFormControl(null, Validators.required),\n amount: new UntypedFormControl(null, Validators.required)\n });\n\n this.rulesArray.push(formGroup);\n }\n\n deleteRule(index: number): void {\n this.rulesArray.removeAt(index);\n }\n}\n","/**\n * general validation rules\n */\nexport enum FormValidationsEnum {\n INPUT_MAX_LENGTH = 60,\n TEXT_MAX_LENGTH = 300,\n FILE_MAX_SIZE = 4194304,\n // @TODO move to file uploader component\n FILE_ACCEPTED_TYPES = 'Accepted file type: .doc .jpg .png .pdf .tiff .bmp .excel .csv',\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { DocumentFolder } from '../../models';\nimport { AbstractForm } from '../abstract.form';\nimport { FormValidationsEnum } from '../form-validations.enum';\n\nexport class DocumentFolderForm extends AbstractForm<DocumentFolder> {\n constructor(folder: DocumentFolder) {\n super({\n name: new UntypedFormControl(folder.name, [Validators.required, Validators.maxLength(FormValidationsEnum.INPUT_MAX_LENGTH)])\n }, folder);\n }\n}\n","import { FormControl, Validators } from '@angular/forms';\nimport { AbstractForm } from '../abstract.form';\nimport { Document } from '../../models';\n\nexport class DocumentForm extends AbstractForm<Document> {\n constructor(document: Document) {\n super({\n folder: new FormControl(document.folder, Validators.required),\n file: new FormControl(document.file, Validators.required),\n }, document)\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { Loan } from '../../models/loan/loan';\nimport { LoanRepaymentFrequencyEnum } from '../../db/Enums/bank/loan/loan-repayment-frequency.enum';\nimport { LoanMaxNumberOfPaymentsEnum } from '../../models/loan/loan-max-number-of-payments.enum';\nimport { plainToClass } from 'class-transformer';\nimport { LoanRepaymentTypeEnum } from '../../db/Enums/bank/loan/loan-repayment-type.enum';\nimport { LoanInterestTypeEnum } from '../../db/Enums/bank/loan/loan-interest-type.enum';\nimport { LoanTypeEnum } from '../../db/Enums/bank/loan/loan-type.enum';\n\n/**\n * Form with loan details.\n * Loan could be created from bank account (Bank Loan) or directly from loan page (Vehicle Loan)\n */\nexport class LoanForm extends AbstractForm<Loan> {\n static mortgageLoanTypes: LoanTypeEnum[] = [LoanTypeEnum.MORTGAGE, LoanTypeEnum.HOME_EQUITY_LINE_OF_CREDIT, LoanTypeEnum.HOME_LOAN];\n\n constructor(\n private loan: Loan = plainToClass(Loan, {}),\n ) {\n super({\n type: new UntypedFormControl(loan.type, Validators.required),\n amount: new UntypedFormControl(loan.amount, Validators.required),\n interestRate: new UntypedFormControl(loan.interestRate, [Validators.required, Validators.min(0), Validators.max(100)]),\n commencementDate: new UntypedFormControl(loan.commencementDate, Validators.required),\n repaymentAmount: new UntypedFormControl(loan.repaymentAmount),\n repaymentFrequency: new UntypedFormControl(loan.repaymentFrequency, Validators.required),\n term: new UntypedFormControl(loan.term, Validators.required),\n // interestType is predefined for vehicle loans\n interestType: new UntypedFormControl({value: loan.interestType, disabled: !loan.bankAccount}, Validators.required),\n // availableRedraw is predefined for vehicle loans\n availableRedraw: new UntypedFormControl({value: loan.availableRedraw, disabled: !loan.bankAccount}, Validators.required),\n // repaymentType is predefined for vehicle loans\n repaymentType: new UntypedFormControl({value: loan.repaymentType, disabled: !loan.bankAccount}, Validators.required),\n }, loan);\n\n // Set data which always the same for vehicle loans\n if (!loan.bankAccount) {\n Object.assign(this.model, {\n repaymentType: LoanRepaymentTypeEnum.PRINCIPAL_AND_INTEREST,\n availableRedraw: 0,\n interestType: LoanInterestTypeEnum.FIXED_RATE\n });\n }\n\n this.updateTermValidation();\n this.listenEvents();\n }\n\n listenEvents(): void {\n // We need to set term automatically only for bank loans.\n // For vehicle loans user should fill it manually with validation depended of frequency\n if (this.loan.bankAccount) {\n this.listenTypeChanges();\n } else {\n this.listenRepaymentFrequencyChanges();\n }\n }\n\n /**\n * Set term automatically by loan type changes\n */\n listenTypeChanges(): void {\n this.get('type').valueChanges.subscribe((type: LoanTypeEnum) => {\n this.get('term').setValue(\n LoanForm.mortgageLoanTypes.includes(type) ? Loan.mortgageDefaultTerm : Loan.loanDefaultTerm\n );\n })\n }\n\n /**\n * term validation depends on selected repaymentFrequency\n */\n listenRepaymentFrequencyChanges(): void {\n this.get('repaymentFrequency').valueChanges.subscribe(() => {\n this.updateTermValidation();\n });\n }\n\n /**\n * For vehicle loans term has a maximum value depended of repayment frequency\n */\n private updateTermValidation(): void {\n // no need terms for bank loans\n if (this.loan.bankAccount) {\n return;\n }\n\n const currentRepaymentFrequency: LoanRepaymentFrequencyEnum = this.get('repaymentFrequency').value;\n // term validation depends on selected repayment frequency, so can not validate when frequency is empty\n // repaymentType is required field, so we don't need to clear validation\n if (!currentRepaymentFrequency) {\n return;\n }\n\n const termControl: UntypedFormControl = this.get('term') as UntypedFormControl;\n const maxTermValue: number = LoanMaxNumberOfPaymentsEnum[LoanRepaymentFrequencyEnum[currentRepaymentFrequency]];\n\n termControl.setValidators([Validators.max(maxTermValue)]);\n termControl.updateValueAndValidity();\n }\n}\n","import { UntypedFormControl, UntypedFormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Check if at least one form field is true, otherwise form is invalid.\n * Use with groups of boolean form controls (checkbox, toggle, etc.)\n */\nexport function atLeastOneCheckedValidator(): ValidatorFn {\n return (formGroup: UntypedFormGroup): ValidationErrors => Object.values(formGroup.controls)\n .find((control: UntypedFormControl): boolean => control.value) ? null : {nothingChecked: true}\n}\n","import { UntypedFormControl, ValidatorFn } from '@angular/forms';\n\n/**\n * Validation function for autocomplete fields. Checks that the user should select a value from a list rather than type in input field\n * @TODO Alex: create class AppValidators with static methods and move there all custom validators (line Angular Validators)\n */\nexport function autocompleteValidator(): ValidatorFn {\n return (control: UntypedFormControl) => (!control.value || (typeof control.value === 'object')) ? null : {notFromList: true};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport function conditionalValidator(\n condition: (control: AbstractControl) => boolean,\n validator: (control: AbstractControl) => object | null): ValidatorFn {\n return function (control: AbstractControl): ValidationErrors {\n revalidateOnChanges(control);\n\n if (control && control.parent) {\n if (condition(control.parent)) {\n return validator(control);\n }\n }\n\n return null;\n };\n}\n\n/**\n * Conditional validator depends on other fields and should be updated on each form value change\n */\nfunction revalidateOnChanges(control: AbstractControl): void {\n if (control && control.parent && !control['_revalidateOnChanges']) {\n control['_revalidateOnChanges'] = true;\n control.parent.valueChanges.pipe(\n distinctUntilChanged((a: object, b: object) => JSON.stringify(a) === JSON.stringify(b))\n )\n .subscribe(() => {\n control.updateValueAndValidity({emitEvent: false});\n });\n }\n\n return;\n}\n","import { UntypedFormControl, ValidatorFn } from '@angular/forms';\n\n/**\n * Regular expressions that are used to check password strength and valid values\n */\nexport const PASSWORD_REGEXPS: { [key: string]: RegExp } = {\n medium: /(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})/,\n strong: /(((?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]))|((?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*]))|((?=.*[A-Z])(?=.*[0-9]))(?=.*[!@#$%^&*]))(?=.{8,})/,\n format: /^[0-9a-zA-Z!@$!%*?&#]*$/\n};\n\nexport function passwordValidator(): ValidatorFn {\n return (control: UntypedFormControl) => {\n if (!PASSWORD_REGEXPS.format.test(control.value)) {\n return { passwordInvalid: true }\n }\n\n if (!PASSWORD_REGEXPS.medium.test(control.value)) {\n return { passwordWeak: true }\n }\n\n return null;\n };\n}\n","import { AbstractControl, UntypedFormGroup, ValidatorFn } from '@angular/forms';\n\nexport function passwordMatchValidator(newPassControlName: string, confirmPassControlName: string): ValidatorFn {\n return (group: UntypedFormGroup) => {\n const passwordControl: AbstractControl = group.get(newPassControlName);\n const confirmControl: AbstractControl = group.get(confirmPassControlName);\n\n if (confirmControl.errors && !confirmControl.hasError('passwordMismatch')) {\n // return if another validator has already found an error on the confirmControl\n return this;\n }\n\n if (passwordControl.value !== confirmControl.value) {\n confirmControl.setErrors({ passwordMismatch: true });\n } else {\n confirmControl.setErrors(null);\n }\n\n };\n}\n","export enum MessagesEnum {\n INVALID_DATE = `The date should not be before $1`\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { MessagesEnum } from './messages.enum';\nimport { DatePipe } from '@angular/common';\n\n/**\n * Validation function, that checks If date form value is more than provided date\n */\nexport function minDateValidator(\n date: Date,\n message: string = MessagesEnum.INVALID_DATE.replace('$1', new DatePipe('en-US').transform(date))\n): ValidatorFn {\n return (control: AbstractControl): ValidationErrors => {\n if (!control.value) {\n return null;\n }\n\n // form control value can be as a Moment object - we wrap it in \"new Date()\" to work with it like with JS Date\n if (new Date(control.value) >= new Date(date)) {\n return null;\n }\n\n return {minDate: message};\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator that check if sum amount of provided fields is greater than provided sum\n * @param field to check in each formArray element\n * @param summary to compare with fields sum\n * @param fieldAlias to show it in error message\n */\nexport function fieldsSumValidator(field: string, summary = 100, fieldAlias?: string): ValidatorFn {\n return (formArray: AbstractControl): ValidationErrors => {\n // calculate sum of desired fields in formArray control\n const fieldsSum: number = formArray['controls']\n .reduce((acc: number, group: AbstractControl) => acc += group.get(field).value, 0);\n\n if (fieldsSum <= summary) {\n return null;\n } \n return {\n fieldsSum: {\n name: field,\n alias: fieldAlias,\n summary\n }\n };\n \n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { FinancialYear } from '../models';\n\n/**\n * Validation function, that checks If provided date is within a current financial year\n */\nexport function currentFinYearValidator(): ValidatorFn {\n const currentFinYear: FinancialYear = new FinancialYear();\n\n return (control: AbstractControl): ValidationErrors => {\n if (!control.value || control.value >= currentFinYear.startDate && control.value <= currentFinYear.endDate) {\n return null;\n }\n\n return { notCurrentFinYear: true };\n };\n}\n","import { UntypedFormControl, ValidatorFn } from '@angular/forms';\nimport { DOCUMENT_FILE_TYPES } from '../models/document/document-file-types.const';\nimport { AbstractModel } from '../db/Models';\n\nconst MAX_SIZE = 4194304;\n\nexport class FileValidator {\n // File max size check\n static fileMaxSize(maxSize: number = MAX_SIZE): ValidatorFn {\n const validatorFn: any = (file: File): object => {\n\n // We don`t need to validate saved files, because when saving the form, the file was valid\n if (file instanceof AbstractModel) {\n return null;\n }\n\n return file.size > maxSize ? { fileMaxSize: {maxSize} } : null;\n };\n return FileValidator.fileValidation(validatorFn);\n }\n\n // File extension check\n static fileExtensions(allowedExtensions: string[] = DOCUMENT_FILE_TYPES.all): ValidatorFn {\n const validatorFn: any = (file: File): object => {\n\n // We don`t need to validate saved files, because when saving the form, the file was valid\n if (file instanceof AbstractModel) {\n return null;\n }\n\n return allowedExtensions.includes(file.type) ? null : { fileExtension: {allowedExtensions: allowedExtensions.join()} };\n };\n\n return FileValidator.fileValidation(validatorFn);\n }\n\n private static fileValidation(validatorFn: (File: File) => null | object): ValidatorFn {\n return (formControl: UntypedFormControl) => {\n if (!formControl.value) {\n return null;\n }\n\n return validatorFn(formControl.value);\n };\n }\n}\n","import { FormControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator is checking if field value is greater than passed value\n */\nexport function greaterThanValidator(value: number): ValidatorFn {\n return (control: FormControl): ValidationErrors => {\n if (!control.value && (control.value !== 0)) {\n return null;\n }\n \n return control.value > value ? null : {greaterThan: `The value should be greater than ${value}`};\n }\n}","import {\n AbstractControl, AsyncValidator,\n ValidationErrors,\n} from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { catchError, debounceTime, delay, distinctUntilChanged, map } from 'rxjs/operators';\nimport { UserService } from '../services';\nimport { User } from '../models';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class UniqueEmailValidator implements AsyncValidator {\n constructor(private userService: UserService) {}\n validate(control: AbstractControl): Observable<ValidationErrors | null> {\n return this.userService.search(control.value).pipe(\n delay(500),\n map((user: User) => user ? { emailIsUsed: true } : null),\n catchError(() => of(null))\n );\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { Firm } from '../../models/firm/firm';\nimport { AbstractForm } from '../abstract.form';\nimport { conditionalValidator } from '../../validators';\n\nexport class FirmForm extends AbstractForm<Firm> {\n constructor(firm: Firm) {\n super({\n name: new UntypedFormControl(firm.name, Validators.required),\n shortName: new UntypedFormControl(firm.shortName),\n abn: new UntypedFormControl(firm.abn, Validators.required),\n tan: new UntypedFormControl(firm.tan, conditionalValidator(\n (): boolean => firm.isAccountant(),\n Validators.required\n )),\n website: new UntypedFormControl(firm.website),\n address: new UntypedFormControl(firm.address),\n phone: new UntypedFormControl(firm.phone),\n file: new UntypedFormControl(firm.file)\n }, firm);\n }\n}\n","import { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { BankAccountProperty } from '../../../models/bank/bank-account-property';\nimport { plainToClass } from 'class-transformer';\nimport { TankTypeEnum } from '../../../db/Enums/tank-type.enum';\nimport { conditionalValidator } from '../../../validators';\nimport { fieldsSumValidator } from '../../../validators/fields-sum.validator';\n\n/**\n * Form array with bank account properties\n * @TODO create AbstractFormArray\n */\nexport class BankAccountPropertiesForm extends UntypedFormArray {\n constructor(bankAccountProperties?: BankAccountProperty[]) {\n super(\n (bankAccountProperties?.length ? bankAccountProperties : [plainToClass(BankAccountProperty, {})])\n .map((bankAccountProperty: BankAccountProperty) => new UntypedFormGroup({\n property: new UntypedFormControl(bankAccountProperty?.property, Validators.required),\n percent: new UntypedFormControl(bankAccountProperty.percent, Validators.required)\n })),\n [\n conditionalValidator(\n (control: AbstractControl): boolean => control.get('tankType').value === TankTypeEnum.PROPERTY,\n Validators.required\n ),\n fieldsSumValidator('percent', 100)\n ]\n );\n }\n\n add(): void {\n this.push(new UntypedFormGroup({\n property: new UntypedFormControl(null, Validators.required),\n // @TODO disable for loans\n percent: new UntypedFormControl(\n {value: this.getRemainingPercent(), disabled: !(this.at(0) as UntypedFormGroup).contains('percent')},\n Validators.required\n ),\n // @TODO enable for loans\n // amount: new FormControl(\n // {value: this.bankAccount.currentBalance * bankAccountProperty.percent / 100},\n // [Validators.required, Validators.max(Math.abs(this.bankAccount.currentBalance))]\n // ),\n }));\n }\n\n // @TODO enable for loans\n // /**\n // * Recalculate property percentage for current property form group and round to no more than 3 decimal places\n // * @param amount: new control value\n // * @param currentPropertyGroup for which amount will be recalculated\n // */\n // recalculatePropertyPercentage(amount: number, currentPropertyGroup: FormGroup): void {\n // currentPropertyGroup.get('percent').setValue(\n // roundTo(amount / this.bankAccount.currentBalance, 3)\n // );\n // }\n\n enablePercent(): void {\n this.controls.forEach((propertyFormGroup: UntypedFormGroup) => {\n propertyFormGroup.get('percent').enable();\n });\n }\n\n disablePercent(): void {\n this.controls.forEach((propertyFormGroup: UntypedFormGroup) => {\n propertyFormGroup.get('percent').disable();\n });\n }\n\n /**\n * Percentage available for adding a new bank account property.\n * Remaining percent can't be more than 100 and less than 0\n */\n private getRemainingPercent(): number {\n const currentTotalPercent: number = this.controls.reduce((sum: number, control: UntypedFormGroup) => sum + control.get('percent').value, 0);\n\n return currentTotalPercent < 100 ? 100 - currentTotalPercent : 0;\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FinancialYear, SoleBusiness } from '../../models';\nimport { plainToClass } from 'class-transformer';\nimport { FormControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source';\nimport { IEventListener } from '../../interfaces';\n\nexport class SoleBusinessForm extends AbstractForm<SoleBusiness> implements IEventListener {\n constructor(\n private business: SoleBusiness = plainToClass(SoleBusiness, {})\n ) {\n super({\n name: new UntypedFormControl(business.name, Validators.required),\n activity: new UntypedFormControl(business.activity, Validators.required),\n description: new UntypedFormControl(business.description),\n website: new UntypedFormControl(business.website),\n file: new UntypedFormControl(business.file),\n isPrimaryProduction: new FormControl(business.isPrimaryProduction),\n }, business);\n\n // User have to create income source with new business.\n // Income source is not able for edit business\n if (!business.id) {\n // @TODO Alex (TT-2304): move to separated form class\n this.addControl('incomeSource', new UntypedFormGroup({\n type: new UntypedFormControl(IncomeSourceTypeEnum.SOLE, Validators.required),\n name: new UntypedFormControl(null, Validators.required),\n soleForecasts: new UntypedFormArray([\n new UntypedFormGroup({\n financialYear: new UntypedFormControl(new FinancialYear().year, Validators.required),\n amount: new UntypedFormControl(null, Validators.required),\n taxInstalments: new UntypedFormControl(null, Validators.required)\n })\n ])\n }))\n\n this.addControl('losses', new UntypedFormArray([\n new UntypedFormGroup({\n financialYear: new UntypedFormControl(new FinancialYear().year),\n openBalance: new UntypedFormControl(null, [Validators.required, Validators.min(0)])\n })\n ]))\n }\n\n this.listenEvents();\n }\n\n listenEvents(): void {\n if (this.contains('incomeSource')) {\n this.listenNameChanges();\n }\n }\n\n /**\n * We take the first forecast because income sources available only for new business, so we have only one forecast\n */\n get forecastFormGroup(): UntypedFormGroup {\n if (this.business.id) {\n return null;\n }\n\n return (this.get('incomeSource').get('soleForecasts') as UntypedFormArray).at(0) as UntypedFormGroup;\n }\n\n /**\n * We take the first loss because losses available only for new business, so we have only one loss\n */\n get lossFormGroup(): UntypedFormGroup {\n if (this.business.id) {\n return null;\n }\n\n return (this.get('losses') as UntypedFormArray).at(0) as UntypedFormGroup;\n }\n\n private listenNameChanges(): void {\n this.get('name').valueChanges.subscribe((name: string) => {\n this.get('incomeSource').get('name').setValue(name);\n })\n }\n}\n","import { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { SoleBusinessAllocation } from '../../models';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { conditionalValidator, fieldsSumValidator } from '../../validators';\n\n/**\n * Form array with bank account business allocations\n * @TODO create AbstractFormArray\n * @TODO Alex/Vik (TT-2184): copypasted from bank-account-properties.form, improve logic and create common parent class maybe\n */\nexport class SoleBusinessAllocationsForm extends UntypedFormArray {\n constructor(businessAllocations?: SoleBusinessAllocation[]) {\n super(\n (businessAllocations?.length ? businessAllocations : [plainToClass(SoleBusinessAllocation, {})])\n .map((businessAllocation: SoleBusinessAllocation) => new UntypedFormGroup({\n business: new UntypedFormControl(businessAllocation?.business, Validators.required),\n percent: new UntypedFormControl(businessAllocation.percent, Validators.required)\n })),\n [\n conditionalValidator(\n (control: AbstractControl): boolean => control.get('tankType').value === TankTypeEnum.SOLE,\n Validators.required\n ),\n fieldsSumValidator('percent', 100)\n ]\n );\n }\n\n add(): void {\n this.push(new UntypedFormGroup({\n business: new UntypedFormControl(null, Validators.required),\n // @TODO disable for loans\n percent: new UntypedFormControl(\n {value: this.getRemainingPercent(), disabled: !(this.at(0) as UntypedFormGroup).contains('percent')},\n Validators.required\n ),\n // @TODO enable for loans\n // amount: new FormControl(\n // {value: this.bankAccount.currentBalance * businessAllocation.percent / 100},\n // [Validators.required, Validators.max(Math.abs(this.bankAccount.currentBalance))]\n // ),\n }));\n }\n\n // @TODO enable for loans\n // /**\n // * Recalculate business allocation percentage for current business form group and round to no more than 3 decimal places\n // * @param amount: new control value\n // * @param currentBusinessGroup for which amount will be recalculated\n // */\n // recalculateBusinessPercentage(amount: number, currentBusinessGroup: FormGroup): void {\n // currentBusinessGroup.get('percent').setValue(\n // roundTo(amount / this.bankAccount.currentBalance, 3)\n // );\n // }\n\n enablePercent(): void {\n this.controls.forEach((businessFormGroup: UntypedFormGroup) => {\n businessFormGroup.get('percent').enable();\n });\n }\n\n disablePercent(): void {\n this.controls.forEach((businessFormGroup: UntypedFormGroup) => {\n businessFormGroup.get('percent').disable();\n });\n }\n\n /**\n * Percentage available for adding a new bank account business allocation.\n * Remaining percent can't be more than 100 and less than 0\n */\n private getRemainingPercent(): number {\n const currentTotalPercent: number = this.controls.reduce((sum: number, control: UntypedFormGroup) => sum + control.get('percent').value, 0);\n\n return currentTotalPercent < 100 ? 100 - currentTotalPercent : 0;\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport {SoleBusinessLoss} from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\nexport class SoleBusinessLossForm extends AbstractForm<SoleBusinessLoss> {\n constructor(private loss: SoleBusinessLoss, profit: number) {\n super({\n openBalance: new UntypedFormControl(loss.openBalance, [Validators.required, Validators.min(0)]),\n offsetRule: new UntypedFormControl(loss.offsetRule?.id),\n // sum of depreciations/transactions claim amount - openBalance\n balance: new UntypedFormControl({value: profit - loss.openBalance, disabled: true}),\n }, loss);\n\n this.get('openBalance').valueChanges.subscribe((openBalance: number) => {\n this.get('balance').setValue((profit - openBalance));\n });\n }\n\n /**\n * radio buttons can't work with object\n * https://github.com/angular/components/issues/10495\n */\n submit(): SoleBusinessLoss {\n return super.submit({ offsetRule: this.get('offsetRule').value ? { id: this.get('offsetRule').value } : null });\n }\n}\n","import { UntypedFormControl, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator check if entered strong length is equal to passed length parameter\n */\nexport function requiredLengthValidator(length: number): ValidatorFn {\n return (control: UntypedFormControl) => {\n if (control.value && control.value.length !== length) {\n return { requiredLength: length }\n }\n\n return null;\n };\n}\n","import { AbstractForm } from '../abstract.form';\nimport { SoleContact } from '../../models';\nimport { plainToClass } from 'class-transformer';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { requiredLengthValidator } from '../../validators/required-length.validator';\n\nexport class SoleContactForm extends AbstractForm<SoleContact> {\n constructor(\n contact: SoleContact = plainToClass(SoleContact, {})\n ) {\n super({\n name: new UntypedFormControl(contact.name, Validators.required),\n abn: new UntypedFormControl(contact.abn, [requiredLengthValidator(11)]),\n firstName: new UntypedFormControl(contact.firstName, Validators.required),\n lastName: new UntypedFormControl(contact.lastName, Validators.required),\n email: new UntypedFormControl(contact.email, [Validators.required, Validators.email]),\n phone: new UntypedFormControl(contact.phone),\n address: new UntypedFormControl(contact.address)\n }, contact);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { SoleDepreciationMethod } from '../../models';\nimport { UntypedFormControl } from '@angular/forms';\n\nexport class SoleDepreciationMethodForm extends AbstractForm<SoleDepreciationMethod> {\n constructor(\n soleDepreciationMethod: SoleDepreciationMethod\n ) {\n super({\n method: new UntypedFormControl(soleDepreciationMethod.method)\n }, soleDepreciationMethod);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { SoleDetails } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { requiredLengthValidator } from '../../validators/required-length.validator';\n\nexport class SoleDetailsForm extends AbstractForm<SoleDetails> {\n constructor(\n soleDetails: SoleDetails\n ) {\n super({\n abn: new UntypedFormControl(soleDetails.abn, [Validators.required, requiredLengthValidator(11)]),\n isGST: new UntypedFormControl(soleDetails.isGST || false)\n }, soleDetails);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { SoleInvoiceItem } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\nexport class SoleInvoiceItemForm extends AbstractForm<SoleInvoiceItem> {\n static maxDescriptionLength = 255;\n\n constructor(item: SoleInvoiceItem, isExpense: boolean) {\n super({\n isExpense: new UntypedFormControl(isExpense),\n description: new UntypedFormControl(\n item.description,\n [Validators.required, Validators.maxLength(SoleInvoiceItemForm.maxDescriptionLength)]\n ),\n quantity: new UntypedFormControl(item.quantity, Validators.required),\n price: new UntypedFormControl(item.price, Validators.required),\n isGST: new UntypedFormControl({value: item.isGST || false, disabled: !item.chartAccounts?.isGST}),\n chartAccounts: new UntypedFormControl(item.chartAccounts, Validators.required),\n }, item);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { SoleInvoice, SoleInvoiceItem, SoleInvoiceTemplate } from '../../models';\nimport { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { SoleInvoiceItemForm } from './sole-invoice-item.form';\nimport { plainToClass } from 'class-transformer';\nimport { IEventListener } from '../../interfaces';\nimport { SoleInvoiceTaxTypeEnum } from '../../db/Enums/sole-invoice-tax-type.enum';\nimport { ChartAccounts } from '../../models';\n\n/**\n * Form is divided into two groups, since the creation of Sole invoice takes place in two steps:\n * a common invoice data and sole invoice items.\n */\nexport class SoleInvoiceForm extends AbstractForm<SoleInvoice> implements IEventListener {\n constructor(\n private invoice: SoleInvoice,\n private soleDetailsGST: boolean,\n // default template to be preselected\n private defaultTemplate: SoleInvoiceTemplate,\n ) {\n super({\n // @TODO refactor, no need for nested level\n commonData: new UntypedFormGroup({\n dateFrom: new UntypedFormControl(invoice.dateFrom || new Date(), Validators.required),\n dateTo: new UntypedFormControl(invoice.dateTo, Validators.required),\n payer: new UntypedFormControl(invoice.payer, Validators.required),\n taxType: new UntypedFormControl(invoice.taxType, Validators.required),\n bankAccount: new UntypedFormControl(invoice.bankAccount, Validators.required),\n reference: new UntypedFormControl(invoice.reference)\n }),\n items: new UntypedFormArray((invoice.items || [plainToClass(SoleInvoiceItem, {})])\n .map((item: SoleInvoiceItem) => new SoleInvoiceItemForm(item, item.chartAccounts?.isExpense() ?? false))),\n }, invoice);\n\n // we need invoice template only for new invoices\n if (!invoice.id) {\n (this.commonData).addControl('template', new UntypedFormControl(this.defaultTemplate));\n\n // user can have no template, but he can add it from this form\n if (this.defaultTemplate) {\n this.updateTemplateRelatedFields(this.defaultTemplate);\n }\n\n // set tax exclusive by default if user is registered for gst\n if (this.soleDetailsGST) {\n this.commonData.get('taxType').setValue(SoleInvoiceTaxTypeEnum.TAX_EXCLUSIVE);\n }\n }\n\n // invoice.taxType is always NONE ('No Tax') when soleDetails.isGST === false\n if (!this.soleDetailsGST) {\n this.commonData.get('taxType').setValue(SoleInvoiceTaxTypeEnum.NO_TAX);\n this.commonData.get('taxType').disable();\n\n // Items isGST is not available when invoice.taxType === NONE ('No Tax')\n this.items.controls.forEach((itemForm: SoleInvoiceItemForm) => {\n this.disableItemGST(itemForm);\n });\n }\n\n this.listenEvents();\n }\n\n get items(): UntypedFormArray {\n return this.get('items') as UntypedFormArray;\n }\n\n listenEvents(): void {\n // no need to listen tax type and items chart accounts changes when soleDetails.isGST === false\n // because invoice tax type always 'No Tax' in this case and not available for changing\n if (this.soleDetailsGST) {\n this.listenTaxTypeChanges();\n\n this.items.controls.forEach((itemForm: SoleInvoiceItemForm) => {\n this.listenItemChartAccountsChanges(itemForm);\n });\n }\n\n // nothing to listen if template field is not exist (edit invoice case)\n if ((this.commonData).contains('template')) {\n this.listenTemplateChanges();\n }\n }\n\n addItem(isIncome: boolean): void {\n const itemForm: SoleInvoiceItemForm = new SoleInvoiceItemForm(plainToClass(SoleInvoiceItem, {}), isIncome);\n // no need to listen items chart accounts changes when soleDetails.isGST === false\n // because invoice tax type always 'No Tax' in this case and not available for changing\n if (this.soleDetailsGST) {\n this.listenItemChartAccountsChanges(itemForm);\n }\n\n this.items.push(itemForm);\n }\n\n removeItem(index: number): void {\n this.items.removeAt(index);\n }\n\n submit(): SoleInvoice {\n return super.submit({ ...this.getRawValue().commonData });\n }\n\n /**\n * Update default values from selected invoice template\n */\n private listenTemplateChanges(): void {\n this.commonData.get('template').valueChanges.subscribe((template: SoleInvoiceTemplate) => {\n this.updateTemplateRelatedFields(template);\n });\n }\n\n /**\n * GST is not available for items when invoice.taxType === NONE\n */\n private listenTaxTypeChanges(): void {\n this.commonData.get('taxType').valueChanges.subscribe((type: SoleInvoiceTaxTypeEnum) => {\n this.items.controls.forEach((itemForm: SoleInvoiceItemForm) => {\n const chartAccounts: ChartAccounts = itemForm.get('chartAccounts').value;\n\n // Item GST is available when invoice.taxType !== NONE ('No Tax')\n if (type !== SoleInvoiceTaxTypeEnum.NO_TAX && chartAccounts?.isGST ) {\n this.enableItemGST(itemForm);\n return;\n }\n\n this.disableItemGST(itemForm);\n })\n })\n }\n\n private updateTemplateRelatedFields(template: SoleInvoiceTemplate): void {\n this.commonData.get('bankAccount').setValue(template.bankAccount);\n\n const dateFrom: Date = this.commonData.get('dateFrom').value;\n if (dateFrom) {\n this.commonData.get('dateTo').setValue(new Date(dateFrom.getTime() + template.termTime));\n }\n\n // invoice.taxType is always 'No Tax' when soleDetails.isGST = false and not available for changing\n if (this.soleDetailsGST) {\n this.commonData.get('taxType').setValue(template.taxType);\n }\n }\n\n /**\n * GST availability depends on chart accounts isGST flag\n */\n private listenItemChartAccountsChanges(itemForm: SoleInvoiceItemForm): void {\n itemForm.get('chartAccounts').valueChanges.subscribe((chartAccounts: ChartAccounts) => {\n // item.isGST is available only when item.chartAccounts.isGST === true, soleDetails.isGST === true and invoice.taxType !== NONE ('No Tax')\n if (this.soleDetailsGST && chartAccounts.isGST && !this.currentValue.isNoTax()) {\n this.enableItemGST(itemForm);\n return;\n }\n\n this.disableItemGST(itemForm);\n });\n }\n\n private disableItemGST(itemForm: SoleInvoiceItemForm): void {\n itemForm.get('isGST').setValue(false);\n itemForm.get('isGST').disable();\n }\n\n /**\n * Enable GST field for passed item form. Value is always true by default because only case when this field is enabled is\n * when ChartAccounts.isGST === true, so we just use default value from chartAccounts.isGST\n */\n private enableItemGST(itemForm: SoleInvoiceItemForm): void {\n itemForm.get('isGST').setValue(true);\n itemForm.get('isGST').enable();\n }\n\n get commonData(): UntypedFormGroup {\n return this.get('commonData') as UntypedFormGroup;\n }\n\n /**\n * Rewrite abstract form getter to flat \"commonData\" field, which is not in the class\n */\n get currentValue(): SoleInvoice {\n const formRawValue: any = this.getRawValue();\n\n return this.createModelInstance(Object.assign(\n {},\n this.model,\n { ...formRawValue.commonData, items: formRawValue.items }\n ));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { SoleInvoiceTemplate } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\nexport class SoleInvoiceTemplateForm extends AbstractForm<SoleInvoiceTemplate> {\n constructor(\n invoiceTemplate: SoleInvoiceTemplate\n ) {\n super({\n name: new UntypedFormControl(invoiceTemplate.name, Validators.required),\n // taxType is always 'No Tax' when soleDetails.isGST === false\n taxType: new UntypedFormControl(invoiceTemplate.taxType, Validators.required),\n // 32767 - max value because we have small int data type in database for this field, but we don't have actual max validation for term\n term: new UntypedFormControl(invoiceTemplate.term, [Validators.required, Validators.min(0), Validators.max(32767)]),\n bankAccount: new UntypedFormControl(invoiceTemplate.bankAccount, [Validators.required]),\n }, invoiceTemplate);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { BasReport } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { combineLatest } from 'rxjs';\nimport {DepreciationCollection, TransactionAllocationCollection, TransactionCollection} from '../../collections';\n\n/**\n * business activity statement report\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/268533936/BAS+Report\n */\nexport class BasReportForm extends AbstractForm<BasReport> {\n constructor(private report: BasReport, transactions: TransactionCollection, allocations: TransactionAllocationCollection, depreciations: DepreciationCollection) {\n super({\n dateFrom: new UntypedFormControl(report.dateFrom, Validators.required),\n dateTo: new UntypedFormControl(report.dateTo, Validators.required),\n income: new UntypedFormControl({ value: report.income, disabled: true }),\n incomeGST: new UntypedFormControl({ value: report.incomeGST, disabled: true }, Validators.required),\n expenseGST: new UntypedFormControl({ value: report.expenseGST, disabled: true }, Validators.required),\n salary: new UntypedFormControl(report.salary, Validators.required),\n taxWithheldSalary: new UntypedFormControl(report.taxWithheldSalary, Validators.required),\n taxWithheldNoABN: new UntypedFormControl(report.taxWithheldNoABN, Validators.required),\n taxWithheldTotal: new UntypedFormControl({ value: report.taxWithheldTotal || 0, disabled: true }),\n paygTaxInstalment: new UntypedFormControl(report.paygTaxInstalment, Validators.required),\n fuelTaxCredit: new UntypedFormControl(report.fuelTaxCredit, Validators.required),\n gst: new UntypedFormControl({ value: report.gst, disabled: true }),\n }, report);\n\n // prefill income/expense data based on transactions/depreciations filtered by specified date\n combineLatest([this.get('dateFrom').valueChanges, this.get('dateTo').valueChanges])\n .subscribe(([dateFrom, dateTo]) => {\n const filteredTransactions = transactions.filterByRange('date', dateFrom, dateTo);\n const filteredDepreciations = depreciations.filterByRange('date', dateFrom, dateTo);\n\n const incomeTransactions = filteredTransactions.getIncomeTransactions();\n const expenseTransactions = new TransactionCollection(\n filteredTransactions.getExpenseTransactions().toArray(),\n filteredDepreciations.toArray()\n );\n\n // all sole income claimed as 100%\n this.get('income').setValue(incomeTransactions.getAllocatedAmount(allocations));\n this.get('incomeGST').setValue(incomeTransactions.calculateAllocatedGST(allocations));\n this.get('expenseGST').setValue(expenseTransactions.filterBy('isGST', true).sumBy('gstClaimAmount'));\n });\n\n // calculate taxWithheldTotal\n combineLatest([this.get('taxWithheldSalary').valueChanges, this.get('taxWithheldNoABN').valueChanges])\n .subscribe(([taxWithheldSalary, taxWithheldNoABN]) => {\n this.get('taxWithheldTotal').setValue(taxWithheldSalary + taxWithheldNoABN);\n });\n\n // calculate gst payable/refundable\n combineLatest([\n this.get('incomeGST').valueChanges,\n this.get('expenseGST').valueChanges,\n this.get('taxWithheldTotal').valueChanges,\n this.get('paygTaxInstalment').valueChanges,\n this.get('fuelTaxCredit').valueChanges,\n ]).subscribe(([incomeGST, expenseGST, taxWithheldTotal, paygTaxInstalment, fuelTaxCredit]) => {\n this.get('gst').setValue(incomeGST - expenseGST + taxWithheldTotal + paygTaxInstalment - fuelTaxCredit);\n });\n\n // emit init values to calculate dynamic fields\n if (report.id) {\n this.emitValues();\n }\n }\n\n submit(data: object = {}): BasReport {\n return super.submit(data, true);\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { BankAccount } from '../../../models';\nimport { AbstractControl, UntypedFormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { TankTypeEnum } from '../../../db/Enums/tank-type.enum';\nimport { BankAccountPropertiesForm } from './bank-account-properties.form';\nimport { SoleBusinessAllocationsForm } from '../../sole';\nimport { IEventListener } from '../../../interfaces';\nimport merge from 'lodash/merge';\n\nexport class BankAccountAllocationForm extends AbstractForm<BankAccount> implements IEventListener {\n constructor(\n private bankAccount?: BankAccount,\n controls?: {\n [key: string]: AbstractControl\n }) {\n super(\n merge(\n controls,\n {\n tankType: new UntypedFormControl(bankAccount ? bankAccount.tankType : null, Validators.required)\n }\n ), plainToClass(BankAccount, bankAccount || {}));\n\n if (bankAccount?.isPropertyTank()) {\n this.addControl('bankAccountProperties', new BankAccountPropertiesForm(bankAccount.bankAccountProperties));\n }\n\n if (bankAccount?.isSoleTank()) {\n this.addControl('businessAllocations', new SoleBusinessAllocationsForm(bankAccount.businessAllocations))\n }\n\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenTankTypeChanges();\n }\n\n listenTankTypeChanges(): void {\n this.get('tankType').valueChanges.subscribe((tankType: TankTypeEnum) => {\n this.removeControl('bankAccountProperties');\n this.removeControl('businessAllocations');\n\n switch (tankType) {\n case TankTypeEnum.PROPERTY:\n this.addControl('bankAccountProperties', new BankAccountPropertiesForm(this.bankAccount?.bankAccountProperties));\n break;\n case TankTypeEnum.SOLE:\n this.addControl('businessAllocations', new SoleBusinessAllocationsForm(this.bankAccount?.businessAllocations))\n break;\n }\n })\n }\n\n submit(data: object = {}, includeDisabledFields = false): BankAccount {\n // remove property/business allocations if empty\n return super.submit(Object.assign(data, { bankAccountProperties: [], businessAllocations: [] }, this.value));\n }\n}\n","import { LoanForm } from '../../loan';\nimport { BankAccount } from '../../../models/bank/bank-account';\nimport { BankAccountAllocationForm } from './bank-account-allocation.form';\nimport { Loan } from '../../../models/loan/loan';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * Form is using for import basiq bank accounts.\n * Basiq accounts has all data except tank type, properties and loan partially\n */\nexport class BankAccountImportForm extends BankAccountAllocationForm {\n\n constructor(\n bankAccount: BankAccount\n ) {\n super(bankAccount);\n\n if (bankAccount.isLoan()) {\n // Attach bank account to loan for LoanForm's logic\n // @TODO Alex/Vik: we should use separated API for bank accounts and loans\n const loan: Loan = plainToClass(Loan, Object.assign(bankAccount.loan, {bankAccount: {accountId: bankAccount.accountId}}));\n\n this.addControl('loan', new LoanForm(loan));\n }\n\n // don't preselect tank type by default\n this.get('tankType').setValue(null);\n\n // basiq account import form should be disabled (unchecked) by default\n this.disable();\n }\n}\n","import { BankAccount } from '../../../models/bank/bank-account';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { BankConnection } from '../../../models/bank/bank-connection';\nimport { LoanForm } from '../../loan';\nimport { BankAccountTypeEnum } from '../../../db/Enums/bank/bank-account-type.enum';\nimport { BankAccountAllocationForm } from './bank-account-allocation.form';\nimport { plainToClass } from 'class-transformer';\nimport { Loan } from '../../../models/loan/loan';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n\n/**\n * Form is using for single manual bank account creation (not Basiq)\n */\nexport class BankAccountAddManualForm extends BankAccountAllocationForm implements IEventListener {\n static accountNumberPattern = '^[0-9]{6}[ ]{1}[0-9]{1,}$';\n\n constructor(\n private connection: BankConnection\n ) {\n super(\n null,\n {\n type: new UntypedFormControl(null, Validators.required),\n accountName: new UntypedFormControl(null, Validators.required),\n currentBalance: new UntypedFormControl(null, Validators.required),\n accountNumber: new UntypedFormControl(\n null,\n [Validators.required, Validators.pattern(BankAccountAddManualForm.accountNumberPattern)]\n )\n }\n );\n }\n\n listenEvents() {\n super.listenEvents();\n this.listenTypeChanges();\n }\n\n /**\n * Add/Remove loan form depends on selected bank account type\n */\n private listenTypeChanges(): void {\n this.get('type').valueChanges.subscribe((type: BankAccountTypeEnum) => {\n if (type === BankAccountTypeEnum.LOAN) {\n // Set prefilled term for bank account loan\n this.addControl('loan', new LoanForm(plainToClass(Loan, {bankAccount: this.model})));\n } else {\n this.removeControl('loan');\n }\n });\n }\n\n /**\n * Attach bank connection to manual bank account\n */\n submit(): BankAccount {\n return super.submit({bankConnection: this.connection});\n }\n}\n","import { UntypedFormControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validate date value. Date calue should be in passed dateRange\n */\nexport function dateRangeValidator(dateStart: Date, dateEnd: Date): ValidatorFn {\n // Avoid timezone hours problem when converts to UTC\n // dateStart.setHours(0, 0, 0, 0);\n // dateEnd.setHours(0, 0, 0, 0);\n\n return (control: UntypedFormControl): ValidationErrors => {\n // Skip empty value\n if (!control.value) {\n return null;\n }\n\n if (control.value < dateStart) {\n return {dateRangeStart: dateStart};\n }\n\n if (control.value > dateEnd) {\n return {dateRangeEnd: dateEnd};\n }\n\n return null;\n };\n}\n","import { AbstractControl, UntypedFormArray, UntypedFormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator check if at least one control in formArray is enabled\n */\nexport function atLeastOneEnabledValidator(arrayName: string): ValidatorFn {\n return (formGroup: UntypedFormGroup): ValidationErrors => (formGroup.get(arrayName) as UntypedFormArray).controls.find((control: AbstractControl) => control.enabled)\n ? null\n : {arrayControlsDisabled: true}\n}\n","import { BankAccount } from '../../../models/bank/bank-account';\nimport { UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';\nimport { dateRangeValidator } from '../../../validators/date-range.validator';\nimport { FinancialYear } from '../../../models/financial-year/financial-year';\nimport { AbstractForm } from '../../abstract.form';\nimport { BankAccountImportForm } from './bank-account-import.form';\nimport { atLeastOneEnabledValidator } from '../../../validators/at-least-one-enabled.validator';\n\n/**\n * Form for import multiple basiq bank accounts\n */\nexport class BankAccountsImportForm extends AbstractForm<BankAccount[]> {\n static minDate: Date = new FinancialYear().prevFinYear.startDate;\n static maxDate: Date = new Date();\n\n constructor(\n protected bankAccounts: BankAccount[]\n ) {\n super({\n migrateFrom: new UntypedFormControl(\n BankAccountsImportForm.minDate,\n [Validators.required, dateRangeValidator(BankAccountsImportForm.minDate, BankAccountsImportForm.maxDate)]\n ),\n migrateTo: new UntypedFormControl(\n BankAccountsImportForm.maxDate,\n [Validators.required, dateRangeValidator(BankAccountsImportForm.minDate, BankAccountsImportForm.maxDate)]\n ),\n bankAccounts: new UntypedFormArray(bankAccounts.map((bankAccount: BankAccount) => new BankAccountImportForm(bankAccount)))\n }, [],\n {\n validators: [atLeastOneEnabledValidator('bankAccounts')]\n });\n }\n\n submit(): BankAccount[] {\n this.submitted = true;\n\n if (this.invalid) {\n return null;\n }\n\n const bankAccounts: BankAccount[] = [];\n\n // form is valid when all selected bank accounts forms are valid\n for (const bankAccountImportForm of (this.get('bankAccounts') as UntypedFormArray).controls) {\n // skip disabled forms\n if (bankAccountImportForm.disabled) {\n continue;\n }\n\n const bankAccount: BankAccount = (bankAccountImportForm as BankAccountImportForm).submit(\n {\n migrateFrom: this.value.migrateFrom,\n migrateTo: this.value.migrateTo\n }\n );\n\n if (!bankAccount) {\n return null;\n }\n\n bankAccounts.push(bankAccount);\n }\n\n if (!bankAccounts.length) {\n return null;\n }\n\n return bankAccounts;\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { AnnualClientDetails } from '../../models';\nimport { plainToClass } from 'class-transformer';\nimport { conditionalValidator } from '../../validators';\n\nexport class AnnualClientDetailsForm extends AbstractForm<AnnualClientDetails> {\n constructor(private annualClientDetails: AnnualClientDetails = plainToClass(AnnualClientDetails, {})) {\n super({\n capitalLoss: new UntypedFormControl(annualClientDetails.capitalLoss, Validators.required),\n privateHealthCare: new UntypedFormControl(annualClientDetails.privateHealthCare, Validators.required),\n spouse: new UntypedFormControl(annualClientDetails.spouse, Validators.required),\n spouseAnnualIncome: new UntypedFormControl(annualClientDetails.spouseAnnualIncome, conditionalValidator(\n (): boolean => this.get('spouse').value,\n Validators.required\n )),\n hasDependants: new UntypedFormControl(!!annualClientDetails.spouseAnnualIncome, Validators.required),\n dependants: new UntypedFormControl(annualClientDetails.dependants, conditionalValidator(\n (): boolean => this.get('hasDependants').value,\n Validators.required\n )),\n hasStudentLoan: new UntypedFormControl(!!annualClientDetails.studentLoanAmount, Validators.required),\n studentLoanAmount: new UntypedFormControl(annualClientDetails.studentLoanAmount, conditionalValidator(\n (): boolean => this.get('hasStudentLoan').value,\n Validators.required\n )),\n reportableFringeBenefits: new UntypedFormControl(annualClientDetails.reportableFringeBenefits || 0),\n exemptForeignEmploymentIncome: new UntypedFormControl(annualClientDetails.exemptForeignEmploymentIncome || 0),\n }, annualClientDetails);\n\n this.watchFieldForToggle('spouse', 'spouseAnnualIncome');\n this.watchFieldForToggle('hasDependants', 'dependants');\n this.watchFieldForToggle('hasStudentLoan', 'studentLoanAmount');\n this.emitValues();\n }\n\n private watchFieldForToggle(field: string, dependantField: string): void {\n this.get(field).valueChanges.subscribe((value: boolean) => this.toggleField(dependantField, !!value))\n }\n\n private toggleField(field: string, enable: boolean): void {\n if (enable) {\n this.get(field).enable();\n } else {\n this.get(field).setValue(0);\n this.get(field).disable();\n }\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { ClientIncomeTypes } from '../../models/client/client-income-types';\nimport { atLeastOneCheckedValidator } from '../../validators';\nimport { plainToClass } from 'class-transformer';\n\nexport class ClientIncomeTypesForm extends AbstractForm<ClientIncomeTypes> {\n constructor(private clientIncomeTypes: ClientIncomeTypes = plainToClass(ClientIncomeTypes, {})) {\n super({\n work: new UntypedFormControl(clientIncomeTypes.work || false),\n property: new UntypedFormControl(clientIncomeTypes.property || false),\n sole: new UntypedFormControl(clientIncomeTypes.sole || false),\n holdings: new UntypedFormControl(clientIncomeTypes.holdings || false)\n }, clientIncomeTypes, atLeastOneCheckedValidator());\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { AbstractForm } from '../abstract.form';\n\nexport class LoginForm extends AbstractForm<{email: string, password: string}> {\n constructor() {\n super({\n email: new UntypedFormControl(null, [Validators.required, Validators.email]),\n password: new UntypedFormControl(null, Validators.required)\n });\n }\n}\n","import { UntypedFormControl, ValidatorFn } from '@angular/forms';\n\nconst phonePattern = /^(((\\s*)?([- ()]?\\d[- ()]?){0,30}(\\s*)?)|)$/;\n\n/**\n * Validator for phone number\n * Allowed special symbols\"-\", \"(\", \")\"\n */\nexport function phoneNumberValidator(): ValidatorFn {\n return (control: UntypedFormControl) => phonePattern.test(control.value) ? null : {phoneInvalid: true};\n}\n","import { AbstractForm } from '../abstract.form';\nimport { Phone } from '../../models/phone/phone';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { phoneNumberValidator } from '../../validators/phone-number.validator';\nimport { PhoneTypeEnum } from '../../db/Enums/phone-type.enum';\nimport { Country } from '../../models';\n\nexport class PhoneForm extends AbstractForm<Phone> {\n constructor(\n // no default value because Address form is always a child form. That's mean address value always passed and then default value never work.\n // even if null passed, default value will not work\n phone?: Phone\n ) {\n super({\n type: new UntypedFormControl(phone?.type || PhoneTypeEnum.MOBILE, Validators.required),\n country: new UntypedFormControl(phone?.country || Country.australia, Validators.required),\n number: new UntypedFormControl(phone?.number || null, [Validators.required, phoneNumberValidator()])\n }, phone);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { passwordValidator } from '../../validators/password.validator';\nimport { passwordMatchValidator } from '../../validators/password-match.validator';\n\n// @TODO Alex: Create a model and handle request fields via class-transformer\nexport class PasswordForm extends AbstractForm<{password: string, confirm: string}> {\n constructor() {\n super({\n password: new UntypedFormControl(null, [Validators.required, passwordValidator()]),\n confirm: new UntypedFormControl(null, Validators.required),\n }, {password: null, confirm: null}, passwordMatchValidator('password', 'confirm'));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\n// @TODO Alex: Create a model and handle request fields via class-transformer\nexport class ResetPasswordForm extends AbstractForm<{email: string}> {\n constructor() {\n super({\n email: new UntypedFormControl(null, [Validators.required, Validators.email]),\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { RegistrationInvite } from '../../models/registration-invite/registration-invite';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * Form for inviting an unregistered user\n */\nexport class UserInviteForm extends AbstractForm<RegistrationInvite> {\n constructor() {\n super({\n firstName: new UntypedFormControl(null, Validators.required),\n email: new UntypedFormControl(null, [Validators.required, Validators.email]),\n },\n plainToClass(RegistrationInvite, {})\n );\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { User } from '../../models';\nimport { AbstractForm } from '../abstract.form';\n\nexport class UserForm extends AbstractForm<User> {\n constructor(user: User) {\n super({\n title: new UntypedFormControl(user.title),\n firstName: new UntypedFormControl(user.firstName, Validators.required),\n lastName: new UntypedFormControl(user.lastName, Validators.required),\n address: new UntypedFormControl(user.address),\n phone: new UntypedFormControl(user.phone),\n file: new UntypedFormControl(user.file)\n }, user);\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { ClientDetails } from '../../models';\nimport { autocompleteValidator } from '../../validators';\nimport { UserMedicareExemptionEnum } from '../../db/Enums/user-medicare-exemption.enum';\nimport { AbstractForm } from '../abstract.form';\n\nexport class ClientDetailsForm extends AbstractForm<ClientDetails> {\n constructor(clientDetails: ClientDetails) {\n super({\n isAustralianResident: new UntypedFormControl(clientDetails.isAustralianResident),\n taxFileNumber: new UntypedFormControl(clientDetails.taxFileNumber),\n occupation: new UntypedFormControl(clientDetails.occupation, autocompleteValidator()),\n medicareExemption: new UntypedFormControl({ value: clientDetails.medicareExemption, disabled: !clientDetails.medicareExemption }, Validators.required),\n pensionersTax: new UntypedFormControl(clientDetails.pensionersTax),\n workingHolidayMaker: new UntypedFormControl(clientDetails.workingHolidayMaker)\n }), clientDetails;\n }\n\n toggleMedicareExemption(enabled: boolean): void {\n const control: UntypedFormControl = this.get('medicareExemption') as UntypedFormControl;\n\n // @TODO Alex/Vik: think about FormControl extension and implement control.toggle() method\n // then we can optimize the code:\n // control.setValue(enabled ? null : UserMedicareExemptionEnum.NO)\n // control.toggle(enabled);\n\n if (enabled) {\n control.setValue(null);\n control.enable();\n\n return;\n }\n\n control.setValue(UserMedicareExemptionEnum.NO);\n control.disable();\n }\n\n submit(): ClientDetails {\n return super.submit({}, true);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { PasswordForm } from '../user';\nimport { User } from '../../models';\n\n// @TODO Alex: Create a model and handle request fields via class-transformer\nexport class RegisterClientForm extends AbstractForm<User> {\n constructor(\n referenceCode?: string\n ) {\n super({\n firstName: new UntypedFormControl('', [Validators.required]),\n lastName: new UntypedFormControl('', [Validators.required]),\n email: new UntypedFormControl('', [Validators.required, Validators.email]),\n password: new PasswordForm(),\n referenceCode: new UntypedFormControl(referenceCode)\n });\n }\n\n submit(data: object = {}): User {\n return super.submit({ password: (this.get('password') as PasswordForm).submit()?.password });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { FirmTypeEnum } from '../../db/Enums/firm-type.enum';\nimport { RegisterClientForm } from './register-client.form';\nimport { Firm } from '../../models/firm/firm';\nimport { plainToClass } from 'class-transformer';\n\nexport class RegisterFirmForm extends AbstractForm<Firm> {\n constructor(\n private firmType: FirmTypeEnum,\n referenceCode?: string\n ) {\n super({\n name: new UntypedFormControl('', Validators.required),\n abn: new UntypedFormControl('', Validators.required),\n tan: new UntypedFormControl({value: '', disabled: firmType !== FirmTypeEnum.ACCOUNTANT}, Validators.required),\n owner: new RegisterClientForm(referenceCode),\n type: new UntypedFormControl(firmType)\n }, plainToClass(Firm, {}));\n }\n\n submit(data: object = {}): Firm {\n return super.submit({owner: (this.get('owner') as RegisterClientForm).submit()});\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { BorrowingReport } from '../../models';\nimport { FormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4717608961/Borrowing+Power+Report+-+Property+Tank\n */\nexport class BorrowingReportForm extends AbstractForm<BorrowingReport> {\n /**\n * extra params are auto-calculated numbers used if user didn't specify manual numbers\n */\n constructor(report: BorrowingReport = plainToClass(BorrowingReport, {}), netSalary?: number, spouseNetSalary?: number) {\n super({\n netRentIncome: new FormControl(report.netRentIncome, Validators.required),\n loanRepaymentAmount: new FormControl(report.loanRepaymentAmount, Validators.required),\n netSalary: new FormControl(report.netSalary ?? netSalary),\n spouseNetSalary: new FormControl(report.spouseNetSalary ?? spouseNetSalary),\n otherLiabilities: new FormControl(report.otherLiabilities, Validators.required),\n livingExpenses: new FormControl(report.livingExpenses, Validators.required),\n }, report);\n }\n\n /**\n * some fields are auto-calculated, shouldn't be updated until changed by user\n */\n submit(data: object = {}, includeDisabledFields: boolean = false): BorrowingReport {\n return super.submit({\n netSalary: (this.model.netSalary || this.fieldChanged('netSalary')) ? this.get('netSalary').value : null,\n spouseNetSalary: (this.model.netSalary || this.fieldChanged('spouseNetSalary')) ? this.get('spouseNetSalary').value : null,\n }, includeDisabledFields);\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { PropertySale, PropertySaleCostBase } from '../../../models/property/property-sale';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { Property } from '../../../models/property/property';\n\n/**\n * @Todo TT-2143 remove Property stuff and use this form just for PropertySale\n * @Todo TT-2143 create and extend from abstract PropertySale form\n */\nexport class PropertySaleCostBaseForm extends AbstractForm<PropertySaleCostBase> {\n constructor(\n private propertySaleCostBase: PropertySaleCostBase,\n ) {\n super({\n property: new UntypedFormGroup({\n purchasePrice: new UntypedFormControl(propertySaleCostBase.property.purchasePrice, Validators.required),\n contractDate: new UntypedFormControl(propertySaleCostBase.property.contractDate, Validators.required),\n stampDuty: new UntypedFormControl(propertySaleCostBase.property.stampDuty, Validators.required),\n legalFees: new UntypedFormControl(propertySaleCostBase.property.legalFees, Validators.required),\n otherCapitalCosts: new UntypedFormControl(propertySaleCostBase.property.otherCapitalCosts, Validators.required),\n }),\n sale: new UntypedFormGroup({\n holdingCosts: new UntypedFormControl(propertySaleCostBase.sale.holdingCosts),\n structuralImprovementsWDV: new UntypedFormControl(propertySaleCostBase.sale.structuralImprovementsWDV),\n buildingAtCostClaimed: new UntypedFormControl(propertySaleCostBase.sale.buildingAtCostClaimed)\n })\n },\n propertySaleCostBase\n );\n }\n\n getProperty(): Property {\n return plainToClass(Property, Object.assign({}, this.propertySaleCostBase.property, this.get('property').value));\n }\n\n getPropertySale(): PropertySale {\n return plainToClass(PropertySale, Object.assign({}, this.propertySaleCostBase.sale, this.get('sale').value));\n }\n\n submit(data: object = {}): PropertySaleCostBase {\n Object.assign(\n data,\n {property: plainToClass(Property, Object.assign({}, this.propertySaleCostBase.property, this.get('property').value))},\n {sale: plainToClass(PropertySale, Object.assign({}, this.propertySaleCostBase.sale, this.get('sale').value))},\n );\n return super.submit(data);\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { PropertySale } from '../../../models/property/property-sale';\nimport { Property } from '../../../models/property/property';\nimport { plainToClass } from 'class-transformer';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * @Todo TT-2143 Create and extend from abstract PropertySale form\n */\nexport class PropertySaleCostSaleForm extends AbstractForm<PropertySale> implements IEventListener {\n constructor(\n private propertySale: PropertySale,\n private property: Property,\n ) {\n super({\n price: new UntypedFormControl(propertySale.price, Validators.required),\n date: new UntypedFormControl(propertySale.date, Validators.required),\n settlementDate: new UntypedFormControl(propertySale.settlementDate, Validators.required),\n commission: new UntypedFormControl(propertySale.commission || 0, Validators.required),\n legalFees: new UntypedFormControl(propertySale.legalFees || 0, Validators.required),\n otherCost: new UntypedFormControl(propertySale.otherCost || 0, Validators.required),\n grossCapitalGain: new UntypedFormControl({value: propertySale.grossCapitalGain, disabled: true}, Validators.required),\n }, propertySale);\n\n this.listenEvents();\n this.updateGrossCapitalGain();\n }\n\n listenEvents(): void {\n this.listenCommissionUpdated();\n this.listenLegalFeesUpdated();\n this.listenOtherCostUpdated();\n this.listenPriceUpdated();\n }\n\n /**\n * Get property instance based on provided property and form value to get actual form calculations\n * @Todo TT-2143 Move to parent abstract PropertySale form\n */\n getPropertySale(): PropertySale {\n return plainToClass(PropertySale, Object.assign({}, this.propertySale, this.getRawValue()));\n }\n\n submit(data: object = {}): PropertySale {\n // 'grossCapitalGain' field is always disabled, but we need it to submit result\n Object.assign(data, {grossCapitalGain: this.get('grossCapitalGain').value});\n return super.submit(data);\n }\n\n private updateGrossCapitalGain(): void {\n this.get('grossCapitalGain').setValue(this.property.calculateGrossCapitalGain(this.getPropertySale()));\n }\n\n private listenCommissionUpdated(): void {\n this.get('commission').valueChanges.subscribe(() => {\n this.updateGrossCapitalGain();\n });\n }\n\n private listenLegalFeesUpdated() {\n this.get('legalFees').valueChanges.subscribe(() => {\n this.updateGrossCapitalGain();\n });\n }\n\n private listenOtherCostUpdated() {\n this.get('otherCost').valueChanges.subscribe(() => {\n this.updateGrossCapitalGain();\n });\n }\n\n private listenPriceUpdated() {\n this.get('price').valueChanges.subscribe(() => {\n this.updateGrossCapitalGain();\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { Property, PropertySale, PropertySaleTaxExemptionMetaField, TaxExemption, TaxExemptionMetaField } from '../../../models';\nimport { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { Collection } from '../../../collections';\nimport { TaxExemptionMetaFieldEnum } from '../../../db/Enums/property/property-sale/tax-exemption-meta-field.enum';\nimport { IEventListener } from '../../../interfaces';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * @Todo TT-2143 Create and extend from abstract PropertySale form\n */\nexport class PropertySaleExemptionsForm extends AbstractForm<PropertySale> implements IEventListener {\n constructor(\n private propertySale: PropertySale,\n private property: Property,\n private taxExemptions: Collection<TaxExemption>,\n ) {\n super({\n taxExemption: new UntypedFormControl(taxExemptions.findBy('id', propertySale.taxExemption?.id ?? property.getCGTExemption(propertySale))),\n taxExemptionMetaFields: new UntypedFormArray([]),\n grossCapitalGain: new UntypedFormControl(propertySale.grossCapitalGain),\n netCapitalGain: new UntypedFormControl(propertySale.netCapitalGain),\n },\n propertySale\n );\n\n if (propertySale.taxExemption) {\n this.setFormMetaFieldsControls();\n }\n\n this.updateCapitalGains();\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenTaxExemptionUpdated();\n }\n\n /**\n * @Todo TT-2143 Move to parent abstract PropertySale form\n */\n getPropertySale(): PropertySale {\n return plainToClass(PropertySale, Object.assign({}, this.propertySale, this.getRawValue()));\n }\n\n private updateCapitalGains(): void {\n this.updateGrossCapitalGain();\n this.updateNetCapitalGain();\n }\n\n private updateNetCapitalGain(): void {\n this.get('netCapitalGain').setValue(this.property.calculateNetCapitalGain(this.getPropertySale()));\n }\n\n /**\n * @TODO copypast\n * @private\n */\n private updateGrossCapitalGain(): void {\n this.get('grossCapitalGain').setValue(this.property.calculateGrossCapitalGain(this.getPropertySale()));\n }\n\n private listenTaxExemptionUpdated() {\n this.get('taxExemption').valueChanges.subscribe((taxExemption: TaxExemption) => {\n this.updateCapitalGains();\n this.setFormMetaFieldsControls(taxExemption);\n });\n }\n\n /**\n * show meta fields related to passed tax exemption or existing property sale meta fields\n */\n private setFormMetaFieldsControls(taxExemption?: TaxExemption): void {\n // use property sale tax exemption if it exists to preselect data\n const currentTaxExemption: TaxExemption = this.propertySale.taxExemption ?\n this.taxExemptions.findBy('id', this.propertySale.taxExemption.id) :\n taxExemption;\n\n const formArray: UntypedFormArray = this.get('taxExemptionMetaFields') as UntypedFormArray;\n // clean up\n formArray.clear();\n if (!currentTaxExemption) {\n return;\n }\n\n // show all tax exemption meta fields\n currentTaxExemption.metaFields.forEach((metaField: TaxExemptionMetaField) => {\n\n // use property sale tax exemption meta field value if it exists\n const metaFieldValue: number = this.propertySale.taxExemption ?\n this.propertySale.taxExemptionMetaFields\n .find((saleMetaField: PropertySaleTaxExemptionMetaField) => saleMetaField.metaField.id === metaField.id).value :\n null;\n\n const validators = [\n // claim percent is optional\n metaField.id !== TaxExemptionMetaFieldEnum.CLAIM_PERCENT && Validators.required,\n // ppr days can't be more than ownership days\n metaField.id === TaxExemptionMetaFieldEnum.PPR_DAYS && Validators.max(this.property.getOwnershipDuration(this.propertySale))\n ].filter(Boolean);\n\n formArray.push(\n new UntypedFormGroup(\n {\n metaField: new UntypedFormControl(metaField),\n value: new UntypedFormControl(metaFieldValue, validators)\n }\n ));\n });\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { Property } from '../../models';\nimport { AbstractForm } from '../abstract.form';\n\nexport class PropertyEditForm extends AbstractForm<Property> {\n constructor(property: Property) {\n super({\n address: new UntypedFormControl(property.address, Validators.required),\n purchasePrice: new UntypedFormControl(property.purchasePrice, Validators.required),\n contractDate: new UntypedFormControl(property.contractDate, Validators.required),\n settlementDate: new UntypedFormControl(property.settlementDate, Validators.required),\n stampDuty: new UntypedFormControl(property.stampDuty),\n legalFees: new UntypedFormControl(property.legalFees),\n otherCapitalCosts: new UntypedFormControl(property.otherCapitalCosts),\n file: new UntypedFormControl(property.file)\n }, property);\n }\n}\n","import { FormControl, Validators } from '@angular/forms';\nimport { PropertyDocument } from '../../models';\nimport { AbstractForm } from '../abstract.form';\n\nexport class PropertyDocumentForm extends AbstractForm<PropertyDocument> {\n constructor(document: PropertyDocument) {\n super({\n property: new FormControl(document.property, Validators.required),\n file: new FormControl(document.file)\n }, document);\n }\n\n submit(): PropertyDocument {\n return super.submit({ property: { id: this.value.property.id } });\n }\n}\n","import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { PropertyValuation } from '../../models';\nimport { AbstractForm } from '../abstract.form';\n\nexport class PropertyValuationForm extends AbstractForm<PropertyValuation> {\n constructor(valuation: PropertyValuation) {\n super({\n date: new UntypedFormControl(valuation.date || new Date(), Validators.required),\n marketValue: new UntypedFormControl(valuation.marketValue, Validators.required),\n document: new UntypedFormGroup({\n file: new UntypedFormControl(valuation.document?.file)\n })\n }, valuation);\n }\n\n submit(): PropertyValuation {\n return super.submit({ document: this.value.document.file ? this.value.document : null });\n }\n}\n","import { BusinessTypeEnum, MyTaxBusinessDetails } from '../../../../../models/report';\nimport { UntypedFormControl } from '@angular/forms';\nimport { AbstractForm } from '../../../../abstract.form';\nimport { IEventListener } from '../../../../../interfaces/event-listener.interface';\nimport { SoleBusinessActivity } from '../../../../../models';\n\nexport class MyTaxBusinessDetailsForm extends AbstractForm<MyTaxBusinessDetails> implements IEventListener {\n constructor(\n private businessDetails: MyTaxBusinessDetails\n ) {\n super({\n vehicleClaimMethod: new UntypedFormControl({\n value: businessDetails.vehicleClaimDetails?.method,\n disabled: true\n }),\n businessType: new UntypedFormControl({value: BusinessTypeEnum.SOLE_TRADER, disabled: true}),\n // business details\n mainBusinessActivity: new UntypedFormControl(businessDetails.businessActivities[0]),\n mainBusinessName: new UntypedFormControl({value: businessDetails.businesses.first.name, disabled: true}),\n mainBusinessABN: new UntypedFormControl({value: businessDetails.businessABN, disabled: true}),\n mainBusinessAddress: new UntypedFormControl({value: businessDetails.businessAddress, disabled: true}),\n numberOfBusinessActivities: new UntypedFormControl(businessDetails.businessActivities.length)\n });\n\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenMainBusinessActivityChanged();\n }\n\n private listenMainBusinessActivityChanged() {\n this.get('mainBusinessActivity').valueChanges.subscribe((activity: SoleBusinessActivity) => {\n this.get('mainBusinessName').setValue(this.businessDetails.businesses.findBy('activity.id', activity.id).name);\n })\n }\n}\n","import { AbstractForm } from '../../../../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MyTaxBusinessIncome } from '../../../../../models/report';\n\nexport class MyTaxBusinessIncomeForm extends AbstractForm<MyTaxBusinessIncome> {\n constructor(\n businessIncome: MyTaxBusinessIncome\n ) {\n super({\n // Set in \"false\" if user has PSI income\n // https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4644110466/Tax+Return+MyTax+-+Online+Form\n // (\"Business income or losses\" section, \"P1. Did you satisfy the results test?\" field)\n isTestResultsSatisfied: new UntypedFormControl(!businessIncome.psiIncomeAmount),\n psiVoluntaryAgreementAmount: new UntypedFormControl({\n value: businessIncome.psiVoluntaryAgreementAmount,\n disabled: true\n }),\n psiABNNotQuotedAmount: new UntypedFormControl({\n value: businessIncome.psiABNNotQuotedAmount,\n disabled: true\n }),\n psiLabourHireOrOtherAmount: new UntypedFormControl({\n value: businessIncome.psiLabourHireOrOtherAmount,\n disabled: true\n }),\n psiOtherAmount: new UntypedFormControl({\n value: businessIncome.psiOtherAmount,\n disabled: true\n }),\n psiDeductionAssociatesAmount: new UntypedFormControl({\n value: businessIncome.psiDeductionAssociatesAmount,\n disabled: true\n }),\n psiDeductionOtherAmount: new UntypedFormControl({\n value: businessIncome.psiDeductionOtherAmount,\n disabled: true\n }),\n psiVoluntaryAgreementTax: new UntypedFormControl({\n value: businessIncome.psiVoluntaryAgreementTax,\n disabled: true\n }),\n psiABNNotQuotedTax: new UntypedFormControl({\n value: businessIncome.psiABNNotQuotedTax,\n disabled: true\n }),\n psiLabourHireOrOtherTax: new UntypedFormControl({\n value: businessIncome.psiLabourHireOrOtherTax,\n disabled: true\n }),\n\n\n grossPaymentsNoAbsGivenAmount: new UntypedFormControl({\n value: businessIncome.grossPaymentsNoAbsGivenAmount,\n disabled: true\n }),\n grossPaymentsVoluntaryAgreementAmount: new UntypedFormControl({\n value: businessIncome.grossPaymentsVoluntaryAgreementAmount,\n disabled: true\n }),\n grossPaymentsLabourHireAmount: new UntypedFormControl({\n value: businessIncome.grossPaymentsLabourHireAmount,\n disabled: true\n }),\n assessibleGovernmentPaymentsAmount: new UntypedFormControl({\n value: businessIncome.assessibleGovernmentPaymentsAmount,\n disabled: true\n }),\n otherBusinessIncomeAmount: new UntypedFormControl({\n value: businessIncome.otherBusinessIncomeAmount,\n disabled: true\n }),\n grossPaymentsNoAbsGivenTax: new UntypedFormControl({\n value: businessIncome.grossPaymentsNoAbsGivenTax,\n disabled: true\n }),\n grossPaymentsVoluntaryAgreementTax: new UntypedFormControl({\n value: businessIncome.grossPaymentsVoluntaryAgreementTax,\n disabled: true\n }),\n grossPaymentsLabourHireTax: new UntypedFormControl({\n value: businessIncome.grossPaymentsLabourHireTax,\n disabled: true\n }),\n });\n }\n}\n","import { AbstractForm } from '../../../../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport {\n MyTaxBusinessLosses\n} from '../../../../../models/report';\n\nexport class MyTaxBusinessLossesForm extends AbstractForm<MyTaxBusinessLosses> {\n constructor(\n businessLosses: MyTaxBusinessLosses\n ) {\n super({\n purchasesAndOtherCostsAmount: new UntypedFormControl({\n value: businessLosses.purchasesAndOtherCostsAmount,\n disabled: true\n }),\n contractorsAndCommissionAmount: new UntypedFormControl({\n value: businessLosses.contractorsAndCommissionAmount,\n disabled: true\n }),\n superannuationAmount: new UntypedFormControl({\n value: businessLosses.superannuationAmount,\n disabled: true\n }),\n badDebtAmount: new UntypedFormControl({\n value: businessLosses.badDebtAmount,\n disabled: true\n }),\n leaseExpensesCommercialAmount: new UntypedFormControl({\n value: businessLosses.leaseExpensesCommercialAmount,\n disabled: true\n }),\n rentExpensesCommercialPremisesAmount: new UntypedFormControl({\n value: businessLosses.rentExpensesCommercialPremisesAmount,\n disabled: true\n }),\n interestExpensesAustraliaAmount: new UntypedFormControl({\n value: businessLosses.interestExpensesAustraliaAmount,\n disabled: true\n }),\n interestExpensesOverseasAmount: new UntypedFormControl({\n value: businessLosses.interestExpensesOverseasAmount,\n disabled: true\n }),\n kmsTravelledExpensesAmount: new UntypedFormControl({\n value: businessLosses.kmsTravelledExpensesAmount,\n disabled: true\n }),\n logbookExpensesAmount: new UntypedFormControl({\n value: businessLosses.logbookExpensesAmount,\n disabled: true\n }),\n otherExpensesAmount: new UntypedFormControl({\n value: businessLosses.otherExpensesAmount,\n disabled: true\n }),\n totalNonPrimaryProductionExpensesAmount: new UntypedFormControl({\n value: businessLosses.totalNonPrimaryProductionExpensesAmount,\n disabled: true\n }),\n // depreciations\n depreciationExpensesAmount: new UntypedFormControl({\n value: businessLosses.depreciationExpensesAmount,\n disabled: true\n }),\n deductionsForCertainAssetsAmount: new UntypedFormControl({\n value: businessLosses.deductionsForCertainAssetsAmount,\n disabled: true\n }),\n deductionsForGeneralSmallBusinessPoolAmount: new UntypedFormControl({\n value: businessLosses.deductionsForGeneralSmallBusinessPoolAmount,\n disabled: true\n }),\n currentYearNetNonPrimaryIncomeOrLossesAmount: new UntypedFormControl({\n value: businessLosses.currentYearNetNonPrimaryIncomeOrLossesAmount,\n disabled: true\n }),\n priorYearsNonPrimaryLossesAmount: new UntypedFormControl({\n value: businessLosses.priorYearsNonPrimaryLossesAmount,\n disabled: true\n }),\n lossType: new UntypedFormControl(businessLosses.currentLoss?.offsetRule?.id, Validators.required),\n });\n }\n}\n","import { AbstractForm } from '../../../abstract.form';\nimport {\n MyTaxBusinessDetails,\n MyTaxBusinessIncome,\n MyTaxBusinessLosses\n} from '../../../../models/report';\nimport { MyTaxBusinessDetailsForm } from './my-tax-business-details/my-tax-business-details.form';\nimport { MyTaxBusinessIncomeForm } from './my-tax-business-income/my-tax-business-income.form';\nimport { MyTaxBusinessLossesForm } from './my-tax-business-losses/my-tax-business-losses.form';\n\nexport class MyTaxBusinessIncomeOrLossesForm extends AbstractForm<object> {\n constructor(\n businessDetails: MyTaxBusinessDetails,\n businessIncome: MyTaxBusinessIncome,\n businessLosses: MyTaxBusinessLosses\n ) {\n super({\n businessDetails: new MyTaxBusinessDetailsForm(businessDetails),\n businessIncome: new MyTaxBusinessIncomeForm(businessIncome),\n businessLosses: new MyTaxBusinessLossesForm(businessLosses),\n })\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { MyTaxCgt } from '../../../models/report';\n\n/**\n * @TODO vik/nicole test\n */\nexport class MyTaxCgtForm extends AbstractForm<MyTaxCgt> {\n constructor(gainsOrLosses: MyTaxCgt) {\n super({\n hasAssetSales: new UntypedFormControl(gainsOrLosses.hasAssetSales),\n hasExemption: new UntypedFormControl({value: gainsOrLosses.hasExemption, disabled: !gainsOrLosses.hasAssetSales}),\n exemptionType: new UntypedFormControl({value: null, disabled: !gainsOrLosses.hasExemption}, Validators.required),\n netCapitalProfit: new UntypedFormControl({value: gainsOrLosses.netCapitalProfit, disabled: true}),\n taxableGrossCapitalProfit: new UntypedFormControl({value: gainsOrLosses.taxableGrossCapitalProfit, disabled: true}),\n netCapitalLoss: new UntypedFormControl({value: gainsOrLosses.netCapitalLoss, disabled: true}),\n forwardCapitalLoss: new UntypedFormControl({value: gainsOrLosses.forwardCapitalLoss, disabled: true}),\n });\n\n this.get('hasAssetSales').valueChanges.subscribe((hasAssetSales: boolean) => {\n if (hasAssetSales) {\n this.get('hasExemption').enable();\n \n return;\n }\n\n this.get('hasExemption').setValue(false);\n this.get('hasExemption').disable();\n });\n \n this.get('hasExemption').valueChanges.subscribe((hasExemption: boolean) => {\n hasExemption ? this.get('exemptionType').enable() : this.get('exemptionType').disable();\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { MyTaxDeductions } from '../../../models/report/my-tax';\nimport { conditionalValidator } from '../../../validators';\n\nexport class MyTaxDeductionsForm extends AbstractForm<MyTaxDeductions> {\n constructor(\n deductions: MyTaxDeductions,\n ) {\n super({\n vehicleClaimMethod: new UntypedFormControl({\n value: deductions.vehicleClaimDetails?.method,\n disabled: true\n }),\n vehicleExpensesTotalAmount: new UntypedFormControl({\n value: deductions.vehicleExpensesTotalAmount,\n disabled: true\n }),\n workRelatedTravelExpensesTotalAmount: new UntypedFormControl({\n value: deductions.workRelatedTravelExpensesTotalAmount,\n disabled: true\n }),\n workRelatedClothingType: new UntypedFormControl(\n deductions.workRelatedClothingType,\n conditionalValidator(\n (): boolean => !!deductions.workRelatedClothingTotalAmount,\n Validators.required\n )\n ),\n workRelatedClothingTotalAmount: new UntypedFormControl({\n value: deductions.workRelatedClothingTotalAmount,\n disabled: true\n }),\n workRelatedSelfEducationType: new UntypedFormControl(\n deductions.workRelatedSelfEducationType,\n conditionalValidator(\n (): boolean => !!deductions.workRelatedSelfEducationTotalAmount,\n Validators.required\n )\n ),\n workRelatedSelfEducationTotalAmount: new UntypedFormControl({\n value: deductions.workRelatedSelfEducationTotalAmount,\n disabled: true\n }),\n otherWorkRelatedSelfEducationTotalAmount: new UntypedFormControl({\n value: deductions.otherWorkRelatedExpensesTotalAmount,\n disabled: true\n }),\n lowValuePoolDeductionTotalAmount: new UntypedFormControl({\n value: deductions.lowValuePoolDeductionTotalAmount,\n disabled: true\n }),\n interestExpensesTotalAmount: new UntypedFormControl({\n value: deductions.interestExpensesTotalAmount,\n disabled: true\n }),\n dividendExpensesTotalAmount: new UntypedFormControl({\n value: deductions.dividendExpensesTotalAmount,\n disabled: true\n }),\n donationsTotalAmount: new UntypedFormControl({\n value: deductions.donationsTotalAmount,\n disabled: true\n }),\n interestsChargedByATOTotalAmount: new UntypedFormControl({\n value: deductions.interestsChargedByATOTotalAmount,\n disabled: true\n }),\n litigationCostsTotalAmount: new UntypedFormControl({\n value: deductions.litigationCostsTotalAmount,\n disabled: true\n }),\n otherManagingCostsTotalAmount: new UntypedFormControl({\n value: deductions.otherManagingCostsTotalAmount,\n disabled: true\n }),\n fundName: new UntypedFormControl(''),\n hasFund: new UntypedFormControl(true),\n fundABN: new UntypedFormControl(''),\n fundTFN: new UntypedFormControl(''),\n fundAccountNumber: new UntypedFormControl(''),\n personalSuperContributionsTotalAmount: new UntypedFormControl({\n value: deductions.personalSuperContributionsTotalAmount,\n disabled: true\n }),\n forestryManagedInvestmentSchemesDeductionsTotalAmount: new UntypedFormControl({\n value: deductions.forestryManagedInvestmentSchemesDeductionsTotalAmount,\n disabled: true\n }),\n otherDeductionsTotalAmount: new UntypedFormControl({\n value: deductions.otherDeductionsTotalAmount,\n disabled: true\n }),\n depreciationAndCapitalAllowancesTotalAmount: new UntypedFormControl({\n value: deductions.depreciationAndCapitalAllowancesTotalAmount,\n disabled: true\n })\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MyTaxDividends } from '../../../models/report/my-tax/my-tax-dividends/my-tax-dividends';\n\nexport class MyTaxDividendsForm extends AbstractForm<MyTaxDividends> {\n constructor(\n dividends: MyTaxDividends,\n ) {\n super({\n dividendsUnfrankedAmount: new UntypedFormControl({\n value: dividends.dividendsUnfrankedAmount,\n disabled: true\n }),\n dividendsFrankedAmount: new UntypedFormControl({\n value: dividends.dividendsFrankedAmount,\n disabled: true\n }),\n dividendsFrankingCreditsAmount: new UntypedFormControl({\n value: dividends.dividendsFrankingCreditsAmount,\n disabled: true\n }),\n dividendsTotalTax: new UntypedFormControl({value: dividends.dividendsTotalTax, disabled: true}),\n isForeignResident: new UntypedFormControl(false),\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { MyTaxIncomeStatements } from '../../../models/report';\nimport { User } from '../../../models';\nimport { autocompleteValidator } from '../../../validators';\n\nexport class MyTaxIncomeStatementsForm extends AbstractForm<MyTaxIncomeStatements> {\n constructor(\n private incomeStatements: MyTaxIncomeStatements,\n user: User\n ) {\n super({\n occupation: new UntypedFormControl(user.clientDetails.occupation, [Validators.required, autocompleteValidator()]),\n allowanceTotalAmount: new UntypedFormControl({\n value: incomeStatements.allowanceTotalAmount,\n disabled: true\n }),\n allowanceTotalTax: new UntypedFormControl({\n value: incomeStatements.allowanceTotalTax,\n disabled: true\n }),\n lumpATransactionsTotalAmount: new UntypedFormControl({\n value: incomeStatements.lumpATransactionsTotalAmount,\n disabled: true\n }),\n lumpATransactionsTotalTax: new UntypedFormControl({\n value: incomeStatements.lumpATransactionsTotalTax,\n disabled: true\n }),\n hasGenuineLumpATransactions: new UntypedFormControl({\n value: incomeStatements.hasGenuineLumpATransactions,\n disabled: true\n }),\n hasOtherLumpATransactions: new UntypedFormControl({\n value: incomeStatements.hasOtherLumpATransactions,\n disabled: true\n }),\n lumpBTransactionsTotalAmount: new UntypedFormControl({\n value: incomeStatements.lumpBTransactionsTotalAmount,\n disabled: true\n }),\n lumpBTransactionsTotalTax: new UntypedFormControl({\n value: incomeStatements.lumpBTransactionsTotalTax,\n disabled: true\n }),\n australianAllowancesAndPaymentsTotalAmount: new UntypedFormControl({\n value: incomeStatements.australianAllowancesAndPaymentsTotalAmount,\n disabled: true\n }),\n australianAllowancesAndPaymentsTotalTax: new UntypedFormControl({\n value: incomeStatements.australianAllowancesAndPaymentsTotalTax,\n disabled: true\n }),\n australianPensionsAndAllowancesTotalAmount: new UntypedFormControl({\n value: incomeStatements.australianPensionsAndAllowancesTotalAmount,\n disabled: true\n }),\n australianPensionsAndAllowancesTotalTax: new UntypedFormControl({\n value: incomeStatements.australianPensionsAndAllowancesTotalTax,\n disabled: true\n }),\n australianAnnuitiesSuperannuationIncomesTotalTax: new UntypedFormControl({\n value: incomeStatements.australianAnnuitiesSuperannuationIncomesTotalTax,\n disabled: true\n }),\n australianAnnuityPaymentsTaxed: new UntypedFormControl({\n value: incomeStatements.australianAnnuityPaymentsTaxed,\n disabled: true\n }),\n australianAnnuityPaymentsUntaxed: new UntypedFormControl({\n value: incomeStatements.australianAnnuityPaymentsUntaxed,\n disabled: true\n }),\n assessableCappedDefinedBenefitTotalAmount: new UntypedFormControl({\n value: incomeStatements.assessableCappedDefinedBenefitTotalAmount,\n disabled: true\n }),\n superannuationIncomeStreamsTotalTaxed: new UntypedFormControl({\n value: incomeStatements.superannuationIncomeStreamsTotalTaxed,\n disabled: true\n }),\n superannuationIncomeStreamsTotalUntaxed: new UntypedFormControl({\n value: incomeStatements.superannuationIncomeStreamsTotalUntaxed,\n disabled: true\n }),\n attributablePsiTransactionsTotalAmount: new UntypedFormControl({\n value: incomeStatements.attributablePsiTransactionsTotalAmount,\n disabled: true\n }),\n attributablePsiTransactionsTotalTax: new UntypedFormControl({\n value: incomeStatements.attributablePsiTransactionsTotalTax,\n disabled: true\n }),\n fhssTransactionsTotalAmount: new UntypedFormControl({\n value: incomeStatements.fhssTransactionsTotalAmount,\n disabled: true\n }),\n fhssTransactionsTotalTax: new UntypedFormControl({\n value: incomeStatements.fhssTransactionsTotalTax,\n disabled: true\n }),\n australianSpecialPaymentsTotalAmount: new UntypedFormControl({\n value: incomeStatements.australianSpecialPaymentsTotalAmount,\n disabled: true\n }),\n australianSpecialPaymentsTotalTax: new UntypedFormControl({\n value: incomeStatements.australianSpecialPaymentsTotalTax,\n disabled: true\n }),\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { MyTaxIncomeTests } from '../../../models/report/my-tax/my-tax-income-tests/my-tax-income-tests';\n\n/**\n * @Todo future functionality\n */\nexport class MyTaxIncomeTestsForm extends AbstractForm<MyTaxIncomeTests> {\n constructor(\n incomeTests: MyTaxIncomeTests\n ) {\n super({});\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MyTaxInterest } from '../../../models/report/my-tax/my-tax-interest/my-tax-interest';\n\nexport class MyTaxInterestForm extends AbstractForm<MyTaxInterest> {\n constructor(\n interest: MyTaxInterest,\n ) {\n super({\n interestEarnedTotalAmount: new UntypedFormControl(interest.interestEarnedTotalAmount),\n interestEarnedTotalTax: new UntypedFormControl(interest.interestEarnedTotalTax),\n interestPaidTotalAmount: new UntypedFormControl(interest.interestPaidTotalAmount)\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { MyTaxLosses } from '../../../models/report/my-tax/my-tax-losses/my-tax-losses';\nimport { UntypedFormControl } from '@angular/forms';\n\nexport class MyTaxLossesForm extends AbstractForm<MyTaxLosses> {\n constructor(\n losses: MyTaxLosses,\n ) {\n super({\n businessLossDeferred: new UntypedFormControl(losses.businessLossDeferred),\n businessLossApplied: new UntypedFormControl(losses.businessLossApplied)\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { AnnualClientDetails, User } from '../../../models';\nimport { IEventListener } from '../../../interfaces';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * @TODO separate into 2 forms\n */\nexport class MyTaxMedicareForm extends AbstractForm<object> implements IEventListener {\n constructor(user: User, annualClientDetails: AnnualClientDetails = plainToClass(AnnualClientDetails, {})) {\n super({\n hasDependants: new UntypedFormControl(!!annualClientDetails.dependants),\n dependants: new UntypedFormControl(annualClientDetails.dependants, Validators.required),\n privateHealthCare: new UntypedFormControl(annualClientDetails.privateHealthCare),\n hasMedicareExemption: new UntypedFormControl(!!user.clientDetails.medicareExemption),\n medicareExemption: new UntypedFormControl(user.clientDetails.medicareExemption, Validators.required),\n });\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenHasDependantsChanged();\n this.listenHasMedicareExemptionChanged();\n }\n\n private listenHasDependantsChanged() {\n this.get('hasDependants').valueChanges.subscribe((value: boolean) => {\n if (!value) {\n this.get('dependants').setValue(0);\n }\n })\n }\n\n private listenHasMedicareExemptionChanged() {\n this.get('hasMedicareExemption').valueChanges.subscribe((value: boolean) => {\n if (!value) {\n this.get('medicareExemption').setValue(0);\n }\n })\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { MyTaxOffsets } from '../../../models/report/my-tax/my-tax-offsets/my-tax-offsets';\n\n/**\n * @Todo waiting for new chart accounts implemented (TT-1739 & TT-1740)\n */\nexport class MyTaxOffsetsForm extends AbstractForm<MyTaxOffsets> {\n constructor(\n offsets: MyTaxOffsets\n ) {\n super({});\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MyTaxOtherIncome } from '../../../models/report/my-tax/my-tax-other-income/my-tax-other-income';\n\nexport class MyTaxOtherIncomeForm extends AbstractForm<MyTaxOtherIncome> {\n constructor(\n otherIncome: MyTaxOtherIncome,\n ) {\n super({\n eligibleForReductionAmount: new UntypedFormControl(otherIncome.eligibleForReductionAmount),\n notEligibleForReductionAmount: new UntypedFormControl(otherIncome.notEligibleForReductionAmount),\n discountFromDeferredSchemeAmount: new UntypedFormControl(otherIncome.discountFromDeferredSchemeAmount),\n totalAssessableDiscountAmount: new UntypedFormControl(otherIncome.totalAssessableDiscountAmount),\n shareSchemesTotalTax: new UntypedFormControl(otherIncome.shareSchemesTotalTax),\n bonusesTotalAmount: new UntypedFormControl({\n value: otherIncome.bonusesTotalAmount,\n disabled: true\n }),\n forestryManagedInvestmentSchemesIncomeTotalAmount: new UntypedFormControl({\n value: otherIncome.forestryManagedInvestmentSchemesIncomeTotalAmount,\n disabled: true\n }),\n lumpSumPaymentsInArrearsTotalTax: new UntypedFormControl({\n value: otherIncome.lumpSumPaymentsInArrearsTotalTax,\n disabled: true\n }),\n specialProfessionIncomeTotalAmount: new UntypedFormControl({\n value: otherIncome.specialProfessionIncomeTotalAmount,\n disabled: true\n }),\n category1TotalIncome: new UntypedFormControl({\n value: otherIncome.category1TotalIncome,\n disabled: true\n }),\n hasLumpSumPaymentsInArrearsTransactions: new UntypedFormControl(!!otherIncome.lumpSumPaymentsInArrearsTransactions.length),\n atoInterestPaidTotalAmount: new UntypedFormControl({\n value: otherIncome.atoInterestPaidTotalAmount,\n disabled: true\n }),\n gainOnSaleOfVehiclePreviouslyDepreciatedTotalAmount: new UntypedFormControl({\n value: otherIncome.gainOnSaleOfVehiclePreviouslyDepreciatedTotalAmount,\n disabled: true\n })\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MyTaxPartnershipsAndTrusts } from '../../../models/report/my-tax';\n\nexport class MyTaxPartnershipsAndTrustsForm extends AbstractForm<MyTaxPartnershipsAndTrusts> {\n constructor(\n partnershipsAndTrusts: MyTaxPartnershipsAndTrusts\n ) {\n super({\n partnershipsIncomeTotalAmount: new UntypedFormControl({\n value: partnershipsAndTrusts.partnershipsIncomeTotalAmount,\n disabled: true\n }),\n partnershipsExpenseTotalAmount: new UntypedFormControl({\n value: partnershipsAndTrusts.partnershipsExpenseTotalAmount,\n disabled: true\n }),\n trustsIncomeTotalAmount: new UntypedFormControl({\n value: partnershipsAndTrusts.trustsIncomeTotalAmount,\n disabled: true\n }),\n trustsExpenseTotalAmount: new UntypedFormControl({\n value: partnershipsAndTrusts.trustsExpenseTotalAmount,\n disabled: true\n }),\n trustsIncomeTotalTax: new UntypedFormControl({\n value: partnershipsAndTrusts.trustsIncomeTotalTax,\n disabled: true\n }),\n frankingCreditsTotal: new UntypedFormControl({\n value: partnershipsAndTrusts.frankingCreditsTotal,\n disabled: true\n }),\n taxOffsetNRASTotalAmount: new UntypedFormControl({\n value: partnershipsAndTrusts.taxOffsetNRASTotalAmount,\n disabled: true\n })\n });\n }\n}\n","import { AbstractForm } from '../../abstract.form';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MyTaxRent } from '../../../models/report/my-tax/my-tax-rent/my-tax-rent';\n\nexport class MyTaxRentForm extends AbstractForm<MyTaxRent> {\n constructor(\n rent: MyTaxRent,\n ) {\n super({\n grossRentAmount: new UntypedFormControl(rent.grossRentAmount),\n interestDeductions: new UntypedFormControl(rent.interestDeductionsAmount),\n capitalWorksDeductions: new UntypedFormControl(rent.capitalWorksDeductionsAmount),\n otherRentalDeductionsAmount: new UntypedFormControl(rent.otherRentalDeductionsAmount)\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { Vehicle } from '../../models';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * Add/Edit Vehicle form\n */\nexport class VehicleForm extends AbstractForm<Vehicle> {\n static maxNameLength = 60;\n\n constructor(\n private vehicle: Vehicle = plainToClass(Vehicle, {})\n ) {\n super({\n name: new UntypedFormControl(vehicle.name, [Validators.required, Validators.maxLength(VehicleForm.maxNameLength)])\n }, vehicle);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { VehicleClaim } from '../../models';\nimport { UntypedFormControl } from '@angular/forms';\nimport { VehicleClaimDetails } from '../../models';\nimport { FinancialYear } from '../../models';\n\n/**\n * Add/Edit Vehicle Claim form\n */\nexport class VehicleClaimForm extends AbstractForm<VehicleClaim> {\n /**\n * @param vehicleClaim required even for the new claim, because claim needs business for sole tank\n * @param details required for form controls disabled state management\n */\n constructor(\n private vehicleClaim: VehicleClaim,\n private details: VehicleClaimDetails\n ) {\n super({\n kilometers: new UntypedFormControl({\n value: vehicleClaim.kilometers,\n disabled: !details.isManual || details.isLogbookMethod()\n }),\n workUsage: new UntypedFormControl({\n value: vehicleClaim.workUsage,\n disabled: !details.isManual || details.isKmsMethod()\n })\n }, vehicleClaim);\n }\n\n getAverageWeeklyKMS(): number {\n return this.get('kilometers').value / FinancialYear.weeksInYear;\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { VehicleClaimDetails } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\n/**\n * Add/Edit vehicle claim details form\n */\nexport class VehicleClaimDetailsForm extends AbstractForm<VehicleClaimDetails> {\n constructor(\n vehicleClaimDetails: VehicleClaimDetails,\n isBestPeriodExist: boolean\n ) {\n super({\n method: new UntypedFormControl(vehicleClaimDetails.method, Validators.required),\n isManual: new UntypedFormControl({\n value: vehicleClaimDetails.isManual,\n disabled: !isBestPeriodExist\n }),\n }, vehicleClaimDetails);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { VehicleLogbook } from '../../models';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { FinancialYear } from '../../models/financial-year/financial-year';\nimport { VehicleLogbookCollection } from '../../collections';\nimport { dateRangeValidator } from '../../validators/date-range.validator';\n\n/**\n * Add/Edit vehicle logbook form.\n * Behavior cases:\n * 1) Create the first logbook OR Edit the single logbook: all fields enabled\n * 2) Create the non-first logbook OR Edit the last logbook: odometerStart disabled\n * 3) Edit the non-last logbook: odometerStart, odometerEnd, date disabled\n */\nexport class VehicleLogbookForm extends AbstractForm<VehicleLogbook> {\n static maxDescriptionLength = 60;\n\n /**\n * @param logbook required because we need to set vehicle allocation and we can not set in in the form\n * @param logbooks list of all logbooks related to current logbook's vehicle. Required for form fields validation and disabled state management\n */\n constructor(\n private logbook: VehicleLogbook,\n private logbooks: VehicleLogbookCollection\n ) {\n super({\n description: new UntypedFormControl(logbook.description, [Validators.required, Validators.maxLength(VehicleLogbookForm.maxDescriptionLength)]),\n isPersonal: new UntypedFormControl(logbook.isPersonal),\n date: new UntypedFormControl(logbook.date, Validators.required),\n odometerStart: new UntypedFormControl(logbook.odometerStart, Validators.required),\n odometerEnd: new UntypedFormControl(logbook.odometerEnd, Validators.required),\n business: new UntypedFormControl(logbook.business)\n }, logbook);\n\n this.updateStateAndValidators();\n }\n\n /**\n * Set logbook validators and disable state depends of initial logbook and its place in the whole list\n */\n private updateStateAndValidators(): void {\n switch (true) {\n // Create the first or edit the single logbook\n case !this.logbook.id && !this.logbooks.length:\n case !!this.logbook.id && this.logbooks.length === 1:\n this.get('odometerStart').setValidators(Validators.min(0));\n this.get('date').setValidators(dateRangeValidator(new FinancialYear().startDate, new FinancialYear().endDate))\n break;\n // Create the non-first\n case !this.logbook.id && !!this.logbooks.length:\n this.get('odometerStart').disable();\n this.get('odometerEnd').setValidators(Validators.min(this.logbooks.last.odometerEnd));\n this.get('date').setValidators(dateRangeValidator(this.logbooks.last.date, new FinancialYear().endDate));\n break;\n // Edit the last logbook\n case !!this.logbook.id && this.logbook.id === this.logbooks.last.id && this.logbooks.length > 1:\n this.get('odometerStart').disable();\n this.get('odometerEnd').setValidators(Validators.min(this.logbooks.last.odometerEnd));\n const preLastDate: Date = this.logbooks.toArray()[this.logbooks.length - 1].date;\n this.get('date').setValidators(dateRangeValidator(preLastDate, new FinancialYear().endDate));\n break;\n // Edit the non-last logbook\n case !!this.logbook.id && this.logbook.id !== this.logbooks.last.id && this.logbooks.length > 1:\n this.get('odometerStart').disable();\n this.get('odometerEnd').disable();\n this.get('date').disable();\n }\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { AllocationRuleCondition } from '../../models/transaction/allocation-rule-condition';\nimport { plainToClass } from 'class-transformer';\nimport { UntypedFormControl, Validators } from '@angular/forms';\n\nexport class AllocationRuleConditionForm extends AbstractForm<AllocationRuleCondition> {\n constructor(\n condition: AllocationRuleCondition = plainToClass(AllocationRuleCondition, {})\n ) {\n super({\n field: new UntypedFormControl(condition.field, Validators.required),\n comparisonOperator: new UntypedFormControl(condition.comparisonOperator, Validators.required),\n value: new UntypedFormControl(condition.value, Validators.required)\n }, condition);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { AllocationRuleTransactionMetaField } from '../../models';\nimport { plainToClass } from 'class-transformer';\nimport { UntypedFormControl } from '@angular/forms';\n\nexport class AllocationRuleTransactionMetaFieldForm extends AbstractForm<AllocationRuleTransactionMetaField> {\n constructor(\n metaField: AllocationRuleTransactionMetaField = plainToClass(AllocationRuleTransactionMetaField, {})\n ) {\n super({\n value: new UntypedFormControl(metaField.value)\n }, metaField);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport {\n AllocationRuleTransaction,\n AllocationRuleTransactionMetaField,\n ChartAccounts,\n ChartAccountsMetaField,\n} from '../../models';\nimport { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { conditionalValidator } from '../../validators';\nimport { AllocationRuleTransactionMetaFieldForm } from './allocation-rule-transaction-meta-field.form';\nimport { IncomeSource } from '../../models';\nimport { IEventListener } from '../../interfaces';\nimport { plainToClass } from 'class-transformer';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\n\n/**\n * @TODO Alex: extend transaction form(s) when transaction forms refactored\n */\nexport class AllocationRuleTransactionForm extends AbstractForm<AllocationRuleTransaction> implements IEventListener {\n constructor(\n transaction: AllocationRuleTransaction,\n // Flag to enable transaction GST field\n isGST: boolean\n ) {\n super({\n amount: new UntypedFormControl(transaction.amount),\n amountPercent: new UntypedFormControl(transaction.amountPercent, Validators.required),\n tax: new UntypedFormControl(transaction.tax, Validators.required),\n claimPercent: new UntypedFormControl(transaction.claimPercent, [Validators.required, Validators.min(0), Validators.max(100)]),\n chartAccounts: new UntypedFormControl(transaction.chartAccounts, Validators.required),\n isGST: new UntypedFormControl({ value: transaction.isGST || false, disabled: !isGST }),\n loan: new UntypedFormControl(transaction.loan),\n incomeSource: new UntypedFormControl(transaction.incomeSource, conditionalValidator(() => transaction.chartAccounts?.isWorkIncome(), Validators.required)),\n metaFields: new UntypedFormArray((transaction.metaFields || []).map((metaField: AllocationRuleTransactionMetaField) => new AllocationRuleTransactionMetaFieldForm(metaField))),\n business: new UntypedFormControl(transaction.business, Validators.required),\n property: new UntypedFormControl(transaction.property, Validators.required),\n // Show null as default value for new transaction to avoid preselecting of not allowed tank types\n tankType: new UntypedFormControl(transaction.id ? transaction.tankType : null, Validators.required),\n childTransactions: new UntypedFormArray((transaction.childTransactions || []).map((childTransaction: AllocationRuleTransaction) => new UntypedFormGroup({\n chartAccounts: new UntypedFormControl(childTransaction.chartAccounts, Validators.required),\n amount: new UntypedFormControl(childTransaction.amount, Validators.required)\n })))\n }, transaction);\n\n this.listenEvents();\n }\n\n /**\n * @TODO Alex: move to abstract form, universal method getArray(arrayName)\n */\n get metaFieldsArray(): UntypedFormArray {\n return this.get('metaFields') as UntypedFormArray;\n }\n\n get childTransactionsArray(): UntypedFormArray {\n return this.get('childTransactions') as UntypedFormArray;\n }\n\n get isSplit(): boolean {\n return this.get('amountPercent').enabled;\n }\n\n isPersonal(): boolean {\n return this.get('tankType').value === TankTypeEnum.PERSONAL;\n }\n\n addChildTransactionForm(): void {\n this.childTransactionsArray.push(\n new UntypedFormGroup({\n chartAccounts: new UntypedFormControl(null, Validators.required),\n amount: new UntypedFormControl(null, Validators.required)\n })\n );\n }\n\n submit(): AllocationRuleTransaction {\n const data = {\n metaFields: this.metaFieldsArray.controls.map((metaFieldForm: AllocationRuleTransactionMetaFieldForm) => metaFieldForm.submit())\n };\n\n return super.submit(data, true);\n }\n\n listenEvents(): void {\n this.listenChartAccountsChanges();\n this.listenTankTypeChanges();\n this.listenIncomeSourceChanges();\n this.listenPropertyChanges();\n }\n\n private listenChartAccountsChanges(): void {\n this.get('chartAccounts').valueChanges.subscribe((chartAccounts: ChartAccounts) => {\n this.get('incomeSource').removeValidators(Validators.required);\n\n if (!chartAccounts) {\n return;\n }\n\n this.updateClaimPercent();\n\n // User have to select income source for work income\n if (chartAccounts.isWorkIncome()) {\n this.get('incomeSource').setValidators(Validators.required);\n }\n\n // Rebuild meta fields\n this.metaFieldsArray.clear();\n chartAccounts.metaFields.forEach((chartAccountsMetaField: ChartAccountsMetaField) => {\n this.metaFieldsArray.push(\n new AllocationRuleTransactionMetaFieldForm(\n plainToClass(AllocationRuleTransactionMetaField, { chartAccountsMetaField })\n )\n );\n });\n })\n }\n\n /**\n * Child transaction allowance depends on tank type.\n * Also chart accounts are different, so we just reset child transactions when tank type changed\n */\n private listenTankTypeChanges(): void {\n this.get('tankType').valueChanges.subscribe(() => {\n this.get('chartAccounts').reset();\n this.childTransactionsArray.reset();\n })\n }\n\n /**\n * Set tax automatically when salary income source selected\n */\n private listenIncomeSourceChanges(): void {\n this.get('incomeSource').valueChanges.subscribe((incomeSource?: IncomeSource) => {\n if (!incomeSource) {\n this.get('tax').setValue(0);\n\n return;\n }\n\n // prefill salary tax with its income source forecast\n if (incomeSource instanceof IncomeSource && incomeSource.isWorkIncome() && !this.get('tax').value) {\n this.get('tax').setValue(incomeSource.salaryForecasts[0].taxWithheld);\n }\n });\n }\n\n\n private listenPropertyChanges(): void {\n this.get('property').valueChanges.subscribe(() => {\n this.updateClaimPercent();\n });\n }\n\n /**\n * Update claim percent value and state depends on business logic\n */\n private updateClaimPercent(): void {\n const claimPercentControl: UntypedFormControl = this.get('claimPercent') as UntypedFormControl;\n\n // claim percent is changeable only for work and sole expenses except vehicle and personal\n claimPercentControl.disable();\n\n if (!this.currentValue.chartAccounts) {\n return;\n }\n\n if (this.currentValue.chartAccounts.isClaimPercentEditable()) {\n claimPercentControl.enable();\n }\n\n claimPercentControl.setValue(this.currentValue.calculateClaimPercent());\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { AllocationRule, AllocationRuleTransaction, CHART_ACCOUNTS_CATEGORIES, ChartAccounts } from '../../models';\nimport { plainToClass } from 'class-transformer';\nimport { UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';\nimport { AllocationRuleCondition } from '../../models/transaction/allocation-rule-condition';\nimport { AllocationRuleConditionForm } from './allocation-rule-condition.form';\nimport { AllocationRuleTransactionForm } from './allocation-rule-transaction.form';\nimport { AllocationRuleTypeEnum, ChartAccountsCategoryEnum } from '../../db/Enums';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { IEventListener } from '../../interfaces';\nimport intersection from 'lodash/intersection';\n\nexport class AllocationRuleForm extends AbstractForm<AllocationRule> implements IEventListener {\n chartAccountsCategories: ChartAccountsCategoryEnum[];\n\n constructor(\n // rule is required because we have to keep bank account relation\n rule: AllocationRule,\n // Flag to enable transaction GST field\n private isGST: boolean\n ) {\n super({\n type: new UntypedFormControl(rule.type, Validators.required),\n name: new UntypedFormControl(rule.name, Validators.required),\n conditionOperator: new UntypedFormControl(rule.conditionOperator, Validators.required),\n conditions: new UntypedFormArray(\n (rule.conditions || [plainToClass(AllocationRuleCondition, {})])\n .map((condition: AllocationRuleCondition) => new AllocationRuleConditionForm(condition))\n ),\n transaction: new AllocationRuleTransactionForm(rule.transaction || plainToClass(AllocationRuleTransaction, {}), isGST),\n transferBankAccount: new UntypedFormControl(rule.transferBankAccount, Validators.required),\n autoAllocate: new UntypedFormControl(rule.autoAllocate || false, Validators.required),\n }, rule);\n\n this.listenEvents();\n this.setupFieldsByType(rule.type);\n this.setupFieldsByTankType(rule.transaction?.tankType);\n this.updateChartAccountsCategories();\n\n if (!this.transactionFormGroup.get('chartAccounts').value?.isClaimPercentEditable()) {\n this.transactionFormGroup.get('claimPercent').disable();\n }\n\n // Disable transaction amount field when transaction has no amount (non-split)\n if (!rule.transaction?.isSplit()) {\n this.transactionFormGroup.get(['amountPercent']).disable();\n }\n }\n\n get conditionsArray(): UntypedFormArray {\n return this.get('conditions') as UntypedFormArray;\n }\n\n get childTransactionsArray(): UntypedFormArray {\n return this.transactionFormGroup.get('childTransactions') as UntypedFormArray;\n }\n\n get transactionFormGroup(): AllocationRuleTransactionForm {\n return this.get('transaction') as AllocationRuleTransactionForm;\n }\n\n addConditionForm(): void {\n this.conditionsArray.push(new AllocationRuleConditionForm());\n }\n\n isTaxFieldHidden(): boolean {\n const chartAccounts: ChartAccounts = this.transactionFormGroup.get('chartAccounts').value;\n\n return !chartAccounts || !chartAccounts.isTaxable();\n }\n\n /**\n * TODO Alex: disable sole tank in form control when income selected\n */\n isTransactionFieldsHidden(): boolean {\n return this.transactionFormGroup.get('tankType').value === null || this.currentValue.isSoleIncome();\n }\n\n submit(): AllocationRule {\n const data = {\n conditions: this.conditionsArray.controls.map((conditionForm: AllocationRuleConditionForm) => conditionForm.submit()),\n transaction: null,\n };\n\n if (!this.currentValue.isTransfer()) {\n data.transaction = this.transactionFormGroup.submit();\n }\n\n return super.submit(data);\n }\n\n isSplittable(): boolean {\n return this.get('type').value === AllocationRuleTypeEnum.EXPENSE || this.transactionFormGroup.isPersonal();\n }\n\n listenEvents(): void {\n this.listenTankTypeChanges();\n this.listenTypeChanges();\n }\n\n private listenTypeChanges(): void {\n this.get('type').valueChanges.subscribe((type: AllocationRuleTypeEnum) => {\n this.setupFieldsByType(type);\n this.updateChartAccountsCategories();\n\n // we have different fields for different types\n // @TODO separated reinit method if we need it anywhere else\n this.transactionFormGroup.setValue(\n new AllocationRuleTransactionForm(plainToClass(AllocationRuleTransaction, {}), this.isGST).getRawValue()\n );\n });\n }\n\n private listenTankTypeChanges(): void {\n this.transactionFormGroup.get('tankType').valueChanges.subscribe((tankType: TankTypeEnum) => {\n this.updateChartAccountsCategories();\n this.setupFieldsByTankType(tankType);\n });\n }\n\n /**\n * Update list of chart accounts categories allowed for transaction\n * Depends on transaction type and tank type\n */\n private updateChartAccountsCategories(): void {\n // We use unique one Chart Accounts for transfer\n if (this.currentValue.isTransfer()) {\n this.chartAccountsCategories = null;\n return;\n }\n\n const excludedCategories: ChartAccountsCategoryEnum[] = [...CHART_ACCOUNTS_CATEGORIES.depreciation];\n\n this.chartAccountsCategories = intersection(CHART_ACCOUNTS_CATEGORIES[this.currentValue.typeLabel], CHART_ACCOUNTS_CATEGORIES[this.tankTypeLabel])\n .filter((category: ChartAccountsCategoryEnum) => !excludedCategories.includes(category));\n }\n\n get tankTypeLabel(): string {\n switch (this.transactionFormGroup.get('tankType').value) {\n case TankTypeEnum.WORK:\n return 'work';\n\n case TankTypeEnum.PROPERTY:\n return 'property';\n\n case TankTypeEnum.SOLE:\n return 'sole';\n\n case TankTypeEnum.HOLDING:\n return 'holding';\n\n default:\n return 'personal';\n }\n }\n\n private setupFieldsByType(type: AllocationRuleTypeEnum): void {\n switch (type) {\n case AllocationRuleTypeEnum.EXPENSE:\n case AllocationRuleTypeEnum.INCOME:\n this.get('transaction').enable({ emitEvent: false });\n this.get('transferBankAccount').disable({ emitEvent: false });\n\n // disable transaction amount field when value is empty\n // disable manually because code above enables this field\n if (!this.transactionFormGroup.get(['amountPercent']).value) {\n this.transactionFormGroup.get(['amountPercent']).disable();\n }\n break;\n case AllocationRuleTypeEnum.TRANSFER:\n this.get('transaction').disable({ emitEvent: false });\n this.get('transferBankAccount').enable({ emitEvent: false });\n return;\n }\n }\n\n private setupFieldsByTankType(tankType: TankTypeEnum): void {\n // First disable tankType-related fields, second enable for selected tank type\n this.transactionFormGroup.get('property').disable({ emitEvent: false });\n this.transactionFormGroup.get('business').disable({ emitEvent: false });\n this.transactionFormGroup.get('isGST').disable({ emitEvent: false });\n this.transactionFormGroup.get('incomeSource').disable({ emitEvent: false });\n\n switch (tankType) {\n case TankTypeEnum.WORK:\n this.transactionFormGroup.get('incomeSource').enable({ emitEvent: false });\n break;\n case TankTypeEnum.PROPERTY:\n this.transactionFormGroup.get('property').enable({ emitEvent: false });\n break;\n case TankTypeEnum.SOLE:\n this.transactionFormGroup.get('business').enable({ emitEvent: false });\n\n if (this.isGST) {\n this.transactionFormGroup.get('isGST').enable({ emitEvent: false });\n this.transactionFormGroup.get('isGST').setValue(true);\n }\n break;\n }\n }\n}\n","import { AbstractControl, UntypedFormControl, Validators } from '@angular/forms';\nimport { autocompleteValidator } from '../../validators';\nimport { AbstractForm } from '../abstract.form';\nimport { TransactionBase } from '../../db/Models';\nimport { ChartAccountsListEnum } from '../../db/Enums';\nimport { ChartAccounts } from '../../models';\nimport { FormValidationsEnum } from '../form-validations.enum';\n\n/**\n * @TODO refactor, move specific fields like property in separated forms\n * @TODO remove useless getters\n */\nexport class TransactionBaseForm<Model extends TransactionBase> extends AbstractForm<Model> {\n registeredForGst: boolean;\n\n constructor(transaction: Model, registeredForGst: boolean, controls: { [key: string]: AbstractControl } = {}) {\n super(\n Object.assign({\n chartAccounts: new UntypedFormControl(transaction.chartAccounts, [Validators.required, autocompleteValidator()]),\n claimPercent: new UntypedFormControl(\n { value: transaction.claimPercent, disabled: true },\n [Validators.required, Validators.min(0), Validators.max(100)]\n ),\n amount: new UntypedFormControl(transaction.amount, Validators.required),\n amountWithGST: new UntypedFormControl(transaction.amountWithGst, Validators.required),\n isGST: new UntypedFormControl({ value: transaction.isGST, disabled: !transaction.chartAccounts?.isGST || !registeredForGst }),\n gstAmount: new UntypedFormControl({ value: transaction.gstAmount, disabled: true }, Validators.required),\n date: new UntypedFormControl(transaction.date, [Validators.required]),\n description: new UntypedFormControl(transaction.description, Validators.maxLength(FormValidationsEnum.TEXT_MAX_LENGTH)),\n file: new UntypedFormControl(transaction.file),\n property: new UntypedFormControl({ value: transaction.property, disabled: transaction.chartAccounts }),\n }, controls),\n transaction\n );\n\n this.registeredForGst = registeredForGst;\n this.watchChartAccounts();\n this.watchAmountWithGST();\n this.watchIsGst();\n }\n\n private watchIsGst(): void {\n this.get('isGST').valueChanges.subscribe((isGST: boolean) => {\n this.updateAmount();\n this.updateGstAmount();\n });\n }\n\n private watchAmountWithGST(): void {\n this.get('amountWithGST').valueChanges.subscribe(() => {\n this.updateAmount();\n this.updateGstAmount();\n });\n }\n\n watchChartAccounts(): void {\n this.get('chartAccounts').valueChanges.subscribe((chartAccounts: ChartAccounts) => {\n // recalculate claim percent for selected chart accounts\n this.updateClaimPercent(chartAccounts);\n if (!this.isGstApplicable()) {\n return;\n }\n // update gst if applicable\n if (chartAccounts.isGST) {\n this.get('isGST').enable();\n this.get('isGST').patchValue(true);\n } else {\n this.get('isGST').patchValue(false);\n this.get('isGST').disable();\n }\n });\n }\n\n private updateGstAmount(): void {\n this.get('gstAmount').patchValue(this.amountWithGST - this.amount);\n }\n\n private updateAmount(): void {\n this.patchField('amount', this.isGST ? this.amountWithGST / ChartAccounts.GSTCoefficient : this.amountWithGST);\n }\n\n private isGstApplicable(): boolean {\n return !!this.registeredForGst && !!this.model.business;\n }\n\n private get amount(): number {\n return this.get('amount').value;\n }\n\n private get amountWithGST(): number {\n return this.get('amountWithGST').value;\n }\n\n private get isGST(): number {\n return this.get('isGST').value;\n }\n\n /**\n * propertyClaimPercent for propertyExpense (except platform fees, which already include claimPercent),\n * taxablePercent for others\n * can be adjusted only for property/sole expenses\n */\n private updateClaimPercent(chartAccounts: ChartAccounts): void {\n if (chartAccounts.isClaimPercentEditable()) {\n this.get('claimPercent').enable();\n } else {\n this.get('claimPercent').disable();\n }\n\n // property claim (ownership% x shared%) for property expenses, taxable percent for others\n let claimPercent = chartAccounts.taxablePercent;\n if (chartAccounts.isPropertyExpense() && chartAccounts.id !== ChartAccountsListEnum.PLATFORM_FEES) {\n claimPercent *= this.get('property').value.claimCoefficient;\n }\n this.get('claimPercent').setValue(claimPercent);\n }\n}\n","export enum MessagesEnum {\n DATE_VALIDATION_ERROR = 'The transaction date is before the ownership date, please update the date to confirm'\n}\n","import {Transaction, TransactionAllocation} from '../../models';\nimport { TransactionBaseForm } from './transaction-base.form';\nimport {autocompleteValidator, currentFinYearValidator, minDateValidator} from '../../validators';\nimport { MessagesEnum } from './messages.enum';\nimport {AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators} from '@angular/forms';\nimport {plainToClass} from 'class-transformer';\nimport {TransactionSourceEnum} from '../../db/Enums/transaction-source.enum';\nimport {TransactionTypeEnum} from '../../db/Enums/transaction-type.enum';\n\nexport class TransactionForm extends TransactionBaseForm<Transaction> {\n constructor(transaction: Transaction, registeredForGst: boolean, allocations: TransactionAllocation[], controls: {[key: string]: AbstractControl} = {}) {\n super(transaction, registeredForGst, Object.assign(controls, {\n transactions: new UntypedFormArray([]),\n source: new UntypedFormControl(transaction.source || TransactionSourceEnum.BANK_TRANSACTION, Validators.required)\n }));\n this.get('date').addValidators([currentFinYearValidator()]);\n\n // convert child transactions to controls\n transaction.transactions.map((transaction: Transaction): void => {\n this.addTransactionControl(transaction);\n });\n\n // forbid to add transactions before property ownership\n if (transaction.property) {\n this.get('date').addValidators(\n minDateValidator(transaction.property.myShare.fromDate, MessagesEnum.DATE_VALIDATION_ERROR)\n );\n }\n\n // property income usually comes with fees, add empty control for new transactions\n if (!transaction.id && transaction.property && !transaction.transactions.length && transaction.isCredit()) {\n this.addTransactionControl();\n }\n\n // forbid to edit amount for allocated transactions to prevent wrong allocations\n if (allocations.length) {\n this.get('amount').disable();\n this.get('date').disable();\n }\n }\n\n addTransactionControl(transaction: Transaction = plainToClass(Transaction, {})): void {\n const formGroup: UntypedFormGroup = new UntypedFormGroup({\n id: new UntypedFormControl(transaction.id),\n chartAccounts: new UntypedFormControl(transaction.chartAccounts, [Validators.required, autocompleteValidator()]),\n amount: new UntypedFormControl(transaction.amount, [Validators.required]),\n });\n\n (this.get('transactions') as UntypedFormArray).push(formGroup);\n }\n\n removeTransactionControl(index: number): void {\n (this.get('transactions') as UntypedFormArray).removeAt(index);\n }\n\n /**\n * income transactions might include adjustments (child transactions), like tips or fees.\n * Adjustments inherit most of the fields from parent transaction\n */\n buildTransactions(transaction: Transaction): Transaction[] {\n return this.get('transactions').value.map((childTransaction: Transaction) => Object.assign(\n {\n description: childTransaction.chartAccounts?.name,\n date: transaction.date,\n claimPercent: (transaction.claimPercent * childTransaction.chartAccounts?.taxablePercent) / 100,\n source: TransactionSourceEnum.BANK_TRANSACTION,\n type: childTransaction.chartAccounts?.isExpense() ? TransactionTypeEnum.DEBIT : TransactionTypeEnum.CREDIT,\n incomeSource: transaction.incomeSource,\n property: transaction.property\n },\n this.model.transactions.find((transaction) => transaction.id === childTransaction['id']) || {},\n childTransaction,\n ));\n }\n\n submit(data: object = {}): Transaction {\n return super.submit(Object.assign(data, {transactions: this.buildTransactions(this.currentValue)}), true);\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Transaction, TransactionAllocation } from '../../../models';\nimport { TransactionForm } from '../transaction.form';\n\nexport class SoleTransactionForm extends TransactionForm {\n constructor(\n transaction: Transaction,\n registeredForGst: boolean,\n allocations: TransactionAllocation[],\n controls: { [key: string]: AbstractControl } = {}\n ) {\n super(transaction, registeredForGst, allocations, Object.assign(controls, {}));\n }\n}","import { Transaction, TransactionAllocation } from '../../../models';\nimport { TransactionOperationEnum } from '../../../db/Enums/transaction-operation.enum';\nimport { SoleTransactionForm } from './sole-transaction.form';\n\nexport class SoleIncomeForm extends SoleTransactionForm {\n constructor(\n transaction: Transaction,\n allocations: TransactionAllocation[],\n registeredForGst: boolean\n ) {\n\n super(transaction, registeredForGst, allocations, {});\n\n // @TODO Alex: copypasted from work income form\n \n // forbid to edit some fields for allocated transaction\n if (allocations.length) {\n this.get('chartAccounts').disable();\n }\n\n // amount changes are not available for transactions with allocations or during allocate process\n if (allocations.length || transaction.operation === TransactionOperationEnum.ALLOCATE) {\n this.get('amount').disable();\n }\n }\n}\n","import { FormControl, FormGroup, UntypedFormControl, UntypedFormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { ChartAccountsMetaFieldListEnum } from '../db/Enums';\nimport { ChartAccounts, ChartAccountsMetaField, Transaction } from '../models';\nimport { TransactionBaseForm } from '../forms';\n\n/**\n * Validator that check fields for transaction meta\n */\nexport function transactionsMetaFieldsValidator(): ValidatorFn {\n return (formGroup: TransactionBaseForm<Transaction>): ValidationErrors | null => {\n const chartAccounts: ChartAccounts = formGroup.get('chartAccounts').value;\n\n if (!chartAccounts) {\n return null;\n }\n\n const metaFields: ChartAccountsMetaField[] = chartAccounts.metaFields;\n\n if (chartAccounts.isDividends()) {\n return checkDividends(metaFields, formGroup);\n }\n\n return null;\n }\n}\n\n/**\n * the sum of the fields \"Franked\" and \"Unfranked\" must equal transactions amount\n */\nfunction checkDividends(metaFields, formGroup): ValidationErrors {\n const frankedAndUnfrankedIds: ChartAccountsMetaFieldListEnum[] = [ChartAccountsMetaFieldListEnum.FRANKED, ChartAccountsMetaFieldListEnum.UNFRANKED];\n const amount: number = Math.abs(formGroup.get('amount').value);\n const frankedAndUnfrankedControls: UntypedFormGroup[] = formGroup.get('metaFields').controls\n .filter((control: FormGroup) =>\n frankedAndUnfrankedIds.includes(control.get('chartAccountsMetaField').value.id));\n\n // no need to validate when one or both fields are empty\n if (frankedAndUnfrankedControls.find((group: UntypedFormGroup) => group.get('value').value === null)) {\n return null;\n }\n\n const frankedAndUnfrankedAmount: number = frankedAndUnfrankedControls.reduce((sum: number, group: FormGroup) => sum + (+group.get('value').value), 0);\n\n return amount === frankedAndUnfrankedAmount ? null : { wrongAmountsSum: 'The total Franked and Unfranked amounts must equal the Total Payment received.' };\n}\n","import { TransactionForm } from '../transaction.form';\nimport { IEventListener } from '../../../interfaces';\nimport {\n ChartAccounts,\n ChartAccountsMetaField,\n Transaction,\n TransactionAllocation,\n TransactionMetaField\n} from '../../../models';\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { transactionsMetaFieldsValidator } from '../../../validators/transactions-meta-fields.validator';\n\nexport abstract class WorkTransactionForm extends TransactionForm implements IEventListener {\n constructor(\n transaction: Transaction,\n registeredForGst: boolean,\n allocations: TransactionAllocation[],\n controls: { [key: string]: AbstractControl } = {}\n ) {\n super(transaction, registeredForGst, allocations, Object.assign(controls, {\n // additional data related to work (like tax instalments)\n metaFields: new FormArray(\n (transaction.metaFields || []).map((transactionMetaField: TransactionMetaField): FormGroup => new FormGroup({\n value: new FormControl(transactionMetaField.value),\n chartAccountsMetaField: new FormControl(transactionMetaField.chartAccountsMetaField)\n }))\n )\n }));\n\n this.setValidators(transactionsMetaFieldsValidator())\n\n this.listenEvents();\n }\n\n listenEvents() {\n this.watchChartAccounts();\n }\n\n watchChartAccounts(): void {\n super.watchChartAccounts();\n\n this.get('chartAccounts').valueChanges.subscribe((chartAccounts: ChartAccounts) => {\n this.buildMetaFieldsForm();\n });\n }\n\n /**\n * depends on chartAccounts the form could include different extra fields\n */\n private buildMetaFieldsForm(): void {\n // Remove all controls in the FormArray before pushing\n (this.get('metaFields') as FormArray).clear();\n\n // create form controls for each metaField object from selected chart accounts\n (this.get('chartAccounts').value.metaFields).forEach((chartAccountsMetaField: ChartAccountsMetaField): void => {\n (this.get('metaFields') as FormArray).push(\n new FormGroup({\n value: new FormControl(chartAccountsMetaField.isSharePercentage() ? 100 : 0),\n chartAccountsMetaField: new FormControl(chartAccountsMetaField),\n })\n );\n });\n }\n}\n","import {\n ChartAccounts,\n Transaction,\n TransactionAllocation,\n} from '../../../models';\nimport {UntypedFormControl, Validators} from '@angular/forms';\nimport {IEventListener} from '../../../interfaces';\nimport {IncomeSource} from '../../../models';\nimport {autocompleteValidator} from '../../../validators';\nimport {Collection} from '../../../collections';\nimport { TransactionOperationEnum } from '../../../db/Enums/transaction-operation.enum';\nimport {WorkTransactionForm} from './work-transaction.form';\n\nexport class WorkIncomeForm extends WorkTransactionForm implements IEventListener {\n constructor(transaction: Transaction, registeredForGst: boolean, allocations: TransactionAllocation[]) {\n // for work income we need to show netAmount instead of amount (because some adjustments are included in amount)\n transaction.amount = transaction.netAmount;\n\n super(transaction, registeredForGst, allocations, {\n tax: new UntypedFormControl({\n value: transaction.tax,\n disabled: !transaction.chartAccounts || transaction.chartAccounts.isNRAS(),\n }, Validators.required),\n incomeSource: new UntypedFormControl(transaction.incomeSource, [Validators.required, autocompleteValidator()]),\n });\n\n // forbid to edit some fields for allocated transaction\n if (allocations.length) {\n this.get('chartAccounts').disable();\n }\n // adjustments allowed only for salary\n if (!transaction.chartAccounts?.isSalary()) {\n this.get('transactions').disable();\n }\n // amount changes are not available for transactions with allocations or during allocate process\n if (allocations.length || transaction.operation === TransactionOperationEnum.ALLOCATE) {\n this.get('amount').disable();\n }\n\n // prefill tax value for preselected salary income source\n if (!this.get('tax').value && transaction.incomeSource && transaction.incomeSource.isWorkIncome()) {\n this.updateTaxValue(transaction.incomeSource);\n }\n\n this.listenEvents();\n }\n\n listenEvents() {\n super.listenEvents();\n this.watchIncomeSource();\n }\n\n private watchIncomeSource(): void {\n this.get('incomeSource').valueChanges.subscribe((incomeSource: string | IncomeSource): void => {\n // prefill salary tax with its income source forecast\n if (incomeSource instanceof IncomeSource && incomeSource.isWorkIncome() && !this.get('tax').value) {\n this.updateTaxValue(incomeSource);\n }\n });\n }\n\n private updateTaxValue(incomeSource: IncomeSource): void {\n this.get('tax').setValue(incomeSource.salaryForecasts[0].taxWithheld);\n }\n\n watchChartAccounts(): void {\n super.watchChartAccounts();\n this.get('chartAccounts').valueChanges.subscribe((chartAccounts: ChartAccounts) => {\n // tax make no sense for pre-paying tax category\n if (chartAccounts.isNRAS()) {\n this.get('tax').disable();\n } else {\n this.get('tax').enable();\n }\n\n // adjustments possible only for salary chartAccounts\n if (chartAccounts.isSalary()) {\n this.get('transactions').enable();\n } else {\n this.get('transactions').disable();\n }\n });\n }\n\n /**\n * salary comes to bankAccount together with related transactions like tips (kind of salary, but reported in different tax summary section),\n * adjustments used to clarify received payment by separating it into multiple transactions,\n * netAmount always match received payment and includes related adjustments\n * amount calculated as netAmount - salary included adjustments\n * ie bankTransaction=1000$ with 900$ salary and 100$ tips will create 2 transactions with 900$ and 100$\n */\n getAmount(): number {\n return this.get('amount').value - new Collection(this.currentValue.transactions)\n .filter((t) => t.chartAccounts?.isSalaryIncluded())\n .sumBy('amount');\n }\n\n submit(data: object = {}): Transaction {\n return super.submit(Object.assign(data, {amount: this.getAmount()}));\n }\n}\n","import {IEventListener} from '../../../interfaces';\nimport {Transaction, TransactionAllocation, TransactionMetaField} from '../../../models';\nimport {WorkTransactionForm} from './work-transaction.form';\nimport {Collection} from '../../../collections';\nimport {ChartAccountsMetaFieldListEnum} from '../../../db/Enums';\nimport {AbstractControl} from '@angular/forms';\n\nexport class WorkExpenseForm extends WorkTransactionForm implements IEventListener {\n constructor(\n transaction: Transaction,\n registeredForGst: boolean,\n allocations: TransactionAllocation[],\n controls: {[key: string]: AbstractControl} = {}\n ) {\n super(transaction, registeredForGst, allocations, controls);\n // amount set automatically for chartAccounts with hours meta field\n if (transaction.getMetaFieldValue(ChartAccountsMetaFieldListEnum.HOURS)) {\n this.get('amount').disable();\n }\n }\n\n listenEvents() {\n this.watchChartAccountsMetaFields();\n }\n\n watchChartAccountsMetaFields(): void {\n this.get('metaFields').valueChanges.subscribe((metaFields: TransactionMetaField[]) => {\n const hoursMetaField = new Collection(metaFields).findBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.HOURS);\n if (!hoursMetaField) {\n return;\n }\n\n // for home office hours expense amount is a fixed rate per hour\n this.get('amount').reset();\n this.get('amount').disable();\n this.get('amount').setValue(this.get('chartAccounts').value.getCurrentYearValue().value * +hoursMetaField.value);\n });\n }\n}\n","import { ChartAccounts, Transaction, TransactionAllocation } from '../../../models';\nimport { FormArray, FormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { IEventListener } from '../../../interfaces';\nimport { autocompleteValidator } from '../../../validators';\nimport { TransactionOperationEnum } from '../../../db/Enums/transaction-operation.enum';\nimport { WorkTransactionForm } from '../work/work-transaction.form';\n\nexport class HoldingIncomeForm extends WorkTransactionForm implements IEventListener {\n /**\n * @TODO vik partial copyPast from workIncomeForm\n */\n constructor(transaction: Transaction, registeredForGst: boolean, allocations: TransactionAllocation[]) {\n super(transaction, registeredForGst, allocations, {\n tax: new UntypedFormControl(transaction.tax, Validators.required),\n incomeSource: new UntypedFormControl(transaction.incomeSource, [Validators.required, autocompleteValidator()]),\n });\n\n // forbid to edit some fields for allocated transaction\n if (allocations.length) {\n this.get('chartAccounts').disable();\n }\n this.get('transactions').disable();\n // amount changes are not available for transactions with allocations or during allocate process\n if (allocations.length || transaction.operation === TransactionOperationEnum.ALLOCATE) {\n this.get('amount').disable();\n }\n }\n\n listenEvents(): void {\n this.listenChartAccountsChanges();\n }\n\n /**\n * @TODO Alex/Vik: probably we need some database changes related to metafields.\n * Now we have the following custom metafields behaviour:\n * - % of share field should be 100 by default (now handled by WorkTransactionForm)\n * - Franked and Unfranked sum should be equal to transaction amount (now handled by transactionsMetaFieldsValidator())\n * - Franked field has custom message (mat-hint) (now handled by HoldingIncomeFormComponent)\n * - some metafields required, but some not (now handled by HoldingIncomeForm)\n */\n private listenChartAccountsChanges(): void {\n this.get('chartAccounts').valueChanges.subscribe((chartAccounts: ChartAccounts) => {\n if (!chartAccounts.isDividends()) {\n return;\n }\n\n (this.get('metaFields') as FormArray).controls.forEach((metaFieldGroup: FormGroup) => {\n if (metaFieldGroup.get('chartAccountsMetaField').value.isFrankingCredit()) {\n return;\n }\n\n metaFieldGroup.get('value').setValidators(Validators.required);\n });\n })\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { TransactionBaseForm } from '../transaction';\nimport { Depreciation, FinancialYear } from '../../models';\n\nexport class DepreciationForm extends TransactionBaseForm<Depreciation> {\n constructor(depreciation: Depreciation, registeredForGst: boolean) {\n super(depreciation, registeredForGst);\n\n if (depreciation.id) {\n this.get('claimPercent').setValue(depreciation.currentYearForecast.claimPercent);\n }\n this.addControl('isCloseBalanceCorrect', new UntypedFormControl(true));\n this.addControl('closeBalance', new UntypedFormControl(\n { value: depreciation.closeBalance || 0, disabled: true },\n Validators.required\n ));\n\n this.addControl('financialYear', new UntypedFormControl(depreciation.financialYear || new FinancialYear().year));\n\n // forbid to change chartAccounts/claimPercent for existing depreciations\n if (depreciation.id) {\n this.get('chartAccounts').disable({emitEvent: false});\n this.get('claimPercent').disable({emitEvent: false});\n }\n\n // @TODO should be watched?\n // if depreciation has 'depreciationCapitalProject' value - set value and disable 'date' form control\n if (depreciation.depreciationCapitalProject) {\n this.get('date').setValue(depreciation.depreciationCapitalProject.effectiveDate);\n this.get('date').disable();\n } else {\n this.get('date').setValue(depreciation.date);\n }\n\n this.get('isCloseBalanceCorrect').valueChanges.subscribe((isSelected: boolean) => {\n if (isSelected) {\n this.get('closeBalance').disable();\n } else {\n this.get('closeBalance').enable();\n }\n });\n }\n\n submit(data: object = {}, includeDisabledFields = false): Depreciation {\n return super.submit(data, true);\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { IEventListener } from '../../interfaces';\nimport { Holding, HoldingSale, HoldingType } from '../../models';\nimport { AbstractForm } from '../abstract.form';\nimport { combineLatest } from 'rxjs';\nimport moment from 'moment';\nimport { greaterThanValidator } from '../../validators';\n\nexport class HoldingSaleForm extends AbstractForm<HoldingSale> implements IEventListener {\n constructor(sale: HoldingSale, private holding: Holding, type: HoldingType) {\n super({\n quantity: new UntypedFormControl(sale.quantity, [Validators.required, Validators.max(holding.currentQuantity + sale.quantity), greaterThanValidator(0)]),\n price: new UntypedFormControl(sale.price || type.price, Validators.required),\n fee: new UntypedFormControl(sale.fee, Validators.required),\n date: new UntypedFormControl(sale.date, Validators.required),\n grossCapitalGain: new UntypedFormControl({value: sale.grossCapitalGain, disabled: true}),\n netCapitalGain: new UntypedFormControl({value: sale.netCapitalGain, disabled: true}),\n file: new UntypedFormControl(sale.file)\n }, sale);\n\n this.listenEvents();\n this.emitValues();\n }\n\n listenEvents(): void {\n combineLatest(['date', 'price', 'quantity', 'fee'].map((field) => this.get(field).valueChanges))\n .subscribe(([date, price, quantity, fee]) => {\n this.updateGainFields(date, price, quantity, fee);\n });\n }\n\n submit(): HoldingSale {\n return super.submit({}, true);\n }\n\n private updateGainFields(date: Date, price: number, quantity: number, fee: number): void {\n const grossCapitalGain = this.calculateGrossCapitalGain(price, quantity, fee);\n\n this.get('grossCapitalGain').setValue(grossCapitalGain);\n this.get('netCapitalGain').setValue(this.calculateNetCapitalGain(grossCapitalGain, date));\n }\n\n private calculateGrossCapitalGain(price: number, quantity: number, fee: number): number {\n const fees = quantity * this.holding.fee / this.holding.quantity + fee;\n const totalCapitalGain = (price - this.holding.price) * quantity - fees;\n\n return totalCapitalGain * this.holding.ownershipPercent / 100;\n }\n\n private calculateNetCapitalGain(grossCapitalGain: number, date: Date): number {\n let netCapitalGain = grossCapitalGain;\n\n if (this.isOneYearExemptionApplicable(netCapitalGain, date)) {\n netCapitalGain = netCapitalGain / 2;\n }\n\n return netCapitalGain;\n }\n\n private isOneYearExemptionApplicable(netCapitalGain: number, date: Date): boolean {\n return netCapitalGain > 0 && moment(date).diff(moment(this.holding.date), 'year') > 0;\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { HoldingType } from '../../models';\nimport { AbstractForm } from '../abstract.form';\n\nexport class HoldingTypeForm extends AbstractForm<HoldingType> {\n constructor(\n holdingType: HoldingType = plainToClass(HoldingType, {})\n ) {\n super({\n category: new UntypedFormControl(holdingType.category, Validators.required),\n name: new UntypedFormControl(holdingType.name, Validators.required),\n description: new UntypedFormControl(holdingType.description),\n price: new UntypedFormControl(holdingType.price, [Validators.required, Validators.min(0)]),\n dividendPercent: new UntypedFormControl(holdingType.dividendPercent, Validators.min(0))\n }, holdingType);\n }\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { Holding } from '../../models';\nimport { AbstractForm } from '../abstract.form';\nimport {IEventListener} from '../../interfaces';\nimport {HoldingTypeCategoryEnum} from '../../db/Enums';\nimport { greaterThanValidator } from '../../validators';\n\nexport class HoldingForm extends AbstractForm<Holding> implements IEventListener {\n constructor(\n holding: Holding\n ) {\n super({\n category: new UntypedFormControl(holding.category),\n isTaxFree: new UntypedFormControl(holding.isTaxFree, Validators.required),\n quantity: new UntypedFormControl(holding.quantity, [Validators.required, greaterThanValidator(0)]),\n price: new UntypedFormControl(holding.price, [Validators.required, Validators.min(0)]),\n fee: new UntypedFormControl(holding.fee, [Validators.required, Validators.min(0)]),\n date: new UntypedFormControl(holding.date, Validators.required),\n type: new UntypedFormControl(holding.type, Validators.required),\n ownershipPercent: new UntypedFormControl(holding.ownershipPercent || 100, Validators.required),\n file: new UntypedFormControl(holding.file)\n }, holding);\n\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.get('category').valueChanges.subscribe((category: HoldingTypeCategoryEnum) => {\n this.get('type').setValue(null);\n });\n }\n\n submit(data: object = {}, includeDisabledFields: boolean = false): Holding {\n return super.submit(data, includeDisabledFields);\n }\n}\n","import { HoldingReinvest } from '../../models';\nimport { IEventListener } from '../../interfaces';\nimport { AbstractForm } from '../abstract.form';\nimport { HoldingForm } from './holding.form';\nimport { HoldingIncomeForm } from '../transaction/holding/holding-income.form';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\n\nexport class HoldingReinvestForm extends AbstractForm<HoldingReinvest> implements IEventListener {\n constructor(\n private reinvest: HoldingReinvest\n ) {\n super({\n transaction: new HoldingIncomeForm(reinvest.transaction, null, []),\n holding: new HoldingForm(reinvest.holding)\n }, reinvest);\n\n // emit values to trigger changes and create chart accounts metafields\n (this.get('transaction') as HoldingIncomeForm).emitValues();\n\n // disable amount field because we calculate the value automatically and this field is visible as disabled\n this.get(['transaction', 'amount']).disable();\n\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenHoldingChanges();\n this.listenDateChanges();\n }\n\n private get transactionForm(): HoldingIncomeForm {\n return this.get('transaction') as HoldingIncomeForm;\n }\n\n private get holdingForm(): HoldingForm {\n return this.get('holding') as HoldingForm;\n }\n\n /**\n * Set transaction amount based on holding quantity and price\n */\n private listenHoldingChanges(): void {\n // we can watch the whole holding form because we have only 2 fields in the form template\n this.get('holding').valueChanges.subscribe((value) => {\n if (!value.quantity || !value.price) {\n this.get(['transaction', 'amount']).setValue(0);\n return;\n }\n\n this.get(['transaction', 'amount']).setValue(value.quantity * value.price);\n });\n }\n\n /**\n * Set holding date the same as transaction date\n */\n private listenDateChanges(): void {\n this.get(['transaction', 'date']).valueChanges.subscribe((date: Date) => {\n this.get(['holding', 'date']).setValue(date);\n });\n }\n\n /**\n * @TODO Alex (TT-2847): attach file to both (transaction and holding) when files system refactored\n */\n submit(): HoldingReinvest {\n return super.submit({\n transaction: this.transactionForm.submit({ type: TransactionTypeEnum.CREDIT }),\n holding: this.holdingForm.submit()\n });\n }\n}\n","export enum MessagesEnum {\n HOLDING_CREATED = 'Holding created',\n HOLDING_UPDATED = 'Holding updated',\n HOLDING_CONFIRM_DELETE = 'Are you sure you want to delete this holding?',\n HOLDING_DELETED = 'Holding deleted',\n\n HOLDING_SALE_CREATED = 'Holding sale created',\n HOLDING_SALE_UPDATED = 'Holding sale updated',\n HOLDING_SALE_CONFIRM_DELETE = 'Are you sure you want to delete this holding sale?',\n HOLDING_SALE_DELETED = 'Holding sale deleted',\n\n HOLDING_TYPE_CREATED = 'Holding type created',\n HOLDING_TYPE_UPDATED = 'Holding type updated',\n HOLDING_TYPE_CONFIRM_DELETE = 'Are you sure you want to delete this holding type?',\n HOLDING_TYPE_DELETED = 'Holding type deleted',\n}\n","// @TODO Alex: Create indexes everywhere and break this file to imports from indexes\n\n/**\n * Public API Surface of tt-core\n */\nexport * from './lib/tt-core.module';\n\n// pipes\nexport * from './lib/pipes';\n\n/**\n * Collections\n */\nexport * from './lib/collections';\n\n/**\n * DB models\n */\nexport * from './lib/db/Models/abstract-model';\nexport * from './lib/db/Models/transaction/transaction-base';\n\nexport * from './lib/models/chart-accounts/chart-accounts-category.e-collection';\n\n/**\n * DB enums\n */\nexport * from './lib/db/Enums';\nexport * from './lib/db/Enums/address-type.enum';\n\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-category.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-etp.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-heading-list.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-heading-taxable.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-heading-list.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-heading-tax-deductible.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-heading-vehicle-list.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-list.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-meta-field-list.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-meta-field-type.enum';\nexport * from './lib/db/Enums/chart-accounts/chart-accounts-type.enum';\nexport * from './lib/db/Enums/chat-status.enum';\n\nexport * from './lib/db/Enums/client-details-medicare-exemption.enum';\nexport * from './lib/db/Enums/client-details-work-depreciation-calculation.enum';\nexport * from './lib/db/Enums/client-details-working-holiday-maker.enum';\n\nexport * from './lib/db/Enums/client-invite-status.enum';\nexport * from './lib/db/Enums/client-invite-type.enum';\n\nexport * from './lib/db/Enums/depreciation-calculation.enum';\nexport * from './lib/db/Enums/depreciation-calculation-percent.enum';\nexport * from './lib/db/Enums/depreciation-type.enum';\nexport * from './lib/db/Enums/depreciation-write-off-amount.enum';\n\nexport * from './lib/db/Enums/firm-type.enum';\n\nexport * from './lib/db/Enums/income-source';\n\nexport * from './lib/db/Enums/invite-status.enum';\n\nexport * from './lib/db/Enums/bank/loan';\n\nexport * from './lib/db/Enums/phone-type.enum';\n\nexport * from './lib/db/Enums/property/property-depreciation-calculation.enum';\nexport * from './lib/db/Enums/property/property-category-list.enum';\nexport * from './lib/db/Enums/property/property-share-access.enum';\nexport * from './lib/db/Enums/property/property-share-status.enum';\n\nexport * from './lib/db/Enums/registration-invite-status.enum';\n\nexport * from './lib/db/Enums/salary-forecast-frequency.enum';\n\nexport * from './lib/db/Enums/service-notification-status.enum';\nexport * from './lib/db/Enums/service-notification-type.enum';\n\nexport * from './lib/db/Enums/setup-item-type.enum';\n\nexport * from './lib/db/Enums/sole-depreciation-method.enum';\nexport * from './lib/db/Enums/sole-invoice-statuses.enum';\nexport * from './lib/db/Enums/sole-invoice-tax-type.enum';\nexport * from './lib/db/Enums/sole-invoice-template-tax-type.enum';\n\nexport * from './lib/db/Enums/subscription/service-payment-status.enum';\n\nexport * from './lib/db/Enums/subscription/service-price-recurring-interval.enum';\nexport * from './lib/db/Enums/subscription/service-price-type.enum';\nexport * from './lib/db/Enums/subscription/service-product-status.enum';\nexport * from './lib/db/Enums/subscription/service-product-id.enum';\n\nexport * from './lib/db/Enums/subscription/service-subscription-status.enum';\n\nexport * from './lib/db/Enums/spare-document-spare-type.enum';\n\nexport * from './lib/db/Enums/tank-type.enum';\n\nexport * from './lib/db/Enums/tax-calculation-medicare-exemption.enum';\nexport * from './lib/db/Enums/tax-calculation-type.enum';\n\nexport * from './lib/db/Enums/tax-return/tax-return-category-list.enum';\nexport * from './lib/db/Enums/tax-return/tax-return-category-section.enum';\n\nexport * from './lib/db/Enums/tax-review-status.enum';\n\nexport * from './lib/db/Enums/tax-summary-list.enum';\nexport * from './lib/db/Enums/tax-summary-section.enum';\nexport * from './lib/db/Enums/tax-summary-tax-summary.enum';\n\nexport * from './lib/db/Enums/ticket-feedback.enum';\nexport * from './lib/db/Enums/ticket-status.enum';\nexport * from './lib/db/Enums/ticket-types.enum';\n\nexport * from './lib/db/Enums/transaction-operation.enum';\nexport * from './lib/db/Enums/transaction-source.enum';\nexport * from './lib/db/Enums/transaction-type.enum';\n\nexport * from './lib/db/Enums/user-event-status.enum';\nexport * from './lib/db/Enums/user-event-type-frequency.enum';\nexport * from './lib/db/Enums/user-event-type-user-type.enum';\nexport * from './lib/db/Enums/user-event-type-employee-type.enum';\nexport * from './lib/db/Enums/user-event-type-client-type.enum';\n\nexport * from './lib/db/Enums/user-medicare-exemption.enum';\nexport * from './lib/db/Enums/user-roles.enum';\nexport * from './lib/db/Enums/user-status.enum';\nexport * from './lib/db/Enums/user-title.enum';\nexport * from './lib/db/Enums/user-work-depreciation-calculation.enum';\nexport * from './lib/db/Enums/user-working-holiday-maker.enum';\n\nexport * from './lib/db/Enums/vehicle-claim-details-method.enum';\nexport * from './lib/db/Enums/vehicle-logbook-purpose.enum';\n\nexport * from './lib/db/Enums/property/property-sale/tax-exemption.enum';\nexport * from './lib/db/Enums/property/property-sale/tax-exemption-meta-field.enum';\n\n/**\n * Models and related enums and consts\n */\nexport * from './lib/models';\n\nexport * from './lib/models/account-setup/account-setup-item';\n\nexport * from './lib/models/badge/badge';\nexport * from './lib/models/badge/badge-color.enum';\n\nexport * from './lib/models/chart/chart-data';\nexport * from './lib/models/chart/chart-serie';\n\nexport * from './lib/models/client/client-details';\nexport * from './lib/models/client/client-income-types';\nexport * from './lib/models/client/client-invite';\nexport * from './lib/models/client/client-movement';\nexport * from './lib/models/client/client-portfolio-chart-data';\nexport * from './lib/models/client/client-portfolio-report';\n\nexport * from './lib/models/color/alphabet-colors.enum';\n\nexport * from './lib/models/document/document';\nexport * from './lib/models/document/document-api-url-prefix.enum';\nexport * from './lib/models/document/document-file-types.const';\nexport * from './lib/models/document/document-folder';\n\nexport * from './lib/models/employee/employee-details';\nexport * from './lib/models/employee/employee-invite';\n\nexport * from './lib/models/endpoint/endpoint';\nexport * from './lib/models/endpoint/endpoints.const';\n\nexport * from './lib/models/event/app-event';\nexport * from './lib/models/event/app-event-type.enum';\n\nexport * from './lib/models/export/export-data-table';\nexport * from './lib/models/export/export-format.enum';\n\nexport * from './lib/models/file/icons-file.enum';\n\nexport * from './lib/models/financial-year/financial-year';\nexport * from './lib/models/financial-year/month-name-short.enum';\nexport * from './lib/models/financial-year/month-number.enum';\nexport * from './lib/models/financial-year/months.const';\n\nexport * from './lib/models/firm/firm';\n\nexport * from './lib/models/income-position/income-position';\n\nexport * from './lib/models/notification/notification';\n\nexport * from './lib/models/pdf/pdf-orientation.enum';\nexport * from './lib/models/pdf/pdf-settings';\n\nexport * from './lib/models/phone/phone';\n\nexport * from './lib/models/registration-invite/registration-invite';\n\nexport * from './lib/models/report';\n\nexport * from './lib/models/service-subscription/module-url-list.const';\nexport * from './lib/models/service-subscription/service-payment';\nexport * from './lib/models/service-subscription/service-price';\nexport * from './lib/models/service-subscription/service-product';\nexport * from './lib/models/service-subscription/service-subscription';\nexport * from './lib/models/service-subscription/service-subscription-item';\n\nexport * from './lib/models/tax-review/tax-review';\n\nexport * from './lib/models/tax-summary/report-item';\nexport * from './lib/models/tax-summary/report-item-details';\nexport * from './lib/models/tax-summary/tax-summary';\nexport * from './lib/models/tax-summary/tax-summary-section';\nexport * from './lib/models/tax-summary/tax-summary-type.enum';\n\nexport * from './lib/models/toast/toast';\nexport * from './lib/models/toast/toast-type.enum';\n\nexport * from './lib/models/transaction/income-amount-type.enum';\nexport * from './lib/models/transaction/transaction';\nexport * from './lib/models/transaction/transaction-allocation';\nexport * from './lib/models/transaction/transaction-category.enum';\nexport * from './lib/models/transaction/transaction-meta-field';\n\nexport * from './lib/models/user-event/user-event-type-category';\nexport * from './lib/models/user-event/user-event-setting';\nexport * from './lib/models/user-event/user-event-setting-field.enum';\nexport * from './lib/models/user-event/user-event-type';\n\n/**\n * Services\n */\nexport * from './lib/services';\n\n/**\n * Interfaces\n */\nexport * from './lib/interfaces';\nexport * from './lib/services/http/tutorial-video/video-source.interface';\n\n/**\n * Functions\n */\nexport * from './lib/functions/clone-deep';\nexport * from './lib/functions/create-date';\nexport * from './lib/functions/enum-to-list';\nexport * from './lib/functions/get-doc-icon';\nexport * from './lib/functions/mat-options-functions';\nexport * from './lib/functions/mat-sort-options';\nexport * from './lib/functions/tax-review-filter-predicate';\nexport * from './lib/functions/array';\n\n/**\n * Interceptors\n */\nexport * from './lib/interceptors/interceptors.module';\n\n/**\n * Forms\n */\nexport * from './lib/forms';\nexport * from './lib/validators';\n\n/**\n * Messages\n */\nexport * from './lib/messages';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CountryBase","AddressBase","BasiqJobBase","BankAccountProperty","BankAccount","LoanPayout","Loan","PropertyShare","Property","File","BankBase","LoanPayoutBase","DepreciationCapitalProjectBase","DepreciationForecastBase","ChartAccountsHeadingBase","ChartAccountsMetaFieldBase","ChartAccountsValueBase","ChartAccountValues","ChartAccountsValue","ChartAccountsBase","ChartAccountsDepreciationBase","AllocationRuleConditionBase","AllocationRuleTransactionMetaFieldBase","SalaryForecastBase","SoleForecastBase","IncomeSourceTypeBase","IncomeSourceForecastBase","IncomeSourceBase","AllocationRuleTransactionBase","AllocationRuleBase","BaseTaxExemption","PropertySaleTaxExemptionMetaField","OccupationBase","ClientDetailsBase","ClientIncomeTypesBase","RegistrationInviteBase","PhoneBase","FirmBase","ClientInviteBase","BaseServiceProduct","BaseServicePrice","ServiceSubscriptionItemBase","ServiceSubscriptionBase","ClientMovementBase","EmployeeDetailsBase","BaseServicePayment","ServicePaymentMethodBase","SoleBusinessAllocationBase","SoleBusinessLossOffsetRuleBase","SoleBusinessLossBase","SoleInvoiceItemBase","SoleContactBase","SoleInvoiceBase","SoleInvoiceTemplateBase","VehicleLogbookBase","VehicleBase","VehicleClaimDetailsBase","VehicleClaimBase","SoleBusinessBase","SoleBusinessActivity","SoleBusinessActivityBase","SoleDepreciationMethodBase","SoleDetailsBase","BasReportBase","BaseUser","PropertySubscriptionBase","PropertyCategoryBase","PropertyDocumentBase","PropertyValuationBase","PropertyForecastBase","PropertyCategoryMovementBase","PropertyBase","BasePropertySaleTaxExemptionMetaField","BaseTaxExemptionMetaField","PropertyShareBase","BorrowingReportBase","TransactionMetaFieldBase","Transaction","BankTransactionBase","TransactionAllocationBase","TransactionBase","DepreciationBase","LoanBase","BankAccountPropertyBase","BankConnectionBase","BankAccountBase","cloneDeep","BorrowingExpenseLoanBase","BorrowingExpenseBase","ChatBase","MessageDocumentBase","MessageBase","ServiceNotificationBase","DocumentFolderBase","DocumentBase","BudgetRuleBase","BudgetBase","TaxReturnCategoryBase","TaxReturnItemBase","TaxReturnBase","first","observableThrowError","RestService","i3.BankConnectionService","i3.ToastService","EmployeeInviteBase","i4.SseService","i2.EventDispatcherService","TaxReviewBase","UserEventTypeCategoryBase","UserEventTypeBase","UserEventSettingBase","i2.MixpanelService","i1.SetupItemService","i2.PropertyService","i2.IncomeSourceService","i2.BankAccountService","i2.TransactionAllocationService","i2.VehicleClaimService","i2.TransactionService","i2.SoleBusinessService","i2.HoldingService","i2.UserService","i2.ClientMovementService","i2.ClientInviteService","i2.EmployeeService","i2.EmployeeInviteService","i2.FirmService","i1.BankTransactionCalculationService","i1","FILE_SETTINGS","i1.ExportFormatterService","i1.PropertyService","i1.TransactionService","i1.DepreciationService","i1.ChartAccountsService","i1.PreloaderService","i1.BasiqTokenService","i1.UserService","merge","MessagesEnum"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}