taxtank-core 0.17.14 → 0.18.0
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.
- package/bundles/taxtank-core.umd.js +5717 -5317
- package/bundles/taxtank-core.umd.js.map +1 -1
- package/esm2015/lib/collections/account-setup-item.collection.js +2 -2
- package/esm2015/lib/collections/bank.collection.js +15 -0
- package/esm2015/lib/collections/collection-dictionary.js +1 -1
- package/esm2015/lib/collections/collection.js +41 -56
- package/esm2015/lib/collections/exportable.collection.js +1 -1
- package/esm2015/lib/collections/property/property.collection.js +3 -3
- package/esm2015/lib/collections/vehicle-logbook.collection.js +2 -2
- package/esm2015/lib/db/Models/abstract-model.js +1 -1
- package/esm2015/lib/db/Models/bank/bank.js +1 -1
- package/esm2015/lib/forms/abstract.form.js +18 -3
- package/esm2015/lib/forms/bank/bank-account-add-manual.form.js +19 -0
- package/esm2015/lib/forms/bank/bank-account-loan.form.js +20 -0
- package/esm2015/lib/forms/bank/bank-account-migrate.form.js +15 -0
- package/esm2015/lib/forms/bank/bank-account-properties.form.js +15 -0
- package/esm2015/lib/forms/bank/bank-account-property.form.js +13 -0
- package/esm2015/lib/forms/bank/bank-account.form.js +53 -0
- package/esm2015/lib/forms/bank/bank-login.form.js +19 -0
- package/esm2015/lib/forms/client/client-income-types.form.js +2 -8
- package/esm2015/lib/forms/index.js +8 -1
- package/esm2015/lib/forms/login/login.form.js +1 -1
- package/esm2015/lib/forms/register/register-client.form.js +4 -3
- package/esm2015/lib/forms/register/register-firm.form.js +2 -9
- package/esm2015/lib/forms/user/password.form.js +6 -6
- package/esm2015/lib/forms/user/reset-password.form.js +1 -1
- package/esm2015/lib/forms/vehicle/vehicle-claim.form.js +2 -2
- package/esm2015/lib/forms/vehicle/vehicle.form.js +6 -12
- package/esm2015/lib/interceptors/basiq.interceptor.js +35 -0
- package/esm2015/lib/interceptors/financial-year-interceptor.js +15 -4
- package/esm2015/lib/interceptors/interceptors.module.js +12 -1
- package/esm2015/lib/models/account-setup/account-setup-item.js +4 -2
- package/esm2015/lib/models/bank/bank-account-property.js +6 -2
- package/esm2015/lib/models/bank/bank-account.js +2 -1
- package/esm2015/lib/models/bank/bank-connection.js +18 -3
- package/esm2015/lib/models/bank/bank-login-data.js +6 -0
- package/esm2015/lib/models/bank/bank.js +6 -1
- package/esm2015/lib/models/client/client-portfolio-report.js +3 -2
- package/esm2015/lib/models/endpoint/endpoints.const.js +3 -1
- package/esm2015/lib/models/event/app-event-type.enum.js +39 -37
- package/esm2015/lib/models/loan/loan-payment.js +3 -2
- package/esm2015/lib/models/loan/loan.js +1 -6
- package/esm2015/lib/models/report/property/property-report-item.js +4 -2
- package/esm2015/lib/models/report/vehicle-expense/vehicle-expense.js +4 -2
- package/esm2015/lib/models/tax-summary/report-item-details.js +3 -2
- package/esm2015/lib/models/tax-summary/report-item.js +3 -2
- package/esm2015/lib/services/account-setup/account-setup.service.js +2 -2
- package/esm2015/lib/services/auth/auth.service.js +20 -4
- package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +2 -5
- package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +57 -2
- package/esm2015/lib/services/http/bank/basiq/basiq-connections-response.interface.js +2 -0
- package/esm2015/lib/services/http/bank/basiq/basiq-token-response.interface.js +2 -0
- package/esm2015/lib/services/http/bank/basiq/basiq-token.service.js +42 -0
- package/esm2015/lib/services/http/bank/basiq/basiq.service.js +35 -44
- package/esm2015/lib/services/http/rest/rest.service.js +1 -12
- package/esm2015/lib/services/http/user/user.service.js +7 -15
- package/esm2015/lib/validators/date-range.validator.js +22 -0
- package/esm2015/lib/validators/index.js +2 -1
- package/esm2015/lib/validators/password.validator.js +16 -3
- package/esm2015/lib/validators/require-autocomplete.js +14 -0
- package/esm2015/public-api.js +7 -1
- package/fesm2015/taxtank-core.js +6088 -5763
- package/fesm2015/taxtank-core.js.map +1 -1
- package/lib/collections/bank.collection.d.ts +7 -0
- package/lib/collections/collection-dictionary.d.ts +2 -1
- package/lib/collections/collection.d.ts +18 -31
- package/lib/collections/exportable.collection.d.ts +2 -1
- package/lib/db/Models/abstract-model.d.ts +1 -0
- package/lib/db/Models/bank/bank.d.ts +4 -0
- package/lib/forms/abstract.form.d.ts +18 -3
- package/lib/forms/bank/bank-account-add-manual.form.d.ts +10 -0
- package/lib/forms/bank/bank-account-loan.form.d.ts +5 -0
- package/lib/forms/bank/bank-account-migrate.form.d.ts +9 -0
- package/lib/forms/bank/bank-account-properties.form.d.ts +8 -0
- package/lib/forms/bank/bank-account-property.form.d.ts +5 -0
- package/lib/forms/bank/bank-account.form.d.ts +21 -0
- package/lib/forms/bank/bank-login.form.d.ts +11 -0
- package/lib/forms/client/client-income-types.form.d.ts +1 -2
- package/lib/forms/index.d.ts +7 -0
- package/lib/forms/login/login.form.d.ts +4 -1
- package/lib/forms/register/register-client.form.d.ts +1 -1
- package/lib/forms/register/register-firm.form.d.ts +2 -2
- package/lib/forms/user/password.form.d.ts +4 -1
- package/lib/forms/user/reset-password.form.d.ts +3 -1
- package/lib/forms/vehicle/vehicle-claim.form.d.ts +1 -1
- package/lib/forms/vehicle/vehicle.form.d.ts +3 -7
- package/lib/interceptors/basiq.interceptor.d.ts +15 -0
- package/lib/interceptors/financial-year-interceptor.d.ts +2 -0
- package/lib/models/account-setup/account-setup-item.d.ts +2 -1
- package/lib/models/bank/bank-account-property.d.ts +1 -0
- package/lib/models/bank/bank-account.d.ts +2 -0
- package/lib/models/bank/bank-connection.d.ts +8 -1
- package/lib/models/bank/bank-login-data.d.ts +17 -0
- package/lib/models/bank/bank.d.ts +1 -0
- package/lib/models/client/client-portfolio-report.d.ts +2 -1
- package/lib/models/event/app-event-type.enum.d.ts +38 -36
- package/lib/models/loan/loan-payment.d.ts +2 -1
- package/lib/models/loan/loan.d.ts +0 -2
- package/lib/models/report/property/property-report-item.d.ts +2 -1
- package/lib/models/report/vehicle-expense/vehicle-expense.d.ts +2 -1
- package/lib/models/tax-summary/report-item-details.d.ts +2 -1
- package/lib/models/tax-summary/report-item.d.ts +2 -1
- package/lib/services/auth/auth.service.d.ts +13 -2
- package/lib/services/http/bank/bank-connection/bank-connection.service.d.ts +13 -1
- package/lib/services/http/bank/basiq/basiq-connections-response.interface.d.ts +9 -0
- package/lib/services/http/bank/basiq/basiq-token-response.interface.d.ts +9 -0
- package/lib/services/http/bank/basiq/basiq-token.service.d.ts +17 -0
- package/lib/services/http/bank/basiq/basiq.service.d.ts +20 -11
- package/lib/services/http/rest/rest.service.d.ts +0 -5
- package/lib/services/http/user/user.service.d.ts +0 -1
- package/lib/validators/date-range.validator.d.ts +5 -0
- package/lib/validators/index.d.ts +1 -0
- package/lib/validators/password.validator.d.ts +6 -0
- package/lib/validators/require-autocomplete.d.ts +5 -0
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxtank-core.umd.js","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","../../../node_modules/tslib/tslib.es6.js","../../../projects/tt-core/src/lib/services/auth/jwt.service.ts","../../../projects/tt-core/src/lib/services/auth/auth.service.ts","../../../projects/tt-core/src/lib/interceptors/jwt-interceptor.ts","../../../projects/tt-core/src/lib/services/user/user-switcher.service.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/services/preloader/preloader.service.ts","../../../projects/tt-core/src/lib/interceptors/preloader.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/collections/collection-dictionary.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/collections/collection.ts","../../../projects/tt-core/src/lib/collections/account-setup-item.collection.ts","../../../projects/tt-core/src/lib/db/Enums/bank-account-type.enum.ts","../../../projects/tt-core/src/lib/models/bank/type-loan.const.ts","../../../projects/tt-core/src/lib/collections/bank-account.collection.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-operation.enum.ts","../../../projects/tt-core/src/lib/collections/bank-transaction.collection.ts","../../../projects/tt-core/src/lib/collections/client.collection.ts","../../../projects/tt-core/src/lib/db/Enums/firm-type.enum.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/db/Enums/tank-type.enum.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/models/export/export-data-table.ts","../../../projects/tt-core/src/lib/collections/exportable.collection.ts","../../../projects/tt-core/src/lib/collections/transaction/transaction.collection.ts","../../../projects/tt-core/src/lib/collections/depreciation.collection.ts","../../../projects/tt-core/src/lib/collections/depreciation-forecast.collection.ts","../../../projects/tt-core/src/lib/collections/income-source.collection.ts","../../../projects/tt-core/src/lib/collections/loan/loan.collection.ts","../../../projects/tt-core/src/lib/collections/loan/loan-payment.collection.ts","../../../projects/tt-core/src/lib/collections/message.collection.ts","../../../projects/tt-core/src/lib/collections/message-document.collection.ts","../../../projects/tt-core/src/lib/models/financial-year/financial-year.ts","../../../projects/tt-core/src/lib/collections/property/property.collection.ts","../../../projects/tt-core/src/lib/models/report/depreciation/depreciation-lvp-asset-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-category.enum.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-categories.const.ts","../../../projects/tt-core/src/lib/db/Models/abstract-model.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/Enums/depreciation-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/depreciation-calculation.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-vehicle-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-list.enum.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-capital-project.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-capital-project.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-forecast.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-forecast.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-heading.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-heading.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-metadata.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-metadata-list.enum.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-metadata.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-transaction.ts","../../../projects/tt-core/src/lib/db/Enums/bank-transaction-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-source.enum.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/property/property.ts","../../../projects/tt-core/src/lib/db/Models/property/property-subscription.ts","../../../projects/tt-core/src/lib/db/Models/user/user.ts","../../../projects/tt-core/src/lib/db/Enums/user-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-roles.enum.ts","../../../projects/tt-core/src/lib/db/Models/address.ts","../../../projects/tt-core/src/lib/db/Models/country.ts","../../../projects/tt-core/src/lib/models/address/country.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/user/user-work-position.const.ts","../../../projects/tt-core/src/lib/db/Models/user/client-details.ts","../../../projects/tt-core/src/lib/models/client/client-details.ts","../../../projects/tt-core/src/lib/db/Models/user/employee-details.ts","../../../projects/tt-core/src/lib/db/Models/firm/firm.ts","../../../projects/tt-core/src/lib/db/Models/phone.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/models/firm/firm.ts","../../../projects/tt-core/src/lib/models/employee/employee-details.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-subscription.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-subscription-item.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/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/models/service-subscription/service-price.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-subscription-item.ts","../../../projects/tt-core/src/lib/models/service-subscription/subscription-type.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/subscription-title.const.ts","../../../projects/tt-core/src/lib/models/service-subscription/subscription-description.const.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-subscription.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/Models/property/property-category.ts","../../../projects/tt-core/src/lib/models/property/property-category.ts","../../../projects/tt-core/src/lib/db/Models/property/property-valuation.ts","../../../projects/tt-core/src/lib/db/Models/document/property-document.ts","../../../projects/tt-core/src/lib/interfaces/asset-type.enum.ts","../../../projects/tt-core/src/lib/interfaces/asset-entity-type.enum.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/db/Models/property/property-forecast.ts","../../../projects/tt-core/src/lib/models/property/property-forecast.ts","../../../projects/tt-core/src/lib/db/Models/property/property-category-movement.ts","../../../projects/tt-core/src/lib/models/property/property-category-movement.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-sale/tax-exemption.enum.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-category-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-sale/tax-exemption-metadata.enum.ts","../../../projects/tt-core/src/lib/collections/property/property-sale/property-sale-tax-exemption-metadata.collection.ts","../../../projects/tt-core/src/lib/models/property/property.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-receipt.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-receipt.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source.ts","../../../projects/tt-core/src/lib/db/Enums/income-source-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/salary-forecast.ts","../../../projects/tt-core/src/lib/models/income-source/salary-forecast.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-forecast.ts","../../../projects/tt-core/src/lib/models/income-source/sole-forecast.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source-forecast.ts","../../../projects/tt-core/src/lib/db/Enums/salary-forecast-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source-type.ts","../../../projects/tt-core/src/lib/db/Enums/income-source-type-list-work.enum.ts","../../../projects/tt-core/src/lib/db/Enums/income-source-type-list-other.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/db/Models/transaction/transaction-metadata.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-metadata.ts","../../../projects/tt-core/src/lib/db/Models/loan/loan.ts","../../../projects/tt-core/src/lib/db/Enums/loan-repayment-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-vehicle-type.enum.ts","../../../projects/tt-core/src/lib/models/loan/loan-payment.ts","../../../projects/tt-core/src/lib/db/Models/loan/loan-payout.ts","../../../projects/tt-core/src/lib/db/Enums/loan-payout-type.enum.ts","../../../projects/tt-core/src/lib/models/loan/loan-payout.ts","../../../projects/tt-core/src/lib/models/loan/loan.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-allocation.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-allocation.ts","../../../projects/tt-core/src/lib/models/transaction/income-amount-type.enum.ts","../../../projects/tt-core/src/lib/models/transaction/transaction.ts","../../../projects/tt-core/src/lib/models/bank/bank-transaction.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/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/collections/report/property/property-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-transaction.ts","../../../projects/tt-core/src/lib/collections/report/property/property-report-item-transaction.collection.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-depreciation.collection.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/collections/subscription/service-subscription.collection.ts","../../../projects/tt-core/src/lib/collections/tax-summary/report-item.collection.ts","../../../projects/tt-core/src/lib/db/Enums/tax-return-category-list.enum.ts","../../../projects/tt-core/src/lib/collections/tax-summary/tax-return-categories.const.ts","../../../projects/tt-core/src/lib/collections/tax-review.collection.ts","../../../projects/tt-core/src/lib/collections/transaction/transaction-allocation.collection.ts","../../../projects/tt-core/src/lib/collections/user-event-setting.collection.ts","../../../projects/tt-core/src/lib/models/logbook/logbook-period.ts","../../../projects/tt-core/src/lib/collections/vehicle-logbook.collection.ts","../../../projects/tt-core/src/lib/collections/vehicle.collection.ts","../../../projects/tt-core/src/lib/db/Enums/bank-account-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank-connection-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-etp.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-taxable.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-tax-deductible.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-metadata-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chat-status.enum.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/client-invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/client-invite-type.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/income-source-type-list-sole.enum.ts","../../../projects/tt-core/src/lib/db/Enums/invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-bank-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-interest-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-repayment-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-type.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/property/property-share-status.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/subscription/service-price-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-subscription-status.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-return-category-section.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-review-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-section.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-frequency.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-claim-method.enum.ts","../../../projects/tt-core/src/lib/db/Enums/vehicle-logbook-purpose.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-item.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank.ts","../../../projects/tt-core/src/lib/models/bank/bank.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-account.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/models/bank/bank-account-property.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-connection.ts","../../../projects/tt-core/src/lib/db/Models/bank/basiq-job.ts","../../../projects/tt-core/src/lib/models/bank/basiq-job.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/financial-year/month-number.enum.ts","../../../projects/tt-core/src/lib/models/financial-year/month-name-short.enum.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/basiq-config.ts","../../../projects/tt-core/src/lib/models/bank/basiq-token.ts","../../../projects/tt-core/src/lib/db/Models/loan/borrowing-expense.ts","../../../projects/tt-core/src/lib/models/borrowing-expense/borrowing-expense.ts","../../../projects/tt-core/src/lib/db/Models/loan/borrowing-expense-loan.ts","../../../projects/tt-core/src/lib/models/borrowing-expense/borrowing-expense-loan.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/db/Models/chart-accounts/chart-accounts-depreciation.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-depreciation.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-tax-labels.enum.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-value.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-value.ts","../../../projects/tt-core/src/lib/db/Models/firm/chat.ts","../../../projects/tt-core/src/lib/models/chat/chat.ts","../../../projects/tt-core/src/lib/models/chat/chat-view-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/firm/message.ts","../../../projects/tt-core/src/lib/db/Models/firm/message-document.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/db/Models/user/client-income-types.ts","../../../projects/tt-core/src/lib/models/client/client-income-types.ts","../../../projects/tt-core/src/lib/db/Models/firm/client-invite.ts","../../../projects/tt-core/src/lib/db/Models/user/registration-invite.ts","../../../projects/tt-core/src/lib/models/registration-invite/registration-invite.ts","../../../projects/tt-core/src/lib/models/client/client-invite.ts","../../../projects/tt-core/src/lib/db/Models/firm/client-movement.ts","../../../projects/tt-core/src/lib/models/client/client-movement.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/color/alphabet-colors.enum.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-group.enum.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-groups.const.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-receipt.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-receipt.ts","../../../projects/tt-core/src/lib/db/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.ts","../../../projects/tt-core/src/lib/models/document/document-file-types.const.ts","../../../projects/tt-core/src/lib/db/Models/document/document-folder.ts","../../../projects/tt-core/src/lib/models/document/document-folder.ts","../../../projects/tt-core/src/lib/db/Models/firm/employee-invite.ts","../../../projects/tt-core/src/lib/models/employee/employee-invite.ts","../../../projects/tt-core/src/lib/models/event/app-event.ts","../../../projects/tt-core/src/lib/models/event/app-event-type.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/financial-year/months.const.ts","../../../projects/tt-core/src/lib/models/income-position/income-position.ts","../../../projects/tt-core/src/lib/models/income-source/income-source-chart-data.ts","../../../projects/tt-core/src/lib/models/loan/loan-max-number-of-payments.enum.ts","../../../projects/tt-core/src/lib/models/logbook/default-vehicle-expense.ts","../../../projects/tt-core/src/lib/models/logbook/logbook-purpose-options.const.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-logbook.ts","../../../projects/tt-core/src/lib/models/logbook/vehicle-logbook.ts","../../../projects/tt-core/src/lib/models/logbook/vehicle.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-claim.ts","../../../projects/tt-core/src/lib/models/logbook/vehicle-claim.ts","../../../projects/tt-core/src/lib/db/Models/service-notification.ts","../../../projects/tt-core/src/lib/models/notification/notification.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/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/share-filter-options.enum.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/Models/property/property-share.ts","../../../projects/tt-core/src/lib/models/property/property-share.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/property-sale.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/property-sale-tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/tax-exemption.ts","../../../projects/tt-core/src/lib/models/property/property-sale/tax-exemption.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/property/property-sale/tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale-tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/service-subscription/module-url-list.const.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-payment.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-payment.ts","../../../projects/tt-core/src/lib/db/Models/firm/accountant/tax-review.ts","../../../projects/tt-core/src/lib/models/tax-review/tax-review.ts","../../../projects/tt-core/src/lib/models/tax-summary/report-item.ts","../../../projects/tt-core/src/lib/models/tax-summary/report-item-details.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/models/toast/toast.ts","../../../projects/tt-core/src/lib/models/toast/toast-type.enum.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-category.enum.ts","../../../projects/tt-core/src/lib/models/user/my-account-history.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/db/Models/user/occupation.ts","../../../projects/tt-core/src/lib/models/user/occupation.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/db/Models/user/user-event-type-category.ts","../../../projects/tt-core/src/lib/models/user-event/user-event-type-category.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-setting.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-type.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/models/user-event/user-event-setting-field.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-items.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-items.const.ts","../../../projects/tt-core/src/lib/services/http/firm/client-income/client-income-types.service.ts","../../../projects/tt-core/src/lib/services/event/event-dispatcher.service.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/property/property.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/income-source.service.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-account/bank-account.service.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/messages.enum.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-claim.service.ts","../../../projects/tt-core/src/lib/functions/enum-to-list.ts","../../../projects/tt-core/src/lib/services/http/transaction/messages.enum.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction.service.ts","../../../projects/tt-core/src/lib/services/account-setup/account-setup.service.ts","../../../projects/tt-core/src/lib/services/http/address/address.service.ts","../../../projects/tt-core/src/lib/services/asset/assets.service.ts","../../../projects/tt-core/src/lib/services/http/bank/bank.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/http/bank/bank-connection/bank-connection.service.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.service.ts","../../../projects/tt-core/src/lib/services/http/loan/borrowing-expense/borrowing-expense.service.ts","../../../projects/tt-core/src/lib/services/http/chart-accounts/chart-accounts.service.ts","../../../projects/tt-core/src/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.ts","../../../projects/tt-core/src/lib/services/event/sse.service.ts","../../../projects/tt-core/src/lib/services/http/chat/chat.service.ts","../../../projects/tt-core/src/lib/services/http/chat/message/message.service.ts","../../../projects/tt-core/src/lib/services/http/chat/message-document/message-document.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-movement/client-movement.service.ts","../../../projects/tt-core/src/lib/services/http/firm/portfolio-report/client-portfolio-report.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/depreciation/depreciation.service.ts","../../../projects/tt-core/src/lib/services/http/document/document-folder/document-folder.service.ts","../../../projects/tt-core/src/lib/services/http/firm/employee/employee.service.ts","../../../projects/tt-core/src/lib/services/http/firm/employee-invite/employee-invite.service.ts","../../../projects/tt-core/src/lib/services/http/firm/firm.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/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/intercom/intercom.service.ts","../../../projects/tt-core/src/lib/services/kompassify/kompassify.service.ts","../../../projects/tt-core/src/lib/services/http/loan/loan.service.ts","../../../projects/tt-core/src/lib/services/http/service-notification/service-notification.service.ts","../../../projects/tt-core/src/lib/models/pdf/pdf-config.ts","../../../projects/tt-core/src/lib/services/pdf/pdf.service.ts","../../../projects/tt-core/src/lib/services/report/property/property-transaction-report.service.ts","../../../projects/tt-core/src/lib/services/property/property-calculation/property-calculation.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-category/property-category.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-document/property-document.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-sale/property-sale.service.ts","../../../projects/tt-core/src/lib/services/property/equity-position-chart/equity-position-chart.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/subscription/subscription.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-price.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-history/tax-review-history.service.ts","../../../projects/tt-core/src/lib/services/http/tax-summary/tax-summary.service.ts","../../../projects/tt-core/src/lib/services/transaction/transaction-calculation.service.ts","../../../projects/tt-core/src/lib/services/http/user/occupation/occupation.service.ts","../../../projects/tt-core/src/lib/services/http/user/user.service.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/vehicle/vehicle.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-logbook.service.ts","../../../projects/tt-core/src/lib/services/xlsx/xlsx.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.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/round-to.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/validators/at-least-one.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/forms/client/client-income-types.form.ts","../../../projects/tt-core/src/lib/forms/login/login.form.ts","../../../projects/tt-core/src/lib/forms/user/password.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/user/reset-password.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/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: boolean = 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) => {\n return response.access_token;\n })\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: string = '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) => {\n return response.suggestions.map((item: object) => plainToClass(CorelogicSuggestion, item));\n })\n );\n }\n}\n","import { Observable } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor\r\n} from '@angular/common/http';\r\nimport { CorelogicService } from '../services/property/corelogic/corelogic.service';\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 /**\r\n * Check if requested url requested core logic, but not core logic auth api\r\n * @param req\r\n */\r\n addToken(req: HttpRequest<any>): HttpRequest<any> {\r\n // don't need token for this endpoint\r\n if (req.url.includes(`${this.environment.coreLogicUrl}/access/oauth/token`)) {\r\n return req;\r\n }\r\n\r\n // add core logic token to request headers\r\n if (req.url.includes(this.environment.coreLogicUrl)) {\r\n return req.clone({\r\n setHeaders: {\r\n Authorization: 'Bearer ' + this.corelogicService._accessToken\r\n }\r\n });\r\n }\r\n\r\n // return request without changes if url not related with core logic\r\n return req;\r\n }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return next.handle(this.addToken(request));\r\n }\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor,\r\n HttpParams\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 intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\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 if (!params.get('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","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { User } from '../../models/user/user';\n\nconst NAME_TOKEN = 'token';\nconst NAME_REFRESH_TOKEN = 'refreshToken';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class JwtService extends JwtHelperService {\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 }\n\n destroyTokens(): void {\n localStorage.removeItem(NAME_TOKEN);\n localStorage.removeItem(NAME_REFRESH_TOKEN);\n }\n\n getUser(): User {\n return this.decodeToken<User>();\n }\n\n isMe(userId: number): boolean {\n return this.getUser().id === userId;\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { JwtService } from './jwt.service';\nimport { map } from 'rxjs/operators';\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 @Inject('environment') private environment: any\n ) {\n this.isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());\n }\n\n setAuth(response: any) {\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_check`, {username, password}).pipe(\n map((response: any) => {\n this.setAuth(response);\n return response;\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: string = '/login'): void {\n localStorage.clear();\n location.replace(url);\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 } from '../services/auth/jwt.service';\nimport { AuthService } from '../services/auth/auth.service';\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 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 } else {\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 { 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 { Observable } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor, HttpParams\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 const params: HttpParams = new HttpParams({fromString: req.params.toString()}).set('_switch_user', username);\n return req.clone({params});\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 */\r\nexport const ENDPOINTS: {[key: string]: Endpoint} = {\r\n ASSETS_GET: new Endpoint('GET', '\\\\/assets\\\\/\\.\\*\\\\/\\\\d+'),\r\n\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_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\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_GET: new Endpoint('GET', '\\\\/client-movements'),\r\n CLIENT_MOVEMENTS_POST: new Endpoint('POST', '\\\\/client-movements'),\r\n COUNTRIES_GET: new Endpoint('GET', '\\\\/countries'),\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\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\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 FIRM_UPDATE_PHOTO_POST: new Endpoint('POST', '\\\\/firms\\\\/photo\\.\\*'),\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_DOCUMENTS_POST: new Endpoint('POST', '\\\\/folders\\\\/\\\\d+\\\\/documents'),\r\n FOLDERS_DOCUMENTS_PUT: new Endpoint('PUT', '\\\\/folders\\\\/\\\\d+\\\\/documents\\\\/\\\\d+'),\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_CHECK_POST: new Endpoint('POST', '\\\\/login_check'),\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 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_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', '\\\\/properties\\\\/documents'),\r\n PROPERTIES_DOCUMENTS_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/documents'),\r\n PROPERTIES_DOCUMENTS_PUT: new Endpoint('PUT', '\\\\/properties\\\\/documents\\\\/\\\\d+'),\r\n PROPERTIES_DOCUMENTS_DELETE: new Endpoint('DELETE', '\\\\/properties\\\\/documents\\\\/\\\\d+'),\r\n PROPERTIES_PHOTO_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/photo\\.\\*'),\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\r\n PRORATION_COST_POST: new Endpoint('POST', '\\\\/subscriptions\\\\/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_PAYMENTS_GET: new Endpoint('GET', '\\\\/service-payments'),\r\n STRIPE_BILLING_PORTAL_GET: new Endpoint('GET', '\\\\/stripe\\\\/billing-portal-session'),\r\n STRIPE_CHECKOUT_SESSION_POST: new Endpoint('POST', '\\\\/stripe\\\\/checkout-session'),\r\n SUBSCRIPTION_LAST_GET: new Endpoint('GET', '\\\\/subscriptions\\\\/last'),\r\n SUBSCRIPTION_ITEMS_PUT: new Endpoint('PUT', '\\\\/subscriptions\\\\/items'),\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_CURRENT_GET: new Endpoint('GET', '\\\\/users\\\\/current'),\r\n USER_CURRENT_PASSWORD_PUT: new Endpoint('PUT', '\\\\/users\\\\/current\\\\/password\\.\\*'),\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_RESET_PASSWORD_PUT: new Endpoint('PUT', '\\\\/users\\\\/reset-password'),\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\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_LOGBOOK_POST: new Endpoint('POST', '\\\\/vehicles\\\\/\\\\d+\\\\/logbooks'),\r\n VEHICLE_LOGBOOK_PUT: new Endpoint('PUT', '\\\\/vehicles\\\\/\\\\d+\\\\/logbooks\\\\/\\\\d+'),\r\n VEHICLE_CLAIMS_PUT: new Endpoint('PUT', '\\\\/vehicle-claims\\\\/\\\\d+')\r\n};\r\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 { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { PreloaderService } from '../services/preloader/preloader.service';\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 { 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\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})\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@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 get from 'lodash/get';\nimport flatten from 'lodash/flatten';\nimport hasIn from 'lodash/hasIn';\nimport { Collection as BaseCollection } from './collection';\n\n/**\n * List of collections grouped by passed property\n */\nexport class CollectionDictionary<Collection extends BaseCollection<object>> {\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 /**\n * @param collection The Collection instance to be grouped\n * @param path Path to the property to be grouped (Examples: 'transaction', 'property.category')\n * @param prop Optional: Field to group by (Default 'id', Examples: 'id', 'amount', 'date')\n */\n constructor(\n collection: Collection,\n path: string = 'id'\n ) {\n this.collectionConstructor = collection.constructor as new (items: object[]) => Collection;\n\n // Nothing to group when collection is empty\n if (!collection.length) {\n return;\n }\n\n // Do nothing if provided path was not found in the 1st collection's item\n if (!hasIn(collection.items[0], path.split('.')[0])) {\n return;\n }\n\n this.groupItems(collection, path);\n }\n\n /**\n * List of collections keys\n */\n get keys(): string[] {\n return Object.keys(this.items);\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 * Add new item by key\n */\n add(key: string | number, value: Collection) {\n this.items[key] = value;\n }\n\n /**\n * Join several collections by ids\n */\n merge(keys: number[]): Collection {\n return this.createCollection(\n flatten(\n keys.map((id: number): object[] => this.get(id.toString()).items)\n )\n );\n }\n\n /**\n * Create instance of collection\n */\n createCollection(items: object[] = []): Collection {\n return new this.collectionConstructor(items);\n }\n\n 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: boolean = 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 /**\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","// replace array element with the new one (only arrays of objects)\r\nexport function replace(array: any[], item: any, matchField: string = '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: string = 'id', isDesc: boolean = 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: boolean = 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","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\n\r\nconst DEFAULT_INDEX = 'other';\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 object> implements Iterable<Model> {\r\n // list of collection's items\r\n items: Model[];\r\n\r\n constructor(items: Model[] = []) {\r\n this.items = items;\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 /**\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 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 push(item: Model): number {\r\n return this.items.push(item);\r\n }\r\n\r\n replaceBy(path: string, item: Model): this {\r\n const index: number = this.findIndexBy(path, get(item, path));\r\n if (index >= 0) {\r\n this.items.splice(index, 1, item);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n removeBy(path: string, item: Model): this {\r\n const index: number = this.findIndexBy(path, get(item, path));\r\n if (index >= 0) {\r\n this.items.splice(index, 1);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n toArray(): Model[] {\r\n return [...this.items];\r\n }\r\n\r\n groupBy(path: string = ''): CollectionDictionary<Collection<Model>> {\r\n return new CollectionDictionary(this, path);\r\n }\r\n\r\n /**\r\n * @TODO remove and use dictionary instead\r\n */\r\n indexBy(path: string): object {\r\n // Create empty initial object for groups\r\n const result: { [key: string]: Model } = {};\r\n\r\n this.toArray().forEach((model: Model) => {\r\n result[get(model, path, DEFAULT_INDEX)] = model;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * get collection length\r\n */\r\n get length(): number {\r\n return this.items.length;\r\n }\r\n\r\n /**\r\n * Get list of items ids\r\n */\r\n getIds(): number[] {\r\n return this.items.map((item: Model): number => item['id']);\r\n }\r\n\r\n getBy(path: string, value: any): this {\r\n return this.create(this.items.filter((item: Model) => get(item, path) === value));\r\n }\r\n\r\n getByIds(ids: number[]): Model[] {\r\n return this.items.filter((item: Model): boolean => ids.includes(item['id']));\r\n }\r\n\r\n findBy(path: string, value: any): Model | null {\r\n return this.items.find((item: Model) => get(item, path) === value);\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 /**\r\n * Get total sum of items by field\r\n */\r\n sumBy(path: string): number {\r\n return +this.items.reduce((sum: number, item: Model): number => sum + Number(get(item, path)), 0).toFixed(2);\r\n }\r\n\r\n /**\r\n * Filter items by specific provided callback\r\n */\r\n filter(callback: (item: Model) => boolean): Collection<Model> {\r\n return new Collection(this.items.filter(callback));\r\n }\r\n\r\n /**\r\n * Sort collection items by provided field\r\n */\r\n sortBy(field: string = 'id', isDesc: boolean = true): void {\r\n sort(this.items, field, isDesc);\r\n }\r\n\r\n getByDateRange(from: Date, to: Date, dateField: string = 'date'): this {\r\n return this.create(\r\n this.items.filter((item: Model): boolean => item[dateField] >= from && item[dateField] <= to)\r\n );\r\n }\r\n}\r\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', false)\n }\n\n isCompleted(): boolean {\n return this.getBy('isCompleted', true).length === this.length;\n }\n}\n","export enum BankAccountTypeEnum {\n TRANSACTION = 1,\n SAVINGS = 2,\n CREDIT_CARD = 3,\n MORTGAGE = 4,\n LOAN = 5,\n INVESTMENT = 6,\n TERM_DEPOSIT = 7,\n OFFSET = 10,\n}\n","import { BankAccountTypeEnum } from '../../db/Enums/bank-account-type.enum';\n\nexport const TYPE_LOAN: BankAccountTypeEnum[] = [\n BankAccountTypeEnum.MORTGAGE,\n BankAccountTypeEnum.CREDIT_CARD,\n BankAccountTypeEnum.LOAN\n];\n","import { Collection } from './collection';\nimport { BankAccountTypeEnum } from '../db/Enums/bank-account-type.enum';\nimport { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { BankAccount } from '../models/bank/bank-account';\nimport { BankAccountProperty } from '../models/bank/bank-account-property';\nimport { Property } from '../models/property/property';\nimport flatten from 'lodash/flatten';\nimport uniqBy from 'lodash/uniqBy';\nimport concat from 'lodash/concat';\nimport { TYPE_LOAN } from '../models/bank/type-loan.const';\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: boolean = 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) => {\n return sum += bankAccount.balances.length ? bankAccount.getOpeningBalance() : 0;\n }, 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) => {\n return sum += bankAccount.currentBalance;\n }, 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) => {\n return bankAccount.bankAccountProperties.find((bankAccountProperty: BankAccountProperty) => {\n return bankAccountProperty.property.id === id;\n });\n }));\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) => {\n return bankAccount.bankAccountProperties.find((bankAccountProperty: BankAccountProperty) => {\n return ids.includes(bankAccountProperty.property.id);\n });\n })\n );\n }\n\n /**\n * get collection of active bank accounts\n */\n getActiveBankAccounts(): BankAccountCollection {\n return new BankAccountCollection(this.items.filter((bankAccount: BankAccount) => {\n return bankAccount.isActive();\n }));\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 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 /**\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[] => {\n return bankAccount.bankAccountProperties;\n })\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) => {\n return bankAccountProperty.property;\n }),\n 'id'\n );\n }\n\n getPropertyBalanceAmount(propertyId: number): number {\n return this.items.reduce((sum: number, bankAccount: BankAccount): number => {\n return sum + bankAccount.getPropertyBalanceAmount(propertyId);\n }, 0);\n }\n}\n","export enum TransactionOperationEnum {\n\tALLOCATE = 1,\n\tFIND_AND_MATCH = 2,\n\tTRANSFER = 3\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';\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 +(this.getAmount() - allocations.getByBankTransactionsIds(this.getIds()).amount).toFixed(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 => {\n return item.amount + bankTransaction.amount === 0 &&\n Math.abs(bankTransaction.date.getTime() - item.date.getTime()) < TRANSACTION_TRANSFER_DELAY;\n });\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 = new CollectionDictionary(allocations, 'transaction.id');\n // Init an empty dictionary we will fill below\n const bankTransactionsByTransactions: CollectionDictionary<BankTransactionCollection> = new CollectionDictionary(new BankTransactionCollection([]));\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 getUnallocatedBankTransactions(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 { User } from '../models/user/user';\n\nexport class ClientCollection extends Collection<User> {\n}\n","export enum FirmTypeEnum {\n\tACCOUNTANT = 1,\n\tADVISOR = 2,\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';\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 * 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","export enum TankTypeEnum {\n PROPERTY = 1,\n WORK = 2,\n OTHER = 3,\n SOLE = 4,\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}\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';\n\nexport abstract class ExportableCollection<Model extends object> extends Collection<Model> {\n abstract getExportHeader(type?: string): string[];\n\n abstract getExportBody(type?: string): ExportCell[][];\n\n getExportFooter(type?: string): ExportCell[] {\n return [];\n };\n\n export(type?: string): ExportDataTable {\n return plainToClass(ExportDataTable, {\n header: this.getExportHeader(type),\n body: this.getExportBody(type),\n footer: [this.getExportFooter(type)]\n });\n }\n}\n","import { Transaction } from '../../models/transaction/transaction';\nimport { TransactionAllocationCollection } from './transaction-allocation.collection';\nimport { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { plainToClass } from 'class-transformer';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { ExportableCollection } from '../exportable.collection';\n\n/**\n * Collection of transactions\n */\nexport class TransactionCollection extends ExportableCollection<Transaction> {\n /**\n * Get total amount of all transactions in the collection\n */\n get amount(): number {\n return +this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.getNetAmount(), 0).toFixed(2);\n }\n\n /**\n * Difference between allocated amount and total amount\n */\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return +(this.amount - allocations.getByTransactionsIds(this.getIds()).amount).toFixed(2);\n }\n\n /**\n * Get cash position\n * Cash Position = Income - Expenses\n * Cash position is equal to Total Amount because income is positive and expense is negative,\n */\n get cashPosition(): number {\n return this.claimAmount;\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 /**\n * Get summary of claim amounts\n */\n get claimAmount(): number {\n return this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.claimAmount, 0);\n }\n\n get grossAmount(): number {\n return +this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.amount, 0).toFixed(2);\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 list of transactions filtered by chart accounts id\n * @param chartAccountsId chart accounts id for filtering\n */\n getByChartAccountsId(chartAccountsId: number): Transaction[] {\n return this.items.filter((transaction: Transaction): boolean => transaction.chartAccounts.id === chartAccountsId);\n }\n\n getIncomeTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isIncome())\n );\n }\n\n get claimIncome(): number {\n return this.getIncomeTransactions().claimAmount;\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 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 => {\n return ids.includes(transaction.property?.id);\n })\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 /**\n * Get transactions related to Vehicle category\n */\n getVehicleTransactions(): this {\n return this.create(\n this.items.filter((transaction: Transaction): boolean => {\n return transaction.isVehicleTransaction();\n })\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 return this.items.map((transaction: Transaction) => {\n return [\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","import { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { Collection } from './collection';\nimport { Depreciation } from '../models/depreciation/depreciation';\nimport uniqBy from 'lodash/uniqBy';\nimport compact from 'lodash/compact';\nimport { DepreciationCapitalProject } from '../models/depreciation/depreciation-capital-project';\nimport { TransactionCollection } from './transaction/transaction.collection';\nimport { ChartAccountsCategoryEnum } from '../db/Enums/chart-accounts-category.enum';\n\nexport class DepreciationCollection extends Collection<Depreciation> {\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) => {\n return sum + depreciation.currentYearForecast.claimAmount;\n }, 0);\n }\n\n getClaimAmountByYear(year: number = +localStorage.getItem('financialYear')): number {\n return this.amount - this.items.reduce((sum: number, depreciation: Depreciation): number => {\n return sum + depreciation.getCloseBalanceByYear(year);\n }, 0);\n }\n\n getCloseBalanceByYear(year: number = +localStorage.getItem('financialYear')): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => {\n return sum + depreciation.getCloseBalanceByYear(year);\n }, 0);\n }\n\n getCurrentYearForecastAmount(): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => {\n return sum + depreciation.currentYearForecast.amount;\n }, 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 getPlantEquipment(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isPlantEquipment())\n );\n }\n\n getCapitalDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isCapital())\n );\n }\n\n getBorrowingExpenseDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isBorrowingExpense())\n );\n }\n\n getWrittenOffDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isWrittenOff())\n );\n }\n\n getLowValuePoolDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isLowValuePool())\n );\n }\n\n getCapitalProjects(): DepreciationCapitalProject[] {\n return uniqBy(\n compact(\n this.items.map((depreciation: Depreciation): DepreciationCapitalProject => {\n return depreciation.depreciationCapitalProject;\n })\n ),\n 'id'\n );\n }\n\n /**\n * Get a new collection of depreciations related to vehicles\n */\n getVehicleDepreciations(): DepreciationCollection {\n return this.create(\n this.items.filter((depreciation: Depreciation): boolean => {\n return depreciation.isVehicleDepreciation();\n })\n );\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","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 } from '../models/income-source/income-source';\nimport { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { IncomeSourceTypeEnum } from '../db/Enums/income-source-type.enum';\nimport { IIncomeSourceForecast } from '../interfaces/income-source-forecast.interface';\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.isSalaryIncome() || 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.isSalaryIncome());\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","import { Collection } from '../collection';\nimport { Loan } from '../../models/loan/loan';\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","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 } from '../../models/loan/loan-payment';\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 return [\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}\n","import { Collection } from './collection';\nimport { Message } from '../models/chat/message';\nimport { User } from '../models/user/user';\n\n\nexport class MessageCollection extends Collection<Message> {\n getFirstUnreadMessage(user: User): Message {\n return this.items.find((message: Message): boolean => {\n return !message.isRead() && message.isFromEmployee() !== user.isEmployee();\n }\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 /**\n * Check if chat has unread chats\n */\n hasUnread(): boolean {\n return !!this.getUnread().length;\n }\n}\n","import { Collection } from './collection';\nimport { MessageDocument } from '../models/chat/message-document';\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","export class FinancialYear {\r\n constructor(date?: Date) {\r\n this.year = date ? FinancialYear.toFinYear(date) : +localStorage.getItem('financialYear') || FinancialYear.toFinYear(new Date());\r\n\r\n this.setStartDate(this.year);\r\n this.setEndDate(this.year);\r\n }\r\n\r\n static startMonthIndex: number = 6;\r\n year: number;\r\n startDate: Date;\r\n endDate: Date;\r\n\r\n private yearStartDate: string = '-07-01';\r\n private yearEndDate: string = '-06-30';\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","import { Collection } from '../collection';\nimport { Property } from '../../models/property/property';\nimport { FinancialYear } from '../../models/financial-year/financial-year';\nimport { PropertyCategory } from '../../models/property/property-category';\nimport uniqBy from 'lodash/uniqBy';\nimport { DepreciationCollection } from '../depreciation.collection';\nimport { TransactionCollection } from '../transaction/transaction.collection';\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 * 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 forecastedRentalReturn(): number {\n return this.sumBy('forecastedRentalReturn');\n }\n\n get forecastedTaxPosition(): number {\n return this.sumBy('forecastedTaxPosition');\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.sumBy('marketValueGrowth');\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 => {\n return min < property.contractDate ? min : property.contractDate;\n }, 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 => {\n return max.growthPercent < current.growthPercent ? current : max;\n }, this.first);\n }\n\n /**\n * Get property with the lowest tax position\n */\n getBestPerformanceTaxProperty(transactions: TransactionCollection, depreciations: DepreciationCollection): Property {\n return this.items.reduce((min: Property, current: Property): Property => {\n return min.getTaxPosition(transactions.getBy('property.id', min.id), depreciations.getBy('property.id', min.id))\n > current.getTaxPosition(transactions.getBy('property.id', current.id), depreciations.getBy('property.id', current.id))\n ? current\n : min;\n }, this.first);\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 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}\n","import { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\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 ],\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 ],\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 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 // @TODO Alex why?\r\n ChartAccountsCategoryEnum.PERSONAL_EXPENSE\r\n ],\r\n workIncome: [\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME,\r\n // @TODO Alex why?\r\n ChartAccountsCategoryEnum.PERSONAL_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 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 ],\r\n all: [\r\n ChartAccountsCategoryEnum.PROPERTY_INCOME,\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_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.PERSONAL_EXPENSE\r\n ]\r\n};\r\n","import get from 'lodash/get';\n\nexport class AbstractModel {\n hasValue(value: any, path: string = 'id'): boolean {\n return get(path) === value;\n }\n}\n","import { Property } from '../property/property';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport {AbstractModel} from '../abstract-model';\nimport {Exclude, Transform, Type} from 'class-transformer';\n\nexport class TransactionBase extends AbstractModel {\n id?: number;\n amount?: number;\n property?: Property;\n date?: Date;\n chartAccounts?: ChartAccounts;\n description?: string;\n /**\n * could be File when just added new image\n * @TODO Alex plainToClass doesn't work with File without this hack https://github.com/typestack/class-transformer/issues/1178\n */\n @Exclude({toPlainOnly: true})\n @Type(() => Object)\n @Transform(({obj}) => {\n return obj.file;\n })\n file: File;\n claimPercent?: number;\n\n /**\n * Check if current tank is Property\n */\n isPropertyTank(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.property.includes(this.chartAccounts?.category);\n }\n\n /**\n * Check if current tank is Work\n */\n isWorkTank(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.work.includes(this.chartAccounts?.category);\n }\n\n /**\n * Check if current tank is Sole\n */\n isSoleTank(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.sole.includes(this.chartAccounts?.category);\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 { DepreciationReceipt } from './depreciation-receipt';\nimport { DepreciationForecast } from './depreciation-forecast';\nimport { Loan } from '../loan/loan';\nimport { TransactionBase } from '../transaction/transaction-base';\n\nexport class Depreciation extends TransactionBase {\n id?: number;\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 receipt?: DepreciationReceipt;\n forecasts?: DepreciationForecast[];\n loan?: Loan;\n createdBy?: User;\n updatedBy?: User;\n}\n","export enum DepreciationTypeEnum {\n\tPLANT_EQUIPMENT = 1,\n\tCAPITAL_WORKS = 2,\n\tBULK_DEPRECIATION = 3,\n\tBORROWING_EXPENSES = 4,\n}","export enum DepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n\tCAPITAL = 3,\n\tLVP = 4,\n\tAMORTISATION = 5,\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 INTEREST_ON_LOAN = 302,\n BORROWING_EXPENSES = 315,\n DIVIDENDS = 542,\n TRANSFER = 615,\n BUILDING_AT_COST = 304,\n MANAGEMENT_FEES_PLATFORM_FEES = 656,\n KLMS_TRAVELLED_FOR_WORK = 24,\n KLMS_TRAVELLED = 683,\n DIRECTOR_FEES = 6,\n SALARY_OR_WAGES = 2,\n VEHICLES = 25,\n COMMERCIAL_VEHICLES = 26,\n VEHICLE_LOAN_INTEREST = 37,\n VEHICLE_LOAN_PRINCIPAL = 38,\n TAX_INSTALMENTS = 662,\n INTEREST_EARNED = 22,\n TRUST_INCOME = 567,\n TAX_OFFSETS_N_R_A_S = 571,\n}\n","import { Property } from '../property/property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DepreciationCapitalProject extends AbstractModel {\n id?: number;\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 { DepreciationCapitalProject as DepreciationCapitalProjectBase } from '../../db/Models/depreciation/depreciation-capital-project';\nimport { Type } from 'class-transformer';\n\nexport class DepreciationCapitalProject extends DepreciationCapitalProjectBase {\n // @TODO remove after new rest api ready\n propertyId: number;\n\n @Type(() => Date)\n effectiveDate: Date;\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 id?: number;\n claimPercent?: number;\n createdAt?: Date;\n updatedAt?: Date;\n depreciation?: Depreciation;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { DepreciationForecast as DepreciationForecastBase } from '../../db/Models/depreciation/depreciation-forecast';\nimport * as moment from 'moment';\nimport { DateRange } from 'moment-range';\n\nexport class DepreciationForecast extends DepreciationForecastBase {\n isLVP: boolean;\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 { ChartAccountsTypeEnum } from '../../Enums/chart-accounts-type.enum';\nimport { ChartAccountsCategoryEnum } from '../../Enums/chart-accounts-category.enum';\nimport { ChartAccountsHeading } from './chart-accounts-heading';\nimport { TaxReturnItem } from '../tax-return/tax-return-item';\nimport { ChartAccountsValue } from './chart-accounts-value';\nimport { ChartAccountsMetadata } from './chart-accounts-metadata';\nimport { ChartAccountsDepreciation } from './chart-accounts-depreciation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccounts extends AbstractModel {\n id?: number;\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 metadata?: ChartAccountsMetadata[];\n depreciations?: ChartAccountsDepreciation[];\n}\n","import { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsHeading extends AbstractModel {\n id?: number;\n name?: string;\n chartAccounts?: ChartAccounts[];\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 { ChartAccountsMetadataListEnum } from '../../Enums/chart-accounts-metadata-list.enum';\nimport { ChartAccountsMetadataTypeEnum } from '../../Enums/chart-accounts-metadata-type.enum';\nimport { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsMetadata extends AbstractModel {\n id?: number;\n label?: ChartAccountsMetadataListEnum;\n type?: ChartAccountsMetadataTypeEnum;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts[];\n}\n","export enum ChartAccountsMetadataListEnum {\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\tFRANKED = 26,\n\tTAX_OFFSETS_N_R_A_S = 29,\n}\n","import { ChartAccountsMetadata as ChartAccountsMetadataBase } from '../../db/Models/chart-accounts/chart-accounts-metadata';\r\nimport { ChartAccountsMetadataListEnum } from '../../db/Enums/chart-accounts-metadata-list.enum';\r\n\r\nexport class ChartAccountsMetadata extends ChartAccountsMetadataBase {\r\n /**\r\n * Check if metadata id is related to SHARE_PERCENTAGE value\r\n */\r\n isSharePercentage(): boolean {\r\n return this.id === ChartAccountsMetadataListEnum.SHARE_PERCENTAGE;\r\n }\r\n\r\n isHours(): boolean {\r\n return this.id === ChartAccountsMetadataListEnum.HOURS;\r\n }\r\n}\r\n","import { ChartAccounts as ChartAccountsBase } from '../../db/Models/chart-accounts/chart-accounts';\r\nimport { Type } from 'class-transformer';\r\nimport { ChartAccountsHeading } from './chart-accounts-heading';\r\nimport { ChartAccountsMetadata } from './chart-accounts-metadata';\r\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\r\nimport { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\r\nimport { ChartAccountsHeadingVehicleListEnum } from '../../db/Enums/chart-accounts-heading-vehicle-list.enum';\r\nimport { CHART_ACCOUNTS_CATEGORIES } from './chart-accounts-categories.const';\r\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\r\nimport { FinancialYear } from '../financial-year/financial-year';\r\nimport { ChartAccountsValue } from './chart-accounts-value';\r\n\r\nexport class ChartAccounts extends ChartAccountsBase {\r\n @Type(() => ChartAccountsHeading)\r\n heading: ChartAccountsHeading;\r\n\r\n @Type(() => ChartAccountsMetadata)\r\n metadata: ChartAccountsMetadata[];\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 'Klms travelled for work' category\r\n */\r\n isKlmsForWork(): 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 'Klms travelled for sole' category\r\n */\r\n isKlmsForSole(): boolean {\r\n return this.id === ChartAccountsListEnum.KLMS_TRAVELLED;\r\n }\r\n\r\n /**\r\n * Check if accounts id is related for KLMs category related to passed tank type\r\n */\r\n isKLMsByTankType(tankType: TankTypeEnum): boolean {\r\n switch (tankType) {\r\n case TankTypeEnum.WORK:\r\n return this.isKlmsForWork();\r\n case TankTypeEnum.SOLE:\r\n return this.isKlmsForSole();\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'NRAS Tax Offset' category\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 this.id === ChartAccountsListEnum.VEHICLES;\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 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.category === ChartAccountsCategoryEnum.PROPERTY_EXPENSE;\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 isPropertyDepreciation(): boolean {\r\n return [ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION, ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS]\r\n .includes(this.category);\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 /**\r\n * Check if transaction chart account is work related car expenses\r\n */\r\n isVehicleLoanExpense(): boolean {\r\n return this.id === ChartAccountsListEnum.VEHICLE_LOAN_INTEREST || this.id === ChartAccountsListEnum.VEHICLE_LOAN_PRINCIPAL;\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","import { BankTransactionTypeEnum } from '../../Enums/bank-transaction-type.enum';\nimport { BankAccount } from './bank-account';\nimport { BankTransactionImport } from './bank-transaction-import';\nimport { TransactionAllocation } from '../transaction/transaction-allocation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankTransaction extends AbstractModel {\n id?: number;\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","export enum BankTransactionTypeEnum {\n\tDEBIT = 1,\n\tCREDIT = 2,\n}","export enum TransactionSourceEnum {\n\tCASH = 1,\n\tBANK_TRANSACTION = 2,\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 { TransactionReceipt } from './transaction-receipt';\nimport { TransactionMetadata } from './transaction-metadata';\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';\n\nexport class Transaction extends TransactionBase {\n id?: number;\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 receipt?: TransactionReceipt;\n property?: Property;\n metadata?: TransactionMetadata[];\n transfer?: Transaction;\n allocations?: TransactionAllocation[];\n loan?: Loan;\n depreciation?: Depreciation;\n createdBy?: User;\n updatedBy?: User;\n}\n","export enum TransactionTypeEnum {\n\tDEBIT = 1,\n\tCREDIT = 2,\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 {AbstractModel} from '../abstract-model';\n\nexport class Property extends AbstractModel {\n id?: number;\n photo?: string;\n purchasePrice?: number;\n contractDate?: Date;\n settlementDate?: Date;\n depreciationCalculation?: PropertyDepreciationCalculationEnum;\n shareWith?: string;\n claimPercent?: number;\n growthPercent?: number;\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 stampDuty?: number;\n legalFees?: number;\n otherCapitalCosts?: number;\n propertyBankAccounts?: BankAccountProperty[];\n createdBy?: User;\n updatedBy?: User;\n documents?: PropertyDocument[];\n depreciations?: Depreciation[];\n}\n","import { Property } from './property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertySubscription extends AbstractModel {\n id?: number;\n createdAt?: Date;\n deletedAt?: Date;\n property?: Property;\n user?: User;\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-details';\nimport { EmployeeDetails } from './employee-details';\nimport {AbstractModel} from '../abstract-model';\n\nexport class User extends AbstractModel {\n id?: number;\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 stripeId?: string;\n basiqId?: string;\n roles?: UserRolesEnum;\n financialYear?: number;\n dateOfBirth?: 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}\n","export enum UserStatusEnum {\n INACTIVE = 0,\n ON_BOARDING = 1,\n ACTIVE = 2,\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 SWITCH_USER = 'ROLE_PREVIOUS_ADMIN',\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 id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n country?: Country;\n}\n","import {AbstractModel} from './abstract-model';\n\nexport class Country extends AbstractModel {\n\tid?: number;\n\tname?: string;\n\tcallingCode?: string;\n}\n","import { Country as CountryBase } from '../../db/Models/country';\r\n\r\nexport class Country extends CountryBase {\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","export enum AddressTypeEnum {\n\tSTREET = 1,\n\tPOSTAL = 2,\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 get name(): string {\r\n return `${this.unitNumber ? this.unitNumber + '/' : ''}${this.address}`;\r\n }\r\n\r\n get nameLong(): string {\r\n return `${this.name}, ${this.city}, ${this.state}`;\r\n }\r\n}\r\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","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';\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 privateHealthCare?: boolean;\n spouse?: boolean;\n spouseAnnualIncome?: number;\n studentLoanAmount?: number;\n dependants?: number;\n medicareExemption?: ClientDetailsMedicareExemptionEnum;\n pensionersTax?: boolean;\n workingHolidayMaker?: ClientDetailsWorkingHolidayMakerEnum;\n dateOfBirth?: Date;\n isGST?: boolean;\n capitalLoss?: number;\n basiqConsentExist?: boolean;\n id?: number;\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 as ClientDetailsBase } from '../../db/Models/user/client-details';\n\nexport class ClientDetails extends ClientDetailsBase {\n}\n","import { User } from './user';\nimport { Firm } from '../firm/firm';\nimport {AbstractModel} from '../abstract-model';\n\nexport class EmployeeDetails extends AbstractModel {\n id?: number;\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';\n\nexport class Firm extends AbstractModel {\n id?: number;\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}\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 id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n country?: Country;\n}\n","export enum PhoneTypeEnum {\n\tMOBILE = 1,\n\tOFFICE = 2,\n}","import { Phone as PhoneBase } from '../../db/Models/phone';\r\nimport { PhoneTypeEnum } from '../../db/Enums/phone-type.enum';\r\n\r\nexport class Phone extends PhoneBase {\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","import { Firm as FirmBase } from '../../db/Models/firm/firm';\r\nimport { Phone } from '../phone/phone';\r\nimport { Address } from '../address/address';\r\nimport { User } from '../user/user';\r\nimport { Type } from 'class-transformer';\r\nimport { Photoable } from '../../interfaces/photoable';\r\n\r\nexport class Firm extends FirmBase implements Photoable {\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 /**\r\n * get firm photo link\r\n */\r\n getPhoto(): string {\r\n return this.photo;\r\n }\r\n\r\n /**\r\n * get firm initials\r\n */\r\n getInitials(): string {\r\n return `${this.name[0].toUpperCase()}${this.name[1]}`;\r\n }\r\n}\r\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 { 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 {AbstractModel} from '../abstract-model';\n\nexport class ServiceSubscription extends AbstractModel {\n id?: number;\n stripeId?: string;\n startDate?: Date;\n endDate?: Date;\n status?: ServiceSubscriptionStatusEnum;\n user?: User;\n items?: ServiceSubscriptionItem[];\n payments?: ServicePayment[];\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 id?: number;\n price?: ServicePrice;\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 id?: number;\n stripeId?: string;\n amount?: number;\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';\n\nexport class ServiceProduct extends AbstractModel {\n id?: number;\n stripeId?: string;\n title?: string;\n role?: string;\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","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}\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 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 isArchived(): boolean {\n return this.status === ServiceProductStatusEnum.ARCHIVED;\n }\n}\n","import { ServicePrice as BaseServicePrice } from '../../db/Models/subscription/service-price';\nimport { ServiceProduct } from './service-product';\nimport {plainToClass, Type} from 'class-transformer';\nimport {ServiceSubscriptionItem} from './service-subscription-item';\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","import { ServiceSubscriptionItem as ServiceSubscriptionItemBase } from '../../db/Models/subscription/service-subscription-item';\nimport { ServicePrice } from './service-price';\nimport { Type } from 'class-transformer';\nimport {ServiceProductIdEnum} from '../../db/Enums/subscription/service-product-id.enum';\n\n/**\n * backend bd doesn't support dynamic prices, as far as we have just one product like that we keep it hardcoded\n */\nconst PROPERTY_TANK_PRICE = 9;\n\nexport class ServiceSubscriptionItem extends ServiceSubscriptionItemBase {\n @Type(() => ServicePrice)\n price: ServicePrice;\n\n get total(): number {\n let price = this.price.amount * this.quantity;\n if (this.price.product.id === ServiceProductIdEnum.PROPERTIES) {\n price += PROPERTY_TANK_PRICE;\n }\n\n return price;\n }\n}\n","export enum SubscriptionTypeEnum {\r\n WITHOUT_SUBSCRIPTION = 0,\r\n INDIVIDUAL = 1,\r\n INVESTOR = 2,\r\n INVESTOR_PLUS = 3\r\n}\r\n","import { SubscriptionTypeEnum } from './subscription-type.enum';\r\n\r\nexport const SUBSCRIPTION_TITLE: {[key: number]: string} = {\r\n [SubscriptionTypeEnum.WITHOUT_SUBSCRIPTION]: 'Without subscription',\r\n [SubscriptionTypeEnum.INDIVIDUAL]: 'Individual',\r\n [SubscriptionTypeEnum.INVESTOR]: 'Investor',\r\n [SubscriptionTypeEnum.INVESTOR_PLUS]: 'Investor plus'\r\n};\r\n","import { SubscriptionTypeEnum } from './subscription-type.enum';\r\n\r\nexport const SUBSCRIPTION_DESCRIPTION: {[key: number]: string} = {\r\n [SubscriptionTypeEnum.WITHOUT_SUBSCRIPTION]: 'Without subscription',\r\n [SubscriptionTypeEnum.INDIVIDUAL]: 'Manage income and expenses via live bank feeds. Keep receipts safe, maximise deductions & minimise tax.',\r\n [SubscriptionTypeEnum.INVESTOR]: 'Property made easy with smart tax tools and real-time information to help control how much tax you pay.',\r\n [SubscriptionTypeEnum.INVESTOR_PLUS]: 'Add your whole portfolio, including investment properties, home and properties in trusts. For 3+ properties an extra $6 will be charged per property.'\r\n};\r\n","import { ServiceSubscription as ServiceSubscriptionBase } from '../../db/Models/subscription/service-subscription';\nimport { ServiceSubscriptionItem } from './service-subscription-item';\nimport { SubscriptionTypeEnum } from './subscription-type.enum';\nimport { SUBSCRIPTION_TITLE } from './subscription-title.const';\nimport { SUBSCRIPTION_DESCRIPTION } from './subscription-description.const';\nimport { UserRolesEnum } from '../../db/Enums/user-roles.enum';\nimport { Type } from 'class-transformer';\n\nconst PROPERTY_INVESTOR_MAX_PROPERTIES = 2;\n\nexport class ServiceSubscription extends ServiceSubscriptionBase {\n @Type(() => Date)\n startDate: Date;\n\n @Type(() => Date)\n endDate: Date;\n\n @Type(() => ServiceSubscriptionItem)\n items: ServiceSubscriptionItem[];\n\n // Number of days after which the trial time will be expired\n lastTrialDays: number = 4;\n\n get isTrial(): boolean {\n return !this.stripeId;\n }\n\n get price(): number {\n return this.items.reduce((sum: number, item: ServiceSubscriptionItem) => sum + item.total, 0);\n }\n\n get propertyQuantity(): number {\n return this.propertiesItem ? this.propertiesItem.quantity : 0;\n }\n\n /**\n * get type of subscription\n */\n get type(): SubscriptionTypeEnum {\n const workTankProduct: ServiceSubscriptionItem = this.items.find((item: ServiceSubscriptionItem): boolean => {\n return item.price.product.isWorkTank();\n });\n\n if (!this.workTankItem || !this.isActive) {\n return SubscriptionTypeEnum.WITHOUT_SUBSCRIPTION;\n }\n\n if (this.items.length === 1 && !!workTankProduct) {\n return SubscriptionTypeEnum.INDIVIDUAL;\n }\n\n const propertyTankProduct: ServiceSubscriptionItem = this.items.find((item: ServiceSubscriptionItem): boolean => {\n return item.price.product.isProperties();\n });\n\n if (!!this.propertiesItem && propertyTankProduct.quantity === PROPERTY_INVESTOR_MAX_PROPERTIES) {\n return SubscriptionTypeEnum.INVESTOR;\n }\n\n return SubscriptionTypeEnum.INVESTOR_PLUS;\n }\n\n /**\n * get title of subscription\n */\n get title(): string {\n return SUBSCRIPTION_TITLE[this.type];\n }\n\n /**\n * get description of subscription\n */\n get description(): string {\n return SUBSCRIPTION_DESCRIPTION[this.type];\n }\n\n /**\n * This check on getIsActive need for firm. Accountant has a endDate, but user has not endDate\n * and for user we add check for endDate\n */\n get isActive(): boolean {\n return this.endDate ? new Date(this.endDate).getTime() > new Date().getTime() : true;\n }\n\n get daysRemain(): number {\n const daysRemains: number = Math.round(\n (new Date(this.endDate).getTime() - new Date().getTime()) / (1000 * 3600 * 24)\n );\n\n return daysRemains > 0 ? daysRemains : 0;\n }\n\n getTitle(): string {\n return this.isTrial ? 'Trial period' : this.title;\n }\n\n /**\n * Check if subscription is Individual\n * Subscription is individual when user have only one product and only work tank\n */\n isIndividual(): boolean {\n return this.type === SubscriptionTypeEnum.INDIVIDUAL;\n }\n\n /**\n * Check if subscription is Investor\n * Subscription is investor when user have property tank product and max count of properties is 2\n */\n isInvestor(): boolean {\n return this.type === SubscriptionTypeEnum.INVESTOR;\n }\n\n /**\n * Check if subscription is Investor Plus\n * Subscription is investor when user have property tank product and max count of properties more than 2\n */\n isInvestorPlus(): boolean {\n return this.type === SubscriptionTypeEnum.INVESTOR_PLUS;\n }\n\n /**\n * Check if trial expired\n */\n isTrialExpired(): boolean {\n return this.daysRemain && this.daysRemain <= 0;\n }\n\n isTrialExpiring(): boolean {\n return this.daysRemain > 0 && this.daysRemain <= this.lastTrialDays;\n }\n\n isRenewable(): boolean {\n return !this.isTrial && this.isActive;\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 propertiesItem(): 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) => {\n return subscriptionItem.price.product.role.includes(UserRolesEnum.PROPERTY_TANK);\n });\n }\n\n hasWorkTank() {\n return !!this.items.find((subscriptionItem: ServiceSubscriptionItem) => {\n return subscriptionItem.price.product.role.includes(UserRolesEnum.WORK_TANK);\n });\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","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/address';\nimport { USER_WORK_POSITION } from './user-work-position.const';\nimport { ClientDetails } from '../client/client-details';\nimport { EmployeeDetails } from '../employee/employee-details';\nimport { Type } from 'class-transformer';\nimport { Phone } from '../phone/phone';\nimport { ServiceSubscription } from '../service-subscription/service-subscription';\nimport { ServiceSubscriptionItem } from '../service-subscription/service-subscription-item';\nimport { Photoable } from '../../interfaces/photoable';\n\nexport class User extends BaseUser implements Photoable {\n @Type(() => ServiceSubscription)\n subscriptions: ServiceSubscription[];\n\n @Type(() => ClientDetails)\n clientDetails: ClientDetails;\n\n @Type(() => EmployeeDetails)\n employeeDetails: EmployeeDetails;\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 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 hasRole(role: UserRolesEnum): boolean {\n return this.roles.includes(role);\n }\n\n isOnboarding(): boolean {\n return this.status === UserStatusEnum.ON_BOARDING;\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 /**\n * Get user's photo link\n */\n getPhoto(): string {\n return this.photo;\n }\n\n /**\n * get user's initials\n */\n getInitials(): string {\n return `${this.firstName[0].toUpperCase()}${this.lastName[0].toUpperCase()}`;\n }\n}\n\n","import { PropertySubscription as PropertySubscriptionBase } from '../../db/Models/property/property-subscription';\nimport { Type } from 'class-transformer';\nimport { User } from '../user/user';\n\nexport class PropertySubscription extends PropertySubscriptionBase {\n @Type(() => Date)\n createdAt: Date;\n\n @Type(() => User)\n user: User;\n}\n","import { User } from '../user/user';\nimport { Property } from './property';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyCategory extends AbstractModel {\n id?: number;\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 { PropertyCategory as PropertyCategoryBase } from '../../db/Models/property/property-category';\n\nexport class PropertyCategory extends PropertyCategoryBase {\n\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.name === 'Owner Occupied';\n }\n\n isVacantLand(): boolean {\n return this.name === 'Vacant Land';\n }\n}\n","import { Property } from './property';\nimport { PropertyDocument } from '../document/property-document';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyValuation extends AbstractModel {\n id?: number;\n date?: Date;\n marketValue?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n document?: PropertyDocument;\n}\n","import { Property } from '../property/property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\nimport {IDocument} from '../../../interfaces/document.interface';\nimport {Documentable} from '../../../interfaces/documentable.interface';\n\nexport class PropertyDocument extends AbstractModel implements IDocument {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n createdBy?: User;\n\n getApiUrlPrefix(): string {\n return '';\n }\n\n getEntity(): Documentable {\n return undefined;\n }\n}\n","// @TODO this enum should come from backend\r\n/**\r\n * Enum with asset types\r\n */\r\nexport enum AssetTypeEnum {\r\n RECEIPTS = 'receipts',\r\n DOCUMENTS = 'documents',\r\n MESSAGE = 'message'\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","import { PropertyDocument as PropertyDocumentBase } from '../../db/Models/document/property-document';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { IDocument } from '../../interfaces/document.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\nimport { Documentable } from '../../interfaces/documentable.interface';\nimport { Property } from './property';\n\nexport class PropertyDocument extends PropertyDocumentBase implements IAsset, IDocument {\n type: AssetTypeEnum = AssetTypeEnum.DOCUMENTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.PROPERTIES;\n property: Property;\n\n getApiUrlPrefix(): string {\n return '';\n }\n\n getEntity(): Documentable {\n return this.property;\n }\n}\n","import { PropertyValuation as PropertyValuationBase } from '../../db/Models/property/property-valuation';\nimport { Exclude, Type } from 'class-transformer';\nimport { PropertyDocument } from './property-document';\nimport { FinancialYear } from '../financial-year/financial-year';\n\nexport class PropertyValuation extends PropertyValuationBase {\n @Type(() => Date)\n date: Date;\n\n @Type(() => PropertyDocument)\n document: PropertyDocument;\n\n // could be File when just added new image\n @Exclude()\n documentFile: File;\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","import { Property } from './property';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyForecast extends AbstractModel {\n id?: number;\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}\n","import { PropertyForecast as PropertyForecastBase } from '../../db/Models/property/property-forecast';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { Transform } from 'class-transformer';\n\nexport class PropertyForecast extends PropertyForecastBase {\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 /**\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","import { Property } from './property';\nimport { PropertyCategory } from './property-category';\nimport { PropertyValuation } from './property-valuation';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyCategoryMovement extends AbstractModel {\n id?: number;\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 { 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';\n\nexport class PropertyCategoryMovement extends PropertyCategoryMovementBase {\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","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","export enum PropertyCategoryListEnum {\n\tOWNER_OCCUPIED = 3,\n\tVACANT_LAND = 5,\n}\n","export enum TaxExemptionMetadataEnum {\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 PropertySaleTaxExemptionMetadata\n} from '../../../models/property/property-sale/property-sale-tax-exemption-metadata';\nimport {TaxExemptionMetadataEnum} from '../../../db/Enums/property/property-sale/tax-exemption-metadata.enum';\n\nexport class PropertySaleTaxExemptionMetadataCollection extends Collection<PropertySaleTaxExemptionMetadata> {\n getPPRDays(): number {\n return this.getByMetadataId(TaxExemptionMetadataEnum.PPR_DAYS)?.value ?? 0;\n }\n\n getMarketValue(): number {\n return this.getByMetadataId(TaxExemptionMetadataEnum.MARKET_VALUE)?.value ?? 0;\n }\n\n getClaimPercent(): number {\n return this.getByMetadataId(TaxExemptionMetadataEnum.CLAIM_PERCENT)?.value ?? 100;\n }\n\n getByMetadataId(id: number): PropertySaleTaxExemptionMetadata {\n return this.items.find(\n (metadata: PropertySaleTaxExemptionMetadata) => metadata.metadata.id === id\n );\n }\n}\n","import {Property as PropertyBase} from '../../db/Models/property/property';\nimport {Documentable} from '../../interfaces/documentable.interface';\nimport {PropertyShare} from '../../db/Models/property/property-share';\nimport {PropertySubscription} from './property-subscription';\nimport {Exclude, Type} from 'class-transformer';\nimport {Photoable} from '../../interfaces/photoable';\nimport {Address} from '../address/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/user';\nimport {FinancialYear} from '../financial-year/financial-year';\nimport {TaxExemptionEnum} from '../../db/Enums/property/property-sale/tax-exemption.enum';\nimport {PropertyCategoryListEnum} from '../../db/Enums/property/property-category-list.enum';\nimport * as moment from 'moment';\nimport {PropertySale} from './property-sale/property-sale';\nimport {unitOfTime} from 'moment';\nimport {\n PropertySaleTaxExemptionMetadataCollection\n} from '../../collections/property/property-sale/property-sale-tax-exemption-metadata.collection';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\nimport { DepreciationCollection } from '../../collections/depreciation.collection';\n\n/**\n * propertySale docs - https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4209508353/Property+Sold+button\n */\nexport class Property extends PropertyBase implements Photoable, Documentable {\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(() => 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 // 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 /**\n * Get initials of property. Required by Photoable interface\n */\n getInitials(): string {\n return this.name.split(' ')[1].slice(0, 2);\n }\n\n /**\n * Get property photo. Required by Photoable interface\n */\n getPhoto(): string {\n return this.photo;\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 firstForecastYear(): number {\n return this.forecasts.reduce((min: number, forecast: PropertyForecast): number => {\n return min > forecast.financialYear ? forecast.financialYear : min;\n }, 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 /**\n * exact claim including share percent\n */\n get shareClaimPercent(): number {\n return this.sharePercent * this.claimPercent / 100;\n }\n\n get actualValuation(): PropertyValuation {\n return this.valuations.reduce((maxDateValuation: PropertyValuation, valuation: PropertyValuation) => {\n return maxDateValuation.date > valuation.date ? maxDateValuation : valuation;\n }, this.valuations[0]);\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 PropertySaleTaxExemptionMetadataCollection(sale.taxExemptionMetadata).getMarketValue();\n if (marketValue) {\n return marketValue;\n }\n\n return this.purchasePrice + this.capitalCostsTotalAmount + sale.holdingCosts + sale.structuralImprovementsWDV - sale.buildingAtCostClaimed;\n }\n\n /**\n * gross capital gain tax: sale costs - cost base\n */\n calculateCGT(sale: PropertySale): number {\n return (sale.price - sale.saleCostsTotalAmount - this.calculateCostBase(sale)) * this.shareRatio - sale.capitalLoss;\n }\n\n /**\n * net capital gain tax (includes tax exemptions)\n */\n calculateNetCGT(sale: PropertySale): number {\n return this.getCGTExemptionRatio(sale) * sale.grossCGT;\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 /**\n * tax exemption can reduce cgt from 100% to less (up to zero)\n */\n getCGTExemptionRatio(sale: PropertySale): number {\n const metadata: PropertySaleTaxExemptionMetadataCollection = new PropertySaleTaxExemptionMetadataCollection(sale.taxExemptionMetadata);\n\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 // investment property become main residence (exemption for main residence ownership duration)\n case TaxExemptionEnum.INVESTMENT_TO_PPR:\n const ownershipDays = this.getOwnershipDuration(sale);\n\n return (ownershipDays - metadata.getPPRDays()) / ownershipDays;\n // main residence become investment (exemption for home office percent usage)\n case TaxExemptionEnum.PPR_TO_INVESTMENT:\n // 1 year CGT discount can still apply (on the income producing % if used for 12 months or more)\n const ratio: number = this.isOneYearExemptionApplicable(sale) ? 0.5 : 1;\n return metadata.getClaimPercent() / 100 * ratio;\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 isOneYearExemptionApplicable(sale: PropertySale): boolean {\n return sale.grossCGT > 0 && this.getOwnershipDuration(sale, 'years') > 0;\n }\n\n /**\n * ownership duration from purchase till sale\n */\n getOwnershipDuration(sale: PropertySale, unitOfTime: unitOfTime.Diff = 'days'): number {\n return moment(sale.contractDate).diff(moment(this.contractDate), unitOfTime);\n }\n\n getTaxPosition(transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n return transactions.cashPosition - Math.abs(depreciations.claimAmount);\n }\n}\n","import { Transaction } from './transaction';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionReceipt extends AbstractModel {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n transaction?: Transaction;\n}\n","import { TransactionReceipt as TransactionReceiptBase } from '../../db/Models/transaction/transaction-receipt';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\n\nexport class TransactionReceipt extends TransactionReceiptBase implements IAsset {\n type: AssetTypeEnum = AssetTypeEnum.RECEIPTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.TRANSACTIONS;\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-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class IncomeSource extends AbstractModel {\n id?: number;\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","export enum IncomeSourceTypeEnum {\n WORK = 1,\n SOLE = 2,\n OTHER = 3,\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 id?: number;\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 { SalaryForecast as SalaryForecastBase } from '../../db/Models/incomeSource/salary-forecast';\nimport { IncomeSource } from './income-source';\nimport { IIncomeSourceForecast } from '../../interfaces/income-source-forecast.interface';\nimport { Expose, Transform, Type } from 'class-transformer';\n\nexport class SalaryForecast extends SalaryForecastBase implements IIncomeSourceForecast {\n @Transform(({obj}) => obj.netPay + obj.tax)\n @Expose() grossAmount: number;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\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 id?: number;\n incomeSource?: IncomeSource;\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/income-source-forecast.interface\";\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","import { IncomeSource } from './income-source';\nimport { IncomeSourceType } from './income-source-type';\nimport {AbstractModel} from '../abstract-model';\n\nexport class IncomeSourceForecast extends AbstractModel {\n id?: number;\n financialYear?: number;\n amount?: number;\n tax?: number;\n taxInstalments?: number;\n frankingCredits?: number;\n incomeSource?: IncomeSource;\n incomeSourceType?: IncomeSourceType;\n}\n","export enum SalaryForecastFrequencyEnum {\n\tANNUAL = 1,\n\tMONTHLY = 12,\n\tFORTNIGHTLY = 26,\n\tWEEKLY = 52,\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 id?: number;\n name?: string;\n taxReturnItem?: TaxReturnItem;\n incomeSourceForecasts?: IncomeSourceForecast[];\n}\n","export enum IncomeSourceTypeListWorkEnum {\n BONUSES = 1,\n DIRECTOR_FEES = 2,\n DIVIDENDS = 3,\n INTEREST = 4,\n PENSIONS_AND_ALLOWANCES = 5,\n SUPERANNUATION = 8,\n ATTRIBUTED_P_S_I = 11,\n}\n","export enum IncomeSourceTypeListOtherEnum {\n PSI = 6,\n SOLE_TRADER = 7,\n PARTNERSHIPS_AND_TRUSTS = 9,\n OTHER_INCOME = 10,\n}\n","import { IncomeSourceType as IncomeSourceTypeBase } from '../../db/Models/incomeSource/income-source-type';\nimport { IncomeSourceTypeListWorkEnum } from '../../db/Enums/income-source-type-list-work.enum';\nimport { IncomeSourceTypeListOtherEnum } from '../../db/Enums/income-source-type-list-other.enum';\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source-type.enum';\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 isSole(): boolean {\n // @TODO use IncomeSourceTypeListSoleEnum when sole tank ready\n return !!IncomeSourceTypeListOtherEnum[this.id];\n }\n\n get type(): IncomeSourceTypeEnum {\n switch (true) {\n case this.isWork():\n return IncomeSourceTypeEnum.WORK;\n case this.isSole():\n return IncomeSourceTypeEnum.SOLE;\n default:\n return IncomeSourceTypeEnum.OTHER;\n }\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/income-source-forecast.interface';\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: number = 0;\n frequency: SalaryForecastFrequencyEnum = SalaryForecastFrequencyEnum.ANNUAL;\n isTaxFree: boolean = 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","import { IncomeSource as IncomeSourceBase } from '../../db/Models/incomeSource/income-source';\r\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source-type.enum';\r\nimport { IIncomeSourceForecast } from '../../interfaces/income-source-forecast.interface';\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/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 isSalaryIncome(): boolean {\r\n return !!this.salaryForecasts.length;\r\n // @TODO Vik: old code\r\n // return this.type === IncomeSourceTypeEnum.SALARY;\r\n }\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 /**\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 { Transaction } from './transaction';\nimport { ChartAccountsMetadata } from '../chart-accounts/chart-accounts-metadata';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionMetadata extends AbstractModel {\n value?: string;\n id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n transaction?: Transaction;\n chartAccountsMetadata?: ChartAccountsMetadata;\n}\n","import { TransactionMetadata as TransactionMetadataBase } from '../../db/Models/transaction/transaction-metadata';\nimport { Type } from 'class-transformer';\nimport { ChartAccountsMetadata } from '../chart-accounts/chart-accounts-metadata';\n\nexport class TransactionMetadata extends TransactionMetadataBase {\n @Type(() => ChartAccountsMetadata)\n metadata: ChartAccountsMetadata;\n}\n","import { LoanTypeEnum } from '../../Enums/loan-type.enum';\nimport { LoanInterestTypeEnum } from '../../Enums/loan-interest-type.enum';\nimport { LoanRepaymentFrequencyEnum } from '../../Enums/loan-repayment-frequency.enum';\nimport { LoanRepaymentTypeEnum } from '../../Enums/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 {AbstractModel} from '../abstract-model';\n\nexport class Loan extends AbstractModel {\n id?: number;\n amount?: number;\n availableRedraw?: number;\n type?: LoanTypeEnum;\n interestType?: LoanInterestTypeEnum;\n interestRate?: number;\n commencementDate?: Date;\n term?: number;\n repaymentAmount?: number;\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","export enum LoanRepaymentTypeEnum {\n INTEREST_ONLY = 1,\n PRINCIPAL_AND_INTEREST = 2,\n}\n","export enum LoanVehicleTypeEnum {\n AUTO_LOAN = 6,\n\tCHATTEL_MORTGAGE = 9,\n\tCOMMERCIAL_HIRE_PURCHASE = 10,\n}\n","import { Type } from 'class-transformer';\n\n// @Todo no base model from backend list\n/**\n * Loan payment class\n */\nexport class LoanPayment {\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","import { LoanPayoutTypeEnum } from '../../Enums/loan-payout-type.enum';\nimport { Loan } from './loan';\nimport {AbstractModel} from '../abstract-model';\n\nexport class LoanPayout extends AbstractModel {\n id?: number;\n type?: LoanPayoutTypeEnum;\n date?: Date;\n payoutAmount?: number;\n fees?: number;\n createdAt?: Date;\n updatedAt?: Date;\n loan?: Loan;\n}\n","export enum LoanPayoutTypeEnum {\n\tREFINANCE = 1,\n\tPAYOUT = 2,\n}","import { LoanPayout as LoanPayoutBase } from '../../db/Models/loan/loan-payout';\nimport { LoanPayoutTypeEnum } from '../../db/Enums/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","import { Loan as LoanBase } from '../../db/Models/loan/loan';\nimport { LoanRepaymentTypeEnum } from '../../db/Enums/loan-repayment-type.enum';\nimport { LoanVehicleTypeEnum } from '../../db/Enums/loan-vehicle-type.enum';\nimport { Type } from 'class-transformer';\nimport { LoanPayment } from './loan-payment';\nimport { LoanPayout } from './loan-payout';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport last from 'lodash/last';\n\nexport class Loan extends LoanBase {\n @Type(() => LoanPayment)\n payments: LoanPayment[];\n\n @Type(() => Date)\n commencementDate: Date;\n\n @Type(() => LoanPayout)\n payout: LoanPayout;\n\n repaymentType: LoanRepaymentTypeEnum = LoanRepaymentTypeEnum.PRINCIPAL_AND_INTEREST;\n currentBalance: number;\n\n /**\n * Check if loan type is related to LoanVehicleTypeEnum\n */\n isVehicle(): boolean {\n return 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","import { BankTransaction } from '../bank/bank-transaction';\nimport { Transaction } from './transaction';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionAllocation extends AbstractModel {\n id?: number;\n amount?: number;\n bankTransaction?: BankTransaction;\n transaction?: Transaction;\n}\n","import { TransactionAllocation as TransactionAllocationBase } from '../../db/Models/transaction/transaction-allocation';\nimport { BankTransaction } from '../bank/bank-transaction';\nimport { Transaction } from './transaction';\nimport { plainToClass, Type } 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","/**\n * Enum with income amount types (Net or Gross)\n */\nexport enum IncomeAmountTypeEnum {\n NET,\n GROSS\n}\n","import { Transaction as TransactionBase } from '../../db/Models/transaction/transaction';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { ChartAccountsMetadataListEnum } from '../../db/Enums/chart-accounts-metadata-list.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 {Exclude, plainToClass, Transform, Type} from 'class-transformer';\nimport { Property } from '../property/property';\nimport { TransactionReceipt } from './transaction-receipt';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { IncomeSource } from '../income-source/income-source';\nimport { TransactionMetadata } from './transaction-metadata';\nimport { Loan } from '../loan/loan';\nimport { TransactionAllocation } from './transaction-allocation';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../chart-accounts/chart-accounts-categories.const';\nimport { IncomeAmountTypeEnum } from './income-amount-type.enum';\nimport { IReceipt } from '../../interfaces/receipt.interface';\nimport { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\nimport { Depreciation } from '../depreciation/depreciation';\nimport { Expense } from '../../interfaces/expense.interface';\n\n// @TODO refactor with baseModel in constructor\nexport class Transaction extends TransactionBase implements Expense, IReceipt {\n // list of child transactions (fees)\n @Type(() => Transaction)\n transactions: Transaction[] = [];\n\n @Type(() => Property)\n property: Property;\n\n @Type(() => TransactionReceipt)\n receipt: TransactionReceipt;\n\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n @Type(() => TransactionMetadata)\n metadata: TransactionMetadata[] = [];\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 tax: number = 0;\n operation: TransactionOperationEnum = TransactionOperationEnum.FIND_AND_MATCH;\n allocatedAmount: number;\n unallocatedAmount: number;\n isSelected: boolean;\n claimPercent: number = 100;\n amount: number = 0;\n\n isDebit(): boolean {\n return this.type === TransactionTypeEnum.DEBIT;\n }\n\n isCredit(): boolean {\n return this.type === TransactionTypeEnum.CREDIT;\n }\n\n isIncome(): boolean {\n if (!this.chartAccounts) {\n return this.isCredit();\n }\n\n return CHART_ACCOUNTS_CATEGORIES.income.includes(this.chartAccounts.category);\n }\n\n isExpense(): boolean {\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 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 * Check if transaction has 'Klms travelled for work' chart accounts category\n */\n get isKlmsChartAccountsCategory(): boolean {\n return this.chartAccounts.id === ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK;\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 /**\n * Get net amount (clean amount after all deductions)\n */\n getNetAmount(): number {\n // @TODO fix hack while transactions refactoring (use class-transformer)\n return +(Math.round(this.getIncomeAmountByType(IncomeAmountTypeEnum.NET) * 100) / 100).toFixed(2);\n }\n\n /**\n * Get gross income amount\n */\n getGrossIncome(): number {\n // @TODO fix hack while transactions refactoring (use class-transformer)\n return +(Math.round(this.getIncomeAmountByType(IncomeAmountTypeEnum.GROSS) * 100) / 100).toFixed(2);\n }\n\n get taxFreeComponent(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.TAX_FREE_COMPONENT);\n }\n\n get frankingCredit(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.FRANKING_CREDIT);\n }\n\n get eligibleForReduction(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.ELIGIBLE_FOR_REDUCTION);\n }\n\n get untaxedElement(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.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 get debit(): number {\n return this.isDebit() ? Math.abs(this.amount) : 0;\n }\n\n get credit(): number {\n return this.isCredit() ? Math.abs(this.amount) : 0;\n }\n\n /**\n * Get value of transaction metadata field\n * @param field for which value should be returned\n */\n private getMetadataFieldValue(field: ChartAccountsMetadataListEnum): number {\n return +this.metadata.find((transactionMetadata: TransactionMetadata): boolean => {\n return transactionMetadata.chartAccountsMetadata.id === field;\n })?.value || 0;\n }\n\n /**\n * Returns Net or Gross income amount based on provided income type\n * @param incomeType by which amount should be returned\n */\n private getIncomeAmountByType(incomeType: IncomeAmountTypeEnum): number {\n // modifier that determines whether the values of the transaction fields will be added or subtracted\n const modifier: number = incomeType === IncomeAmountTypeEnum.GROSS ? 1 : -1;\n\n switch (true) {\n case this.isPropertyTank():\n return this.amount +\n (this.transactions\n .reduce((sum: number, transaction: Transaction): number => sum + Math.abs(transaction.amount), 0) * modifier);\n case this.isWorkTank():\n return this.amount + ((this.tax + this.frankingCredit - this.taxFreeComponent - this.eligibleForReduction) * modifier);\n default:\n return this.amount || 0;\n }\n }\n\n isInterest(): boolean {\n return this.chartAccounts.id === ChartAccountsListEnum.INTEREST_ON_LOAN;\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: this.amount,\n chartAccounts: this.chartAccounts,\n description: this.description,\n type: DepreciationTypeEnum.PLANT_EQUIPMENT,\n claimPercent: this.claimPercent,\n property: this.property,\n calculation: this.property ? this.property.depreciationCalculation : DepreciationCalculationEnum.PRIME_COST\n });\n }\n\n /**\n * Check if transaction is completely allocated\n */\n isAllocated(allocations: TransactionAllocationCollection): boolean {\n return this.getNetAmount() === this.getAllocatedAmount(allocations);\n }\n\n /**\n * Get transaction allocated amount\n */\n getAllocatedAmount(allocations: TransactionAllocationCollection): number {\n return allocations.getByTransactionsIds([this.id]).amount;\n }\n\n /**\n * Get transaction unallocated amount\n */\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return this.getNetAmount() - this.getAllocatedAmount(allocations);\n }\n}\n","import { BankTransaction as BankTransactionBase } from '../../db/Models/bank/bank-transaction';\nimport { BankTransactionTypeEnum } from '../../db/Enums/bank-transaction-type.enum';\nimport { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { plainToClass, Type } from 'class-transformer';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { Transaction } from '../transaction/transaction';\nimport { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\n\nexport class BankTransaction extends BankTransactionBase {\n // allocated money amount for bank transaction\n allocatedAmount: number = 0;\n unallocatedAmount: number = 0;\n\n operation: TransactionOperationEnum;\n\n @Type(() => Date)\n date: Date;\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(): Transaction {\n return plainToClass(Transaction, {\n amount: +this.amount.toFixed(2),\n description: this.description,\n date: this.date,\n source: TransactionSourceEnum.BANK_TRANSACTION,\n operation: this.operation,\n type: this.type,\n });\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 { 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 } from '../../db/Enums/chart-accounts-heading-vehicle-list.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { DepreciationCapitalProject } from './depreciation-capital-project';\nimport { DepreciationForecast } from './depreciation-forecast';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { BankTransaction } from '../bank/bank-transaction';\nimport { IReceipt } from '../../interfaces/receipt.interface';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { plainToClass, Transform, Type } from 'class-transformer';\nimport { Transaction } from '../transaction/transaction';\nimport { Expense } from '../../interfaces/expense.interface';\nimport {DepreciationReceipt} from './depreciation-receipt';\n\nexport class Depreciation extends DepreciationBase implements Expense, IReceipt {\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 receipt: DepreciationReceipt;\n\n /**\n * @TODO remove after ? signs removed from db models\n */\n amount: number = 0;\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 /**\n * check if depreciation should be displayed in written off category\n * details in project documentation\n * @TODO new FinancialYear(this.writeOffDate) === new FinancialYear()\n */\n isWrittenOff(): boolean {\n return this.isAsset && this.writeOffDate && new FinancialYear(this.writeOffDate).year === this.financialYear;\n }\n\n /**\n * Check if depreciation is Plant & Equipment\n */\n isPlantEquipment(): boolean {\n return this.isAsset() && !this.isWrittenOff() && !this.isLowValuePool();\n }\n\n /**\n * check if depreciation should be displayed in low value pool\n * details in project documentation\n * @TODO new FinancialYear(this.writeOffDate) === new FinancialYear()\n */\n isLowValuePool(): boolean {\n return this.isAsset &&\n this.calculation === DepreciationCalculationEnum.DIMINISHING &&\n this.amount > Depreciation.WRITTEN_OFF_THRESHOLD &&\n this.amount <= Depreciation.LOW_VALUE_POOL_THRESHOLD;\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 /**\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((forecast: DepreciationForecast): boolean => {\n return 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 => {\n return forecast.financialYear === year;\n });\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, {amount: this.currentYearForecast.amount})\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","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 {\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.isPlantEquipment():\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) => {\n return plainToClass(DepreciationReportItem, depreciation);\n })\n );\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 { Property } from '../../property/property';\nimport { ChartAccounts } from '../../chart-accounts/chart-accounts';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../chart-accounts/chart-accounts-categories.const';\n\n/**\n * Class with property transactions report entities\n */\nexport class PropertyReportItem {\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 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 +(this.amount * (this.claimPercent / 100)).toFixed(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 { 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.amount);\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: CollectionDictionary<TransactionCollection> = new CollectionDictionary<TransactionCollection>(\n transactions.getByPropertiesIds([property.id]),\n 'chartAccounts.id'\n );\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","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 { 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: CollectionDictionary<DepreciationCollection> = new CollectionDictionary<DepreciationCollection>(\n depreciations,\n 'type'\n );\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","/**\n * Vehicle expense for logbook section\n */\nexport class VehicleExpense {\n description: string;\n amount: number;\n claimPercent: number;\n\n constructor(\n amount: number,\n claimPercent: number,\n description: string\n ) {\n this.amount = amount;\n this.claimPercent = claimPercent;\n this.description = description;\n }\n\n getClaimAmount(): number {\n return +(this.amount * (this.claimPercent / 100)).toFixed(2);\n }\n}\n","import { Collection } from '../../collection';\nimport { VehicleExpense } from '../../../models/report/vehicle-expense/vehicle-expense';\nimport { TransactionCollection } from '../../transaction/transaction.collection';\nimport { CollectionDictionary } from '../../collection-dictionary';\nimport { DepreciationCollection } from '../../depreciation.collection';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { VehicleClaim } from '../../../models/logbook/vehicle-claim';\n\nexport class VehicleExpenseCollection extends Collection<VehicleExpense> {\n constructor(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n vehicleClaim: VehicleClaim\n ) {\n super();\n this.setItems(transactions, depreciations, vehicleClaim);\n }\n\n private setItems(transactions: TransactionCollection, depreciations: DepreciationCollection, vehicleClaim: VehicleClaim): void {\n this.items = [];\n\n const transactionsByChartAccounts: CollectionDictionary<TransactionCollection> = new CollectionDictionary(\n transactions,\n 'chartAccounts.name'\n );\n\n const transactionExpenses: VehicleExpense[] = transactionsByChartAccounts.keys.map((chartAccountsName: string) => {\n return new VehicleExpense(\n transactionsByChartAccounts.get(chartAccountsName).amount,\n vehicleClaim.workUsage,\n chartAccountsName\n );\n });\n\n // group all depreciations into one expense item\n const depreciationExpense: VehicleExpense = new VehicleExpense(\n depreciations.getCurrentYearForecastAmount(),\n vehicleClaim.workUsage,\n 'Depreciation'\n );\n\n this.items.push(...[depreciationExpense, ...transactionExpenses]);\n }\n}\n","import { Collection } from '../collection';\nimport { ServiceSubscription } from '../../models/service-subscription/service-subscription';\n\nexport class ServiceSubscriptionCollection extends Collection<ServiceSubscription> {\n get individual(): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.isIndividual())[0];\n }\n\n get investor(): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.isInvestor())[0];\n }\n\n get investorPlus(): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.isInvestorPlus())[0];\n }\n\n getRecommended(properties: number): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.propertyQuantity === properties)[0] ?? this.investor;\n }\n}\n","import { Collection } from '../collection';\nimport { ReportItem } from '../../models/tax-summary/report-item';\nimport { TaxReturnCategoryListEnum } from '../../db/Enums/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 let result: ReportItem[] = [];\n\n for (let reportItem of this.items) {\n if (reportItem.details.length && 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 /**\n * Recursively find report item by Tax Return Category ID\n */\n findByCategory(categoryId: TaxReturnCategoryListEnum): ReportItem {\n let result: ReportItem;\n\n for (let 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\n */\n getByCategories(categories: TaxReturnCategoryListEnum[]): ReportItemCollection {\n return this.create(\n compact(categories.map((category: TaxReturnCategoryListEnum) => this.findByCategory(category)))\n );\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.getByCategories(categories).getBySection(section).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 let result: ReportItemDetails[] = [];\n\n for (let 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","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\n WORK_EXPENSES = 7,\n\n GROSS_RENT = 8,\n\n OTHER_RENTAL_DEDUCTIONS = 12,\n\n INTEREST_DEDUCTIONS = 9,\n\n CAPITAL_WORKS = 10,\n DEPRECIATION = 11,\n\n GROSS_INTEREST = 5,\n DIVIDENDS = 6,\n SHARE_SCHEMES = 35,\n PARTNERSHIPS_TRUSTS = 13,\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\n TAX_CREDITS = 23,\n\n OTHER_DEDUCTIONS = 18,\n\n TAX_OFFSETS = 27,\n\n BORROWING_EXPENSES = 29,\n GROSS_TAX_PAYABLE = 19,\n TAX_ON_TAXABLE_INCOME = 20,\n MEDICARE = 21,\n STUDENT_LOAN_REPAYMENT = 22,\n TAX_WITHHELD = 24,\n TAX_INSTALMENTS = 25,\n FRANKING_CREDITS = 26,\n TAX_PAYABLE = 28,\n}\n","import { TaxReturnCategoryListEnum } from '../../db/Enums/tax-return-category-list.enum';\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 ],\n expenses: [\n TaxReturnCategoryListEnum.WORK_EXPENSES\n ],\n interest: [\n TaxReturnCategoryListEnum.GROSS_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 TaxReturnCategoryListEnum.DEPRECIATION\n ]\n },\n other: {\n income: [\n TaxReturnCategoryListEnum.GROSS_INTEREST,\n TaxReturnCategoryListEnum.DIVIDENDS,\n TaxReturnCategoryListEnum.SHARE_SCHEMES,\n TaxReturnCategoryListEnum.PARTNERSHIPS_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 ]\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) => {\n return taxReview.isInProgress() ||\n taxReview.isWaitingForClient() ||\n taxReview.isWaitingForApproval() ||\n taxReview.isApproved();\n });\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 { TransactionAllocation } from '../../models/transaction/transaction-allocation';\nimport { BankTransactionCollection } from '../bank-transaction.collection';\nimport { CollectionDictionary } from '../collection-dictionary';\nimport { Transaction } from '../../models/transaction/transaction';\nimport { BankTransaction } from '../../models/bank/bank-transaction';\n\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: CollectionDictionary<BankTransactionCollection> = new CollectionDictionary(bankTransactions, 'bankAccount.id');\n // Create empty dictionary of transaction allocations\n const allocationsByBankAccount: CollectionDictionary<TransactionAllocationCollection> = new CollectionDictionary(new TransactionAllocationCollection([]));\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 { 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 { Type } from 'class-transformer';\nimport { FinancialYear } from '../financial-year/financial-year';\n\n/**\n * Class contains traveled kilometers and work usage percent in 12 weeks date range\n */\nexport class LogbookPeriod {\n @Type(() => Date)\n from: Date;\n\n @Type(() => Date)\n to: Date;\n\n kilometers: number;\n workUsage: number;\n\n isEndOfYear(): boolean {\n return this.to === new FinancialYear().endDate;\n }\n}\n","import { VehicleLogbook } from '../models/logbook/vehicle-logbook';\nimport { FinancialYear } from '../models/financial-year/financial-year';\nimport { LogbookPeriod } from '../models/logbook/logbook-period';\nimport { plainToClass } from 'class-transformer';\nimport { Collection } from './collection';\n\n/**\n * 12 weeks in milliseconds\n * \"To work out your business-use percentage, you need to keep a logbook and the odometer readings for the logbook period.\n * The logbook period is a minimum continuous period of 12 weeks.\" © Nicole Kelly\n */\nconst LOGBOOK_PERIOD_DURATION = 12 * 7 * 24 * 3600 * 1000;\n\nexport class VehicleLogbookCollection extends Collection<VehicleLogbook> {\n /**\n * Check if we can calculate the best period\n */\n isBestPeriodExist(): boolean {\n if (this.items.length < 2) {\n return false;\n }\n\n return LOGBOOK_PERIOD_DURATION < (this.last.date.getTime() - this.first.date.getTime());\n }\n\n /**\n * Get collection of non-personal logbooks (work-related, sole-related).\n */\n getBusinessLogbooks(): this {\n return this.create(\n this.items.filter((logbook: VehicleLogbook) => logbook.isBusiness())\n );\n }\n\n /**\n * Logbook Period is the best when it has the biggest amount of work kilometers\n * Best period duration is defined as LOGBOOK_PERIOD_DURATION (12 weeks) by the ATO\n */\n getBestPeriod(): LogbookPeriod {\n if (!this.isBestPeriodExist()) {\n return null;\n }\n\n let bestPeriod: LogbookPeriod;\n\n const businessLogbooks: VehicleLogbook[] = this.getBusinessLogbooks().toArray();\n\n for (let i = 0; i < businessLogbooks.length; i ++) {\n const logbook: VehicleLogbook = businessLogbooks[i];\n\n // no sense to check next logbooks because we already get the end of the year\n if (bestPeriod && bestPeriod.isEndOfYear()) {\n break;\n }\n\n const dateRange: {from: Date, to: Date} = this.getPeriodRange(logbook.date);\n\n // get logbooks included in current logbook period\n const logbooksInRange: VehicleLogbookCollection = this.getByDateRange(logbook.date, new Date(logbook.date.getTime() + LOGBOOK_PERIOD_DURATION));\n\n const workUsage: number = logbooksInRange.getWorkUsage();\n\n // compare with previous best period and overwrite if needs\n if (!bestPeriod || workUsage > bestPeriod.workUsage) {\n bestPeriod = plainToClass(LogbookPeriod, {\n from: dateRange.from,\n to: dateRange.to,\n kilometers: logbooksInRange.getBusinessLogbooks().getKlms(),\n workUsage: workUsage\n });\n }\n }\n\n return bestPeriod;\n }\n\n /**\n * Calculate total kilometers traveled\n */\n getKlms(): number {\n return this.items.reduce((sum: number, logbook: VehicleLogbook) => sum + logbook.getKlms(), 0);\n }\n\n /**\n * Calculate work usage (percent of business-related kilometers from total kilometers)\n */\n getWorkUsage(): number {\n const totalKilometers: number = this.getKlms();\n const workKilometers: number = this.getBusinessLogbooks().getKlms();\n\n return Math.round(workKilometers / totalKilometers * 100);\n }\n\n /**\n * Get LOGBOOK_PERIOD_DURATION date range from passed start date\n */\n private getPeriodRange(from: Date): {from: Date, to: Date} {\n // set end date after LOGBOOK_PERIOD_DURATION after start date\n let to: Date = new Date(from.getTime() + LOGBOOK_PERIOD_DURATION);\n\n const financialYear = new FinancialYear();\n\n // set as period last LOGBOOK_PERIOD_DURATION of current year if period end date after end of current year\n if (to > financialYear.endDate) {\n to = financialYear.endDate;\n from = new Date(to.getTime() - LOGBOOK_PERIOD_DURATION);\n }\n\n return {from, to};\n }\n}\n","import { Collection } from './collection';\nimport { Vehicle } from '../models/logbook/vehicle';\nimport { VehicleLogbookCollection } from './vehicle-logbook.collection';\nimport flatten from 'lodash/flatten';\n\nexport class VehicleCollection extends Collection<Vehicle>{\n getLogbooks(): VehicleLogbookCollection {\n return new VehicleLogbookCollection(flatten(this.items.map((vehicle: Vehicle) => vehicle.logbook)));\n }\n}\n","export enum BankAccountStatusEnum {\n\tINACTIVE = 0,\n\tACTIVE = 1,\n}","export enum BankConnectionStatusEnum {\n\tPENDING = 1,\n\tACTIVE = 2,\n\tINVALID = 3,\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}","export enum ChartAccountsHeadingListEnum {\n ETP = 39\n}\n","export enum ChartAccountsHeadingTaxableEnum {\n\tGROSS_INTEREST = 7,\n\tDIVIDENDS = 38,\n\tEMPLOYEE_SHARE_SCHEMES = 42,\n\tPARTNERSHIPS_AND_TRUSTS_INCOME = 43,\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}","export enum ChartAccountsMetadataTypeEnum {\n\tNUMBER = 3,\n\tBOOLEAN = 4,\n}","export enum ChartAccountsTypeEnum {\n\tINCOME = 1,\n\tEXPENSE = 2,\n}","export enum ChatStatusEnum {\n\tACTIVE = 1,\n\tINACTIVE = 2,\n}","export enum ClientDetailsMedicareExemptionEnum {\n\tNO = 0,\n\tHALF = 1,\n\tFULL = 2,\n}","export enum ClientDetailsWorkDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}","export enum ClientDetailsWorkingHolidayMakerEnum {\n\tNO = 0,\n\tVISA417 = 1,\n\tVISA462 = 2,\n}","export enum ClientInviteStatusEnum {\n\tPENDING = 1,\n\tREJECTED = 2,\n}","export enum ClientInviteTypeEnum {\n FROM_CLIENT = 1,\n FROM_EMPLOYEE = 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}","export enum DepreciationWriteOffAmountEnum {\n\tPLANT_EQUIPMENT = 300,\n\tBORROWING_EXPENSES = 100,\n}","export enum IncomeSourceTypeListSoleEnum {\n SOLE_TRADER = 7,\n}\n","export enum InviteStatusEnum {\n\tPENDING = 1,\n\tACCEPTED = 2,\n\tREJECTED = 3,\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}","export enum LoanFrequencyEnum {\n\tANNUAL = 1,\n\tMONTHLY = 12,\n\tFORTNIGHTLY = 26,\n\tWEEKLY = 52,\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}","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 PropertyDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}","export enum PropertyShareAccessEnum {\n\tVIEW = 1,\n\tEDIT = 2,\n}\n","export enum PropertyShareStatusEnum {\n\tPENDING = 1,\n\tAPPROVED = 2,\n\tREJECTED = 3,\n}\n","export enum RegistrationInviteStatusEnum {\n\tPENDING = 1,\n\tACCEPTED = 2,\n}","export enum ServiceNotificationStatusEnum {\n\tSENT = 1,\n\tDELIVERED = 2,\n\tREAD = 3,\n}","export enum ServiceNotificationTypeEnum {\n\tUSER = 1,\n\tSYSTEM = 2,\n}","export enum ServicePaymentStatusEnum {\n\tFAIL = 0,\n\tSUCCESS = 1,\n}","export enum ServicePriceRecurringIntervalEnum {\n\tDAY = 1,\n\tWEEK = 2,\n\tMONTH = 3,\n\tYEAR = 4,\n}","export enum ServicePriceTypeEnum {\n\tONE_TIME = 1,\n\tRECURRING = 2,\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}","export enum SpareDocumentSpareTypeEnum {\n\tDOCUMENT = 1,\n\tRECEIPT = 2,\n}","export enum TaxCalculationMedicareExemptionEnum {\n\tHALF = 1,\n\tFULL = 2,\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}","export enum TaxReturnCategorySectionEnum {\n\tWORK_TANK = 1,\n\tPROPERTY_TANK = 2,\n\tOTHER_INCOME = 3,\n\tSUMMARY = 4,\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","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}","export enum TaxSummarySectionEnum {\n\tWORK_TANK = 1,\n\tPROPERTY_TANK = 2,\n\tOTHER_INCOME = 3,\n\tSUMMARY = 4,\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}","export enum TicketFeedbackEnum {\n\tHAPPY = 1,\n\tUNHAPPY = 2,\n}","export enum TicketStatusEnum {\n\tOPEN = 1,\n\tIN_PROGRESS = 2,\n\tMISSING_INFO = 3,\n\tIN_REVIEW = 4,\n\tCOMPLETED = 5,\n}","export enum TicketTypesEnum {\n\tCLIENT_REQUEST = 1,\n}","export enum UserEventStatusEnum {\n\tNO_NEED_ACTION = 1,\n\tNEED_ACTION = 2,\n\tDONE = 3,\n\tREFUSED = 4,\n\tOUTDATED = 5,\n}","export enum UserEventTypeFrequencyEnum {\n\tDAILY = 1,\n\tWEEKLY = 2,\n\tMONTHLY = 3,\n}","export enum UserEventTypeUserTypeEnum {\n\tREGISTERED = 1000,\n\tPASSWORD_RESET = 1001,\n\tAPP_FEATURES = 1010,\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}","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}","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}","export enum UserWorkingHolidayMakerEnum {\n\tNO = 0,\n\tVISA417 = 1,\n\tVISA462 = 2,\n}","export enum VehicleClaimMethodEnum {\n\tKMS = 1,\n\tLOGBOOK = 2,\n}","export enum VehicleLogbookPurposeEnum {\n\tBUSINESS = 1,\n\tPERSONAL = 2,\n}","/**\n * Account setup item instance is using for account setup checklist\n */\nexport class AccountSetupItem {\n title: string;\n description: string;\n url: string;\n urlFragment: string;\n clientIncomeTypes: string[] = [];\n isCompleted: boolean;\n}\n","import { FinancialDataSystem } from './financial-data-system';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Bank extends AbstractModel {\n name?: string;\n externalId?: string;\n logo?: string;\n id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n financialDataSystem?: FinancialDataSystem;\n}\n","import { Bank as BankBase } from '../../db/Models/bank/bank';\nimport { Photoable } from '../../interfaces/photoable';\n\nexport class Bank extends BankBase implements Photoable {\n getInitials(): string {\n return this.name[0] + this.name[1];\n }\n\n getPhoto(): string {\n if (!this.logo) {\n return null;\n }\n return this.logo.includes('http') ? `${this.logo}` : `${localStorage.getItem('api_uri')}/${this.logo}`;\n }\n}\n","import { BankAccountStatusEnum } from '../../Enums/bank-account-status.enum';\nimport { BankAccountTypeEnum } from '../../Enums/bank-account-type.enum';\nimport { TankTypeEnum } from '../../Enums/tank-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 {AbstractModel} from '../abstract-model';\n\nexport class BankAccount extends AbstractModel {\n id?: number;\n status?: BankAccountStatusEnum;\n accountId?: string;\n type?: BankAccountTypeEnum;\n accountName?: string;\n nickname?: string;\n accountNumber?: string;\n tankType?: TankTypeEnum;\n currentBalance?: number;\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 bankTransactions?: BankTransaction[];\n balances?: BankAccountBalance[];\n loan?: Loan;\n}\n","import { BankAccount } from './bank-account';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankAccountBalance extends AbstractModel {\n financialYear?: number;\n openingBalance?: number;\n closingBalance?: number;\n id?: 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';\n\nexport class BankAccountProperty extends AbstractModel {\n percent?: number;\n id?: number;\n bankAccount?: BankAccount;\n property?: Property;\n}\n","import { BankAccountProperty as BankAccountPropertyBase } from '../../db/Models/bank/bank-account-property';\nimport { Type } from 'class-transformer';\nimport { Property } from '../property/property';\n\nexport class BankAccountProperty extends BankAccountPropertyBase {\n @Type(() => Property)\n property: Property;\n}\n","import { BankConnectionStatusEnum } from '../../Enums/bank-connection-status.enum';\nimport { User } from '../user/user';\nimport { Bank } from './bank';\nimport { BankAccount } from './bank-account';\nimport { BasiqJob } from './basiq-job';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankConnection extends AbstractModel {\n id?: number;\n externalId?: string;\n status?: BankConnectionStatusEnum;\n user?: User;\n bank?: Bank;\n bankAccounts?: BankAccount[];\n basiqJob?: BasiqJob;\n}\n","import { BankConnection } from './bank-connection';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BasiqJob extends AbstractModel {\n id?: number;\n externalId?: string;\n createdAt?: Date;\n updatedAt?: Date;\n bankConnection?: BankConnection;\n}\n","import { BasiqJob as BasiqJobBase } from '../../db/Models/bank/basiq-job';\n\nexport class BasiqJob extends BasiqJobBase {\n}\n","import { BankConnection as BankConnectionBase } from '../../db/Models/bank/bank-connection';\nimport { BasiqJob } from './basiq-job';\nimport { Bank } from './bank';\nimport { Type } from 'class-transformer';\nimport { BankConnectionStatusEnum } from \"../../db/Enums/bank-connection-status.enum\";\n\nexport class BankConnection extends BankConnectionBase {\n @Type(() => BasiqJob)\n basiqJob: BasiqJob;\n\n @Type(() => Bank)\n bank: Bank;\n\n /**\n * Check if status of connection is inactive (invalid)\n */\n isInactive(): boolean {\n return this.status === BankConnectionStatusEnum.INVALID;\n }\n}\n","import { BankAccount as BankAccountBase } from '../../db/Models/bank/bank-account';\nimport { BankAccountTypeEnum } from '../../db/Enums/bank-account-type.enum';\nimport { BankAccountStatusEnum } from '../../db/Enums/bank-account-status.enum';\nimport { Loan } from '../loan/loan';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { BankAccountBalance } from '../../db/Models/bank/bank-account-balance';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { BankAccountProperty } from './bank-account-property';\nimport { BankConnection } from './bank-connection';\nimport { Type } from 'class-transformer';\n\nexport class BankAccount extends BankAccountBase {\n // list of properties related with this bank account\n @Type(() => BankAccountProperty)\n bankAccountProperties: BankAccountProperty[];\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 /**\n * Get current opening balance amount\n */\n getOpeningBalance(): number {\n return this.getCurrentYearBalance()?.openingBalance || 0;\n }\n\n /**\n * Get bank account balance for current financial year\n */\n getCurrentYearBalance(): BankAccountBalance {\n const currentFinYear: number = new FinancialYear().year;\n return this.balances.find((balance: BankAccountBalance): boolean => balance.financialYear === currentFinYear);\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 * @TODO nicole check\n */\n isLoan(): boolean {\n return [BankAccountTypeEnum.MORTGAGE, BankAccountTypeEnum.LOAN].includes(this.type);\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.tankType === TankTypeEnum.WORK;\n }\n\n /**\n * check if bank account related to work tank\n */\n isPropertyTank(): boolean {\n return this.tankType === TankTypeEnum.PROPERTY;\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 /**\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","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 return {\n name: bankAccount.accountName,\n data: Math.abs(bankAccount.currentBalance)\n };\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 return {\n label: bankAccount.accountName,\n value: bankAccount.currentBalance\n };\n })\n }];\n }\n}\n","import { BankAccountTypeEnum } from '../../db/Enums/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.MORTGAGE, value: 'Mortgage Accounts'},\n {key: BankAccountTypeEnum.OFFSET, value: 'Offset'},\n {key: BankAccountTypeEnum.SAVINGS, value: 'Savings Accounts'},\n {key: BankAccountTypeEnum.TRANSACTION, value: 'Transaction Accounts'},\n];\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","/**\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","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) => {\n return +bankTransaction.date.getMonth() === +MonthNumberEnum[key];\n });\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) => {\n return +bankTransaction.date.getMonth() === +MonthNumberEnum[key];\n });\n\n const balanceForMonth: number = bankTransactionsForMonth.reduce((sum: number, bankTransaction: BankTransaction) => {\n if (bankTransaction.isCredit()) {\n return sum += bankTransaction.allocatedAmount;\n } else {\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","/**\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: string = '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","/**\n * access token, needed to access basiq connect ui (https://github.com/basiqio/basiq-connect-ui)\n */\nexport class BasiqToken {\n value: string;\n expiresAt: Date;\n\n constructor(value: string, expiresAt: Date) {\n this.value = value;\n this.expiresAt = expiresAt;\n }\n\n isExpired(): boolean {\n return this.expiresAt < new Date();\n }\n}\n","import {AbstractModel} from '../abstract-model';\n\nexport class BorrowingExpense extends AbstractModel {\n\tid?: number;\n\tname?: string;\n\tdeletedAt?: Date;\n\tcreatedAt?: Date;\n\tupdatedAt?: Date;\n}\n","import { BorrowingExpense as BorrowingExpenseBase } from '../../db/Models/loan/borrowing-expense';\n\nexport class BorrowingExpense extends BorrowingExpenseBase {\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 id?: 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 { BorrowingExpenseLoan as BorrowingExpenseLoanBase} from '../../db/Models/loan/borrowing-expense-loan';\n\nexport class BorrowingExpenseLoan extends BorrowingExpenseLoanBase {\n}\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 { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsDepreciation extends AbstractModel {\n id?: number;\n effectiveYear?: number;\n effectiveLife?: number;\n limit?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts;\n}\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","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 { 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 id?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts;\n}\n","import { ChartAccountsValue as ChartAccountsValueBase } from '../../db/Models/chart-accounts/chart-accounts-value';\n\nexport class ChartAccountsValue extends ChartAccountsValueBase {\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 id?: number;\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 { 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","export enum ChatViewTypeEnum {\n MESSAGES,\n ATTACHMENTS\n}\n","import { Chat } from './chat';\nimport { MessageDocument } from './message-document';\nimport { User } from '../user/user';\nimport { Ticket } from './accountant/ticket';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Message extends AbstractModel {\n content?: string;\n readAt?: Date;\n id?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chat?: Chat;\n documents?: MessageDocument[];\n employee?: User;\n ticket?: Ticket;\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 id?: number;\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 { 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 { Exclude, Type } from 'class-transformer';\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 // temp storage for attached file\r\n @Exclude({ toPlainOnly: true })\r\n file: File;\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\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(() => 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","import {ClientDetails} from './client-details';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ClientIncomeTypes extends AbstractModel {\n salary?: boolean;\n property?: boolean;\n sole?: boolean;\n dividends?: boolean;\n other?: boolean;\n id?: number;\n deletedAt?: Date;\n clientDetails?: ClientDetails;\n}\n","import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../db/Models/user/client-income-types';\n\nexport class ClientIncomeTypes extends ClientIncomeTypesBase {\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","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 {AbstractModel} from '../abstract-model';\n\nexport class ClientInvite extends AbstractModel {\n type?: ClientInviteTypeEnum;\n id?: number;\n status?: ClientInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n employee?: User;\n client?: User;\n firm?: Firm;\n registrationInvite?: RegistrationInvite;\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 id?: number;\n email?: string;\n firstName?: string;\n message?: string;\n status?: RegistrationInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n}\n","import { RegistrationInvite as RegistrationInviteBase } from '../../db/Models/user/registration-invite';\nimport { Photoable } from '../../interfaces/photoable';\n\nexport class RegistrationInvite extends RegistrationInviteBase implements Photoable {\n getInitials(): string {\n return `${this.firstName[0].toUpperCase()}${this.firstName[1]}`;\n }\n\n getPhoto(): string {\n return null;\n }\n}\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/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","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\tid?: number;\n\tdateFrom?: Date;\n\tdateTo?: Date;\n\tfirm?: Firm;\n\tclient?: User;\n\temployee?: User;\n\tsubscription?: ServiceSubscription;\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","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) => {\n return plainToClass(ChartData, {\n name: clientPortfolioReport.category,\n data: clientPortfolioReport.count\n });\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 */\nexport class ClientPortfolioReport {\n category: string;\n count: number;\n marketValue: number;\n loanBalance: number;\n equityPosition: number;\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 DepreciationGroupEnum {\n BUILDING_IMPROVEMENTS,\n PLANT_EQUIPMENT,\n LOW_VALUE_POOL,\n WRITTEN_OFF_ITEMS,\n BORROWING_EXPENSES\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\n constructor(\n label: string,\n description?: string,\n icon?: string,\n children?: DepreciationGroup[]\n ) {\n this.label = label;\n this.description = description;\n this.icon = icon;\n this.children = children;\n }\n\n getClaimAmount(): number {\n return this.children.reduce((sum: number, child: DepreciationGroup): number => sum + child.getClaimAmount(), 0);\n }\n}\n","import { DepreciationGroup } from './depreciation-group';\nimport { Depreciation } from './depreciation';\n\n/**\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","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};\n","import { Depreciation } from './depreciation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DepreciationReceipt extends AbstractModel {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n depreciation?: Depreciation;\n}\n","import { DepreciationReceipt as DepreciationReceiptBase } from '../../db/Models/depreciation/depreciation-receipt';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\n\nexport class DepreciationReceipt extends DepreciationReceiptBase implements IAsset {\n type: AssetTypeEnum = AssetTypeEnum.RECEIPTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.DEPRECIATIONS;\n}\n","import { DocumentFolder } from './document-folder';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Document extends AbstractModel {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n folder?: DocumentFolder;\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","import { Document as DocumentBase } from '../../db/Models/document/document';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\nimport { DocumentFolder } from './document-folder';\nimport { DocumentApiUrlPrefixEnum } from './document-api-url-prefix.enum';\nimport { IDocument } from '../../interfaces/document.interface';\nimport { Documentable } from '../../interfaces/documentable.interface';\n\nexport class Document extends DocumentBase implements IAsset, IDocument {\n file: File;\n type: AssetTypeEnum = AssetTypeEnum.DOCUMENTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.FOLDERS;\n folder: DocumentFolder;\n\n /**\n * Get folder as document parent entity\n */\n getEntity(): Documentable {\n return this.folder;\n }\n\n /**\n * Get API url prefix\n */\n getApiUrlPrefix(): string {\n return DocumentApiUrlPrefixEnum.FOLDERS;\n }\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 { User } from '../user/user';\nimport { Document } from './document';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DocumentFolder extends AbstractModel {\n id?: number;\n name?: string;\n user?: User;\n parent?: DocumentFolder;\n documents?: Document[];\n}\n","import { DocumentFolder as DocumentFolderBase } from '../../db/Models/document/document-folder';\nimport { Documentable } from '../../interfaces/documentable.interface';\nimport { Document } from './document';\nimport { Type } from 'class-transformer';\n\nexport class DocumentFolder extends DocumentFolderBase implements Documentable {\n documentFile: File;\n\n @Type(() => Document)\n documents: Document[];\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\tid?: number;\n\temployee?: User;\n\tfirm?: Firm;\n registrationInvite?: RegistrationInvite;\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 { 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","export enum AppEventTypeEnum {\n CLIENT_MOVEMENT_CLOSED,\n BANK_CONNECTION_ADDED,\n BANK_ACCOUNT_CREATED,\n BANK_ACCOUNT_UPDATED,\n BANK_TRANSACTION_ALLOCATED,\n BASIQ_CONSENT_UPDATED,\n BASIQ_CONNECTION_UPDATED,\n CLIENT_INVITE_ACCEPTED,\n CLIENT_OPEN_CHAT,\n CLIENT_TRANSFER_TO_OTHER_EMPLOYEE,\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_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_SUBSCRIPTION_ADDED,\n PROPERTY_SUBSCRIPTION_DELETED,\n PROPERTY_VALUATION_DOCUMENT_CREATED,\n SERVICE_SUBSCRIPTION_UPDATED,\n TAX_REVIEW_UPDATED,\n TRANSACTION_CREATED,\n TRANSACTION_DELETED,\n TRANSACTION_UPDATED,\n TRANSACTIONS_CREATED,\n USER_UPDATED,\n VEHICLE_CLAIM_UPDATED,\n VEHICLE_CLAIM_CREATED,\n VEHICLE_LOGBOOK_CREATED,\n VEHICLE_LOGBOOK_UPDATED,\n VEHICLE_LOGBOOK_DELETED\n}\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","export const MONTHS: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan'];\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","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","/**\n * Enum with maximum number of payments, depending on the frequency\n */\nexport enum LoanMaxNumberOfPaymentsEnum {\n WEEKLY = 260,\n FORTNIGHTLY = 130,\n MONTHLY = 60,\n}\n","import { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { FinancialYear } from '../financial-year/financial-year';\n\n/**\n * Default vehicle transaction object,\n * which could be used to create transaction with 'Klms travelled for work' chart accounts category\n */\nexport const DEFAULT_VEHICLE_EXPENSE: object = {\n source: TransactionSourceEnum.CASH,\n tankType: TankTypeEnum.WORK,\n type: TransactionTypeEnum.DEBIT,\n taxWithheld: 0,\n description: 'Klm’s method',\n date: new Date(`${new FinancialYear().year}-06-30`),\n chartAccounts: {id: ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK},\n claimPercent: 100\n};\n","import { VehicleLogbookPurposeEnum } from '../../db/Enums/vehicle-logbook-purpose.enum';\n\nexport const WORK_TANK_LOGBOOK_PURPOSE_OPTIONS: {[key: string]: VehicleLogbookPurposeEnum | string}[] = [\n { label: 'Business', value: VehicleLogbookPurposeEnum.BUSINESS },\n { label: 'Personal', value: VehicleLogbookPurposeEnum.PERSONAL }\n];\n","import { User } from '../user/user';\nimport { VehicleLogbook } from './vehicle-logbook';\nimport { TankTypeEnum } from '../../Enums/tank-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Vehicle extends AbstractModel {\n name?: string;\n id?: number;\n user?: User;\n logbook?: VehicleLogbook[];\n tankType?: TankTypeEnum;\n}\n","import { VehicleLogbookPurposeEnum } from '../../Enums/vehicle-logbook-purpose.enum';\nimport { Vehicle } from './vehicle';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class VehicleLogbook extends AbstractModel {\n date?: Date;\n odometerStart?: number;\n odometerEnd?: number;\n purpose?: VehicleLogbookPurposeEnum;\n description?: string;\n id?: number;\n createdAt?: Date;\n updatedAt?: Date;\n vehicle?: Vehicle;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { VehicleLogbook as VehicleLogbookBase } from '../../db/Models/vehicle/vehicle-logbook';\nimport { VehicleLogbookPurposeEnum } from '../../db/Enums/vehicle-logbook-purpose.enum';\nimport { Type } from 'class-transformer';\n\nexport class VehicleLogbook extends VehicleLogbookBase {\n @Type(() => Date)\n date: Date;\n\n /**\n * Get amount of kilometers in this logbook\n */\n getKlms(): number {\n return this.odometerEnd - this.odometerStart;\n }\n\n /**\n * Check if logbook is business-related\n */\n isBusiness(): boolean {\n return this.purpose === VehicleLogbookPurposeEnum.BUSINESS;\n }\n}\n","import { Vehicle as VehicleBase } from '../../db/Models/vehicle/vehicle';\nimport { VehicleLogbook } from './vehicle-logbook';\nimport { Type } from 'class-transformer';\nimport { VehicleLogbookCollection } from '../../collections/vehicle-logbook.collection';\n\nexport class Vehicle extends VehicleBase {\n @Type(() => VehicleLogbook)\n logbook: VehicleLogbook[];\n\n /**\n * Get vehicle's logbooks as collection\n */\n getLogbooks(): VehicleLogbookCollection {\n return new VehicleLogbookCollection(this.logbook);\n }\n}\n","import { VehicleClaimMethodEnum } from '../../Enums/vehicle-claim-method.enum';\nimport { User } from '../user/user';\nimport { TankTypeEnum } from '../../Enums/tank-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class VehicleClaim extends AbstractModel {\n financialYear?: number;\n method?: VehicleClaimMethodEnum;\n kilometers?: number;\n workUsage?: number;\n isManual?: boolean;\n id?: number;\n user?: User;\n tankType?: TankTypeEnum;\n}\n","import { VehicleClaim as VehicleClaimBase } from '../../db/Models/vehicle/vehicle-claim';\nimport { VehicleClaimMethodEnum } from '../../db/Enums/vehicle-claim-method.enum';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { Transaction } from '../transaction/transaction';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\n\nconst WEEKS_IN_YEAR = 52;\n\nexport class VehicleClaim extends VehicleClaimBase {\n // limit for kms claim method\n kmsLimit: number = 5000;\n financialYear: number = new FinancialYear().year;\n\n method: VehicleClaimMethodEnum = VehicleClaimMethodEnum.KMS;\n kilometers: number = 0;\n workUsage: number = 0;\n isManual: boolean = true;\n\n /**\n * get amount of kilometres per week\n */\n get averageWeeklyTraveledKms(): number {\n return this.kilometers / WEEKS_IN_YEAR;\n }\n\n isLogbookMethod(): boolean {\n return this.method === VehicleClaimMethodEnum.LOGBOOK;\n }\n\n isKLMsMethod(): boolean {\n return this.method === VehicleClaimMethodEnum.KMS;\n }\n\n isWorkTank(): boolean {\n return this.tankType === TankTypeEnum.WORK;\n }\n\n isSoleTank(): boolean {\n return this.tankType === TankTypeEnum.SOLE;\n }\n\n /**\n * Claim amount for KLMs method. Exists only for KLMs method.\n */\n getKLMsClaimAmount(vehicleClaimRate: number): number {\n if (!this.isKLMsMethod()) {\n return 0;\n }\n\n return +(this.kilometers * vehicleClaimRate).toFixed(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 if (!this.isLogbookMethod()) {\n return 0;\n }\n\n const transactionsAmount: number = transactions\n .getByTankType(this.tankType)\n .getVehicleTransactions()\n // except klms transactions because they needed only for klms method\n .filter((transaction: Transaction): boolean => !transaction.chartAccounts.isKLMsByTankType(this.tankType))\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 /**\n * Create KLMs transaction based on vehicle claim and vehicle claim rate\n * @TODO handle on backend: Create klms transaction when vhicle claim created\n */\n toTransaction(vehicleClaimRate: number): Transaction {\n return plainToClass(Transaction, {\n amount: this.kilometers * vehicleClaimRate,\n source: TransactionSourceEnum.CASH,\n type: TransactionTypeEnum.DEBIT,\n taxWithheld: 0,\n description: 'Klm’s method',\n date: new Date(`${new FinancialYear().year}-06-30`),\n claimPercent: 100,\n chartAccounts: {\n id: this.getKlmsChartAccountsIdByTankType(this.tankType)\n }\n });\n }\n\n getKlmsChartAccountsIdByTankType(tankType: TankTypeEnum = this.tankType): number {\n if (tankType === TankTypeEnum.WORK) {\n return ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK;\n }\n\n return ChartAccountsListEnum.KLMS_TRAVELLED\n }\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 id?: number;\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 { ServiceNotification as ServiceNotificationBase } from '../../db/Models/service-notification';\nimport { UserEventTypeUserTypeEnum } from '../../db/Enums/user-event-type-user-type.enum';\nimport { UserEventTypeEmployeeTypeEnum } from '../../db/Enums/user-event-type-employee-type.enum';\nimport { UserEventTypeClientTypeEnum } from '../../db/Enums/user-event-type-client-type.enum';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { User } from '../user/user';\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(): UserEventTypeUserTypeEnum | UserEventTypeEmployeeTypeEnum | UserEventTypeClientTypeEnum {\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","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: string;\n filename: string;\n orientation: PdfOrientationEnum = PdfOrientationEnum.PORTRAIT\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","/**\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 { 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: number = 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 => {\n return sum + this.getMarketValueForPropertyByYear(property, item.year);\n }, 0);\n\n item.loanBalance = Math.abs(this.properties.items.reduce((sum: number, property: Property): number => {\n return sum + this.getLoanBalanceForPropertyByYear(property, item.year);\n }, 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 => {\n return sum + Math.abs(this.bankAccounts.getPropertyBalanceAmount(property.id));\n }, 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 => {\n return totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0));\n }, 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 return property.getForecastByYear(year)?.loanBalance || this.bankAccounts.getPropertyBalanceAmount(property.id);\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","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 {AbstractModel} from '../abstract-model';\n\nexport class PropertyShare extends AbstractModel {\n id?: number;\n email?: string;\n firstName?: string;\n percent?: number;\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}\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/user';\nimport { RegistrationInvite } from '../registration-invite/registration-invite';\nimport { Property } from './property';\n\nexport class PropertyShare extends PropertyShareBase {\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","import {TaxExemption} from './tax-exemption';\nimport {TaxExemptionMetadata} from './tax-exemption-metadata';\nimport {PropertyShare} from '../property-share';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class PropertySale extends AbstractModel {\n\tid?: number;\n holdingCosts?: number;\n\tstructuralImprovementsWDV?: number;\n buildingAtCostClaimed?: number;\n\tsettlementDate?: Date;\n\tcontractDate?: Date;\n\tprice?: number;\n\tcommission?: number;\n\tlegalFees?: number;\n\totherCost?: number;\n\tcapitalLoss?: number;\n grossCGT?: number;\n netCGT?: number;\n\tcreatedAt?: Date;\n\tupdatedAt?: Date;\n\tshare?: PropertyShare;\n taxExemption?: TaxExemption;\n\ttaxExemptionMetadata?: TaxExemptionMetadata[];\n}\n","import {PropertySale} from './property-sale';\nimport {TaxExemptionMetadata} from './tax-exemption-metadata';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class PropertySaleTaxExemptionMetadata extends AbstractModel {\n\tvalue?: number;\n\tid?: number;\n\tpropertySale?: PropertySale;\n\tmetadata?: TaxExemptionMetadata;\n}\n","import { PropertySale as BasePropertySale } from '../../../db/Models/property/property-sale/property-sale';\nimport { Type } from 'class-transformer';\nimport {\n PropertySaleTaxExemptionMetadata\n} from '../../../db/Models/property/property-sale/property-sale-tax-exemption-metadata';\n\nexport class PropertySale extends BasePropertySale {\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 contractDate: Date;\n\n @Type(() => PropertySaleTaxExemptionMetadata)\n taxExemptionMetadata: PropertySaleTaxExemptionMetadata[];\n\n get saleCostsTotalAmount(): number {\n return this.commission + this.legalFees + this.otherCost;\n }\n}\n","import {TaxExemptionMetadata} from './tax-exemption-metadata';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxExemption extends AbstractModel {\n\tname?: string;\n description?: string;\n\tid?: number;\n\tmetadata?: TaxExemptionMetadata[];\n}\n","import { TaxExemption as BaseTaxExemption } from '../../../db/Models/property/property-sale/tax-exemption';\n\nexport class TaxExemption extends BaseTaxExemption {\n}\n","import {TaxExemption} from './tax-exemption';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxExemptionMetadata extends AbstractModel {\n\tname?: string;\n\tid?: number;\n\ttaxExemption?: TaxExemption;\n}\n","import { TaxExemptionMetadata as BaseTaxExemptionMetadata } from '../../../db/Models/property/property-sale/tax-exemption-metadata';\n\nexport class TaxExemptionMetadata extends BaseTaxExemptionMetadata {\n}\n","import { PropertySaleTaxExemptionMetadata as BasePropertySaleTaxExemptionMetadata } from '../../../db/Models/property/property-sale/property-sale-tax-exemption-metadata';\n\nexport class PropertySaleTaxExemptionMetadata extends BasePropertySaleTaxExemptionMetadata {\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","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 id?: number;\n amount?: number;\n status?: ServicePaymentStatusEnum;\n stripeId?: string;\n date?: Date;\n receipt?: string;\n subscription?: ServiceSubscription;\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 @Type(() => ServiceSubscription)\n subscription: ServiceSubscription;\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 { 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 { 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';\n\n/**\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 {\n amount: number;\n details: ReportItemDetails[];\n taxReturnCategory: TaxReturnCategory;\n title: string;\n\n @Type(() => ReportItem)\n @Transform(({value}) => new ReportItemCollection(value))\n items: ReportItemCollection;\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 { TaxReturnCategorySectionEnum } from '../../db/Enums/tax-return-category-section.enum';\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 {\n amount: number;\n name: string;\n type: number;\n section: TaxReturnCategorySectionEnum;\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_INCOME:\n return 'taxSummaryOtherIncome';\n default:\n return 'taxSummaryTotal';\n }\n })\n id?: string;\n}\n","import { TaxSummarySection } from './tax-summary-section';\nimport { Type } from 'class-transformer';\nimport { TAX_RETURN_CATEGORIES } from '../../collections/tax-summary/tax-return-categories.const';\nimport { TaxReturnCategoryListEnum } from '../../db/Enums/tax-return-category-list.enum';\nimport { TaxSummarySectionEnum } from '../../db/Enums/tax-summary-section.enum';\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 otherIncome: TaxSummarySection;\n\n @Type(() => TaxSummarySection)\n summary: TaxSummarySection;\n\n projectedTaxPosition: number;\n\n get sections(): TaxSummarySection[] {\n return [this.work, this.property, this.otherIncome, this.summary];\n }\n\n get taxPercent(): number {\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 /**\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.summary.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.otherIncome.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.income, TaxSummarySectionEnum.OTHER_INCOME);\n const expenses: number = this.summary.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.expenses, TaxSummarySectionEnum.OTHER_INCOME);\n const taxWithheld: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_WITHHELD], TaxSummarySectionEnum.OTHER_INCOME);\n const taxInstalments: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_INSTALMENTS], TaxSummarySectionEnum.OTHER_INCOME);\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.otherIncome.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.income, TaxSummarySectionEnum.OTHER_INCOME);\n const expenses: number = this.summary.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.expenses, TaxSummarySectionEnum.OTHER_INCOME);\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_INCOME);\n const frankingCredits: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.FRANKING_CREDITS], TaxSummarySectionEnum.OTHER_INCOME);\n\n return income - Math.abs(expenses) + Math.abs(taxOffsets) + Math.abs(taxInstallments) + Math.abs(frankingCredits);\n }\n}\n","/**\n * Enum for tax summary types\n */\nexport enum TaxSummaryTypeEnum {\n ACTUALS = 'actuals',\n FORECASTS = 'forecasts'\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: number = 3000;\n autoClose: boolean = true;\n}\n","export enum ToastTypeEnum {\n INFO,\n SUCCESS,\n WARNING,\n ERROR\n}\n","export enum TransactionCategoryEnum {\n PROPERTY,\n WORK,\n SOLE,\n PERSONAL\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","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 {AbstractModel} from '../abstract-model';\n\nexport class Occupation extends AbstractModel {\n\tid?: number;\n\tname?: string;\n\tcode?: string;\n}\n","import { Occupation as OccupationBase } from '../../db/Models/user/occupation';\n\nexport class Occupation extends OccupationBase {\n}\n","import { UserRolesEnum } from '../../db/Enums/user-roles.enum';\n\nexport const USER_ROLES: {[key: string]: UserRolesEnum[]} = {\n ROLE_FIRM_OWNER: [UserRolesEnum.FIRM_OWNER],\n ROLE_FIRM_MANAGER: [UserRolesEnum.FIRM_MANAGER, UserRolesEnum.FIRM_OWNER],\n ROLE_ACCOUNTANT: [UserRolesEnum.FIRM_MANAGER, UserRolesEnum.FIRM_OWNER, UserRolesEnum.ACCOUNTANT],\n ROLE_CLIENT: [UserRolesEnum.CLIENT],\n ROLE_USER: [UserRolesEnum.USER],\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_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 {AbstractModel} from '../abstract-model';\n\nexport class UserEventTypeCategory extends AbstractModel {\n\tname?: string;\n\tid?: number;\n}\n","import { UserEventTypeCategory as UserEventTypeCategoryBase } from '../../db/Models/user/user-event-type-category';\n\nexport class UserEventTypeCategory extends UserEventTypeCategoryBase {\n}\n","import {User} from './user';\nimport {UserEventType} from './user-event-type';\nimport {AbstractModel} from '../abstract-model';\n\nexport class UserEventSetting extends AbstractModel {\n\tbyEmail?: boolean;\n\tbyNotification?: boolean;\n\tfrequency?: number;\n\tid?: number;\n\tuser?: User;\n\ttype?: UserEventType;\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\ttype?: number;\n\tname?: string;\n\tbyEmail?: boolean;\n\tbyNotification?: boolean;\n\tfrequency?: UserEventTypeFrequencyEnum;\n\tcounter?: number;\n\tstatus?: number;\n\troles?: unknown;\n\tconfigurable?: boolean;\n\tid?: number;\n\tcategory?: UserEventTypeCategory;\n\tsettings?: UserEventSetting[];\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 { plainToClass, Type } from 'class-transformer';\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","import { UserEventSetting as UserEventSettingBase } from '../../db/Models/user/user-event-setting';\nimport { Exclude, Type } from 'class-transformer';\nimport { UserEventType } from './user-event-type';\n\nexport class UserEventSetting extends UserEventSettingBase {\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","/**\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 * Enum list of all possible account setup items. Using with [ACCOUNT_SETUP_ITEMS]{@link ACCOUNT_SETUP_ITEMS}\n */\nexport enum AccountSetupItemsEnum {\n SALARY,\n OTHER_INCOME,\n PROPERTY,\n BANK_FEEDS,\n WORK_LOGBOOK,\n SOLE_INCOME,\n TRANSACTION\n}\n","import { AccountSetupItemsEnum } from './account-setup-items.enum';\nimport { AccountSetupItem } from './account-setup-item';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * List of all possible account setup steps\n */\nexport const ACCOUNT_SETUP_ITEMS: {[key: number]: AccountSetupItem} = {\n [AccountSetupItemsEnum.SALARY]: plainToClass(AccountSetupItem, {\n title: 'Add your work income forecast',\n description: 'One the most important steps is to add your salary or wage incomes so we can automatically calculate tax withheld and your forecasted tax position.',\n url: '/client/work-tank/forecasting',\n urlFragment: 'salaryProductTour',\n clientIncomeTypes: ['salary']\n }),\n [AccountSetupItemsEnum.OTHER_INCOME]: plainToClass(AccountSetupItem, {\n title: 'Add any other expected incomes',\n description: 'To ensure an accurate tax position forecast, add estimates for any other income types, like dividends, interest, trusts, annuities, director payments etc.',\n url: '/client/work-tank/forecasting',\n urlFragment: 'otherIncomeProductTour',\n clientIncomeTypes: ['dividends', 'other']\n }),\n [AccountSetupItemsEnum.PROPERTY]: plainToClass(AccountSetupItem, {\n title: 'Add your properties',\n description: 'Add your properties to seamlessly manage your rental incomes and expenses, whilst tracking your cash position, tax positions and equity forecasts in real time.',\n url: '/client/property-tank',\n urlFragment: 'productTour',\n clientIncomeTypes: ['property']\n }),\n [AccountSetupItemsEnum.BANK_FEEDS]: plainToClass(AccountSetupItem, {\n title: 'Link banks and select accounts',\n description: 'Link banks to automatically feed your account transactions to save you time and money. Allocating live transactions ensures nothing is missed, lost or forgotten!',\n url: '/client/bank-feeds',\n urlFragment: 'bankAccountProductTour',\n }),\n [AccountSetupItemsEnum.WORK_LOGBOOK]: plainToClass(AccountSetupItem, {\n title: 'Set up your logbook method',\n description: 'Do you use your vehicle for work? Select your method and the klms or logbook % to automate accurately all vehicle expenses throughout the year.',\n url: '/client/work-tank/logbook',\n urlFragment: 'productTour'\n }),\n [AccountSetupItemsEnum.SOLE_INCOME]: plainToClass(AccountSetupItem, {\n title: 'Add your business details',\n description: 'Add your business details, logo and payment terms to create invoice templates in minutes.',\n url: '/client/sole-tank/forecasting',\n urlFragment: 'productTour',\n clientIncomeTypes: ['sole']\n }),\n [AccountSetupItemsEnum.TRANSACTION]: plainToClass(AccountSetupItem, {\n title: 'Allocate transactions',\n description: 'Select one or multiple transactions, the category from the dropdown and attach your receipt. It’s that simple to capture every possible deduction, and keep organised all throughout the year.',\n url: '/client/bank-feeds',\n urlFragment: 'allocationProductTour',\n }),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { ClientIncomeTypes } from '../../../../models/client/client-income-types';\nimport { ClientIncomeTypes as ClientIncomeTypesBase } from '../../../../db/Models/user/client-income-types';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * @TODO extend rest service when it could work with single objects, not only arrays\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientIncomeTypesService {\n cache: ClientIncomeTypes;\n cacheSubject: ReplaySubject<ClientIncomeTypes> = new ReplaySubject<ClientIncomeTypes>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n get(): Observable<ClientIncomeTypes> {\n if (!this.cache) {\n // @TODO alex fix everywhere, start with rest service\n this.cache = plainToClass(ClientIncomeTypes, {});\n this.http.get(`${this.environment.apiV2}/client-income-types`)\n .pipe(\n map((response: {'hydra:member': ClientIncomeTypesBase[]}): ClientIncomeTypes => {\n return plainToClass(ClientIncomeTypes, response['hydra:member'][0], { excludePrefixes: ['@'] });\n })\n )\n .subscribe((incomeTypes: ClientIncomeTypes) => {\n this.cache = incomeTypes;\n this.cacheSubject.next(this.cache);\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n update(incomeTypes: ClientIncomeTypes): Observable<ClientIncomeTypes> {\n return this.http.put(`${this.environment.apiV2}/client-income-types/${incomeTypes.id}`, incomeTypes)\n .pipe(\n map((incomeTypesBase: ClientIncomeTypesBase): ClientIncomeTypes => {\n this.cache = plainToClass(ClientIncomeTypes, incomeTypesBase);\n this.cacheSubject.next(this.cache);\n return this.cache;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AppEvent } 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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n private eventSubject: Subject<AppEvent<any>> = 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 /**\n * deliver new event\n */\n dispatch<T>(event: AppEvent<T>): void {\n this.eventSubject.next(event);\n }\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 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: 'Warning!',\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 } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { classToPlain, plainToClass } from 'class-transformer';\nimport { ToastService } from '../../toast/toast.service';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\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 Alex: refactor all services for work with collections instead of arrays\n * @TODO Alex: implement smart system of default toast messages\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\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 /**\n * get cached list of all instances\n */\n get(): Observable<Model[]> {\n if (!this.cache) {\n this.cache = [];\n this.fetch().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[]) => {\n return items.find((item: Model) => item['id'] === id);\n })\n );\n }\n\n /**\n * get list of items filtered by id.\n * @param models Array of objects contains required items ids\n */\n getByIds(models: Model[]): Observable<Model[]> {\n const idsArray: number[] = models.map((model: Model) => model['id']);\n\n return this.get()\n .pipe(\n map((items: Model[]) => {\n return items.filter((item: Model) => idsArray.includes(item['id']));\n })\n );\n }\n\n /**\n * add new instance and update cache\n * @TODO rename to post\n */\n add(model: Model, shouldUpdateCache: boolean = true): Observable<Model> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(model))\n .pipe(\n map((newItem: BaseModel) => {\n if (!shouldUpdateCache) {\n return null\n }\n\n const newInstance: Model = this.createModelInstance(this.modelClass, 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 * Add several new items\n * @param models Array of new items for saving\n * @param queryParams query parameters for request\n * @TODO 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(this.modelClass, 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 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(this.modelClass, 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 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(this.modelClass, 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.cache = this.cache.filter((item: Model) => item['id'] !== model['id']);\n this.updateCache();\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`, models)\n .pipe(\n map(() => {\n const ids: number[] = models.map((model: Model): number => model['id']);\n this.cache = this.cache.filter((item: Model) => !ids.includes(item['id']));\n this.updateCache();\n\n if (this.messageDeletedBatch) {\n this.toastService.success(this.messageDeletedBatch);\n }\n })\n );\n }\n\n /**\n * clear service cache\n */\n resetCache(): void {\n this.fetch().subscribe();\n }\n\n /**\n * get list of base class instances directly from backend\n */\n protected fetch(): Observable<Model[]> {\n return this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: BaseModel[]): Model[] => {\n const items: Model[] = (this.isHydra ? response['hydra:member'] : response)\n .map((item: BaseModel): Model => {\n return this.createModelInstance(this.modelClass, item);\n });\n this.cache = items;\n this.updateCache();\n return items;\n })\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 * Create new instance of class\n * @param model The class for which you want to create an instance\n * @param baseModel base model instance that we will use as constructor options\n */\n protected createModelInstance(model: new(bm: BaseModel) => Model, baseModel: BaseModel): Model {\n return plainToClass(model, baseModel, { 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","import { Injectable } from '@angular/core';\nimport { Property as PropertyBase } from '../../../db/Models/property/property';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { PropertySubscription as PropertySubscriptionBase } from '../../../db/Models/property/property-subscription';\nimport { RestService } from '../rest/rest.service';\nimport { Property } from '../../../models/property/property';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { PropertySubscription } from '../../../models/property/property-subscription';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service for work with Property\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyService extends RestService<PropertyBase, Property> implements IEventListener {\n modelClass: typeof Property = Property;\n url: string = 'properties';\n\n listenEvents(): void {\n this.listenShareInviteAccepted();\n // @TODO Alex: consider to refactor property movements logic similar to client-movements\n this.listenMovementsChanged();\n }\n\n /**\n * Update cache when share invitation accepted\n */\n private listenShareInviteAccepted(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_SHARE_UPDATED).subscribe(() => this.resetCache());\n }\n\n /**\n * Update cache when property category changed\n */\n private listenMovementsChanged(): void {\n // @TODO change dispatcher logic to work with multiple events\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED).subscribe(() => this.resetCache());\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_UPDATED).subscribe(() => this.resetCache());\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_DELETED).subscribe(() => this.resetCache());\n }\n\n update(property: Property): Observable<Property> {\n return super.update(property).pipe(\n map((updatedProperty: Property): Property => {\n if (property.documentFile) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT, property));\n }\n return updatedProperty;\n })\n );\n }\n\n getByCategoryId(id: number): Observable<Property[]> {\n return this.get().pipe(\n map((properties: Property[]): Property[] => {\n return properties.filter((property: Property): boolean => property.category.id === id);\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 replace(this.cache, activatedProperty);\n this.updateCache();\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 replace(this.cache, deactivatedProperty);\n this.updateCache();\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 property.photo = photoLink;\n // update properties cache\n replace(this.cache, property);\n this.updateCache();\n })\n );\n }\n\n getByShareId(id: number): Observable<Property[]> {\n return this.get().pipe(\n map((properties: Property[]): Property[] => {\n return properties.filter((property: Property): boolean => property.user.id === id);\n })\n );\n }\n\n /**\n * Get list of active user's properties\n */\n getActive(): Observable<Property[]> {\n return this.get().pipe(\n map((properties: Property[]): Property[] => properties.filter((property: Property): boolean => property.isActive))\n );\n }\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 { IncomeSource as IncomeSourceBase } from '../../../db/Models/incomeSource/income-source';\nimport { RestService } from '../rest/rest.service';\nimport { IncomeSourceType } from '../../../models/income-source/income-source-type';\nimport { SalaryForecast } from '../../../models/income-source/salary-forecast';\nimport { replace } from '../../../functions/array';\nimport { IncomeSourceTypeEnum } from '../../../db/Enums/income-source-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { IncomeSource } from '../../../models/income-source/income-source';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\n\n/**\n * Service to work with income sources\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IncomeSourceService extends RestService<IncomeSourceBase, IncomeSource> {\n url: string = 'income-sources';\n modelClass = IncomeSource;\n incomeSourceTypes: IncomeSourceType[];\n incomeSourceTypeSubject: ReplaySubject<IncomeSourceType[]> = new ReplaySubject<IncomeSourceType[]>(1);\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) => {\n return plainToClass(SalaryForecast, response);\n })\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(this.modelClass, 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 * Get other incomes types\n */\n getIncomeSourceTypes(): Observable<IncomeSourceType[]> {\n if (!this.incomeSourceTypes) {\n this.incomeSourceTypes = [];\n this.http.get(`${this.environment.apiV2}/income-source-types`)\n .pipe(\n map((response: any) => {\n return response.map((item: any) => plainToClass(IncomeSourceType, item));\n })\n )\n .subscribe((otherIncomesTypes: IncomeSourceType[]) => {\n this.incomeSourceTypes = otherIncomesTypes;\n this.incomeSourceTypeSubject.next(this.incomeSourceTypes);\n });\n }\n\n return this.incomeSourceTypeSubject.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BankAccount as BankAccountBase } from '../../../../db/Models/bank/bank-account';\nimport { map } from 'rxjs/operators';\nimport _ from 'lodash';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { BankAccount } from '../../../../models/bank/bank-account';\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 * Service that handling user's bank accounts logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankAccountService extends RestService<BankAccountBase, BankAccount> implements IEventListener {\n // api url parameter for bank accounts\n url: string = 'bank-accounts';\n modelClass = BankAccount;\n\n /**\n * Listen system notifications and update cache when got basiq notification received\n */\n listenEvents(): void {\n this.listenToEventDispatcherChanges();\n }\n\n /**\n * Created manual bank account\n * @param bankAccounts\n * @param queryParams\n */\n addBatch(bankAccounts: BankAccount[], queryParams: object = {}): Observable<BankAccount[]> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, bankAccounts)\n .pipe(\n map((newBankAccountsBase: BankAccountBase[]) => {\n const newBankAccounts: BankAccount[] = newBankAccountsBase.map((bankAccountBase: BankAccountBase): BankAccount => plainToClass(BankAccount, bankAccountBase));\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_ACCOUNT_CREATED, newBankAccounts));\n const tempCache: BankAccount[] = _.cloneDeep(this.cache);\n tempCache.push(...newBankAccounts);\n this.cache = tempCache;\n this.updateCache();\n return newBankAccounts;\n })\n );\n }\n\n /**\n * Update bank account and fire event\n */\n update(bankAccount: BankAccount): Observable<BankAccount> {\n return super.update(bankAccount).pipe(\n map((updatedBankAccount: BankAccount) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_ACCOUNT_UPDATED, updatedBankAccount));\n return updatedBankAccount;\n })\n );\n }\n\n /**\n * Update bank account opening balance\n * @param bankAccount Bank account for balance updating\n */\n updateOpeningBalance(bankAccount: BankAccount): Observable<any> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${bankAccount.id}/opening-balances/${bankAccount.getCurrentYearBalance().id}`, bankAccount.getCurrentYearBalance())\n .pipe(\n map((response: object) => {\n const tempCache: BankAccount[] = _.cloneDeep(this.cache);\n\n replace(tempCache[tempCache.findIndex((ba: BankAccount) => ba.id === bankAccount.id)].balances, response);\n this.cache = tempCache;\n this.updateCache();\n })\n );\n }\n\n /**\n * Update bank account current balance\n */\n updateCurrentBalance(bankAccount: BankAccount): Observable<BankAccount> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${bankAccount.id}/balance`, bankAccount)\n .pipe(\n map((response: object) => {\n const updatedBankAccount: BankAccount = plainToClass(BankAccount, response);\n\n replace(this.cache, updatedBankAccount);\n this.updateCache();\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_ACCOUNT_UPDATED, updatedBankAccount));\n return updatedBankAccount;\n })\n );\n }\n\n getOwn(): Observable<BankAccount[]> {\n return this.get()\n .pipe(\n map((bankAccounts: BankAccount[]) => {\n return bankAccounts.filter((bankAccount: BankAccount) => bankAccount.isOwner(+localStorage.getItem('userId')));\n })\n );\n }\n\n /**\n * Listen to EventDispatcherService events\n */\n private listenToEventDispatcherChanges(): void {\n this.eventDispatcherService.on([\n AppEventTypeEnum.PROPERTY_SHARE_UPDATED,\n AppEventTypeEnum.LOAN_PAYOUT_UPDATED,\n AppEventTypeEnum.BANK_CONNECTION_ADDED\n ]).subscribe(() => {\n this.fetch().subscribe((bankAccounts: BankAccount[]) => {\n this.cache = bankAccounts;\n this.updateCache();\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TransactionAllocation as TransactionAllocationBase } from '../../../../db/Models/transaction/transaction-allocation';\nimport { TransactionAllocation } from '../../../../models/transaction/transaction-allocation';\nimport { Transaction } from '../../../../models/transaction/transaction';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { RestService } from '../../rest/rest.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n// @TODO Don't look at the commented code. Will be refactored/removed during TT-1503\n\n/**\n * Service for transaction allocations business logic\n * @TODO alex refactor\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: string = 'transactions-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 /**\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[]) => {\n return transactionAllocations.filter((allocation: TransactionAllocation) => ids.includes(allocation.transaction.id));\n })\n );\n }\n\n listenEvents(): void {\n this.onTransactionsCreated();\n this.onDepreciationCreated();\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.resetCache();\n });\n }\n\n /**\n * Reset cache on depreciation created\n */\n private onDepreciationCreated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.DEPRECIATIONS_CREATED).subscribe((): void => {\n // @TODO Alex hack: research and refactor cache update logic, dont reset cache each time depreciations changed\n // Update allocations cache to synchronize data and fire subscriptions\n this.resetCache();\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.resetCache();\n });\n }\n}\n","export enum MessagesEnum {\n VEHICLE_CREATED = 'Vehicle created successfully',\n VEHICLE_UPDATED = 'Vehicle updated successfully',\n VEHICLE_DELETED = 'Vehicle deleted successfully',\n\n VEHICLE_CLAIM_CREATED = 'Vehicle claim created successfully',\n VEHICLE_CLAIM_UPDATED = 'Vehicle claim updated successfully',\n VEHICLE_CLAIM_DELETED = 'Vehicle claim deleted successfully',\n\n VEHICLE_LOGBOOK_CREATED = 'Vehicle logbook created successfully',\n VEHICLE_LOGBOOK_UPDATED = 'Vehicle logbook updated successfully',\n VEHICLE_LOGBOOK_DELETED = 'Vehicle logbook deleted successfully',\n}\n","import { Injectable } from '@angular/core';\nimport { VehicleClaim as VehicleClaimBase } from '../../../db/Models/vehicle/vehicle-claim';\nimport { VehicleClaim } from '../../../models/logbook/vehicle-claim';\nimport { RestService } from '../rest/rest.service';\nimport { MessagesEnum } from './messages.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleClaimService extends RestService<VehicleClaimBase, VehicleClaim>{\n modelClass: typeof VehicleClaim = VehicleClaim;\n url: string = 'vehicle-claims';\n messageCreated: string = MessagesEnum.VEHICLE_CLAIM_CREATED;\n messageUpdated: string = MessagesEnum.VEHICLE_CLAIM_UPDATED;\n messageDeleted: string = MessagesEnum.VEHICLE_CLAIM_DELETED;\n}\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","export enum MessagesEnum {\n DELETED_MESSAGE = 'Transaction deleted',\n UPDATED_MESSAGE = 'Transaction updated',\n CREATED_MESSAGE = 'Transaction(s) created'\n}\n","import { EventEmitter, 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 { enumToList } from '../../../functions/enum-to-list';\nimport { ChartAccountsHeadingTaxableEnum } from '../../../db/Enums/chart-accounts-heading-taxable.enum';\nimport { ChartAccountsHeadingTaxDeductibleEnum } from '../../../db/Enums/chart-accounts-heading-tax-deductible.enum';\nimport { TransactionOperationEnum } from '../../../db/Enums/transaction-operation.enum';\nimport { RestService } from '../rest/rest.service';\nimport { plainToClass } from 'class-transformer';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport { Transaction } from '../../../models/transaction/transaction';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { TransactionReceipt } from '../../../models/transaction/transaction-receipt';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport _ from 'lodash';\nimport { ChartAccountsTaxLabelsEnum } from '../../../models/chart-accounts/chart-accounts-tax-labels.enum';\nimport { MessagesEnum } from './messages.enum';\nimport { PropertyCategoryListEnum } from '../../../db/Enums/property/property-category-list.enum';\n\n/**\n * Service for transactions business logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TransactionService extends RestService<TransactionBase, Transaction> {\n // url part for Transaction API\n url: string = 'transactions';\n modelClass = Transaction;\n transactionDeleted: EventEmitter<Transaction> = new EventEmitter<Transaction>();\n\n /**\n * Listen events from Event Dispatcher services\n */\n listenEvents(): void {\n this.listenDepreciationChange();\n this.listenPropertyShareUpdate();\n }\n\n /**\n * get list of all user's TaxTank transactions\n */\n get(): Observable<Transaction[]> {\n if (!this.cache) {\n // set cache as default empty array to avoid multiple backend requests\n this.cache = [];\n this.fetch()\n .subscribe((transactions: Transaction[]) => {\n this.cache = transactions;\n this.updateCache();\n });\n }\n\n return this.cacheSubject.asObservable().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[] => {\n return transactions.filter((transaction: Transaction): boolean => {\n return transaction.property?.id === propertyId;\n });\n })\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[] => {\n return transactions.filter((transaction: Transaction): boolean => transaction.isWorkTank());\n })\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 this.http.get(\n `${this.environment.apiV2}/${this.url}?propertyId=${propertyId}&propertyCategoryId=${PropertyCategoryListEnum.VACANT_LAND}`\n )\n .pipe(\n map((transactionsBase: TransactionBase[]): Transaction[] => {\n return transactionsBase.map((transactionBase: TransactionBase): Transaction => plainToClass(Transaction, transactionBase));\n })\n );\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[] => {\n return transactions.filter((transaction: Transaction): boolean => !!transaction.chartAccounts.taxReturnItem);\n })\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}`, transactions)\n .pipe(\n map((response: TransactionBase[]) => {\n const addedTransactions: Transaction[] = response.map((item: TransactionBase) => plainToClass(Transaction, item));\n\n transactions.forEach((transaction: Transaction, index: number) => {\n // @TODO backend: need to upload file in the same backend endpoint with transaction add/update\n // check if passed receipt and upload file\n if (transaction.file) {\n transaction.id = response[index].id;\n addedTransactions[index].file = transaction.file;\n this.uploadReceipt(addedTransactions[index]);\n }\n\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 = plainToClass(Transaction, {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 this.toastService.success(MessagesEnum.CREATED_MESSAGE);\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}`, transaction)\n .pipe(\n map((response: TransactionBase) => {\n const updatedTransaction: Transaction = plainToClass(Transaction, response);\n\n // @TODO need to upload file in the same backend endpoint with transaction add/update\n // check if passed new receipt and upload file\n if (transaction.file) {\n updatedTransaction.file = transaction.file;\n this.uploadReceipt(updatedTransaction);\n }\n\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 = plainToClass(Transaction, {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.toastService.success(MessagesEnum.UPDATED_MESSAGE);\n\n replace(this.cache, updatedTransaction);\n this.updateCache();\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}`, transactions)\n .pipe(\n map((response: TransactionBase[]) => {\n const updatedTransactions: Transaction[] = response.map((item: TransactionBase) => plainToClass(Transaction, 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.toastService.success(MessagesEnum.DELETED_MESSAGE);\n\n this.updateCache();\n this.transactionDeleted.emit(model);\n })\n );\n }\n\n /**\n * upload transaction receipt image\n * @param transaction Еhe transaction for which the receipt will be imported\n */\n uploadReceipt(transaction: Transaction): void {\n const formData: FormData = new FormData();\n formData.append('file', transaction.file);\n transaction.receipt = null;\n\n this.http.post(`${this.environment.apiV2}/${this.url}/${transaction.id}/receipts`, formData)\n .subscribe((receiptResponse: any) => {\n // we don't need to keep file after save\n transaction.file = null;\n transaction.receipt = plainToClass(TransactionReceipt, receiptResponse);\n replace(this.cache, transaction);\n this.updateCache();\n });\n }\n\n /**\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 * get label for transaction tax field depended of selected chart account.\n * tax type depends of chart account heading or category.\n */\n getTaxLabel(chartAccounts: ChartAccounts): ChartAccountsTaxLabelsEnum {\n // get simple array of ids from enum with taxable chart accounts headings\n const taxableCAHeadingsIds: number[] = enumToList(ChartAccountsHeadingTaxableEnum)\n .map((item: { label: string, value: number }) => item.value);\n // get simple array of ids from enum with tax deductible chart accounts headings\n const deductibleCAHeadingsIds: number[] = enumToList(ChartAccountsHeadingTaxDeductibleEnum)\n .map((item: { label: string, value: number }) => item.value);\n\n // check if one of ids arrays includes current chart accounts heading id and set tax label\n // otherwise label is empty for this class\n switch (true) {\n case taxableCAHeadingsIds.includes(chartAccounts.heading?.id):\n return ChartAccountsTaxLabelsEnum.TAX_PAID;\n case deductibleCAHeadingsIds.includes(chartAccounts.heading?.id):\n return ChartAccountsTaxLabelsEnum.TAX_DEDUCTED;\n case CHART_ACCOUNTS_CATEGORIES.workIncome.includes(chartAccounts.category):\n return ChartAccountsTaxLabelsEnum.TAX_WITHHELD;\n default:\n return null;\n }\n }\n\n /**\n * Listen to EventDispatcherService event related to Depreciation changing\n */\n private listenDepreciationChange(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.DEPRECIATION_DELETED).subscribe(() => {\n this.fetch()\n .subscribe((transactions: Transaction[]) => {\n this.cache = transactions;\n this.updateCache();\n });\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.resetCache());\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ACCOUNT_SETUP_ITEMS } from '../../models/account-setup/account-setup-items.const';\nimport { AccountSetupItem } from '../../models/account-setup/account-setup-item';\nimport { AccountSetupItemsEnum } from '../../models/account-setup/account-setup-items.enum';\nimport { BankAccountService } from '../http/bank/bank-account/bank-account.service';\nimport { ClientIncomeTypes } from '../../models/client/client-income-types';\nimport { ClientIncomeTypesService } from '../http/firm/client-income/client-income-types.service';\nimport { IncomeSource } from '../../models/income-source/income-source';\nimport { IncomeSourceCollection } from '../../collections/income-source.collection';\nimport { IncomeSourceService } from '../http/income-source/income-source.service';\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source-type.enum';\nimport { PropertyService } from '../http/property/property.service';\nimport { TransactionAllocationService } from '../http/transaction/transaction-allocation/transaction-allocation.service';\nimport { combineLatest, Observable, of, ReplaySubject } from 'rxjs';\nimport { filter, map, mergeMap } from 'rxjs/operators';\nimport { AccountSetupItemCollection } from '../../collections/account-setup-item.collection';\nimport { VehicleClaimService } from '../http/vehicle/vehicle-claim.service';\nimport fromPairs from 'lodash/fromPairs';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { plainToClass } from 'class-transformer';\nimport { TransactionService } from '../http/transaction/transaction.service';\nimport { Transaction } from '../../models/transaction/transaction';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\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 cache: AccountSetupItemCollection;\n cacheSubject: ReplaySubject<AccountSetupItemCollection> = new ReplaySubject<AccountSetupItemCollection>(1);\n clientIncomeTypesId: number;\n\n constructor(\n private clientIncomeTypesService: ClientIncomeTypesService,\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 ) {\n }\n\n /**\n * Get list of account setup items for current user\n */\n get(): Observable<AccountSetupItemCollection> {\n if (!this.cache) {\n this.cache = new AccountSetupItemCollection([]);\n\n this.clientIncomeTypesService.get()\n .pipe(\n // we need account setup only when user selected at least one income type\n filter((incomeTypes: ClientIncomeTypes) => !!incomeTypes.length),\n mergeMap((incomeTypes: ClientIncomeTypes) => {\n this.clientIncomeTypesId = incomeTypes.id;\n\n return this.createBatch(incomeTypes);\n })\n )\n .subscribe((items: AccountSetupItemCollection) => {\n switch (true) {\n case !this.cache:\n case this.cache.getBy('isCompleted', true).length !== items.getBy('isCompleted', true).length:\n case this.cache.length !== items.length:\n this.cache = cloneDeep(items);\n this.cacheSubject.next(this.cache);\n }\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * Prepare client income types to update to hide depended account setup items\n */\n prepareIncomeTypes(item: AccountSetupItem): ClientIncomeTypes {\n return plainToClass(\n ClientIncomeTypes,\n Object.assign({id: this.clientIncomeTypesId}, fromPairs(item.clientIncomeTypes.map((type: string) => [type, false])))\n )\n }\n\n /**\n * Get a single AccountSetupItem and check it's completion\n */\n private create(itemType: AccountSetupItemsEnum, request: Observable<object[]>): Observable<AccountSetupItem> {\n return request.pipe(\n map((result: object[]): AccountSetupItem => {\n const item: AccountSetupItem = ACCOUNT_SETUP_ITEMS[itemType];\n\n if (result.length) {\n item.isCompleted = true;\n } else {\n item.isCompleted = false;\n }\n\n return item;\n })\n );\n }\n\n /**\n * Get batch of requests to get list of required AccountSetupItem's.\n * Some items are optional and depends of user's client income types\n */\n private createBatch(incomeTypes: ClientIncomeTypes): Observable<AccountSetupItemCollection> {\n const batch: Observable<AccountSetupItem>[] = [];\n\n // Salary item is completed when user added salary income source\n if (incomeTypes.salary) {\n batch.push(\n this.create(\n AccountSetupItemsEnum.SALARY,\n this.getIncomeSources(true)\n )\n );\n }\n\n // Other income item is completed when user added at least one other income source\n if (incomeTypes.dividends || incomeTypes.other) {\n batch.push(\n this.create(\n AccountSetupItemsEnum.OTHER_INCOME,\n this.getIncomeSources()\n )\n );\n }\n\n // Rental income item is completed when user added at least one property\n if (incomeTypes.property) {\n batch.push(this.create(AccountSetupItemsEnum.PROPERTY, this.propertyService.get()));\n }\n\n // Bank feeds item is completed when user added at least one bank account (basiq or manual)\n batch.push(this.create(AccountSetupItemsEnum.BANK_FEEDS, this.bankAccountsService.get()));\n\n // Logbook item is completed when user has at least one vehicle claim with any method (klms or logbook)\n batch.push(this.getLogbookItem());\n\n // @TODO waiting for sole tank forecast page\n // Sole item is completed when user added at least one sole income source\n // if (incomeTypes.soleTrader) {\n // batch.push(\n // this.prepareItem(\n // AccountSetupItemsEnum.SOLE_INCOME,\n // this.getIncomeSourcesByType(IncomeSourceTypeEnum.SOLE)\n // )\n // );\n // }\n\n // Allocation item is completed when user added at least one transaction allocation\n batch.push(this.create(AccountSetupItemsEnum.TRANSACTION, this.transactionAllocationService.get()));\n\n return combineLatest(batch).pipe(map((items: AccountSetupItem[]) => new AccountSetupItemCollection(items)));\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: boolean = 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.isSalaryIncome() && !incomeSource.isSoleIncome());\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.create(AccountSetupItemsEnum.WORK_LOGBOOK, this.vehicleClaimService.get());\n }\n\n return of(null);\n })\n );\n }\n}\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) => {\n return response['hydra:member'].map((item: object) => plainToClass(Country, item));\n })\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 { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { UserSwitcherService } from '../user/user-switcher.service';\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 { Bank as BankBase } from '../../../db/Models/bank/bank';\nimport { Bank } from '../../../models/bank/bank';\nimport { RestService } from '../rest/rest.service';\n\n/**\n * Service that handling banks logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankService extends RestService<BankBase, Bank> {\n modelClass: typeof Bank = Bank;\n url: string = 'banks';\n isHydra: boolean = true;\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 => {\n return this.isAllocated(bankTransaction, allocations);\n })\n );\n }\n\n /**\n * Get collection of unallocated bank transactions\n * @TODO Alex: consider to move to collection\n */\n getUnallocatedBankTransactions(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): BankTransactionCollection {\n return new BankTransactionCollection(\n bankTransactions.items.filter((bankTransaction: BankTransaction): boolean => {\n return !this.isAllocated(bankTransaction, allocations);\n })\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';\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,\n bankTransactions: BankTransactionCollection,\n allocations: TransactionAllocationCollection\n ): number {\n return bankAccounts.getOpeningBalance() +\n this.bankTransactionCalculationService.getAllocatedAmount(bankTransactions.getByBankAccountsIds(bankAccounts.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 { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BankConnection as BankConnectionBase } from '../../../../db/Models/bank/bank-connection';\nimport { plainToClass } from 'class-transformer';\nimport { BankConnection } from '../../../../models/bank/bank-connection';\nimport { RestService } from '../../rest/rest.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 * 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> implements IEventListener {\n modelClass = BankConnection;\n url: string = 'bank-connections';\n\n listenEvents(): void {\n this.listenToAddedBankAccounts();\n }\n\n post(bankConnection: BankConnection): Observable<BankConnection> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, bankConnection)\n .pipe(\n map((bankConnectionBase: BankConnectionBase) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_CONNECTION_ADDED, null));\n\n return plainToClass(BankConnection, bankConnectionBase);\n })\n );\n }\n\n listenToAddedBankAccounts(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_ACCOUNT_CREATED).subscribe(() => {\n this.resetCache();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BankTransaction as BankTransactionBase } from '../../../../db/Models/bank/bank-transaction';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RestService } from '../../rest/rest.service';\nimport { plainToClass } from 'class-transformer';\nimport { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.enum';\nimport { BankTransaction } from '../../../../models/bank/bank-transaction';\nimport { FinancialYear } from '../../../../models/financial-year/financial-year';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Notification } from '../../../../models/notification/notification';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n/**\n * Service for bank transactions business logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankTransactionService extends RestService<BankTransactionBase, BankTransaction> implements IEventListener {\n // url part for BankTransaction API\n url: string = 'bank-transactions';\n modelClass = BankTransaction;\n\n listenEvents(): void {\n this.listenBankTransactionsImport();\n };\n\n /**\n * get list of bank transactions for passed bank account id\n * @param bankAccountId Id of bank account we search bank transactions for\n */\n getByBankAccountId(bankAccountId: number): Observable<BankTransaction[]> {\n return this.get()\n .pipe(\n map((bankTransactions: BankTransaction[]) => {\n return bankTransactions.filter((bankTransaction: BankTransaction) => bankTransaction.bankAccount.id === bankAccountId);\n })\n );\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 getTransactionsByYear(finYear: number): Observable<BankTransaction[]> {\n return this.http.get(`${this.environment.apiV2}/bank-transactions?financialYear=${finYear}`)\n .pipe(\n map((bankTransactionsBase: BankTransactionBase[]) => {\n return bankTransactionsBase.map((bankTransaction: BankTransaction) => plainToClass(BankTransaction, bankTransaction));\n })\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 newBankTransactions: BankTransaction[] = response.map((bankTransaction: BankTransactionBase) => plainToClass(BankTransaction, bankTransaction));\n // push new items to cache only if we already have cache. Otherwise cache will contain only new items.\n if (this.cache) {\n // just current year's transactions should be added\n this.cache.push(...newBankTransactions.filter((bt: BankTransaction) => new FinancialYear().includes(bt.date)));\n this.updateCache();\n }\n\n return newBankTransactions;\n })\n );\n }\n\n private listenBankTransactionsImport(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification: Notification) => {\n if (!notification.isRead && notification.eventType === UserEventTypeClientTypeEnum.BASIQ_FIRST_IMPORT_COMPLETE) {\n this.resetCache();\n }\n });\n }\n}\n","// @TODO Basiq 1.0 remove if we will use basiq 2.0 or refactor if we stay with basiq 1.0\nimport { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BankAccount as BankAccountBase } from '../../../../db/Models/bank/bank-account';\nimport { BankAccount } from '../../../../models/bank/bank-account';\nimport { RestService } from '../../rest/rest.service';\nimport { BasiqToken } from '../../../../models/bank/basiq-token';\nimport { BankConnection } from '../../../../models/bank/bank-connection';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Notification } from '../../../../models/notification/notification';\nimport { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.enum';\n\n/**\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> {\n token: BasiqToken;\n tokenSubject: ReplaySubject<BasiqToken> = new ReplaySubject<BasiqToken>();\n url: string = 'basiq/accounts';\n modelClass = BankAccount;\n\n /**\n * Listen events from Event Dispatcher service\n */\n listenEvents(): void {\n this.listenToBankConnectionAdded();\n this.listenNotifications();\n }\n\n /**\n * access token to use basiq connect ui iframe\n */\n getToken(): Observable<BasiqToken> {\n if (!this.token || this.token.isExpired()) {\n this.http.get(`${this.environment.apiV2}/basiq/tokens`)\n .pipe(\n map((response: object) => {\n const now: number = new Date().getTime();\n\n return new BasiqToken(response['access_token'], new Date(now + response['expires_in'] * 1000));\n })\n )\n .subscribe((token: BasiqToken) => {\n this.tokenSubject.next(token);\n });\n }\n\n return this.tokenSubject.asObservable();\n }\n\n getConnections(): Observable<BankConnection[]> {\n return this.get().pipe(\n map((bankAccounts: BankAccount[]) => {\n // get all connections\n const connections: BankConnection[] = bankAccounts.map((bankAccount: BankAccount) => {\n return bankAccount.bankConnection;\n });\n\n // return without duplicates\n return [...new Map(connections.map((connection: BankConnection) => [connection.id, connection])).values()];\n })\n );\n }\n\n /**\n * Listen to EventDispatcherService event related to added Bank connection\n */\n private listenToBankConnectionAdded(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_CONNECTION_ADDED).subscribe(() => {\n this.fetch().subscribe((bankAccounts: BankAccount[]) => {\n this.cache = bankAccounts;\n this.updateCache();\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 === UserEventTypeClientTypeEnum.BASIQ_NEW_ACCOUNTS) {\n this.resetCache();\n this.get().subscribe();\n }\n });\n }\n}\n\n\n// @TODO Basiq 3.0 functionality remove when we decide what basiq version we will use (1 or 2)\n// import { Injectable } from '@angular/core';\n// import { Observable, ReplaySubject } from 'rxjs';\n// import { map, take } from 'rxjs/operators';\n// import { BankAccount as BankAccountBase } from '../../../../db/Models/bank/bank-account';\n// import { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.enum';\n// import { RestService } from '../../rest/rest.service';\n// import { BankAccount } from '../../../../models/bank/bank-account';\n// import { BasiqToken } from '../../../../models/bank/basiq-token';\n// import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\n// import { BankConnection } from '../../../../models/bank/bank-connection';\n// import { Notification } from '../../../../models/notification/notification';\n// import { IEventListener } from '../../../../interfaces/event-listener.interface';\n// import { AppEvent } from '../../../../models/event/app-event';\n// import { User } from '../../../../models/user/user';\n// import { BankConnection as BankConnectionBase } from '../../../../db/Models/bank/bank-connection';\n//\n// /**\n// * Basiq consent UI initial URL. Replace USER_ID and TOKEN by user data + handle action parameter\n// */\n// const BASIQ_CONSENT_URL = 'https://consent.basiq.io/home?userId=USER_ID&token=TOKEN&action=connect';\n//\n// /**\n// * Event message name we listen to handle basiq UI result\n// */\n// const FINISH_BASIQ_EVENT = 'finish-basiq';\n//\n// /**\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// })\n// export class BasiqService extends RestService<BankAccountBase, BankAccount> implements IEventListener {\n// token: BasiqToken;\n// tokenSubject: ReplaySubject<BasiqToken> = new ReplaySubject<BasiqToken>();\n// url: string = 'basiq/accounts';\n// modelClass = BankAccount;\n//\n// /**\n// * Listen events from Event Dispatcher service\n// */\n// listenEvents(): void {\n// this.listenToBankConnectionAdded();\n// this.listenNotifications();\n// this.listenBasiqConcentUpdated();\n// }\n//\n// /**\n// * Update user's basiq consents data on backend\n// */\n// confirmConsents(): Observable<void> {\n// return this.http.put(`${this.environment.apiV2}/basiq/consents`, {}).pipe(\n// map((isConfirmed: boolean) => {\n// this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_CONSENT_UPDATED, isConfirmed));\n// })\n// );\n// }\n//\n// /**\n// * Notify backend to update connections\n// */\n// updateConnections(): Observable<void> {\n// return this.http.post(`${this.environment.apiV2}/basiq/connections`, {}).pipe(\n// map((connections: BankConnectionBase[]) => {\n// this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_CONNECTION_UPDATED, !!connections));\n// })\n// );\n// }\n//\n// /**\n// * access token to use basiq connect ui iframe\n// */\n// getToken(): Observable<BasiqToken> {\n// if (!this.token || this.token.isExpired()) {\n// this.http.get(`${this.environment.apiV2}/basiq/tokens`)\n// .pipe(\n// map((response: object): BasiqToken => {\n//\n// const now: number = new Date().getTime();\n// return new BasiqToken(response['access_token'], new Date(now + response['expires_in'] * 1000));\n// })\n// )\n// .subscribe((token: BasiqToken) => {\n// this.token = token;\n// this.tokenSubject.next(token);\n// });\n// }\n//\n// return this.tokenSubject.asObservable();\n// }\n//\n// /**\n// * Get list of user's bank conections\n// */\n// getConnections(): Observable<BankConnection[]> {\n// return this.get().pipe(\n// map((bankAccounts: BankAccount[]) => {\n// // get all connections\n// const connections: BankConnection[] = bankAccounts.map((bankAccount: BankAccount) => {\n// return bankAccount.bankConnection;\n// });\n//\n// // return without duplicates\n// return [...new Map(connections.map((connection: BankConnection) => [connection.id, connection])).values()];\n// })\n// );\n// }\n//\n// /**\n// * Listen response from basiq UI to handle result.\n// * @param isBasiqConsentExist flag from User.ClientDetails - true if user confirmed basiq consent\n// * @param callback function we run after basiq UI work is finished\n// */\n// listenBasiqResponse(isBasiqConsentExist: boolean, callback: () => any): void {\n// window.addEventListener('message', (message: MessageEvent) => {\n// if (message.data !== FINISH_BASIQ_EVENT) {\n// return;\n// }\n//\n// // update user's basiq consent confirmation status for the first basiq ui run\n// if (isBasiqConsentExist) {\n// this.updateConnections().pipe(take(1)).subscribe();\n// } else {\n// this.confirmConsents().pipe(take(1)).subscribe();\n// }\n//\n// callback();\n// }, {once: true});\n// }\n//\n// /**\n// * Get URL with filled params to run basiq UI iframe\n// */\n// generateBasiqConsentUrl(user: User): Observable<string> {\n// return this.getToken().pipe(\n// map((token: BasiqToken): string => {\n// let url: string = BASIQ_CONSENT_URL;\n// url = url.replace('USER_ID', user.basiqId);\n// url = url.replace('TOKEN', token.value);\n//\n// if (!user.clientDetails.basiqConsentExist) {\n// url = url.split('&action')[0];\n// }\n//\n// return url;\n// })\n// );\n// }\n//\n// /**\n// * Listen to EventDispatcherService event related to added Bank connection\n// */\n// private listenToBankConnectionAdded(): void {\n// this.eventDispatcherService.on(AppEventTypeEnum.BANK_CONNECTION_ADDED).subscribe(() => {\n// this.fetch().subscribe((bankAccounts: BankAccount[]) => {\n// this.cache = bankAccounts;\n// this.updateCache();\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 === UserEventTypeClientTypeEnum.BASIQ_NEW_ACCOUNTS) {\n// this.resetCache();\n// this.get().subscribe();\n// }\n// });\n// }\n//\n// /**\n// * Update user's basiq connections when user confirmed basiq consent\n// */\n// private listenBasiqConcentUpdated(): void {\n// this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_CONSENT_UPDATED).subscribe((isConfirmed: boolean) => {\n// if (!isConfirmed) {\n// return;\n// }\n//\n// this.updateConnections().pipe(take(1)).subscribe();\n// });\n// }\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@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) => {\n return response.map((item: any) => plainToClass(BorrowingExpense, item));\n })\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 { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ChartAccountsCategoryEnum } from '../../../db/Enums/chart-accounts-category.enum';\nimport { ChartAccounts as ChartAccountBase } from '../../../db/Models/chart-accounts/chart-accounts';\nimport { plainToClass } from 'class-transformer';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport { ChartAccountsHeading } from '../../../models/chart-accounts/chart-accounts-heading';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport { TankTypeEnum } from '../../../db/Enums/tank-type.enum';\nimport { ChartAccountsListEnum } from '../../../db/Enums/chart-accounts-list.enum';\nimport { FinancialYear } from '../../../models/financial-year/financial-year';\n\n/**\n * Chart accounts service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsService {\n _chartAccounts: ChartAccounts[];\n chartAccountsSubject: ReplaySubject<ChartAccounts[]> = new ReplaySubject<ChartAccounts[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n /**\n * get all parent and child chart accounts and group it\n */\n getChartAccounts(): Observable<ChartAccounts[]> {\n if (!this._chartAccounts) {\n this._chartAccounts = [];\n this.http.get(`${this.environment.apiV2}/chart-accounts`)\n .pipe(\n map((response: ChartAccountBase[]) => {\n return response.map((item: ChartAccountBase) => plainToClass(ChartAccounts, item));\n })\n )\n .subscribe((chartAccounts: ChartAccounts[]) => {\n this._chartAccounts = chartAccounts;\n this.chartAccountsSubject.next(this._chartAccounts);\n });\n }\n\n return this.chartAccountsSubject.asObservable();\n }\n\n /**\n * Get list of chart accounts heading\n * @param categories\n */\n getChartAccountsHeadings(categories: ChartAccountsCategoryEnum[] = CHART_ACCOUNTS_CATEGORIES.all): Observable<ChartAccountsHeading[]> {\n return this.getChartAccounts()\n .pipe(\n map((chartAccounts: ChartAccounts[]) => {\n const filteredChartAccounts: ChartAccounts[] = chartAccounts.filter((ca: ChartAccounts) => categories.includes(ca.category));\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 return headings;\n })\n );\n }\n\n /**\n * Get heading of chart accounts by it Id\n * @param id\n */\n getHeadingByChartAccountsId(id: number): Observable<ChartAccountsHeading> {\n return this.getChartAccountsById(id)\n .pipe(\n map((chartAccounts: ChartAccounts) => {\n return chartAccounts.heading;\n })\n );\n }\n\n /**\n * Get chart accounts by Id\n * @param id\n */\n getChartAccountsById(id: number): Observable<ChartAccounts> {\n return this.getChartAccounts()\n .pipe(\n map((chartAccountsList: ChartAccounts[]) => {\n return chartAccountsList.find((chartAccounts: ChartAccounts) => chartAccounts.id === id);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest.service';\nimport { ChartAccountsDepreciation as ChartAccountsDepreciationBase } from '../../../../db/Models/chart-accounts/chart-accounts-depreciation';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ChartAccountsDepreciation } from '../../../../models/chart-accounts/chart-accounts-depreciation';\nimport { FinancialYear } from '../../../../models/financial-year/financial-year';\n\n/**\n * Service to work with depreciation chart accounts\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsDepreciationService extends RestService<ChartAccountsDepreciationBase, ChartAccountsDepreciation> {\n url: string = 'chart-accounts-depreciations';\n modelClass: typeof ChartAccountsDepreciation = ChartAccountsDepreciation;\n isHydra: boolean = true;\n\n /**\n * Get depreciation chart accounts for current financial year\n */\n getCurrent(): Observable<ChartAccountsDepreciation> {\n return this.get()\n .pipe(\n map((chartAccountsDepreciations: ChartAccountsDepreciation[]) => {\n return chartAccountsDepreciations\n .find((chartAccountsDepreciation: ChartAccountsDepreciation): boolean => {\n return chartAccountsDepreciation.effectiveYear === new FinancialYear().year;\n });\n })\n );\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@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 => {\n return JSON.parse(messageEvent.data);\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Chat as ChatBase } from '../../../db/Models/firm/chat';\nimport { HttpClient } from '@angular/common/http';\nimport { SseService } from '../../event/sse.service';\nimport { RestService } from '../rest/rest.service';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { Chat } from '../../../models/chat/chat';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { ToastService } from '../../toast/toast.service';\nimport { Message } from '../../../models/chat/message';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\n\n/**\n * Service for work with chats\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChatService extends RestService<ChatBase, Chat> {\n modelClass: typeof Chat = Chat;\n url: string = 'chats';\n isHydra: boolean = 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.listenChats();\n this.listenMessages();\n }\n\n /**\n * Listen chats events\n */\n listenChats(): void {\n this.sseService.on(`chats`).subscribe((chatBase: ChatBase): void => {\n let cache: Chat[] = cloneDeep(this.cache);\n // chat instance from event\n const eventChat: Chat = plainToClass(Chat, chatBase);\n // chat instance from cache\n const cachedChat: Chat = cache.find((chat: Chat): boolean => chat.id === eventChat.id);\n\n switch (true) {\n // add new chat\n case (!cachedChat):\n cache.push(eventChat);\n break;\n\n // remove deactivated chat\n case !eventChat.isActive():\n cache = cache.filter((chat: Chat): boolean => chat.id !== eventChat.id);\n break;\n\n // update chat with new firm (reassign)\n case eventChat.employee.id !== cachedChat.employee.id:\n replace(cache, eventChat);\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 this.cache = cache;\n this.updateCache();\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.eventDispatcherService.on(AppEventTypeEnum.MESSAGE_CREATED).subscribe((message: Message) => {\n const cache: Chat[] = cloneDeep(this.cache);\n const updatedChat: Chat = cache.find((chat: Chat): boolean => chat.id === message.chat.id);\n updatedChat.updatedAt = message.createdAt;\n\n replace(cache, updatedChat);\n this.cache = cache;\n this.updateCache();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Message as MessageBase } from '../../../../db/Models/firm/message';\nimport { HttpClient } from '@angular/common/http';\nimport _ from 'lodash';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { Message } from '../../../../models/chat/message';\nimport { RestService } from '../../rest/rest.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 { ToastService } from '../../../toast/toast.service';\n\n/**\n * Service for work with messages\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService extends RestService<MessageBase, Message> {\n modelClass: typeof Message = Message;\n url: string = 'messages';\n isHydra: boolean = 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.listenMessages();\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 const cache: Message[] = _.clone(this.cache);\n // update existing message if read and add new message if not read\n if (message.isRead()) {\n replace(cache, message);\n } else {\n cache.push(message);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.MESSAGE_CREATED, message));\n }\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { MessageDocument as MessageDocumentBase } from '../../../../db/Models/firm/message-document';\nimport { combineLatest, Observable, ReplaySubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport _ from 'lodash';\nimport { plainToClass } from 'class-transformer';\nimport { MessageDocument } from '../../../../models/chat/message-document';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Message } from '../../../../models/chat/message';\n\n// @TODO improve base rest service and extend it\n/**\n * Service for work with Message Documents\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageDocumentService implements IEventListener {\n url: string = 'message-documents';\n cache: Readonly<Array<Readonly<MessageDocument>>>;\n cacheSubject: ReplaySubject<Readonly<Array<Readonly<MessageDocument>>>> = new ReplaySubject<Readonly<Array<Readonly<MessageDocument>>>>();\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n @Inject('environment') private environment: any\n ) {\n this.listenEvents();\n }\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.eventDispatcherService.on(AppEventTypeEnum.MESSAGE_CREATED).subscribe((message: Message): void => {\n if (message.documents.length) {\n const cache: MessageDocument[] = _.clone(this.cache);\n const documentsIds: number[] = this.cache.map((d: MessageDocument): number => d.id);\n message.documents.forEach((d: MessageDocument): void => {\n d.chat = message.chat;\n if (!documentsIds.includes(d.id)) {\n cache.push(...message.documents);\n }\n });\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n }\n });\n }\n\n /**\n * get list of message documents\n */\n get(): Observable<Readonly<MessageDocument[]>> {\n if (!this.cache) {\n this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: object): MessageDocument[] => {\n return response['hydra:member'].map((docBase: MessageDocumentBase): MessageDocument => plainToClass(MessageDocument, docBase));\n })\n )\n .subscribe((documents: MessageDocument[]): void => {\n this.cache = documents;\n this.cacheSubject.next(this.cache);\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * Upload file to chat\n * @param chatId\n * @param file\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.environment.apiV2}/${this.url}`, formData)\n .pipe(\n map((documentBase: MessageDocumentBase): MessageDocument => {\n const document: MessageDocument = plainToClass(MessageDocument, documentBase);\n const cache: MessageDocument[] = _.clone(this.cache);\n cache.push(document);\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n return document;\n })\n );\n }\n\n /**\n * Upload multiple files to chat\n * @param chatId\n * @param files\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[] => {\n return docsBase.map((docBase: MessageDocumentBase): MessageDocument => plainToClass(MessageDocument, docBase));\n })\n );\n }\n\n /**\n * Delete uploaded chat document\n * @param chatId\n * @param documentId\n */\n delete(chatId: number, documentId: number): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/${this.url}/${documentId}`)\n .pipe(\n map((): void => {\n this.cache = this.cache.filter((document: MessageDocument): boolean => document.id !== documentId);\n this.cacheSubject.next(this.cache);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ClientInvite as ClientInviteBase } from '../../../../db/Models/firm/client-invite';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../../functions/array';\nimport _ from 'lodash';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { ClientInvite } from '../../../../models/client/client-invite';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../../models/event/app-event';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientInviteService extends RestService<ClientInviteBase, ClientInvite> {\n url: string = 'clients/invites';\n modelClass: typeof ClientInvite = ClientInvite;\n\n /**\n * Import employees for firm from CSV file\n * @param file\n */\n import(file: File): Observable<ClientInvite[]> {\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((clientInvite: ClientInvite[]) => {\n return clientInvite;\n })\n );\n }\n\n /**\n * Accept client invitation from firm to user\n * @param invite\n */\n accept(invite: ClientInvite): Observable<any> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/accept`, null)\n .pipe(\n map((): void => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_INVITE_ACCEPTED, invite));\n // set cache without accepted invite\n this.cache = this.cache.filter((clientInvite: ClientInvite) => invite.id !== clientInvite.id);\n this.updateCache();\n })\n );\n }\n\n /**\n * Reject client invitation from firm to user\n * @param invite\n */\n reject(invite: ClientInvite): Observable<ClientInvite> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/reject`, null)\n .pipe(\n map((rejectedInvite: ClientInviteBase): ClientInvite => {\n const updatedInvite: ClientInvite = plainToClass(ClientInvite, rejectedInvite);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: ClientInvite[] = _.cloneDeep(this.cache);\n replace(tempCache, plainToClass(ClientInvite, updatedInvite));\n this.cache = tempCache;\n this.updateCache();\n return updatedInvite;\n })\n );\n }\n\n /**\n * Resend invitation from firm to client\n * @param invite\n */\n resend(invite: ClientInvite): Observable<ClientInvite> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/resend`, null)\n .pipe(\n map((rejectedInvite: ClientInviteBase): ClientInvite => {\n const updatedInvite: ClientInvite = plainToClass(ClientInvite, rejectedInvite);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: ClientInvite[] = _.cloneDeep(this.cache);\n replace(tempCache, plainToClass(ClientInvite, updatedInvite));\n this.cache = tempCache;\n this.updateCache();\n return updatedInvite;\n })\n );\n }\n\n /**\n * Send invitation from client to firm\n * @param invite\n */\n inviteFirmByUser(invite: ClientInvite): Observable<ClientInvite> {\n return this.http.post(`${this.environment.apiV2}/firms/invite`, invite)\n .pipe(\n map((inviteBase: ClientInviteBase): ClientInvite => {\n const newInvite: ClientInvite = plainToClass(ClientInvite, inviteBase);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: ClientInvite[] = _.cloneDeep(this.cache);\n tempCache.push(newInvite);\n this.cache = tempCache;\n this.updateCache();\n return newInvite;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ClientMovement as ClientMovementBase } from '../../../../db/Models/firm/client-movement';\nimport { forkJoin, Observable } 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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientMovementService extends RestService<ClientMovementBase, ClientMovement> implements IEventListener {\n modelClass: typeof ClientMovement = ClientMovement;\n url: string = 'client-movements';\n isHydra: boolean = true;\n\n /**\n * @TODO BaseRestService should return collection\n */\n getAll(): Observable<ClientMovementCollection> {\n return this.get().pipe(\n map((clientMovements: ClientMovement[]) => {\n return new ClientMovementCollection(clientMovements);\n })\n );\n }\n\n getActive(): Observable<ClientMovementCollection> {\n return this.getAll().pipe(\n map((clientMovements: ClientMovementCollection): ClientMovementCollection => {\n return clientMovements.active;\n })\n );\n }\n\n getActiveByFirmType(type: FirmTypeEnum): Observable<ClientMovementCollection> {\n return this.getActive().pipe(\n map((clientMovements: ClientMovementCollection): ClientMovementCollection => {\n return clientMovements.getByFirmType(type);\n })\n );\n }\n\n update(movement: ClientMovement): Observable<ClientMovement> {\n // extend base 'add' method and pass into it movement without id\n return super.add(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();\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_TRANSFER_TO_OTHER_EMPLOYEE, [updatedMovement.client]));\n\n return updatedMovement;\n })\n );\n }\n\n updateBatch(clientMovements: ClientMovement[]): Observable<ClientMovement[]> {\n const batch: Observable<ClientMovement>[] = clientMovements.map((clientMovement: ClientMovement) => this.update(clientMovement));\n return forkJoin(batch);\n }\n\n /**\n * Reject current firm\n */\n close(clientMovement: ClientMovement): Observable<void> {\n clientMovement.dateTo = new Date();\n return this.http.put(`${this.environment.apiV2}/client-movements/${clientMovement.id}/close`, clientMovement)\n .pipe(\n map((): void => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_MOVEMENT_CLOSED, null));\n this.cache = this.cache.filter((movement: ClientMovement): boolean => movement.id !== clientMovement.id);\n this.updateCache();\n })\n );\n }\n\n /**\n * Listen Event Dispatcher service\n */\n listenEvents(): void {\n this.listenClientInvites();\n }\n\n /**\n * Listen to EventDispatcherService event related to clients invitations\n */\n private listenClientInvites(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.CLIENT_INVITE_ACCEPTED)\n .subscribe((): void => {\n this.fetch().subscribe((clientMovements: ClientMovement[]) => {\n this.cache = clientMovements;\n this.updateCache();\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: string = '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['hydra:member'].map((item: object) => plainToClass(ClientPortfolioReport, item));\n return new ClientPortfolioReportCollection(clientReports);\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { DepreciationCapitalProject as DepreciationCapitalProjectBase } from '../../../../db/Models/depreciation/depreciation-capital-project';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { DepreciationCapitalProject } from '../../../../models/depreciation/depreciation-capital-project';\n\n/**\n * Service for work with DepreciationCapitalProjects\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DepreciationCapitalProjectService {\n cache: DepreciationCapitalProject[];\n cacheSubject: ReplaySubject<DepreciationCapitalProject[]> = new ReplaySubject<DepreciationCapitalProject[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n get(propertyId: number): Observable<DepreciationCapitalProject[]> {\n this.cacheSubject.next([]);\n\n this.http.get(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects`)\n .subscribe((capitalProjectsBase: DepreciationCapitalProjectBase[]) => {\n this.cache = capitalProjectsBase.map((capitalProjectBase: DepreciationCapitalProjectBase) => {\n return plainToClass(DepreciationCapitalProject, capitalProjectBase);\n });\n this.cacheSubject.next(this.cache);\n });\n\n return this.cacheSubject.asObservable();\n }\n\n add(capitalProject: DepreciationCapitalProject, propertyId: number): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects`, capitalProject)\n .pipe(\n map((capitalProjectBase: DepreciationCapitalProjectBase): void => {\n this.cache.push(plainToClass(DepreciationCapitalProject, capitalProjectBase));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n update(capitalProject: DepreciationCapitalProject, propertyId: number): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects/${capitalProject.id}`, capitalProject)\n .pipe(\n map((capitalProjectBase: DepreciationCapitalProjectBase): void => {\n replace(this.cache, plainToClass(DepreciationCapitalProject, capitalProjectBase));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n delete(capitalProject: DepreciationCapitalProject, propertyId: number): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects/${capitalProject.id}`)\n .pipe(\n map((): void => {\n this.cache = this.cache.filter((item: DepreciationCapitalProject) => capitalProject.id !== item.id);\n this.cacheSubject.next(this.cache);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Depreciation as DepreciationBase } from '../../../db/Models/depreciation/depreciation';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../rest/rest.service';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { FinancialYear } from '../../../models/financial-year/financial-year';\nimport { DepreciationReceipt } from '../../../models/depreciation/depreciation-receipt';\nimport { BankAccount } from '../../../models/bank/bank-account';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DepreciationService extends RestService<DepreciationBase, Depreciation> implements IEventListener {\n modelClass: typeof Depreciation = Depreciation;\n url: string = 'depreciations';\n\n /**\n * Add a single depreciation\n * @TODO add auto-generation for events\n */\n add(depreciation: Depreciation): Observable<Depreciation> {\n return this.addBatch([depreciation])\n .pipe(\n map((newDepreciations: Depreciation[]): Depreciation => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.DEPRECIATIONS_CREATED, newDepreciations[0]));\n return newDepreciations[0];\n })\n );\n }\n\n /**\n * Add multiple depreciations\n * @TODO add auto-generation for events\n */\n addBatch(depreciations: Depreciation[]): Observable<Depreciation[]> {\n return super.addBatch(depreciations).pipe(\n map((newDepreciations: Depreciation[]): Depreciation[] => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.DEPRECIATIONS_CREATED, newDepreciations));\n return newDepreciations;\n })\n );\n }\n\n /**\n * Listen to Depreciations events\n */\n listenEvents(): void {\n this.listenToUpdatedLoan();\n this.listenToVehicleClaim();\n this.listenToUpdatedBankAccount();\n }\n\n getOpenBalance(depreciation: Depreciation): Observable<number> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/opening-balance?financialYear=${new FinancialYear().year}`, depreciation)\n .pipe(\n map((response: number) => {\n return response || 0;\n })\n );\n }\n\n /**\n * Upload depreciation receipt\n * @param depreciation for which will be uploaded receipt\n */\n uploadReceipt(depreciation: Depreciation): void {\n const formData: FormData = new FormData();\n formData.append('file', depreciation.file);\n depreciation.receipt = null;\n\n this.http.post(`${this.environment.apiV2}/${this.url}/${depreciation.id}/receipts`, formData)\n .subscribe((receiptResponse: any) => {\n // we don't need to keep file after save\n depreciation.file = null;\n depreciation.receipt = plainToClass(DepreciationReceipt, receiptResponse);\n replace(this.cache, depreciation);\n this.cacheSubject.next(this.cache.slice());\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated bank loan\n */\n private listenToUpdatedLoan(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.LOAN_UPDATED, AppEventTypeEnum.PROPERTY_SHARE_UPDATED]).subscribe(() => {\n this.fetch().subscribe();\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated bank account\n */\n private listenToUpdatedBankAccount(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.BANK_ACCOUNT_UPDATED]).subscribe((bankAccount: BankAccount) => {\n if (bankAccount.isPropertyTank()) {\n this.fetch().subscribe();\n }\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated vehicle claim\n */\n private listenToVehicleClaim(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.VEHICLE_CLAIM_CREATED, AppEventTypeEnum.VEHICLE_CLAIM_UPDATED]).subscribe(() => {\n this.fetch().subscribe();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { DocumentFolder as DocumentFolderBase } from '../../../../db/Models/document/document-folder';\nimport { HttpClient } from '@angular/common/http';\nimport { Document as DocumentBase } from '../../../../db/Models/document/document';\nimport { Document } from '../../../../models/document/document';\nimport { replace } from '../../../../functions/array';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { DocumentFolder } from '../../../../models/document/document-folder';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\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> {\n url: string = 'folders';\n modelClass: typeof DocumentFolder = DocumentFolder;\n\n /**\n * Add new document to the folder\n * @param file to be uploaded to the folder\n * @param folder for document\n */\n addDocument(file: File, folder: DocumentFolder): Observable<void> {\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}/folders/${folder.id}/documents`, formDataDocument).pipe(\n map((response: DocumentBase) => {\n const updatedFolder: DocumentFolder = Object.assign(plainToClass(DocumentFolder, {}), folder);\n updatedFolder.documents.push(plainToClass(Document, response));\n\n replace(this.cache, plainToClass(DocumentFolder, updatedFolder));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Edit folder document by moving it from one folder to another\n * @param editedDocument\n * @param selectedFolder to move the document to\n * @param oldFolderId: id of old folder from which need to remove the document\n */\n updateDocument(editedDocument: Document, selectedFolder: DocumentFolder, oldFolderId: number): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/folders/${selectedFolder.id}/documents/${editedDocument.id}`, editedDocument).pipe(\n map((response: DocumentBase) => {\n const oldFolder: DocumentFolder = this.cache.find((folder: DocumentFolder) => folder.id === oldFolderId);\n // Remove document from old folder\n oldFolder.documents = oldFolder.documents.filter((deletedDocument: Document) => deletedDocument.id !== response.id);\n\n // update old folder and replace it in cache\n response.folder = plainToClass(DocumentFolder, {id: selectedFolder.id, name: selectedFolder.name});\n replace(this.cache, plainToClass(DocumentFolder, oldFolder));\n\n // update new document folder and replace it in cache\n selectedFolder.documents.push(plainToClass(Document, response));\n replace(this.cache, plainToClass(DocumentFolder, selectedFolder));\n\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Delete document from folder\n * @param document to remove\n * @param folder from which document should be removed\n */\n deleteDocument(document: Document, folder: DocumentFolder): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/folders/${folder.id}/documents/${document.id}`).pipe(\n map(() => {\n folder.documents = folder.documents\n .filter((deletedDocument: Document) => deletedDocument.id !== document.id);\n replace(this.cache, plainToClass(DocumentFolder, folder));\n\n this.cacheSubject.next(this.cache);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest.service';\nimport { User as UserBase } from '../../../../db/Models/user/user';\nimport { 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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmployeeService extends RestService<UserBase, User>{\n url: string = 'employees';\n modelClass: typeof User = User;\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","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.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmployeeInviteService extends RestService<EmployeeInviteBase, EmployeeInvite> {\n url: string = '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[]) => {\n return employeeInvite;\n })\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 { 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 => {\n return plainToClass(Firm, firm);\n })\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 => {\n return plainToClass(Firm, firm);\n })\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[] => {\n return response['hydra:member'].map((firmBase: FirmBase): Firm => plainToClass(Firm, firmBase));\n })\n );\n }\n\n getByType(type: FirmTypeEnum): Observable<Firm[]> {\n return this.getAll().pipe(\n map((firms: Firm[]): Firm[] => {\n return firms.filter((firm: Firm) => firm.type === type);\n })\n );\n }\n\n updatePhoto(firm: Firm, photo: FormData): Observable<Firm> {\n return this.http.post(`${this.environment.apiV2}/firms/photo?_method=PUT`, photo)\n .pipe(\n map((firmPhoto: string) => {\n this.firm = plainToClass(Firm, Object.assign(firm, {photo: firmPhoto}));\n this.firmSubject.next(this.firm);\n\n return firm;\n })\n );\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 } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExportFormatterService {\n constructor(private currencyPipe: CurrencyPipe, 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 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 { 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.service';\nimport { IncomeSourceForecast } from '../../../../models/income-source/income-source-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 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: string = '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 * 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.isSalaryIncome()))\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.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: string = '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.isSalaryIncome()))\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.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: string = 'sole-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.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 this.updateBatch(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","import { Inject, Injectable } from '@angular/core';\nimport { User } from '../../models/user/user';\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 { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IEventListener } from '../../interfaces/event-listener.interface';\n\n/**\n * Service listen and handle kompassify events\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class KompassifyService implements IEventListener {\n\n constructor(\n // router required for execution of js code from progressbar step\n private router: Router,\n ) {}\n\n listenEvents(): void {\n window.addEventListener('message', (event: MessageEvent) => {\n // Execute js code from progressbar step\n if (event.data.TYPE === 'KOMPASSIFY_EXECUTE_JS_CODE') {\n eval(event.data.jsCode);\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Loan as LoanBase } from '../../../db/Models/loan/loan';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { RestService } from '../rest/rest.service';\nimport { plainToClass } from 'class-transformer';\nimport { Loan } from '../../../models/loan/loan';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { BankAccount } from '../../../models/bank/bank-account';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { LoanPayout } from '../../../models/loan/loan-payout';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service that handling loans logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoanService extends RestService<LoanBase, Loan> implements IEventListener {\n url: string = 'bank-accounts/loans';\n modelClass: typeof Loan = Loan;\n\n /**\n * Listen to Loans events\n */\n listenEvents(): void {\n this.listenToAddedLoans();\n this.listenToUpdatedBankAccounts();\n }\n\n listenToAddedLoans(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_ACCOUNT_CREATED)\n .subscribe((bankAccounts: BankAccount[]) => {\n // fetch loans when loan bank account created\n if (bankAccounts.find(ba => !!ba.loan)) {\n this.resetCache();\n }\n });\n }\n\n listenToUpdatedBankAccounts(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_ACCOUNT_UPDATED)\n .subscribe((updatedBankAccount: BankAccount): void => {\n if (!!updatedBankAccount.loan) {\n this.resetCache();\n }\n });\n }\n\n /**\n * Create Loan\n */\n add(model: Loan): Observable<Loan> {\n return this.addBatch([model])\n .pipe(\n map((newLoan: Loan[]): Loan => {\n return newLoan[0];\n })\n );\n }\n\n /**\n * Updated loan\n * @param loan\n */\n update(loan: Loan): Observable<Loan> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${loan.id}`, loan)\n .pipe(\n map((updatedLoanBase: LoanBase) => {\n const updatedLoan: Loan = plainToClass(Loan, updatedLoanBase);\n // if loan type is NOT vehicle - fire EventDispatcher event\n if (!updatedLoan.isVehicle()) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.LOAN_UPDATED, null));\n }\n\n replace(this.cache, updatedLoan);\n this.updateCache();\n return updatedLoan;\n })\n );\n }\n\n /**\n * Get list of vehicle loans\n */\n getVehicleLoans(): Observable<Loan[]> {\n return this.get()\n .pipe(\n map((loans: Loan[]) => {\n return loans.filter((loan: Loan) => loan.isVehicle());\n })\n );\n }\n\n /**\n * Calculate loan payments\n * @param loan\n */\n calculateLoanPayments(loan: Loan): Observable<any> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/calculation`, loan).pipe(\n map((response: any) => {\n return plainToClass(Loan, response);\n })\n );\n }\n\n /**\n * Add new loan payout\n * @param loan\n * @param paidOutLoan\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.resetCache();\n }\n ));\n }\n\n /**\n * Delete loan payout\n * @param loan\n * @param payout\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.resetCache();\n }\n ));\n }\n\n /**\n * Update loan payout\n * @param loan\n * @param paidOutLoan\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.resetCache();\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.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';\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: string = 'service-notifications';\n isHydra: boolean = 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 }\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.NOTIFICATION_ADDED, notification));\n });\n }\n}\n","/**\n * Configuration file with the settings to generate PDF file\n */\nexport const PDF_CONFIG: {[key: string]: {[key: string]: any}} = {\n text: {\n fontSize: 12,\n fontName: 'helvetica',\n fontStyle: '',\n fontWeight: 'bold',\n positionX: 14,\n positionY: 10,\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 // coords for file section title (group, table, e.t.c.)\n contentTitleCoords: {\n marginTop: 15\n },\n contentCoords: {\n marginTop: 15,\n marginLeft: 14\n },\n table: {\n headStyles: {\n fillColor: '#00b7f0',\n lineWidth: .2,\n halign: 'center'\n },\n footStyles: {\n fillColor: '#ffffff',\n textColor: '#000000'\n },\n }\n};\n","import { Injectable } from '@angular/core';\nimport jsPDF from 'jspdf';\nimport autoTable from 'jspdf-autotable';\nimport { PDF_CONFIG } from '../../models/pdf/pdf-config';\nimport { ExportDataTable } from '../../models/export/export-data-table';\nimport { PdfSettings } from '../../models/pdf/pdf-settings';\nimport { ExportFormatterService } from '../export/export-formatter.service';\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * @TODO vik refactor\n * Service to work with PDF (generate, download, e.t.c.)\n */\nexport class PdfService {\n constructor(private formatter: ExportFormatterService) {\n }\n\n /**\n * Export file from provided HTML tables\n */\n exportTables(tables: NodeListOf<HTMLTableElement>, fileSettings: PdfSettings): void {\n const document: jsPDF = this.generateFromTables(tables, fileSettings);\n document.save(`${fileSettings.filename}.pdf`);\n }\n\n /**\n * Export file from provided array-like table data\n */\n exportFromDataTables(dataTables: ExportDataTable[], fileSettings: PdfSettings): void {\n const document: jsPDF = this.generateFromDataTables(dataTables, fileSettings.title);\n document.save(`${fileSettings.filename}.pdf`);\n }\n\n /**\n * Generate file from array-like table data\n */\n private generateFromDataTables(dataTables: ExportDataTable[], title: string): jsPDF {\n const pdf: jsPDF = new jsPDF();\n\n this.setDocumentTitle(pdf, title);\n this.setDocumentLogo(pdf);\n\n dataTables.forEach((dataTable: ExportDataTable) => {\n autoTable(\n pdf, {\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 private generateFromTables(tables: NodeListOf<HTMLTableElement>, fileSettings: PdfSettings): jsPDF {\n const pdf: jsPDF = 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 autoTable(\n pdf,\n {\n html: table,\n ...this.setTableOptions(pdf, table.caption.innerText)\n });\n });\n\n return pdf;\n }\n\n /**\n * Set basic options for PDF table\n */\n private setTableOptions(pdf: jsPDF, tableCaption: string = ''): object {\n const lastTableCoords = pdf['lastAutoTable'].finalY || PDF_CONFIG.contentCoords.marginTop;\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, PDF_CONFIG.contentCoords.marginLeft, lastTableCoords + PDF_CONFIG.contentCoords.marginTop);\n\n return {\n headStyles: {\n fillColor: PDF_CONFIG.text.colorPrimary,\n },\n footStyles: {\n fillColor: PDF_CONFIG.text.colorWhite,\n textColor: PDF_CONFIG.text.colorBlack\n },\n startY: lastTableCoords + captionHeight + PDF_CONFIG.contentTitleCoords.marginTop,\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 private setDocumentTitle(doc: jsPDF, title?: string): void {\n doc.setFontSize(PDF_CONFIG.text.fontSize)\n .setFont(PDF_CONFIG.text.fontName, PDF_CONFIG.text.fontStyle, PDF_CONFIG.text.fontWeight)\n .text(title, PDF_CONFIG.text.positionX, PDF_CONFIG.text.positionY);\n }\n\n private setDocumentLogo(doc: jsPDF): void {\n const logo = new Image();\n logo.src = PDF_CONFIG.logo.src;\n doc.addImage(\n logo,\n 'PNG',\n doc.internal.pageSize.width - PDF_CONFIG.logo.positionX,\n PDF_CONFIG.logo.positionY,\n PDF_CONFIG.logo.width,\n PDF_CONFIG.logo.height\n )\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertyService } from '../../http/property/property.service';\nimport { TransactionService } from '../../http/transaction/transaction.service';\nimport { DepreciationService } from '../../http/depreciation/depreciation.service';\nimport { ChartAccountsService } from '../../http/chart-accounts/chart-accounts.service';\nimport { combineLatest, Observable } from 'rxjs';\nimport { Property } from '../../../models/property/property';\nimport { Transaction } from '../../../models/transaction/transaction';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport { DepreciationCollection } from '../../../collections/depreciation.collection';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport { Collection } from '../../../collections/collection';\nimport { CollectionDictionary } from '../../../collections/collection-dictionary';\nimport { TransactionCollection } from '../../../collections/transaction/transaction.collection';\nimport { map } from 'rxjs/operators';\nimport { PropertyCollection } from '../../../collections/property/property.collection';\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 flatten from 'lodash/flatten';\nimport { PropertyReportItemCollection } from '../../../collections/report/property/property-report-item.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: Collection<ChartAccounts>;\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<Property[]>,\n this.getTransactions() as Observable<TransactionCollection>,\n this.getDepreciations() as Observable<DepreciationCollection>,\n this.chartAccountsService.getChartAccounts() as Observable<ChartAccounts[]>\n ]).pipe(\n map(([properties, transactions, depreciations, chartAccounts]) => {\n return new CollectionDictionary(\n this.create(\n transactions,\n depreciations,\n new PropertyCollection(properties),\n new Collection(chartAccounts)\n ),\n 'propertyId'\n );\n })\n )\n }\n\n private create(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n properties: PropertyCollection,\n chartAccounts: Collection<ChartAccounts>\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[]) => {\n return new TransactionCollection(transactions)\n .getByChartAccountsCategories(CHART_ACCOUNTS_CATEGORIES.property);\n })\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: Depreciation[]) => {\n return new DepreciationCollection(depreciations)\n .getByChartAccountsCategories(CHART_ACCOUNTS_CATEGORIES.property)\n // we don't need borrowing expenses for this report\n .getWithoutBorrowingExpenses();\n })\n )\n }\n}\n","import { Injectable } from '@angular/core';\nimport { combineLatest, Observable } 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';\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.cashPosition - 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 => {\n return this.getTaxPosition(transactions, depreciations);\n })\n );\n }\n\n taxPositionGrowth(properties: PropertyCollection, transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n const taxPosition: number = this.getTaxPosition(transactions, depreciations);\n // check if taxPosition = 0 to avoid division by zero\n if (!taxPosition) {\n return 0;\n }\n\n return (taxPosition - properties.forecastedTaxPosition) / taxPosition;\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 => {\n return this.taxPositionGrowth(properties, transactions, depreciations);\n })\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 => {\n return totalAmount + bankAccounts.items\n .reduce((propertyAmount: number, bankAccount: BankAccount): number => {\n return propertyAmount + bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.amount || 0);\n }, 0);\n }, 0);\n }\n\n getLoanValue(properties: PropertyCollection, bankAccounts: BankAccountCollection): number {\n return properties.items.reduce((totalAmount: number, property: Property): number => {\n return totalAmount + bankAccounts.items\n .reduce((propertyAmount: number, bankAccount: BankAccount): number => {\n return propertyAmount + bankAccount.getPropertyBalanceAmount(property.id);\n }, 0);\n }, 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 => {\n return this.getLvr(properties, bankAccounts);\n })\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 => {\n return this.getLvrCommencement(properties, loans, bankAccounts);\n })\n );\n }\n\n getLvrGrowth(properties: PropertyCollection, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n const lvr: number = this.getLvr(properties, bankAccounts);\n if (!lvr) {\n // check if lvr = 0 to avoid division by zero\n return 0;\n }\n\n return (lvr - this.getLvrCommencement(properties, loans, bankAccounts)) / lvr;\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 => {\n return this.getLvrGrowth(properties, bankAccounts, loans);\n })\n );\n }\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 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","import { Injectable } from '@angular/core';\nimport { PropertyCategory as PropertyCategoryBase } from '../../../../db/Models/property/property-category';\nimport { RestService } from '../../rest/rest.service';\nimport { PropertyCategory } from '../../../../models/property/property-category';\n\n/**\n * Service for work with Property Categories\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyCategoryService extends RestService<PropertyCategoryBase, PropertyCategory>{\n modelClass: typeof PropertyCategory = PropertyCategory;\n url: string = 'properties/categories';\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { PropertyDocument as PropertyDocumentBase } from '../../../../db/Models/document/property-document';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { PropertyDocument } from '../../../../models/property/property-document';\nimport { RestService } from '../../rest/rest.service';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Property } from '../../../../models/property/property';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n/**\n * Class for work with Property Documents\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyDocumentService extends RestService<PropertyDocumentBase, PropertyDocument> implements IEventListener {\n modelClass: typeof PropertyDocument = PropertyDocument;\n url: string = 'properties/documents';\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.cache.push(newDocument);\n this.updateCache();\n }\n\n return newDocument;\n })\n );\n }\n\n /**\n * Get documents by property id\n * @param propertyId to get desired documents\n */\n getByPropertyId(propertyId: number): Observable<PropertyDocument[]> {\n return this.get()\n .pipe(\n map((documents: PropertyDocument[]) => {\n return documents\n .filter((document: PropertyDocument) => document.property.id === propertyId);\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 { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { PropertyShare as PropertyShareBase } from '../../../../db/Models/property/property-share';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { PropertyShare } from '../../../../models/property/property-share';\nimport { RestService } from '../../rest/rest.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// @TODO check and improve logic during refactoring\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyShareService extends RestService<PropertyShareBase, PropertyShare> implements IEventListener {\n // api url parameter for properties shares\n url: string = 'properties/shares';\n modelClass = PropertyShare;\n\n /**\n * Listen to Event Dispatcher events\n */\n listenEvents(): void {\n this.listenUserUpdated();\n }\n\n /**\n * Updated loan\n */\n update(propertyShare: PropertyShare): Observable<PropertyShare> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${propertyShare.id}`, propertyShare)\n .pipe(\n map((updatedPropertyShareBase: PropertyShareBase) => {\n const updatedPropertyShare: PropertyShare = plainToClass(PropertyShare, updatedPropertyShareBase);\n // if loan type is NOT vehicle - fire EventDispatcher event\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_SHARE_UPDATED, null));\n\n replace(this.cache, updatedPropertyShare);\n this.updateCache();\n return updatedPropertyShare;\n })\n );\n }\n\n /**\n * Re-invite property share\n * @param share user to share property\n */\n reinvite(share: PropertyShare): Observable<object> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${share.id}/reinvite`, {});\n }\n\n getIncoming(): Observable<PropertyShare[]> {\n return this.get()\n .pipe(map((propertyShares: PropertyShare[]) => {\n const propertySharesIncoming: PropertyShare[] = [];\n\n propertyShares.forEach((propertyShare: PropertyShare) => {\n if (propertyShare.user?.isLoggedIn() && propertyShare.isPending() && propertyShare.property.user.id !== +localStorage.getItem('userId')) {\n propertySharesIncoming.push(propertyShare);\n }\n });\n\n return propertySharesIncoming;\n }));\n }\n\n /**\n * Get outcoming property shares list\n */\n getOutcoming(): Observable<PropertyShare[]> {\n return this.get().pipe(\n map((propertyShares: PropertyShare[]): PropertyShare[] => {\n return this.filterOutcoming(propertyShares);\n })\n );\n }\n\n /**\n * Filter outcoming property shares\n */\n filterOutcoming(propertyShares: PropertyShare[]): PropertyShare[] {\n const propertySharesOutcoming: PropertyShare[] = [];\n\n propertyShares.forEach((propertyShare: PropertyShare) => {\n if (!propertyShare.user?.isLoggedIn()) {\n propertySharesOutcoming.push(propertyShare);\n }\n });\n\n return propertySharesOutcoming;\n }\n\n getByPropertyId(propertyId: number): Observable<PropertyShare[]> {\n return this.get()\n .pipe(\n map((propertyShares: PropertyShare[]) => {\n return propertyShares.filter((propertyShare: PropertyShare) => propertyShare.property.id === propertyId);\n }));\n }\n\n /**\n * Listen to User updated event\n */\n private listenUserUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.USER_UPDATED)\n .subscribe((): void => {\n this.fetch().subscribe((propertyShares: PropertyShare[]) => {\n this.cache = propertyShares;\n this.updateCache();\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertySale as PropertySaleBase } from '../../../../db/Models/property/property-sale/property-sale';\nimport { PropertySale } from '../../../../models/property/property-sale/property-sale';\nimport { RestService } from '../../rest/rest.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertySaleService extends RestService<PropertySaleBase, PropertySale> {\n modelClass: typeof PropertySale = PropertySale;\n url: string = 'properties/sales';\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[] => {\n return response.map((item: any) => {\n return plainToClass(ChartData, {\n name: item.category.name,\n data: item.equity.map((serie: any) => {\n return plainToClass(ChartSerie, {\n label: serie.date,\n value: serie.amount\n });\n })\n });\n });\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertyCategoryMovement } from '../../../../models/property/property-category-movement';\nimport { PropertyCategoryMovement as PropertyCategoryMovementBase } from '../../../../db/Models/property/property-category-movement';\nimport { RestService } from '../../rest/rest.service';\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 PropertyCategoryMovementService extends RestService<PropertyCategoryMovementBase, PropertyCategoryMovement> {\n modelClass: typeof PropertyCategoryMovement = PropertyCategoryMovement;\n url: string = 'properties/category-movements';\n\n add(model: PropertyCategoryMovement): Observable<PropertyCategoryMovement> {\n return super.add(model).pipe(\n map((newMovement: PropertyCategoryMovement): PropertyCategoryMovement => {\n // @TODO Alex: we need to teach restService to dispatch events + limit list of methods (not all services have all 4 or even more considering batch requests) + collections\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null))\n return newMovement;\n })\n );\n }\n\n update(model: PropertyCategoryMovement): Observable<PropertyCategoryMovement> {\n return super.update(model).pipe(\n map((updatedMovement: PropertyCategoryMovement): PropertyCategoryMovement => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));\n return updatedMovement;\n })\n );\n }\n\n delete(model: PropertyCategoryMovement): Observable<void> {\n return super.delete(model).pipe(\n map((): void => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));\n })\n );\n }\n\n // @TODO Alex: Move to collection\n getByPropertyId(id: number): Observable<PropertyCategoryMovement[]> {\n return this.get().pipe(\n map((movements: PropertyCategoryMovement[]): PropertyCategoryMovement[] => {\n return movements.filter((movement: PropertyCategoryMovement): boolean => movement.property.id === id)\n })\n );\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {BehaviorSubject, Observable, ReplaySubject} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {loadStripe} from '@stripe/stripe-js';\nimport {ServiceSubscriptionCollection} from '../../../collections/subscription/service-subscription.collection';\nimport {plainToClass} from 'class-transformer';\nimport {ServiceSubscription} from '../../../models/service-subscription/service-subscription';\nimport {ServicePayment} from '../../../models/service-subscription/service-payment';\nimport {EventDispatcherService} from '../../event/event-dispatcher.service';\nimport {ServiceSubscriptionItem} from '../../../models/service-subscription/service-subscription-item';\nimport {AppEvent} from '../../../models/event/app-event';\nimport {AppEventTypeEnum} from '../../../models/event/app-event-type.enum';\nimport {SseService} from '../../event/sse.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SubscriptionService {\n _serviceSubscription: ServiceSubscription;\n serviceSubscriptionSubject: ReplaySubject<ServiceSubscription> = new ReplaySubject<ServiceSubscription>(1);\n serviceSubscriptionsSubject: ReplaySubject<ServiceSubscriptionCollection> = new ReplaySubject<ServiceSubscriptionCollection>(1);\n stripe: any;\n servicePaymentsSubject: ReplaySubject<ServicePayment[]> = new ReplaySubject<ServicePayment[]>(1);\n _servicePayments: ServicePayment[];\n subscriptionChangeSubject: BehaviorSubject<ServiceSubscription> = new BehaviorSubject<ServiceSubscription>(null);\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n private sseService: SseService,\n @Inject('environment') private environment: any\n ) {\n this.listenSubscriptions();\n }\n\n getSubscription(force: boolean = false): Observable<ServiceSubscription> {\n if (!this._serviceSubscription || force) {\n this.http.get(`${this.environment.apiV2}/subscriptions/last`)\n .pipe(\n map((response: any) => {\n return plainToClass(ServiceSubscription, response);\n })\n )\n .subscribe((subsciption: ServiceSubscription) => {\n this._serviceSubscription = subsciption;\n this.serviceSubscriptionSubject.next(this._serviceSubscription);\n });\n }\n\n return this.serviceSubscriptionSubject.asObservable();\n }\n\n /**\n * redirect to stripe payment page\n */\n async checkoutRedirect(subscription: ServiceSubscription): Promise<any> {\n const stripe: any = await loadStripe(this.environment.stripePk);\n\n this.http.post(`${this.environment.apiV2}/stripe/checkout-session`, {\n items: subscription.items,\n successUrl: window.location.href,\n cancelUrl: window.location.href\n })\n .subscribe((session: string) => {\n // @Todo remove user TRIAL status\n stripe.redirectToCheckout({sessionId: session});\n });\n }\n\n /**\n * redirect to stripe billing page\n */\n billingRedirect(returnUrl: string): void {\n this.http.get(`${this.environment.apiV2}/stripe/billing-portal-session`, {\n params: {returnUrl}\n }).subscribe((response: any) => {\n window.location.replace(response.url);\n });\n }\n\n getPayments(): Observable<ServicePayment[]> {\n if (!this._servicePayments) {\n this.http.get(`${this.environment.apiV2}/service-payments`).subscribe((response: object[]) => {\n this._servicePayments = response.map((item: object) => plainToClass(ServicePayment, item));\n this.servicePaymentsSubject.next(this._servicePayments);\n });\n }\n\n return this.servicePaymentsSubject.asObservable();\n }\n\n /**\n * Get difference between current subscription and selected new subscription\n */\n getProrationCost(items: ServiceSubscriptionItem[]): Observable<number> {\n return this.http.post(`${this.environment.apiV2}/subscriptions/proration-cost`, items).pipe(\n map((prorationCost: number) => {\n return prorationCost;\n })\n );\n }\n\n /**\n * Change subscription plan\n */\n changeSubscription(items: ServiceSubscriptionItem[]): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/subscriptions/items`, items);\n }\n\n private listenSubscriptions(): void {\n this.sseService.on(`serviceSubscriptions`)\n .pipe(\n map((event: object): ServiceSubscription => plainToClass(ServiceSubscription, event))\n )\n .subscribe((subscription: ServiceSubscription): void => {\n this.getSubscription(true).subscribe();\n this.subscriptionChangeSubject.next(subscription);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED, null));\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ServicePrice as ServicePriceBase } from '../../../db/Models/subscription/service-price';\nimport { ServicePrice } from '../../../models/service-subscription/service-price';\nimport { RestService } from '../rest/rest.service';\n\n/**\n * Service that handling banks logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicePriceService extends RestService<ServicePriceBase, ServicePrice> {\n modelClass: typeof ServicePrice = ServicePrice;\n url: string = 'service-prices';\n isHydra: boolean = true;\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.service';\nimport { plainToClass } from 'class-transformer';\nimport { TaxReview } from '../../../models/tax-review/tax-review';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { User } from '../../../models/user/user';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\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: string = '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 }\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.cache = [];\n this.updateCache();\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","import { Injectable } from '@angular/core';\nimport { TaxReview as TaxReviewBase } from '../../../../db/Models/firm/accountant/tax-review';\nimport { RestService } from '../../rest/rest.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: string = '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 { 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 { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\nimport { Transaction } from '../../models/transaction/transaction';\n\n/**\n * @TODO move to collection\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.getNetAmount() === this.getAllocatedAmount(new TransactionCollection([transaction]), 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 => {\n return this.isAllocated(transaction, allocations);\n })\n );\n }\n\n /**\n * Get collection of unallocated transactions\n * @TODO Alex: consider to move to collection\n */\n getUnallocatedTransactions(transactions: TransactionCollection, allocations: TransactionAllocationCollection): TransactionCollection {\n return new TransactionCollection(\n transactions.items.filter((transaction: Transaction): boolean => {\n return !this.isAllocated(transaction, allocations);\n })\n );\n }\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) => {\n return response.map((item: object) => plainToClass(Occupation, item));\n })\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 { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { User as UserBase } from '../../../db/Models/user/user';\nimport { User } from '../../../models/user/user';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { JwtService } from '../../auth/jwt.service';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport clone from 'lodash/clone';\nimport {ServiceSubscription} from '../../../models/service-subscription/service-subscription';\nimport {SseService} from '../../event/sse.service';\nimport {IEventListener} from '../../../interfaces/event-listener.interface';\n\n/**\n * Service to work with user\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService implements IEventListener {\n cache: User;\n cacheSubject: ReplaySubject<User> = new ReplaySubject<User>(1);\n\n constructor(\n private http: HttpClient,\n private jwtService: JwtService,\n private eventDispatcherService: EventDispatcherService,\n private sseService: SseService,\n @Inject('environment') private environment: any\n ) {\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenServiceSubscriptionUpdated();\n this.listenBasiqConcentUpdated();\n }\n\n get(): Observable<User> {\n if (!this.cache) {\n this.fetch().subscribe();\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * Get current user\n */\n fetch(): Observable<User> {\n return this.http.get(`${this.environment.apiV2}/users/current`)\n .pipe(\n map((userBase: UserBase) => {\n const user: User = plainToClass(User, userBase);\n\n localStorage.setItem('userId', user.id.toString());\n // @TODO remove\n localStorage.setItem('financialYear', user.financialYear.toString());\n this.cache = user;\n this.cacheSubject.next(this.cache);\n\n return user;\n })\n );\n }\n\n /**\n * Register new user\n */\n register(data: object): Observable<object> {\n return this.http.post(`${this.environment.apiV2}/users/registration`, data);\n }\n\n /**\n * Update user\n */\n update(user: User): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/users/${user.id}`, user)\n .pipe(\n map((userBase: UserBase) => {\n this.cache = plainToClass(User, userBase);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.USER_UPDATED, null));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Change user password\n */\n changePassword(currentPassword: string, newPassword: string): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/users/password/change`, {currentPassword, newPassword});\n }\n\n /**\n * Recovery user password\n */\n recoveryPassword(email: string): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/users/password/recovery`, {email});\n }\n\n /**\n * Reset user password\n */\n resetPassword(newPassword: string, resetToken: string): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/users/password/reset`, {newPassword, resetToken});\n }\n\n /**\n * Confirm registered user\n */\n confirm(verificationCode: string): Observable<object> {\n return this.http.post(`${this.environment.apiV2}/users/confirmation`, {verificationCode});\n }\n\n /**\n * Search existing user\n */\n search(email: string): Observable<User> {\n return this.http.get(`${this.environment.apiV2}/users/search?email=${email}`)\n .pipe(\n map((userBase: UserBase) => {\n return plainToClass(User, userBase);\n })\n );\n }\n\n /**\n * Finish onboarding process\n */\n finishOnboarding(user: User): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/users/status`, user)\n .pipe(\n map(() => {\n this.cache = user;\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Update user photo\n */\n updatePhoto(photo: FormData): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/users/photo?_method=PUT`, photo)\n .pipe(\n map((photoUrl: string) => {\n this.cache = plainToClass(User, Object.assign(this.cache, {photo: photoUrl}));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Run forecast update script on backend when user switched financial year\n */\n switchFinancialYear(): Observable<object> {\n return this.http.get(`${this.environment.apiV2}/financial-year/switch`);\n }\n\n /**\n * clear service cache\n */\n resetCache(): void {\n this.fetch().subscribe();\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.resetCache());\n }\n\n private listenBasiqConcentUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_CONSENT_UPDATED).subscribe((isConfirmed: boolean) => {\n if (!isConfirmed) {\n return;\n }\n\n const user = clone(this.cache);\n user.clientDetails.basiqConsentExist = true;\n\n this.cache = user;\n this.cacheSubject.next(this.cache);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { UserEventSetting } from '../../../../models/user-event/user-event-setting';\nimport { UserEventSetting as UserEventSettingBase } from '../../../../db/Models/user/user-event-setting';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { RestService } from '../../rest/rest.service';\nimport { forkJoin, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../../functions/array';\nimport { classToPlain, plainToClass } from 'class-transformer';\nimport { ToastService } from '../../../toast/toast.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserEventSettingService extends RestService<UserEventSettingBase, UserEventSetting> {\n modelClass: typeof UserEventSetting = UserEventSetting;\n url: string = 'user-event-settings';\n isHydra: boolean = true;\n\n /**\n * Send batch to add/updated settings\n */\n saveBatch(settings: UserEventSetting[]): Observable<void> {\n // batch with post/put requests based on setting id\n const batch: Observable<object>[] = settings.map((setting: UserEventSetting) => {\n setting.isUpdating = true;\n\n if (setting.id) {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${setting.id}`, classToPlain(setting));\n }\n\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(setting));\n });\n\n return forkJoin(batch).pipe(\n map((eventSettings: UserEventSetting[]) => {\n eventSettings.forEach((eventSetting: UserEventSetting) => {\n // get setting from cache by saved setting id\n const cachedSetting: UserEventSetting = this.cache.find((setting: UserEventSetting) => setting.id === eventSetting.id);\n\n if (cachedSetting) {\n replace(this.cache, eventSetting);\n } else {\n this.cache.push(plainToClass(UserEventSetting, eventSetting));\n }\n });\n\n this.updateCache();\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { UserEventType as UserEventTypeBase } from '../../../../db/Models/user/user-event-type';\nimport { UserEventType } from '../../../../models/user-event/user-event-type';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { RestService } from '../../rest/rest.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserEventTypeService extends RestService<UserEventTypeBase, UserEventType> {\n modelClass: typeof UserEventType = UserEventType;\n url: string = 'user-event-types';\n isHydra: boolean = true;\n}\n\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Vehicle as VehicleBase } from '../../../db/Models/vehicle/vehicle';\nimport { Vehicle } from '../../../models/logbook/vehicle';\nimport { TankTypeEnum } from '../../../db/Enums/tank-type.enum';\nimport { RestService } from '../rest/rest.service';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { VehicleLogbook } from '../../../models/logbook/vehicle-logbook';\nimport { replace } from '../../../functions/array';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { MessagesEnum } from './messages.enum';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service that allows to work with WorkTank operations\n * @TODO separate vehicles and logbooks to different api\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleService extends RestService<VehicleBase, Vehicle> implements IEventListener {\n url: string = 'vehicles';\n modelClass: typeof Vehicle = Vehicle;\n messageCreated: string = MessagesEnum.VEHICLE_CREATED;\n messageUpdated: string = MessagesEnum.VEHICLE_UPDATED;\n messageDeleted: string = MessagesEnum.VEHICLE_DELETED;\n\n listenEvents(): void {\n this.listenLogbookAdded();\n this.listenLogbookUpdated();\n this.listenLogbookDeleted();\n }\n\n /**\n * Add a new logbook items to the vehicle when a new one created\n */\n private listenLogbookAdded(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_CREATED)\n .subscribe((result: {logbook: VehicleLogbook, vehicleId: number}) => {\n const tempCache: Vehicle[] = cloneDeep(this.cache);\n tempCache.find((vehicle: Vehicle): boolean => vehicle.id === result.vehicleId).logbook.push(result.logbook);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n\n /**\n * Replace vehicle's logbook with updated instance when logbook item updated\n */\n private listenLogbookUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_UPDATED)\n .subscribe((result: {logbook: VehicleLogbook, vehicleId: number}): void => {\n const tempCache: Vehicle[] = cloneDeep(this.cache);\n replace(tempCache.find((vehicle: Vehicle): boolean => vehicle.id === result.vehicleId).logbook, result.logbook);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n\n /**\n * Remove logbook item from vehicle when logbook deleted\n */\n private listenLogbookDeleted(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_DELETED)\n .subscribe((result: {logbook: VehicleLogbook, vehicleId: number}) => {\n const tempCache: Vehicle[] = cloneDeep(this.cache);\n const vehicle: Vehicle = tempCache.find((vehicle: Vehicle): boolean => vehicle.id === result.vehicleId);\n vehicle.logbook = vehicle.logbook.filter((logbook: VehicleLogbook): boolean => logbook.id !== result.logbook.id);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { VehicleLogbook as VehicleLogbookBase } from '../../../db/Models/vehicle/vehicle-logbook';\nimport { VehicleLogbook } from '../../../models/logbook/vehicle-logbook';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { ToastService } from '../../toast/toast.service';\nimport { MessagesEnum } from './messages.enum';\n\n/**\n * Vehicle logbook service. Allows user to add, update or delete vehicle trips\n * @TODO extend rest service after it refactored\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleLogbookService {\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n @Inject('environment') private environment: any,\n private toastService: ToastService\n ) { }\n\n add(logbook: VehicleLogbook, vehicleId: number): Observable<VehicleLogbook> {\n return this.http.post(`${this.environment.apiV2}/vehicles/${vehicleId}/logbooks`, logbook)\n .pipe(\n map((vehicleLogbookBase: VehicleLogbookBase) => {\n const newVehicleLogbook: VehicleLogbook = plainToClass(VehicleLogbook, vehicleLogbookBase);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_LOGBOOK_CREATED, {logbook: newVehicleLogbook, vehicleId}));\n this.toastService.success(MessagesEnum.VEHICLE_LOGBOOK_CREATED);\n return newVehicleLogbook;\n })\n );\n }\n\n update(logbook: VehicleLogbook, vehicleId: number): Observable<any> {\n return this.http.put(`${this.environment.apiV2}/vehicles/${vehicleId}/logbooks/${logbook.id}`, logbook).pipe(\n map((vehicleLogbookBase: VehicleLogbookBase) => {\n const updatedVehicleLogbook: VehicleLogbook = plainToClass(VehicleLogbook, vehicleLogbookBase);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_LOGBOOK_UPDATED, {logbook: updatedVehicleLogbook, vehicleId}));\n this.toastService.success(MessagesEnum.VEHICLE_LOGBOOK_UPDATED);\n return plainToClass(VehicleLogbook, updatedVehicleLogbook);\n })\n );\n }\n\n delete(logbook: VehicleLogbook, vehicleId: number): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/vehicles/${vehicleId}/logbooks/${logbook.id}`)\n .pipe(\n map(() => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_LOGBOOK_DELETED, {logbook, vehicleId}));\n this.toastService.success(MessagesEnum.VEHICLE_LOGBOOK_DELETED);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as xlsx from 'xlsx';\nimport * as FileSaver from 'file-saver';\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: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'\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","import { Injectable } from '@angular/core';\nimport { RestService } from '../../../rest/rest.service';\nimport { TaxExemption as BaseTaxExemption } from '../../../../../db/Models/property/property-sale/tax-exemption';\nimport { TaxExemption } from '../../../../../models/property/property-sale/tax-exemption';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxExemptionService extends RestService<BaseTaxExemption, TaxExemption> {\n modelClass: typeof TaxExemption = TaxExemption;\n url: string = 'tax-exemptions';\n isHydra: boolean = true;\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 { IAsset } from '../interfaces/asset.interface';\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(document: IAsset): IconsFileEnum {\n switch (document.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 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","/**\n * Function which round value to the provided decimals\n * @param value to be rounded\n * @param decimals: amount of decimals\n */\nexport function roundTo(value: number, decimals: number = 2): number {\n const multiplier: number = Math.pow(10, decimals);\n return Math.round((value * 100) * multiplier) / multiplier;\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 { FormGroup } from '@angular/forms';\n\nexport abstract class AbstractForm extends FormGroup {\n submit(): object {\n this.markAllAsTouched();\n\n if (!this.valid) {\n return null;\n }\n\n return this.value;\n }\n}\n","import { FormControl, FormGroup, 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: FormGroup): ValidationErrors => {\n return Object.values(formGroup.controls)\n .find((control: FormControl): boolean => control.value) ? null : {nothingChecked: true};\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nconst passwordPattern: RegExp = /^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})./;\n\nexport function passwordValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n return passwordPattern.test(control.value) ? null : { passwordInvalid: true };\n };\n}\n","import { AbstractControl, FormGroup, ValidatorFn } from '@angular/forms';\n\nexport function passwordMatchValidator(newPassControlName: string, confirmPassControlName: string): ValidatorFn {\n return (group: FormGroup) => {\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","import { AbstractForm } from '../abstract.form';\nimport { FormControl } from '@angular/forms';\nimport { ClientIncomeTypes } from '../../models/client/client-income-types';\nimport { atLeastOneCheckedValidator } from '../../validators';\n\nexport class ClientIncomeTypesForm extends AbstractForm {\n constructor(\n private clientIncomeTypes: ClientIncomeTypes\n ) {\n super({\n salary: new FormControl(clientIncomeTypes.salary),\n property: new FormControl(clientIncomeTypes.property),\n sole: new FormControl(clientIncomeTypes.sole),\n dividends: new FormControl(clientIncomeTypes.dividends),\n other: new FormControl(clientIncomeTypes.other)\n }, atLeastOneCheckedValidator());\n }\n\n submit(): object {\n if (!this.valid) {\n return null;\n }\n\n return Object.assign({}, this.clientIncomeTypes, this.value);\n }\n}\n","import { FormControl, Validators } from '@angular/forms';\nimport { AbstractForm } from '../abstract.form';\n\nexport class LoginForm extends AbstractForm {\n constructor() {\n super({\n email: new FormControl(null, [Validators.required, Validators.email]),\n password: new FormControl(null, Validators.required)\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport {passwordValidator} from \"../../validators/password.validator\";\nimport {passwordMatchValidator} from \"../../validators/password-match.validator\";\n\nexport class PasswordForm extends AbstractForm {\n constructor() {\n super({\n password: new FormControl('', [Validators.required, passwordValidator()]),\n confirm: new FormControl('', Validators.required),\n }, passwordMatchValidator('password', 'confirm'));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { PasswordForm } from '../user/password.form';\n\nexport class RegisterClientForm extends AbstractForm {\n constructor(\n referenceCode?: string\n ) {\n super({\n firstName: new FormControl('', [Validators.required]),\n lastName: new FormControl('', [Validators.required]),\n email: new FormControl('', [Validators.required, Validators.email]),\n password: new PasswordForm(),\n acceptTerms: new FormControl(false, [Validators.requiredTrue]),\n referenceCode: new FormControl(referenceCode)\n });\n }\n\n submit(): object {\n this.markAllAsTouched();\n if (!this.valid) {\n return null;\n }\n\n return {\n firstName: this.value.firstName,\n lastName: this.value.lastName,\n email: this.value.email,\n password: this.value.password.password,\n referenceCode: this.value.referenceCode\n };\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, 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 {\n constructor(\n private firmType: FirmTypeEnum,\n referenceCode?: string\n ) {\n super({\n name: new FormControl('', Validators.required),\n abn: new FormControl('', Validators.required),\n tan: new FormControl({value: '', disabled: firmType !== FirmTypeEnum.ACCOUNTANT}, Validators.required),\n owner: new RegisterClientForm(referenceCode),\n type: new FormControl(firmType)\n });\n }\n\n submit(): object {\n this.markAllAsTouched();\n if (!this.valid) {\n return null;\n }\n\n return plainToClass(Firm, Object.assign({}, this.value, {owner: (this.get('owner') as RegisterClientForm).submit()}));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\n\nexport class ResetPasswordForm extends AbstractForm {\n constructor() {\n super({\n email: new FormControl(null, [Validators.required, Validators.email]),\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { Vehicle } from '../../models/logbook/vehicle';\nimport { VehicleClaim } from '../../models/logbook/vehicle-claim';\nimport { plainToClass } from 'class-transformer';\n\nconst MAX_NAME_LENGTH = 60;\n\nexport class VehicleForm extends AbstractForm {\n constructor(\n private vehicle: Vehicle\n ) {\n super({\n name: new FormControl(vehicle.name, [Validators.required, Validators.maxLength(MAX_NAME_LENGTH)])\n });\n }\n\n /**\n * @TODO save model, add generics and handle it in AbstractForm\n */\n submit(): VehicleClaim {\n return plainToClass(VehicleClaim, Object.assign({}, this.vehicle, this.getRawValue()));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { VehicleClaim } from '../../models/logbook/vehicle-claim';\nimport { FormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { VehicleLogbookCollection } from '../../collections/vehicle-logbook.collection';\nimport { VehicleClaimMethodEnum } from '../../db/Enums/vehicle-claim-method.enum';\n\nexport class VehicleClaimForm extends AbstractForm {\n constructor(\n private vehicleClaim: VehicleClaim,\n private logbooks: VehicleLogbookCollection\n ) {\n super({\n method: new FormControl(vehicleClaim.method, Validators.required),\n isManual: new FormControl(vehicleClaim.isManual),\n kilometers: new FormControl({\n value: vehicleClaim.kilometers,\n disabled: !vehicleClaim.isManual\n }),\n workUsage: new FormControl({\n value: vehicleClaim.workUsage,\n disabled: !vehicleClaim.isManual\n })\n });\n\n this.setIsManualState();\n this.listenMethodChanges();\n this.listenIsManualChanges();\n }\n\n /**\n * Check if vehicle claim method changed\n */\n isMethodChanged(): boolean {\n return this.vehicleClaim.method !== this.get('method').value;\n }\n\n /**\n * Check if KLMs method selected\n */\n isKLMsMethod(): boolean {\n return this.get('method').value === VehicleClaimMethodEnum.KMS;\n }\n\n /**\n * Check if Logbook method selected\n */\n isLogbookMethod(): boolean {\n return this.get('method').value === VehicleClaimMethodEnum.LOGBOOK;\n }\n\n /**\n * Check if user selected manual calculation\n */\n isManual(): boolean {\n return this.get('isManual').value;\n }\n\n /**\n * @TODO save model, add generics and handle it in AbstractForm\n */\n submit(): VehicleClaim {\n return plainToClass(VehicleClaim, Object.assign({}, this.vehicleClaim, this.getRawValue()));\n }\n\n private setIsManualState() {\n if (this.logbooks.isBestPeriodExist()) {\n this.get('isManual').enable();\n } else {\n this.get('isManual').disable();\n this.get('isManual').setValue(true);\n }\n }\n\n /**\n * Handle method field value changes.\n * Set work usage value depended of selected method.\n */\n private listenMethodChanges(): void {\n this.get('method').valueChanges.subscribe((method: VehicleClaimMethodEnum): void => {\n if (method === VehicleClaimMethodEnum.KMS) {\n this.get('workUsage').setValue(0);\n } else if (method === VehicleClaimMethodEnum.LOGBOOK && !this.isManual()) {\n this.get('workUsage').setValue(this.logbooks.getBestPeriod().workUsage);\n }\n\n this.setValues();\n });\n }\n\n /**\n * Handle isManual field value changes.\n * Enable/disable fields depended of isManual value\n */\n private listenIsManualChanges(): void {\n this.get('isManual').valueChanges.subscribe((isManual: boolean): void => {\n if (isManual) {\n this.get('kilometers').enable();\n this.get('workUsage').enable();\n } else {\n this.get('kilometers').disable();\n this.get('workUsage').disable();\n }\n\n this.setValues();\n });\n }\n\n /**\n * Set automatic calculated values depended of current method for non-manual vehicle claim\n */\n private setValues(): void {\n if (this.isManual()) {\n return;\n }\n\n switch (this.get('method').value) {\n case VehicleClaimMethodEnum.LOGBOOK:\n this.get('workUsage').setValue(this.logbooks.getBestPeriod().workUsage);\n break;\n case VehicleClaimMethodEnum.KMS:\n const businessKms: number = this.logbooks.getBusinessLogbooks().getKlms();\n this.get('kilometers').setValue(businessKms < this.vehicleClaim.kmsLimit ? businessKms : this.vehicleClaim.kmsLimit);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ReplaySubject","map","plainToClass","Injectable","Inject","HttpParams","JwtHelperService","BehaviorSubject","catchError","HttpErrorResponse","observableThrowError","filter","take","switchMap","finalize","HTTP_INTERCEPTORS","NgModule","CommonModule","hasIn","flatten","get","first","last","compact","BankAccountTypeEnum","concat","uniqBy","TransactionOperationEnum","FirmTypeEnum","TankTypeEnum","DepreciationLvpAssetTypeEnum","ChartAccountsCategoryEnum","Exclude","Type","Transform","DepreciationTypeEnum","DepreciationCalculationEnum","ChartAccountsHeadingVehicleListEnum","ChartAccountsListEnum","DepreciationCapitalProjectBase","moment","DateRange","DepreciationForecastBase","ChartAccountsHeadingBase","ChartAccountsMetadataListEnum","ChartAccountsMetadataBase","ChartAccountsBase","BankTransactionTypeEnum","TransactionSourceEnum","TransactionTypeEnum","UserStatusEnum","UserRolesEnum","CountryBase","AddressTypeEnum","AddressBase","_a","ClientDetailsBase","PhoneTypeEnum","PhoneBase","FirmBase","EmployeeDetailsBase","ServiceProductStatusEnum","ServiceProductIdEnum","BaseServiceProduct","BaseServicePrice","ServiceSubscriptionItemBase","SubscriptionTypeEnum","ServiceSubscriptionBase","BaseUser","PropertySubscriptionBase","PropertyCategoryBase","AssetTypeEnum","AssetEntityTypeEnum","PropertyDocumentBase","PropertyValuationBase","PropertyForecastBase","PropertyCategoryMovementBase","TaxExemptionEnum","PropertyCategoryListEnum","TaxExemptionMetadataEnum","PropertyBase","TransactionReceiptBase","IncomeSourceTypeEnum","SalaryForecastBase","Expose","SoleForecastBase","SalaryForecastFrequencyEnum","IncomeSourceTypeListWorkEnum","IncomeSourceTypeListOtherEnum","IncomeSourceTypeBase","IncomeSourceForecastBase","IncomeSourceBase","TransactionMetadataBase","LoanRepaymentTypeEnum","LoanVehicleTypeEnum","LoanPayoutTypeEnum","LoanPayoutBase","LoanBase","TransactionAllocationBase","IncomeAmountTypeEnum","TransactionBase","BankTransactionBase","DepreciationBase","TaxReturnCategoryListEnum","BankAccountStatusEnum","BankConnectionStatusEnum","ChartAccountsEtpEnum","ChartAccountsHeadingListEnum","ChartAccountsHeadingTaxableEnum","ChartAccountsHeadingTaxDeductibleEnum","ChartAccountsMetadataTypeEnum","ChartAccountsTypeEnum","ChatStatusEnum","ClientDetailsMedicareExemptionEnum","ClientDetailsWorkDepreciationCalculationEnum","ClientDetailsWorkingHolidayMakerEnum","ClientInviteStatusEnum","ClientInviteTypeEnum","DepreciationCalculationPercentEnum","DepreciationWriteOffAmountEnum","IncomeSourceTypeListSoleEnum","InviteStatusEnum","LoanBankTypeEnum","LoanFrequencyEnum","LoanInterestTypeEnum","LoanRepaymentFrequencyEnum","LoanTypeEnum","PropertyDepreciationCalculationEnum","PropertyShareAccessEnum","PropertyShareStatusEnum","RegistrationInviteStatusEnum","ServiceNotificationStatusEnum","ServiceNotificationTypeEnum","ServicePaymentStatusEnum","ServicePriceRecurringIntervalEnum","ServicePriceTypeEnum","ServiceSubscriptionStatusEnum","SpareDocumentSpareTypeEnum","TaxCalculationMedicareExemptionEnum","TaxCalculationTypeEnum","TaxReturnCategorySectionEnum","TaxReviewStatusEnum","TaxSummaryListEnum","TaxSummarySectionEnum","TaxSummaryTaxSummaryEnum","TicketFeedbackEnum","TicketStatusEnum","TicketTypesEnum","UserEventStatusEnum","UserEventTypeFrequencyEnum","UserEventTypeUserTypeEnum","UserEventTypeEmployeeTypeEnum","UserEventTypeClientTypeEnum","UserMedicareExemptionEnum","UserTitleEnum","UserWorkDepreciationCalculationEnum","UserWorkingHolidayMakerEnum","VehicleClaimMethodEnum","VehicleLogbookPurposeEnum","BankBase","BankAccountPropertyBase","BasiqJobBase","BankConnectionBase","BankAccountBase","MonthNumberEnum","MonthNameShortEnum","cloneDeep","BankTransactionSummaryFieldsEnum","BorrowingExpenseBase","BorrowingExpenseLoanBase","ChartAccountsDepreciationBase","ChartAccountsTaxLabelsEnum","ChartAccountsValueBase","ChatBase","ChatViewTypeEnum","MessageDocumentBase","MessageBase","ClientIncomeTypesBase","RegistrationInviteBase","ClientInviteBase","ClientMovementBase","AlphabetColorsEnum","DepreciationGroupEnum","DepreciationReceiptBase","DocumentApiUrlPrefixEnum","DocumentBase","DocumentFolderBase","EmployeeInviteBase","AppEventTypeEnum","ExportFormatEnum","IconsFileEnum","LoanMaxNumberOfPaymentsEnum","VehicleLogbookBase","VehicleBase","VehicleClaimBase","ServiceNotificationBase","PdfOrientationEnum","CalculationFormTypeEnum","Validators","ShareFilterOptionsEnum","PropertyShareBase","BasePropertySale","PropertySaleTaxExemptionMetadata","BaseTaxExemption","BaseTaxExemptionMetadata","BasePropertySaleTaxExemptionMetadata","BaseServicePayment","TaxReviewBase","TaxSummaryTypeEnum","ToastTypeEnum","TransactionCategoryEnum","MyAccountHistoryInitiatedByEnum","MyAccountHistoryStatusEnum","MyAccountHistoryTypeEnum","OccupationBase","UserEventTypeCategoryBase","UserEventTypeBase","UserEventSettingBase","UserEventSettingFieldEnum","Subject","classToPlain","_","MessagesEnum","EventEmitter","mergeMap","fromPairs","combineLatest","of","Observable","EventSourcePolyfill","forkJoin","NavigationEnd","clone","jsPDF","autoTable","loadStripe","FileSaver","xlsx","FormGroup","FormControl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taxtank-core.umd.js","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","../../../node_modules/tslib/tslib.es6.js","../../../projects/tt-core/src/lib/services/auth/jwt.service.ts","../../../projects/tt-core/src/lib/models/event/app-event-type.enum.ts","../../../projects/tt-core/src/lib/services/event/event-dispatcher.service.ts","../../../projects/tt-core/src/lib/services/auth/auth.service.ts","../../../projects/tt-core/src/lib/interceptors/jwt-interceptor.ts","../../../projects/tt-core/src/lib/services/user/user-switcher.service.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/services/preloader/preloader.service.ts","../../../projects/tt-core/src/lib/interceptors/preloader.interceptor.ts","../../../projects/tt-core/src/lib/db/Enums/user-event-type-client-type.enum.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/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/db/Models/abstract-model.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-account.ts","../../../projects/tt-core/src/lib/db/Enums/bank-account-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/bank-account-status.enum.ts","../../../projects/tt-core/src/lib/db/Models/loan/loan.ts","../../../projects/tt-core/src/lib/db/Enums/loan-vehicle-type.enum.ts","../../../projects/tt-core/src/lib/models/loan/loan-payment.ts","../../../projects/tt-core/src/lib/db/Models/loan/loan-payout.ts","../../../projects/tt-core/src/lib/db/Enums/loan-payout-type.enum.ts","../../../projects/tt-core/src/lib/models/loan/loan-payout.ts","../../../projects/tt-core/src/lib/models/financial-year/financial-year.ts","../../../projects/tt-core/src/lib/models/loan/loan.ts","../../../projects/tt-core/src/lib/db/Enums/tank-type.enum.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/property/property.ts","../../../projects/tt-core/src/lib/db/Models/property/property-subscription.ts","../../../projects/tt-core/src/lib/db/Models/user/user.ts","../../../projects/tt-core/src/lib/db/Enums/user-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/user-roles.enum.ts","../../../projects/tt-core/src/lib/db/Models/address.ts","../../../projects/tt-core/src/lib/db/Models/country.ts","../../../projects/tt-core/src/lib/models/address/country.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/user/user-work-position.const.ts","../../../projects/tt-core/src/lib/db/Models/user/client-details.ts","../../../projects/tt-core/src/lib/models/client/client-details.ts","../../../projects/tt-core/src/lib/db/Models/user/employee-details.ts","../../../projects/tt-core/src/lib/db/Models/firm/firm.ts","../../../projects/tt-core/src/lib/db/Models/phone.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/models/firm/firm.ts","../../../projects/tt-core/src/lib/models/employee/employee-details.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-subscription.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-subscription-item.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/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/models/service-subscription/service-price.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-subscription-item.ts","../../../projects/tt-core/src/lib/models/service-subscription/subscription-type.enum.ts","../../../projects/tt-core/src/lib/models/service-subscription/subscription-title.const.ts","../../../projects/tt-core/src/lib/models/service-subscription/subscription-description.const.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-subscription.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/Models/property/property-category.ts","../../../projects/tt-core/src/lib/models/property/property-category.ts","../../../projects/tt-core/src/lib/db/Models/property/property-valuation.ts","../../../projects/tt-core/src/lib/db/Models/document/property-document.ts","../../../projects/tt-core/src/lib/interfaces/asset-type.enum.ts","../../../projects/tt-core/src/lib/interfaces/asset-entity-type.enum.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/db/Models/property/property-forecast.ts","../../../projects/tt-core/src/lib/models/property/property-forecast.ts","../../../projects/tt-core/src/lib/db/Models/property/property-category-movement.ts","../../../projects/tt-core/src/lib/models/property/property-category-movement.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-sale/tax-exemption.enum.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-category-list.enum.ts","../../../projects/tt-core/src/lib/collections/collection-dictionary.ts","../../../projects/tt-core/src/lib/collections/collection.ts","../../../projects/tt-core/src/lib/db/Enums/property/property-sale/tax-exemption-metadata.enum.ts","../../../projects/tt-core/src/lib/collections/property/property-sale/property-sale-tax-exemption-metadata.collection.ts","../../../projects/tt-core/src/lib/models/property/property.ts","../../../projects/tt-core/src/lib/models/bank/bank-account-property.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-connection.ts","../../../projects/tt-core/src/lib/db/Models/bank/basiq-job.ts","../../../projects/tt-core/src/lib/models/bank/basiq-job.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank.ts","../../../projects/tt-core/src/lib/models/bank/bank.ts","../../../projects/tt-core/src/lib/db/Enums/bank-connection-status.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/event/app-event.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-connection/bank-connection.service.ts","../../../projects/tt-core/src/lib/services/http/bank/basiq/basiq.service.ts","../../../projects/tt-core/src/lib/models/bank/basiq-token.ts","../../../projects/tt-core/src/lib/services/http/bank/basiq/basiq-token.service.ts","../../../projects/tt-core/src/lib/interceptors/basiq.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/collections/account-setup-item.collection.ts","../../../projects/tt-core/src/lib/collections/bank.collection.ts","../../../projects/tt-core/src/lib/models/bank/type-loan.const.ts","../../../projects/tt-core/src/lib/collections/bank-account.collection.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-operation.enum.ts","../../../projects/tt-core/src/lib/collections/bank-transaction.collection.ts","../../../projects/tt-core/src/lib/collections/client.collection.ts","../../../projects/tt-core/src/lib/db/Enums/firm-type.enum.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/models/export/export-cell.ts","../../../projects/tt-core/src/lib/models/export/export-cell-type.enum.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/collections/transaction/transaction.collection.ts","../../../projects/tt-core/src/lib/collections/depreciation.collection.ts","../../../projects/tt-core/src/lib/collections/depreciation-forecast.collection.ts","../../../projects/tt-core/src/lib/collections/income-source.collection.ts","../../../projects/tt-core/src/lib/collections/loan/loan.collection.ts","../../../projects/tt-core/src/lib/collections/loan/loan-payment.collection.ts","../../../projects/tt-core/src/lib/collections/message.collection.ts","../../../projects/tt-core/src/lib/collections/message-document.collection.ts","../../../projects/tt-core/src/lib/collections/property/property.collection.ts","../../../projects/tt-core/src/lib/models/report/depreciation/depreciation-lvp-asset-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-category.enum.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-categories.const.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/Enums/depreciation-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/depreciation-calculation.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-vehicle-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-list.enum.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-capital-project.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-capital-project.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-forecast.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-forecast.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-heading.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-heading.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-metadata.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-metadata-list.enum.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-metadata.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts.ts","../../../projects/tt-core/src/lib/db/Models/bank/bank-transaction.ts","../../../projects/tt-core/src/lib/db/Enums/bank-transaction-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-source.enum.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction.ts","../../../projects/tt-core/src/lib/db/Enums/transaction-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-receipt.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-receipt.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source.ts","../../../projects/tt-core/src/lib/db/Enums/income-source-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/salary-forecast.ts","../../../projects/tt-core/src/lib/models/income-source/salary-forecast.ts","../../../projects/tt-core/src/lib/db/Models/sole/sole-forecast.ts","../../../projects/tt-core/src/lib/models/income-source/sole-forecast.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source-forecast.ts","../../../projects/tt-core/src/lib/db/Enums/salary-forecast-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Models/incomeSource/income-source-type.ts","../../../projects/tt-core/src/lib/db/Enums/income-source-type-list-work.enum.ts","../../../projects/tt-core/src/lib/db/Enums/income-source-type-list-other.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/db/Models/transaction/transaction-metadata.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-metadata.ts","../../../projects/tt-core/src/lib/db/Models/transaction/transaction-allocation.ts","../../../projects/tt-core/src/lib/models/transaction/transaction-allocation.ts","../../../projects/tt-core/src/lib/models/transaction/income-amount-type.enum.ts","../../../projects/tt-core/src/lib/models/transaction/transaction.ts","../../../projects/tt-core/src/lib/models/bank/bank-transaction.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/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/collections/report/property/property-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-transaction.ts","../../../projects/tt-core/src/lib/collections/report/property/property-report-item-transaction.collection.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-depreciation.collection.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/collections/subscription/service-subscription.collection.ts","../../../projects/tt-core/src/lib/collections/tax-summary/report-item.collection.ts","../../../projects/tt-core/src/lib/db/Enums/tax-return-category-list.enum.ts","../../../projects/tt-core/src/lib/collections/tax-summary/tax-return-categories.const.ts","../../../projects/tt-core/src/lib/collections/tax-review.collection.ts","../../../projects/tt-core/src/lib/collections/transaction/transaction-allocation.collection.ts","../../../projects/tt-core/src/lib/collections/user-event-setting.collection.ts","../../../projects/tt-core/src/lib/models/logbook/logbook-period.ts","../../../projects/tt-core/src/lib/collections/vehicle-logbook.collection.ts","../../../projects/tt-core/src/lib/collections/vehicle.collection.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-etp.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-taxable.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-heading-tax-deductible.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-metadata-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chart-accounts-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/chat-status.enum.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/client-invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/client-invite-type.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/income-source-type-list-sole.enum.ts","../../../projects/tt-core/src/lib/db/Enums/invite-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-bank-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-interest-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-repayment-frequency.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-repayment-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/loan-type.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/property/property-share-status.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/subscription/service-price-type.enum.ts","../../../projects/tt-core/src/lib/db/Enums/subscription/service-subscription-status.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-return-category-section.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-review-status.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-list.enum.ts","../../../projects/tt-core/src/lib/db/Enums/tax-summary-section.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-frequency.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-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-claim-method.enum.ts","../../../projects/tt-core/src/lib/db/Enums/vehicle-logbook-purpose.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-item.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-login-data.ts","../../../projects/tt-core/src/lib/models/financial-year/month-number.enum.ts","../../../projects/tt-core/src/lib/models/financial-year/month-name-short.enum.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/basiq-config.ts","../../../projects/tt-core/src/lib/db/Models/loan/borrowing-expense.ts","../../../projects/tt-core/src/lib/models/borrowing-expense/borrowing-expense.ts","../../../projects/tt-core/src/lib/db/Models/loan/borrowing-expense-loan.ts","../../../projects/tt-core/src/lib/models/borrowing-expense/borrowing-expense-loan.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/db/Models/chart-accounts/chart-accounts-depreciation.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-depreciation.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-tax-labels.enum.ts","../../../projects/tt-core/src/lib/db/Models/chart-accounts/chart-accounts-value.ts","../../../projects/tt-core/src/lib/models/chart-accounts/chart-accounts-value.ts","../../../projects/tt-core/src/lib/db/Models/firm/chat.ts","../../../projects/tt-core/src/lib/models/chat/chat.ts","../../../projects/tt-core/src/lib/models/chat/chat-view-type.enum.ts","../../../projects/tt-core/src/lib/db/Models/firm/message.ts","../../../projects/tt-core/src/lib/db/Models/firm/message-document.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/db/Models/user/client-income-types.ts","../../../projects/tt-core/src/lib/models/client/client-income-types.ts","../../../projects/tt-core/src/lib/db/Models/firm/client-invite.ts","../../../projects/tt-core/src/lib/db/Models/user/registration-invite.ts","../../../projects/tt-core/src/lib/models/registration-invite/registration-invite.ts","../../../projects/tt-core/src/lib/models/client/client-invite.ts","../../../projects/tt-core/src/lib/db/Models/firm/client-movement.ts","../../../projects/tt-core/src/lib/models/client/client-movement.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/color/alphabet-colors.enum.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-group.enum.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-groups.const.ts","../../../projects/tt-core/src/lib/db/Models/depreciation/depreciation-receipt.ts","../../../projects/tt-core/src/lib/models/depreciation/depreciation-receipt.ts","../../../projects/tt-core/src/lib/db/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.ts","../../../projects/tt-core/src/lib/models/document/document-file-types.const.ts","../../../projects/tt-core/src/lib/db/Models/document/document-folder.ts","../../../projects/tt-core/src/lib/models/document/document-folder.ts","../../../projects/tt-core/src/lib/db/Models/firm/employee-invite.ts","../../../projects/tt-core/src/lib/models/employee/employee-invite.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/financial-year/months.const.ts","../../../projects/tt-core/src/lib/models/income-position/income-position.ts","../../../projects/tt-core/src/lib/models/income-source/income-source-chart-data.ts","../../../projects/tt-core/src/lib/models/loan/loan-max-number-of-payments.enum.ts","../../../projects/tt-core/src/lib/models/logbook/default-vehicle-expense.ts","../../../projects/tt-core/src/lib/models/logbook/logbook-purpose-options.const.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-logbook.ts","../../../projects/tt-core/src/lib/models/logbook/vehicle-logbook.ts","../../../projects/tt-core/src/lib/models/logbook/vehicle.ts","../../../projects/tt-core/src/lib/db/Models/vehicle/vehicle-claim.ts","../../../projects/tt-core/src/lib/models/logbook/vehicle-claim.ts","../../../projects/tt-core/src/lib/db/Models/service-notification.ts","../../../projects/tt-core/src/lib/models/notification/notification.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/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/share-filter-options.enum.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/Models/property/property-share.ts","../../../projects/tt-core/src/lib/models/property/property-share.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/property-sale.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/property-sale-tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/tax-exemption.ts","../../../projects/tt-core/src/lib/models/property/property-sale/tax-exemption.ts","../../../projects/tt-core/src/lib/db/Models/property/property-sale/tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/property/property-sale/tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/property/property-sale/property-sale-tax-exemption-metadata.ts","../../../projects/tt-core/src/lib/models/service-subscription/module-url-list.const.ts","../../../projects/tt-core/src/lib/db/Models/subscription/service-payment.ts","../../../projects/tt-core/src/lib/models/service-subscription/service-payment.ts","../../../projects/tt-core/src/lib/db/Models/firm/accountant/tax-review.ts","../../../projects/tt-core/src/lib/models/tax-review/tax-review.ts","../../../projects/tt-core/src/lib/models/tax-summary/report-item.ts","../../../projects/tt-core/src/lib/models/tax-summary/report-item-details.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/models/transaction/transaction-category.enum.ts","../../../projects/tt-core/src/lib/models/user/my-account-history.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/db/Models/user/occupation.ts","../../../projects/tt-core/src/lib/models/user/occupation.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/db/Models/user/user-event-type-category.ts","../../../projects/tt-core/src/lib/models/user-event/user-event-type-category.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-setting.ts","../../../projects/tt-core/src/lib/db/Models/user/user-event-type.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/models/user-event/user-event-setting-field.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-items.enum.ts","../../../projects/tt-core/src/lib/models/account-setup/account-setup-items.const.ts","../../../projects/tt-core/src/lib/services/http/firm/client-income/client-income-types.service.ts","../../../projects/tt-core/src/lib/services/http/property/property.service.ts","../../../projects/tt-core/src/lib/services/http/income-source/income-source.service.ts","../../../projects/tt-core/src/lib/services/http/bank/bank-account/bank-account.service.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/messages.enum.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-claim.service.ts","../../../projects/tt-core/src/lib/functions/enum-to-list.ts","../../../projects/tt-core/src/lib/services/http/transaction/messages.enum.ts","../../../projects/tt-core/src/lib/services/http/transaction/transaction.service.ts","../../../projects/tt-core/src/lib/services/account-setup/account-setup.service.ts","../../../projects/tt-core/src/lib/services/http/address/address.service.ts","../../../projects/tt-core/src/lib/services/asset/assets.service.ts","../../../projects/tt-core/src/lib/services/http/bank/bank.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/http/bank/bank-transaction/bank-transaction.service.ts","../../../projects/tt-core/src/lib/services/http/loan/borrowing-expense/borrowing-expense.service.ts","../../../projects/tt-core/src/lib/services/http/chart-accounts/chart-accounts.service.ts","../../../projects/tt-core/src/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.ts","../../../projects/tt-core/src/lib/services/event/sse.service.ts","../../../projects/tt-core/src/lib/services/http/chat/chat.service.ts","../../../projects/tt-core/src/lib/services/http/chat/message/message.service.ts","../../../projects/tt-core/src/lib/services/http/chat/message-document/message-document.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-movement/client-movement.service.ts","../../../projects/tt-core/src/lib/services/http/firm/portfolio-report/client-portfolio-report.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/depreciation/depreciation.service.ts","../../../projects/tt-core/src/lib/services/http/document/document-folder/document-folder.service.ts","../../../projects/tt-core/src/lib/services/http/firm/employee/employee.service.ts","../../../projects/tt-core/src/lib/services/http/firm/employee-invite/employee-invite.service.ts","../../../projects/tt-core/src/lib/services/http/firm/firm.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/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/intercom/intercom.service.ts","../../../projects/tt-core/src/lib/services/kompassify/kompassify.service.ts","../../../projects/tt-core/src/lib/services/http/loan/loan.service.ts","../../../projects/tt-core/src/lib/services/http/service-notification/service-notification.service.ts","../../../projects/tt-core/src/lib/models/pdf/pdf-config.ts","../../../projects/tt-core/src/lib/services/pdf/pdf.service.ts","../../../projects/tt-core/src/lib/services/report/property/property-transaction-report.service.ts","../../../projects/tt-core/src/lib/services/property/property-calculation/property-calculation.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-category/property-category.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-document/property-document.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-sale/property-sale.service.ts","../../../projects/tt-core/src/lib/services/property/equity-position-chart/equity-position-chart.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/subscription/subscription.service.ts","../../../projects/tt-core/src/lib/services/http/subscription/service-price.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-history/tax-review-history.service.ts","../../../projects/tt-core/src/lib/services/http/tax-summary/tax-summary.service.ts","../../../projects/tt-core/src/lib/services/transaction/transaction-calculation.service.ts","../../../projects/tt-core/src/lib/services/http/user/occupation/occupation.service.ts","../../../projects/tt-core/src/lib/services/http/user/user.service.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/vehicle/vehicle.service.ts","../../../projects/tt-core/src/lib/services/http/vehicle/vehicle-logbook.service.ts","../../../projects/tt-core/src/lib/services/xlsx/xlsx.service.ts","../../../projects/tt-core/src/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.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/round-to.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/bank/bank-account-loan.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account-property.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account-properties.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account-add-manual.form.ts","../../../projects/tt-core/src/lib/validators/date-range.validator.ts","../../../projects/tt-core/src/lib/forms/bank/bank-account-migrate.form.ts","../../../projects/tt-core/src/lib/forms/bank/bank-login.form.ts","../../../projects/tt-core/src/lib/validators/at-least-one.validator.ts","../../../projects/tt-core/src/lib/validators/require-autocomplete.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/forms/client/client-income-types.form.ts","../../../projects/tt-core/src/lib/forms/login/login.form.ts","../../../projects/tt-core/src/lib/forms/user/password.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/user/reset-password.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/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: boolean = 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) => {\n return response.access_token;\n })\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: string = '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) => {\n return response.suggestions.map((item: object) => plainToClass(CorelogicSuggestion, item));\n })\n );\n }\n}\n","import { Observable } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor\r\n} from '@angular/common/http';\r\nimport { CorelogicService } from '../services/property/corelogic/corelogic.service';\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 /**\r\n * Check if requested url requested core logic, but not core logic auth api\r\n * @param req\r\n */\r\n addToken(req: HttpRequest<any>): HttpRequest<any> {\r\n // don't need token for this endpoint\r\n if (req.url.includes(`${this.environment.coreLogicUrl}/access/oauth/token`)) {\r\n return req;\r\n }\r\n\r\n // add core logic token to request headers\r\n if (req.url.includes(this.environment.coreLogicUrl)) {\r\n return req.clone({\r\n setHeaders: {\r\n Authorization: 'Bearer ' + this.corelogicService._accessToken\r\n }\r\n });\r\n }\r\n\r\n // return request without changes if url not related with core logic\r\n return req;\r\n }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return next.handle(this.addToken(request));\r\n }\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor,\r\n HttpParams\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(\r\n @Inject('environment') private environment: any\r\n ) {}\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 if (!params.get('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","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { User } from '../../models/user/user';\n\nconst NAME_TOKEN = 'token';\nconst NAME_REFRESH_TOKEN = 'refreshToken';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class JwtService extends JwtHelperService {\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 }\n\n destroyTokens(): void {\n localStorage.removeItem(NAME_TOKEN);\n localStorage.removeItem(NAME_REFRESH_TOKEN);\n }\n\n getUser(): User {\n return this.decodeToken<User>();\n }\n\n isMe(userId: number): boolean {\n return this.getUser().id === userId;\n }\n}\n","export enum AppEventTypeEnum {\n CLIENT_MOVEMENT_CLOSED,\n BANK_CONNECTION_ADDED,\n BANK_ACCOUNT_CREATED,\n BANK_ACCOUNT_UPDATED,\n BANK_TRANSACTION_ALLOCATED,\n BASIQ_CONSENT_UPDATED,\n BASIQ_CONNECTION_UPDATED,\n BASIQ_JOB_CREATED,\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_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_SUBSCRIPTION_ADDED,\n PROPERTY_SUBSCRIPTION_DELETED,\n PROPERTY_VALUATION_DOCUMENT_CREATED,\n SERVICE_SUBSCRIPTION_UPDATED,\n TAX_REVIEW_UPDATED,\n TRANSACTION_CREATED,\n TRANSACTION_DELETED,\n TRANSACTION_UPDATED,\n TRANSACTIONS_CREATED,\n USER_UPDATED,\n VEHICLE_CLAIM_UPDATED,\n VEHICLE_CLAIM_CREATED,\n VEHICLE_LOGBOOK_CREATED,\n VEHICLE_LOGBOOK_UPDATED,\n VEHICLE_LOGBOOK_DELETED\n}\n","import { Injectable } from '@angular/core';\nimport { AppEvent } 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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n private eventSubject: Subject<AppEvent<any>> = 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 /**\n * deliver new event\n */\n dispatch<T>(event: AppEvent<T>): void {\n this.eventSubject.next(event);\n }\n}\n","import {BehaviorSubject} from 'rxjs';\nimport {Inject, Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {JwtService} from './jwt.service';\nimport {map} from 'rxjs/operators';\nimport {IEventListener} from \"../../interfaces/event-listener.interface\";\nimport {EventDispatcherService} from \"../event/event-dispatcher.service\";\nimport {AppEventTypeEnum} from \"../../models/event/app-event-type.enum\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService implements IEventListener{\n isLoggedInSubject: BehaviorSubject<boolean>;\n\n constructor(\n private http: HttpClient,\n private jwtService: JwtService,\n private eventDispatcherService: EventDispatcherService,\n @Inject('environment') private environment: any\n ) {\n this.listenEvents();\n this.isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());\n }\n\n /**\n * Listen to Event Dispatcher events\n */\n listenEvents(): void {\n this.listenUserGetFailed();\n }\n\n /**\n * User logout if failed current user get\n */\n listenUserGetFailed() {\n this.eventDispatcherService.on(AppEventTypeEnum.CURRENT_USER_GET_FAILED).subscribe(() => this.logoutFront());\n }\n\n setAuth(response: any) {\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_check`, {username, password}).pipe(\n map((response: any) => {\n this.setAuth(response);\n return response;\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: string = '/login'): void {\n localStorage.clear();\n location.replace(url);\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 } from '../services/auth/jwt.service';\nimport { AuthService } from '../services/auth/auth.service';\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 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 } else {\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 { 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 { Observable } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor, HttpParams\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 const params: HttpParams = new HttpParams({fromString: req.params.toString()}).set('_switch_user', username);\n return req.clone({params});\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 */\r\nexport const ENDPOINTS: {[key: string]: Endpoint} = {\r\n ASSETS_GET: new Endpoint('GET', '\\\\/assets\\\\/\\.\\*\\\\/\\\\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\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_GET: new Endpoint('GET', '\\\\/client-movements'),\r\n CLIENT_MOVEMENTS_POST: new Endpoint('POST', '\\\\/client-movements'),\r\n COUNTRIES_GET: new Endpoint('GET', '\\\\/countries'),\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\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\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 FIRM_UPDATE_PHOTO_POST: new Endpoint('POST', '\\\\/firms\\\\/photo\\.\\*'),\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_DOCUMENTS_POST: new Endpoint('POST', '\\\\/folders\\\\/\\\\d+\\\\/documents'),\r\n FOLDERS_DOCUMENTS_PUT: new Endpoint('PUT', '\\\\/folders\\\\/\\\\d+\\\\/documents\\\\/\\\\d+'),\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_CHECK_POST: new Endpoint('POST', '\\\\/login_check'),\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 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_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', '\\\\/properties\\\\/documents'),\r\n PROPERTIES_DOCUMENTS_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/documents'),\r\n PROPERTIES_DOCUMENTS_PUT: new Endpoint('PUT', '\\\\/properties\\\\/documents\\\\/\\\\d+'),\r\n PROPERTIES_DOCUMENTS_DELETE: new Endpoint('DELETE', '\\\\/properties\\\\/documents\\\\/\\\\d+'),\r\n PROPERTIES_PHOTO_POST: new Endpoint('POST', '\\\\/properties\\\\/\\\\d+\\\\/photo\\.\\*'),\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\r\n PRORATION_COST_POST: new Endpoint('POST', '\\\\/subscriptions\\\\/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_PAYMENTS_GET: new Endpoint('GET', '\\\\/service-payments'),\r\n STRIPE_BILLING_PORTAL_GET: new Endpoint('GET', '\\\\/stripe\\\\/billing-portal-session'),\r\n STRIPE_CHECKOUT_SESSION_POST: new Endpoint('POST', '\\\\/stripe\\\\/checkout-session'),\r\n SUBSCRIPTION_LAST_GET: new Endpoint('GET', '\\\\/subscriptions\\\\/last'),\r\n SUBSCRIPTION_ITEMS_PUT: new Endpoint('PUT', '\\\\/subscriptions\\\\/items'),\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_CURRENT_GET: new Endpoint('GET', '\\\\/users\\\\/current'),\r\n USER_CURRENT_PASSWORD_PUT: new Endpoint('PUT', '\\\\/users\\\\/current\\\\/password\\.\\*'),\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_RESET_PASSWORD_PUT: new Endpoint('PUT', '\\\\/users\\\\/reset-password'),\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\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_LOGBOOK_POST: new Endpoint('POST', '\\\\/vehicles\\\\/\\\\d+\\\\/logbooks'),\r\n VEHICLE_LOGBOOK_PUT: new Endpoint('PUT', '\\\\/vehicles\\\\/\\\\d+\\\\/logbooks\\\\/\\\\d+'),\r\n VEHICLE_CLAIMS_PUT: new Endpoint('PUT', '\\\\/vehicle-claims\\\\/\\\\d+')\r\n};\r\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 { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { PreloaderService } from '../services/preloader/preloader.service';\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","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","// replace array element with the new one (only arrays of objects)\r\nexport function replace(array: any[], item: any, matchField: string = '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: string = 'id', isDesc: boolean = 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: boolean = 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","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: number = 3000;\n autoClose: boolean = true;\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 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: 'Warning!',\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 } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { classToPlain, plainToClass } from 'class-transformer';\nimport { ToastService } from '../../toast/toast.service';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\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 Alex: refactor all services for work with collections instead of arrays\n * @TODO Alex: implement smart system of default toast messages\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\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 /**\n * get cached list of all instances\n */\n get(): Observable<Model[]> {\n if (!this.cache) {\n this.cache = [];\n this.fetch().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[]) => {\n return items.find((item: Model) => item['id'] === id);\n })\n );\n }\n\n /**\n * add new instance and update cache\n * @TODO rename to post\n */\n add(model: Model, shouldUpdateCache: boolean = true): Observable<Model> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(model))\n .pipe(\n map((newItem: BaseModel) => {\n if (!shouldUpdateCache) {\n return null\n }\n\n const newInstance: Model = this.createModelInstance(this.modelClass, 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 * Add several new items\n * @param models Array of new items for saving\n * @param queryParams query parameters for request\n * @TODO 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(this.modelClass, 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 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(this.modelClass, 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 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(this.modelClass, 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.cache = this.cache.filter((item: Model) => item['id'] !== model['id']);\n this.updateCache();\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`, models)\n .pipe(\n map(() => {\n const ids: number[] = models.map((model: Model): number => model['id']);\n this.cache = this.cache.filter((item: Model) => !ids.includes(item['id']));\n this.updateCache();\n\n if (this.messageDeletedBatch) {\n this.toastService.success(this.messageDeletedBatch);\n }\n })\n );\n }\n\n /**\n * clear service cache\n */\n resetCache(): void {\n this.fetch().subscribe();\n }\n\n /**\n * get list of base class instances directly from backend\n */\n protected fetch(): Observable<Model[]> {\n return this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: BaseModel[]): Model[] => {\n const items: Model[] = (this.isHydra ? response['hydra:member'] : response)\n .map((item: BaseModel): Model => {\n return this.createModelInstance(this.modelClass, item);\n });\n this.cache = items;\n this.updateCache();\n return items;\n })\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 * Create new instance of class\n * @param model The class for which you want to create an instance\n * @param baseModel base model instance that we will use as constructor options\n */\n protected createModelInstance(model: new(bm: BaseModel) => Model, baseModel: BaseModel): Model {\n return plainToClass(model, baseModel, { 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","import get from 'lodash/get';\n\nexport class AbstractModel {\n id?: any;\n\n hasValue(value: any, path: string = 'id'): boolean {\n return get(path) === value;\n }\n}\n","import { BankAccountStatusEnum } from '../../Enums/bank-account-status.enum';\nimport { BankAccountTypeEnum } from '../../Enums/bank-account-type.enum';\nimport { TankTypeEnum } from '../../Enums/tank-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 {AbstractModel} from '../abstract-model';\n\nexport class BankAccount extends AbstractModel {\n id?: number;\n status?: BankAccountStatusEnum;\n accountId?: string;\n type?: BankAccountTypeEnum;\n accountName?: string;\n nickname?: string;\n accountNumber?: string;\n tankType?: TankTypeEnum;\n currentBalance?: number;\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 bankTransactions?: BankTransaction[];\n balances?: BankAccountBalance[];\n loan?: Loan;\n}\n","export enum BankAccountTypeEnum {\n TRANSACTION = 1,\n SAVINGS = 2,\n CREDIT_CARD = 3,\n MORTGAGE = 4,\n LOAN = 5,\n INVESTMENT = 6,\n TERM_DEPOSIT = 7,\n OFFSET = 10,\n}\n","export enum BankAccountStatusEnum {\n\tINACTIVE = 0,\n\tACTIVE = 1,\n}","import { LoanTypeEnum } from '../../Enums/loan-type.enum';\nimport { LoanInterestTypeEnum } from '../../Enums/loan-interest-type.enum';\nimport { LoanRepaymentFrequencyEnum } from '../../Enums/loan-repayment-frequency.enum';\nimport { LoanRepaymentTypeEnum } from '../../Enums/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 {AbstractModel} from '../abstract-model';\n\nexport class Loan extends AbstractModel {\n id?: number;\n amount?: number;\n availableRedraw?: number;\n type?: LoanTypeEnum;\n interestType?: LoanInterestTypeEnum;\n interestRate?: number;\n commencementDate?: Date;\n term?: number;\n repaymentAmount?: number;\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","export enum LoanVehicleTypeEnum {\n AUTO_LOAN = 6,\n\tCHATTEL_MORTGAGE = 9,\n\tCOMMERCIAL_HIRE_PURCHASE = 10,\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","import { LoanPayoutTypeEnum } from '../../Enums/loan-payout-type.enum';\nimport { Loan } from './loan';\nimport {AbstractModel} from '../abstract-model';\n\nexport class LoanPayout extends AbstractModel {\n id?: number;\n type?: LoanPayoutTypeEnum;\n date?: Date;\n payoutAmount?: number;\n fees?: number;\n createdAt?: Date;\n updatedAt?: Date;\n loan?: Loan;\n}\n","export enum LoanPayoutTypeEnum {\n\tREFINANCE = 1,\n\tPAYOUT = 2,\n}","import { LoanPayout as LoanPayoutBase } from '../../db/Models/loan/loan-payout';\nimport { LoanPayoutTypeEnum } from '../../db/Enums/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 class FinancialYear {\r\n constructor(date?: Date) {\r\n this.year = date ? FinancialYear.toFinYear(date) : +localStorage.getItem('financialYear') || FinancialYear.toFinYear(new Date());\r\n\r\n this.setStartDate(this.year);\r\n this.setEndDate(this.year);\r\n }\r\n\r\n static startMonthIndex: number = 6;\r\n year: number;\r\n startDate: Date;\r\n endDate: Date;\r\n\r\n private yearStartDate: string = '-07-01';\r\n private yearEndDate: string = '-06-30';\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","import { Loan as LoanBase } from '../../db/Models/loan/loan';\nimport { LoanRepaymentTypeEnum } from '../../db/Enums/loan-repayment-type.enum';\nimport { LoanVehicleTypeEnum } from '../../db/Enums/loan-vehicle-type.enum';\nimport { Type } from 'class-transformer';\nimport { LoanPayment } from './loan-payment';\nimport { LoanPayout } from './loan-payout';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport last from 'lodash/last';\n\nexport class Loan extends LoanBase {\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.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","export enum TankTypeEnum {\n PROPERTY = 1,\n WORK = 2,\n OTHER = 3,\n SOLE = 4,\n}\n","import { BankAccount } from './bank-account';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankAccountBalance extends AbstractModel {\n financialYear?: number;\n openingBalance?: number;\n closingBalance?: number;\n id?: 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';\n\nexport class BankAccountProperty extends AbstractModel {\n percent?: number;\n id?: number;\n bankAccount?: BankAccount;\n property?: Property;\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 {AbstractModel} from '../abstract-model';\n\nexport class Property extends AbstractModel {\n id?: number;\n photo?: string;\n purchasePrice?: number;\n contractDate?: Date;\n settlementDate?: Date;\n depreciationCalculation?: PropertyDepreciationCalculationEnum;\n shareWith?: string;\n claimPercent?: number;\n growthPercent?: number;\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 stampDuty?: number;\n legalFees?: number;\n otherCapitalCosts?: number;\n propertyBankAccounts?: BankAccountProperty[];\n createdBy?: User;\n updatedBy?: User;\n documents?: PropertyDocument[];\n depreciations?: Depreciation[];\n}\n","import { Property } from './property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertySubscription extends AbstractModel {\n id?: number;\n createdAt?: Date;\n deletedAt?: Date;\n property?: Property;\n user?: User;\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-details';\nimport { EmployeeDetails } from './employee-details';\nimport {AbstractModel} from '../abstract-model';\n\nexport class User extends AbstractModel {\n id?: number;\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 stripeId?: string;\n basiqId?: string;\n roles?: UserRolesEnum;\n financialYear?: number;\n dateOfBirth?: 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}\n","export enum UserStatusEnum {\n INACTIVE = 0,\n ON_BOARDING = 1,\n ACTIVE = 2,\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 SWITCH_USER = 'ROLE_PREVIOUS_ADMIN',\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 id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n country?: Country;\n}\n","import {AbstractModel} from './abstract-model';\n\nexport class Country extends AbstractModel {\n\tid?: number;\n\tname?: string;\n\tcallingCode?: string;\n}\n","import { Country as CountryBase } from '../../db/Models/country';\r\n\r\nexport class Country extends CountryBase {\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","export enum AddressTypeEnum {\n\tSTREET = 1,\n\tPOSTAL = 2,\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 get name(): string {\r\n return `${this.unitNumber ? this.unitNumber + '/' : ''}${this.address}`;\r\n }\r\n\r\n get nameLong(): string {\r\n return `${this.name}, ${this.city}, ${this.state}`;\r\n }\r\n}\r\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","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';\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 privateHealthCare?: boolean;\n spouse?: boolean;\n spouseAnnualIncome?: number;\n studentLoanAmount?: number;\n dependants?: number;\n medicareExemption?: ClientDetailsMedicareExemptionEnum;\n pensionersTax?: boolean;\n workingHolidayMaker?: ClientDetailsWorkingHolidayMakerEnum;\n dateOfBirth?: Date;\n isGST?: boolean;\n capitalLoss?: number;\n basiqConsentExist?: boolean;\n id?: number;\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 as ClientDetailsBase } from '../../db/Models/user/client-details';\n\nexport class ClientDetails extends ClientDetailsBase {\n}\n","import { User } from './user';\nimport { Firm } from '../firm/firm';\nimport {AbstractModel} from '../abstract-model';\n\nexport class EmployeeDetails extends AbstractModel {\n id?: number;\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';\n\nexport class Firm extends AbstractModel {\n id?: number;\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}\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 id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n country?: Country;\n}\n","export enum PhoneTypeEnum {\n\tMOBILE = 1,\n\tOFFICE = 2,\n}","import { Phone as PhoneBase } from '../../db/Models/phone';\r\nimport { PhoneTypeEnum } from '../../db/Enums/phone-type.enum';\r\n\r\nexport class Phone extends PhoneBase {\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","import { Firm as FirmBase } from '../../db/Models/firm/firm';\r\nimport { Phone } from '../phone/phone';\r\nimport { Address } from '../address/address';\r\nimport { User } from '../user/user';\r\nimport { Type } from 'class-transformer';\r\nimport { Photoable } from '../../interfaces/photoable';\r\n\r\nexport class Firm extends FirmBase implements Photoable {\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 /**\r\n * get firm photo link\r\n */\r\n getPhoto(): string {\r\n return this.photo;\r\n }\r\n\r\n /**\r\n * get firm initials\r\n */\r\n getInitials(): string {\r\n return `${this.name[0].toUpperCase()}${this.name[1]}`;\r\n }\r\n}\r\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 { 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 {AbstractModel} from '../abstract-model';\n\nexport class ServiceSubscription extends AbstractModel {\n id?: number;\n stripeId?: string;\n startDate?: Date;\n endDate?: Date;\n status?: ServiceSubscriptionStatusEnum;\n user?: User;\n items?: ServiceSubscriptionItem[];\n payments?: ServicePayment[];\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 id?: number;\n price?: ServicePrice;\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 id?: number;\n stripeId?: string;\n amount?: number;\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';\n\nexport class ServiceProduct extends AbstractModel {\n id?: number;\n stripeId?: string;\n title?: string;\n role?: string;\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","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}\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 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 isArchived(): boolean {\n return this.status === ServiceProductStatusEnum.ARCHIVED;\n }\n}\n","import { ServicePrice as BaseServicePrice } from '../../db/Models/subscription/service-price';\nimport { ServiceProduct } from './service-product';\nimport {plainToClass, Type} from 'class-transformer';\nimport {ServiceSubscriptionItem} from './service-subscription-item';\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","import { ServiceSubscriptionItem as ServiceSubscriptionItemBase } from '../../db/Models/subscription/service-subscription-item';\nimport { ServicePrice } from './service-price';\nimport { Type } from 'class-transformer';\nimport {ServiceProductIdEnum} from '../../db/Enums/subscription/service-product-id.enum';\n\n/**\n * backend bd doesn't support dynamic prices, as far as we have just one product like that we keep it hardcoded\n */\nconst PROPERTY_TANK_PRICE = 9;\n\nexport class ServiceSubscriptionItem extends ServiceSubscriptionItemBase {\n @Type(() => ServicePrice)\n price: ServicePrice;\n\n get total(): number {\n let price = this.price.amount * this.quantity;\n if (this.price.product.id === ServiceProductIdEnum.PROPERTIES) {\n price += PROPERTY_TANK_PRICE;\n }\n\n return price;\n }\n}\n","export enum SubscriptionTypeEnum {\r\n WITHOUT_SUBSCRIPTION = 0,\r\n INDIVIDUAL = 1,\r\n INVESTOR = 2,\r\n INVESTOR_PLUS = 3\r\n}\r\n","import { SubscriptionTypeEnum } from './subscription-type.enum';\r\n\r\nexport const SUBSCRIPTION_TITLE: {[key: number]: string} = {\r\n [SubscriptionTypeEnum.WITHOUT_SUBSCRIPTION]: 'Without subscription',\r\n [SubscriptionTypeEnum.INDIVIDUAL]: 'Individual',\r\n [SubscriptionTypeEnum.INVESTOR]: 'Investor',\r\n [SubscriptionTypeEnum.INVESTOR_PLUS]: 'Investor plus'\r\n};\r\n","import { SubscriptionTypeEnum } from './subscription-type.enum';\r\n\r\nexport const SUBSCRIPTION_DESCRIPTION: {[key: number]: string} = {\r\n [SubscriptionTypeEnum.WITHOUT_SUBSCRIPTION]: 'Without subscription',\r\n [SubscriptionTypeEnum.INDIVIDUAL]: 'Manage income and expenses via live bank feeds. Keep receipts safe, maximise deductions & minimise tax.',\r\n [SubscriptionTypeEnum.INVESTOR]: 'Property made easy with smart tax tools and real-time information to help control how much tax you pay.',\r\n [SubscriptionTypeEnum.INVESTOR_PLUS]: 'Add your whole portfolio, including investment properties, home and properties in trusts. For 3+ properties an extra $6 will be charged per property.'\r\n};\r\n","import { ServiceSubscription as ServiceSubscriptionBase } from '../../db/Models/subscription/service-subscription';\nimport { ServiceSubscriptionItem } from './service-subscription-item';\nimport { SubscriptionTypeEnum } from './subscription-type.enum';\nimport { SUBSCRIPTION_TITLE } from './subscription-title.const';\nimport { SUBSCRIPTION_DESCRIPTION } from './subscription-description.const';\nimport { UserRolesEnum } from '../../db/Enums/user-roles.enum';\nimport { Type } from 'class-transformer';\n\nconst PROPERTY_INVESTOR_MAX_PROPERTIES = 2;\n\nexport class ServiceSubscription extends ServiceSubscriptionBase {\n @Type(() => Date)\n startDate: Date;\n\n @Type(() => Date)\n endDate: Date;\n\n @Type(() => ServiceSubscriptionItem)\n items: ServiceSubscriptionItem[];\n\n // Number of days after which the trial time will be expired\n lastTrialDays: number = 4;\n\n get isTrial(): boolean {\n return !this.stripeId;\n }\n\n get price(): number {\n return this.items.reduce((sum: number, item: ServiceSubscriptionItem) => sum + item.total, 0);\n }\n\n get propertyQuantity(): number {\n return this.propertiesItem ? this.propertiesItem.quantity : 0;\n }\n\n /**\n * get type of subscription\n */\n get type(): SubscriptionTypeEnum {\n const workTankProduct: ServiceSubscriptionItem = this.items.find((item: ServiceSubscriptionItem): boolean => {\n return item.price.product.isWorkTank();\n });\n\n if (!this.workTankItem || !this.isActive) {\n return SubscriptionTypeEnum.WITHOUT_SUBSCRIPTION;\n }\n\n if (this.items.length === 1 && !!workTankProduct) {\n return SubscriptionTypeEnum.INDIVIDUAL;\n }\n\n const propertyTankProduct: ServiceSubscriptionItem = this.items.find((item: ServiceSubscriptionItem): boolean => {\n return item.price.product.isProperties();\n });\n\n if (!!this.propertiesItem && propertyTankProduct.quantity === PROPERTY_INVESTOR_MAX_PROPERTIES) {\n return SubscriptionTypeEnum.INVESTOR;\n }\n\n return SubscriptionTypeEnum.INVESTOR_PLUS;\n }\n\n /**\n * get title of subscription\n */\n get title(): string {\n return SUBSCRIPTION_TITLE[this.type];\n }\n\n /**\n * get description of subscription\n */\n get description(): string {\n return SUBSCRIPTION_DESCRIPTION[this.type];\n }\n\n /**\n * This check on getIsActive need for firm. Accountant has a endDate, but user has not endDate\n * and for user we add check for endDate\n */\n get isActive(): boolean {\n return this.endDate ? new Date(this.endDate).getTime() > new Date().getTime() : true;\n }\n\n get daysRemain(): number {\n const daysRemains: number = Math.round(\n (new Date(this.endDate).getTime() - new Date().getTime()) / (1000 * 3600 * 24)\n );\n\n return daysRemains > 0 ? daysRemains : 0;\n }\n\n getTitle(): string {\n return this.isTrial ? 'Trial period' : this.title;\n }\n\n /**\n * Check if subscription is Individual\n * Subscription is individual when user have only one product and only work tank\n */\n isIndividual(): boolean {\n return this.type === SubscriptionTypeEnum.INDIVIDUAL;\n }\n\n /**\n * Check if subscription is Investor\n * Subscription is investor when user have property tank product and max count of properties is 2\n */\n isInvestor(): boolean {\n return this.type === SubscriptionTypeEnum.INVESTOR;\n }\n\n /**\n * Check if subscription is Investor Plus\n * Subscription is investor when user have property tank product and max count of properties more than 2\n */\n isInvestorPlus(): boolean {\n return this.type === SubscriptionTypeEnum.INVESTOR_PLUS;\n }\n\n /**\n * Check if trial expired\n */\n isTrialExpired(): boolean {\n return this.daysRemain && this.daysRemain <= 0;\n }\n\n isTrialExpiring(): boolean {\n return this.daysRemain > 0 && this.daysRemain <= this.lastTrialDays;\n }\n\n isRenewable(): boolean {\n return !this.isTrial && this.isActive;\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 propertiesItem(): 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) => {\n return subscriptionItem.price.product.role.includes(UserRolesEnum.PROPERTY_TANK);\n });\n }\n\n hasWorkTank() {\n return !!this.items.find((subscriptionItem: ServiceSubscriptionItem) => {\n return subscriptionItem.price.product.role.includes(UserRolesEnum.WORK_TANK);\n });\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","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/address';\nimport { USER_WORK_POSITION } from './user-work-position.const';\nimport { ClientDetails } from '../client/client-details';\nimport { EmployeeDetails } from '../employee/employee-details';\nimport { Type } from 'class-transformer';\nimport { Phone } from '../phone/phone';\nimport { ServiceSubscription } from '../service-subscription/service-subscription';\nimport { ServiceSubscriptionItem } from '../service-subscription/service-subscription-item';\nimport { Photoable } from '../../interfaces/photoable';\n\nexport class User extends BaseUser implements Photoable {\n @Type(() => ServiceSubscription)\n subscriptions: ServiceSubscription[];\n\n @Type(() => ClientDetails)\n clientDetails: ClientDetails;\n\n @Type(() => EmployeeDetails)\n employeeDetails: EmployeeDetails;\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 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 hasRole(role: UserRolesEnum): boolean {\n return this.roles.includes(role);\n }\n\n isOnboarding(): boolean {\n return this.status === UserStatusEnum.ON_BOARDING;\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 /**\n * Get user's photo link\n */\n getPhoto(): string {\n return this.photo;\n }\n\n /**\n * get user's initials\n */\n getInitials(): string {\n return `${this.firstName[0].toUpperCase()}${this.lastName[0].toUpperCase()}`;\n }\n}\n\n","import { PropertySubscription as PropertySubscriptionBase } from '../../db/Models/property/property-subscription';\nimport { Type } from 'class-transformer';\nimport { User } from '../user/user';\n\nexport class PropertySubscription extends PropertySubscriptionBase {\n @Type(() => Date)\n createdAt: Date;\n\n @Type(() => User)\n user: User;\n}\n","import { User } from '../user/user';\nimport { Property } from './property';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyCategory extends AbstractModel {\n id?: number;\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 { PropertyCategory as PropertyCategoryBase } from '../../db/Models/property/property-category';\n\nexport class PropertyCategory extends PropertyCategoryBase {\n\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.name === 'Owner Occupied';\n }\n\n isVacantLand(): boolean {\n return this.name === 'Vacant Land';\n }\n}\n","import { Property } from './property';\nimport { PropertyDocument } from '../document/property-document';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyValuation extends AbstractModel {\n id?: number;\n date?: Date;\n marketValue?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n document?: PropertyDocument;\n}\n","import { Property } from '../property/property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\nimport {IDocument} from '../../../interfaces/document.interface';\nimport {Documentable} from '../../../interfaces/documentable.interface';\n\nexport class PropertyDocument extends AbstractModel implements IDocument {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n property?: Property;\n createdBy?: User;\n\n getApiUrlPrefix(): string {\n return '';\n }\n\n getEntity(): Documentable {\n return undefined;\n }\n}\n","// @TODO this enum should come from backend\r\n/**\r\n * Enum with asset types\r\n */\r\nexport enum AssetTypeEnum {\r\n RECEIPTS = 'receipts',\r\n DOCUMENTS = 'documents',\r\n MESSAGE = 'message'\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","import { PropertyDocument as PropertyDocumentBase } from '../../db/Models/document/property-document';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { IDocument } from '../../interfaces/document.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\nimport { Documentable } from '../../interfaces/documentable.interface';\nimport { Property } from './property';\n\nexport class PropertyDocument extends PropertyDocumentBase implements IAsset, IDocument {\n type: AssetTypeEnum = AssetTypeEnum.DOCUMENTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.PROPERTIES;\n property: Property;\n\n getApiUrlPrefix(): string {\n return '';\n }\n\n getEntity(): Documentable {\n return this.property;\n }\n}\n","import { PropertyValuation as PropertyValuationBase } from '../../db/Models/property/property-valuation';\nimport { Exclude, Type } from 'class-transformer';\nimport { PropertyDocument } from './property-document';\nimport { FinancialYear } from '../financial-year/financial-year';\n\nexport class PropertyValuation extends PropertyValuationBase {\n @Type(() => Date)\n date: Date;\n\n @Type(() => PropertyDocument)\n document: PropertyDocument;\n\n // could be File when just added new image\n @Exclude()\n documentFile: File;\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","import { Property } from './property';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyForecast extends AbstractModel {\n id?: number;\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}\n","import { PropertyForecast as PropertyForecastBase } from '../../db/Models/property/property-forecast';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { Transform } from 'class-transformer';\n\nexport class PropertyForecast extends PropertyForecastBase {\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 /**\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","import { Property } from './property';\nimport { PropertyCategory } from './property-category';\nimport { PropertyValuation } from './property-valuation';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class PropertyCategoryMovement extends AbstractModel {\n id?: number;\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 { 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';\n\nexport class PropertyCategoryMovement extends PropertyCategoryMovementBase {\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","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","export enum PropertyCategoryListEnum {\n\tOWNER_OCCUPIED = 3,\n\tVACANT_LAND = 5,\n}\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/abstract-model';\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 /**\n * @param collection The Collection instance to be grouped\n * @param path Path to the property to be grouped (Examples: 'transaction', 'property.category')\n * @param prop Optional: Field to group by (Default 'id', Examples: 'id', 'amount', 'date')\n */\n constructor(\n collection: Collection,\n path: string = 'id'\n ) {\n this.collectionConstructor = collection.constructor as new (items: object[]) => Collection;\n\n // Nothing to group when collection is empty\n if (!collection.length) {\n return;\n }\n\n // Do nothing if provided path was not found in the 1st collection's item\n if (!hasIn(collection.items[0], path.split('.')[0])) {\n return;\n }\n\n this.groupItems(collection, path);\n }\n\n /**\n * List of collections keys\n */\n get keys(): string[] {\n return Object.keys(this.items);\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 * Add new item by key\n */\n add(key: string | number, value: Collection) {\n this.items[key] = value;\n }\n\n /**\n * Join several collections by ids\n */\n merge(keys: number[]): Collection {\n return this.createCollection(\n flatten(\n keys.map((id: number): object[] => this.get(id.toString()).items)\n )\n );\n }\n\n /**\n * Create instance of collection\n */\n createCollection(items: object[] = []): Collection {\n return new this.collectionConstructor(items);\n }\n\n 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: boolean = 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 /**\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/abstract-model';\r\n\r\nconst DEFAULT_INDEX = 'other';\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 constructor(items: Model[] = []) {\r\n this.items = items;\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 getIds(): number[] {\r\n return this.items.map((item: Model): number => item['id']);\r\n }\r\n\r\n sortBy(field: string = 'id', isDesc: boolean = true): void {\r\n sort(this.items, field, isDesc);\r\n }\r\n\r\n /**\r\n * Get total sum of items by field\r\n */\r\n sumBy(path: string): number {\r\n return +this.items.reduce((sum: number, item: Model): number => sum + Number(get(item, path)), 0).toFixed(2);\r\n }\r\n\r\n groupBy(path: string = ''): CollectionDictionary<Collection<Model>> {\r\n return new CollectionDictionary(this, path);\r\n }\r\n\r\n indexBy(path: string): object {\r\n // Create empty initial object for groups\r\n const result: { [key: string]: Model } = {};\r\n\r\n this.toArray().forEach((model: Model) => {\r\n result[get(model, path, DEFAULT_INDEX)] = model;\r\n });\r\n\r\n return result;\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 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 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;\r\n }\r\n\r\n remove(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 removeBy(path: string, value: any): this {\r\n return this.filter((item: Model) => get(item, path) !== value);\r\n }\r\n}\r\n","export enum TaxExemptionMetadataEnum {\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 PropertySaleTaxExemptionMetadata\n} from '../../../models/property/property-sale/property-sale-tax-exemption-metadata';\nimport {TaxExemptionMetadataEnum} from '../../../db/Enums/property/property-sale/tax-exemption-metadata.enum';\n\nexport class PropertySaleTaxExemptionMetadataCollection extends Collection<PropertySaleTaxExemptionMetadata> {\n getPPRDays(): number {\n return this.getByMetadataId(TaxExemptionMetadataEnum.PPR_DAYS)?.value ?? 0;\n }\n\n getMarketValue(): number {\n return this.getByMetadataId(TaxExemptionMetadataEnum.MARKET_VALUE)?.value ?? 0;\n }\n\n getClaimPercent(): number {\n return this.getByMetadataId(TaxExemptionMetadataEnum.CLAIM_PERCENT)?.value ?? 100;\n }\n\n getByMetadataId(id: number): PropertySaleTaxExemptionMetadata {\n return this.items.find(\n (metadata: PropertySaleTaxExemptionMetadata) => metadata.metadata.id === id\n );\n }\n}\n","import {Property as PropertyBase} from '../../db/Models/property/property';\nimport {Documentable} from '../../interfaces/documentable.interface';\nimport {PropertyShare} from '../../db/Models/property/property-share';\nimport {PropertySubscription} from './property-subscription';\nimport {Exclude, Type} from 'class-transformer';\nimport {Photoable} from '../../interfaces/photoable';\nimport {Address} from '../address/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/user';\nimport {FinancialYear} from '../financial-year/financial-year';\nimport {TaxExemptionEnum} from '../../db/Enums/property/property-sale/tax-exemption.enum';\nimport {PropertyCategoryListEnum} from '../../db/Enums/property/property-category-list.enum';\nimport * as moment from 'moment';\nimport {PropertySale} from './property-sale/property-sale';\nimport {unitOfTime} from 'moment';\nimport {\n PropertySaleTaxExemptionMetadataCollection\n} from '../../collections/property/property-sale/property-sale-tax-exemption-metadata.collection';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\nimport { DepreciationCollection } from '../../collections/depreciation.collection';\n\n/**\n * propertySale docs - https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4209508353/Property+Sold+button\n */\nexport class Property extends PropertyBase implements Photoable, Documentable {\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(() => 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 // 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 /**\n * Get initials of property. Required by Photoable interface\n */\n getInitials(): string {\n return this.name.split(' ')[1].slice(0, 2);\n }\n\n /**\n * Get property photo. Required by Photoable interface\n */\n getPhoto(): string {\n return this.photo;\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 firstForecastYear(): number {\n return this.forecasts.reduce((min: number, forecast: PropertyForecast): number => {\n return min > forecast.financialYear ? forecast.financialYear : min;\n }, 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 /**\n * exact claim including share percent\n */\n get shareClaimPercent(): number {\n return this.sharePercent * this.claimPercent / 100;\n }\n\n get actualValuation(): PropertyValuation {\n return this.valuations.reduce((maxDateValuation: PropertyValuation, valuation: PropertyValuation) => {\n return maxDateValuation.date > valuation.date ? maxDateValuation : valuation;\n }, this.valuations[0]);\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 PropertySaleTaxExemptionMetadataCollection(sale.taxExemptionMetadata).getMarketValue();\n if (marketValue) {\n return marketValue;\n }\n\n return this.purchasePrice + this.capitalCostsTotalAmount + sale.holdingCosts + sale.structuralImprovementsWDV - sale.buildingAtCostClaimed;\n }\n\n /**\n * gross capital gain tax: sale costs - cost base\n */\n calculateCGT(sale: PropertySale): number {\n return (sale.price - sale.saleCostsTotalAmount - this.calculateCostBase(sale)) * this.shareRatio - sale.capitalLoss;\n }\n\n /**\n * net capital gain tax (includes tax exemptions)\n */\n calculateNetCGT(sale: PropertySale): number {\n return this.getCGTExemptionRatio(sale) * sale.grossCGT;\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 /**\n * tax exemption can reduce cgt from 100% to less (up to zero)\n */\n getCGTExemptionRatio(sale: PropertySale): number {\n const metadata: PropertySaleTaxExemptionMetadataCollection = new PropertySaleTaxExemptionMetadataCollection(sale.taxExemptionMetadata);\n\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 // investment property become main residence (exemption for main residence ownership duration)\n case TaxExemptionEnum.INVESTMENT_TO_PPR:\n const ownershipDays = this.getOwnershipDuration(sale);\n\n return (ownershipDays - metadata.getPPRDays()) / ownershipDays;\n // main residence become investment (exemption for home office percent usage)\n case TaxExemptionEnum.PPR_TO_INVESTMENT:\n // 1 year CGT discount can still apply (on the income producing % if used for 12 months or more)\n const ratio: number = this.isOneYearExemptionApplicable(sale) ? 0.5 : 1;\n return metadata.getClaimPercent() / 100 * ratio;\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 isOneYearExemptionApplicable(sale: PropertySale): boolean {\n return sale.grossCGT > 0 && this.getOwnershipDuration(sale, 'years') > 0;\n }\n\n /**\n * ownership duration from purchase till sale\n */\n getOwnershipDuration(sale: PropertySale, unitOfTime: unitOfTime.Diff = 'days'): number {\n return moment(sale.contractDate).diff(moment(this.contractDate), unitOfTime);\n }\n\n getTaxPosition(transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n return transactions.cashPosition - Math.abs(depreciations.claimAmount);\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/property';\n\nexport class BankAccountProperty extends BankAccountPropertyBase {\n @Type(() => Property)\n property: Property;\n\n @Transform(({value}) => value || 0)\n @Expose() percent: number;\n}\n","import { BankConnectionStatusEnum } from '../../Enums/bank-connection-status.enum';\nimport { User } from '../user/user';\nimport { Bank } from './bank';\nimport { BankAccount } from './bank-account';\nimport { BasiqJob } from './basiq-job';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankConnection extends AbstractModel {\n id?: number;\n externalId?: string;\n status?: BankConnectionStatusEnum;\n user?: User;\n bank?: Bank;\n bankAccounts?: BankAccount[];\n basiqJob?: BasiqJob;\n}\n","import { BankConnection } from './bank-connection';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BasiqJob extends AbstractModel {\n id?: number;\n externalId?: string;\n createdAt?: Date;\n updatedAt?: Date;\n bankConnection?: BankConnection;\n}\n","import { BasiqJob as BasiqJobBase } from '../../db/Models/bank/basiq-job';\n\nexport class BasiqJob extends BasiqJobBase {\n}\n","import { FinancialDataSystem } from './financial-data-system';\nimport { AbstractModel } from '../abstract-model';\n\nexport class Bank extends AbstractModel {\n name?: string;\n shortName?: string;\n externalId?: string;\n loginFields?: { [key: string]: string };\n logo?: string;\n id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n financialDataSystem?: FinancialDataSystem;\n}\n","import { Bank as BankBase } from '../../db/Models/bank/bank';\nimport { Photoable } from '../../interfaces/photoable';\nimport { Transform } from 'class-transformer';\n\nexport class Bank extends BankBase implements Photoable {\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 getInitials(): string {\n return this.name[0] + this.name[1];\n }\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","export enum BankConnectionStatusEnum {\n\tPENDING = 1,\n\tACTIVE = 2,\n\tINVALID = 3,\n}","import { BankConnection as BankConnectionBase } from '../../db/Models/bank/bank-connection';\nimport { BasiqJob } from './basiq-job';\nimport { Bank } from './bank';\nimport { Type } from 'class-transformer';\nimport { BankConnectionStatusEnum } from '../../db/Enums/bank-connection-status.enum';\n\nexport class BankConnection extends BankConnectionBase {\n @Type(() => BasiqJob)\n basiqJob: BasiqJob;\n\n @Type(() => Bank)\n bank: Bank;\n\n /**\n * Check if status of connection is inactive (invalid)\n */\n isInvalid(): boolean {\n return this.status === BankConnectionStatusEnum.INVALID;\n }\n\n isPending(): boolean {\n return this.status === BankConnectionStatusEnum.PENDING;\n }\n\n isActive(): boolean {\n return this.status === BankConnectionStatusEnum.ACTIVE;\n }\n\n /**\n * login required for new or disconnected external connections\n */\n isLoginRequired(): boolean {\n return !!(!this.id && this.bank.externalId) || this.isInvalid();\n }\n\n setPending(): void {\n this.status = BankConnectionStatusEnum.PENDING;\n }\n}\n","import { BankAccount as BankAccountBase } from '../../db/Models/bank/bank-account';\nimport { BankAccountTypeEnum } from '../../db/Enums/bank-account-type.enum';\nimport { BankAccountStatusEnum } from '../../db/Enums/bank-account-status.enum';\nimport { Loan } from '../loan/loan';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { BankAccountBalance } from '../../db/Models/bank/bank-account-balance';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { BankAccountProperty } from './bank-account-property';\nimport { BankConnection } from './bank-connection';\nimport { Type } from 'class-transformer';\n\n\nexport class BankAccount extends BankAccountBase {\n static loanTypes: BankAccountTypeEnum[] = [BankAccountTypeEnum.LOAN, BankAccountTypeEnum.MORTGAGE];\n\n // list of properties related with this bank account\n @Type(() => BankAccountProperty)\n bankAccountProperties: BankAccountProperty[];\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 /**\n * Get current opening balance amount\n */\n getOpeningBalance(): number {\n return this.getCurrentYearBalance()?.openingBalance || 0;\n }\n\n /**\n * Get bank account balance for current financial year\n */\n getCurrentYearBalance(): BankAccountBalance {\n const currentFinYear: number = new FinancialYear().year;\n return this.balances.find((balance: BankAccountBalance): boolean => balance.financialYear === currentFinYear);\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 * @TODO nicole check\n */\n isLoan(): boolean {\n return [BankAccountTypeEnum.MORTGAGE, BankAccountTypeEnum.LOAN].includes(this.type);\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.tankType === TankTypeEnum.WORK;\n }\n\n /**\n * check if bank account related to work tank\n */\n isPropertyTank(): boolean {\n return this.tankType === TankTypeEnum.PROPERTY;\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 /**\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","import { 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","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BankConnection as BankConnectionBase } from '../../../../db/Models/bank/bank-connection';\nimport { plainToClass } from 'class-transformer';\nimport { BankConnection } from '../../../../models/bank/bank-connection';\nimport { RestService } from '../../rest/rest.service';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { replace } from '../../../../functions/array';\nimport { Notification } from '../../../../models/notification/notification';\nimport { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.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> implements IEventListener {\n modelClass = BankConnection;\n url: string = 'bank-connections';\n\n listenEvents(): void {\n this.listenToAddedBankAccounts();\n this.listenBasiqJobCreated();\n this.listenConnectionUpdated();\n this.listenNotifications();\n }\n\n add(bankConnection: BankConnection): Observable<BankConnection> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, bankConnection)\n .pipe(\n map((bankConnectionBase: BankConnectionBase) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_CONNECTION_ADDED, null));\n\n return plainToClass(BankConnection, bankConnectionBase);\n })\n );\n }\n\n listenToAddedBankAccounts(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_ACCOUNT_CREATED).subscribe(() => {\n this.resetCache();\n });\n }\n\n /**\n * When user log in to bank, basiq create a job. We create a bank connection with based on this job\n */\n listenBasiqJobCreated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_JOB_CREATED).subscribe((result: { jobId: string, connection: BankConnection }) => {\n // push connection to cache temporary to show it to user directly with pending status and not wait until backend loaded\n const tempCache: BankConnection[] = cloneDeep(this.cache);\n result.connection.setPending();\n tempCache.push(result.connection);\n\n this.cache = tempCache;\n this.cacheSubject.next(tempCache);\n\n this.add(plainToClass(BankConnection, {basiqJob: {externalId: result.jobId}})).subscribe((newConnection: BankConnection) => {\n // replace temporary connection with real saved connection\n // no replace() because connection does not have id yet\n tempCache.splice(-1, 1, newConnection)\n\n this.cache = cloneDeep(tempCache);\n this.cacheSubject.next(tempCache);\n });\n })\n }\n\n /**\n * When basiq connection disconnected we create a basiq job and update this connection\n */\n listenConnectionUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_CONNECTION_UPDATED).subscribe((result: { jobId: string, connection: BankConnection }) => {\n // replace connection to cache temporary to show pending status until backend loaded\n const tempCache: BankConnection[] = cloneDeep(this.cache);\n result.connection.setPending();\n replace(tempCache, result.connection);\n\n this.cache = tempCache;\n this.cacheSubject.next(tempCache);\n\n this.add(plainToClass(BankConnection, {basiqJob: {externalId: result.jobId}})).subscribe((updatedConnection: BankConnection) => {\n // replace temporary connection again with real updated connection\n replace(tempCache, updatedConnection);\n\n this.cache = cloneDeep(tempCache);\n this.cacheSubject.next(tempCache);\n });\n })\n }\n\n /**\n * Update cache when basiq login failed to get actual connections statuses\n */\n listenNotifications(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification: Notification) => {\n if (!notification.isRead && notification.eventType === UserEventTypeClientTypeEnum.BASIQ_AUTHORIZATION_FAIL) {\n this.resetCache();\n }\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BankAccount as BankAccountBase } from '../../../../db/Models/bank/bank-account';\nimport { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.enum';\nimport { RestService } from '../../rest/rest.service';\nimport { BankAccount } from '../../../../models/bank/bank-account';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { BankConnection } from '../../../../models/bank/bank-connection';\nimport { Notification } from '../../../../models/notification/notification';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { BankConnectionService } from '../bank-connection/bank-connection.service';\nimport { ToastService } from '../../../toast/toast.service';\nimport { BasiqConnectionsResponse } from './basiq-connections-response.interface';\nimport { AppEvent } from '../../../../models/event/app-event';\nimport { BankLoginData } from '../../../../models/bank/bank-login-data';\n\n/**\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> implements IEventListener {\n static basiqApiUrl: string = 'https://au-api.basiq.io';\n\n url: string = 'basiq/accounts';\n modelClass = BankAccount;\n\n constructor(\n protected http: HttpClient,\n protected eventDispatcherService: EventDispatcherService,\n @Inject('environment') protected environment: any,\n protected toastService: ToastService,\n // init BankConnectionService to listen events\n private bankConnectionService: BankConnectionService\n ) {\n super(http, eventDispatcherService, environment, toastService);\n }\n\n /**\n * Listen events from Event Dispatcher service\n */\n listenEvents(): void {\n this.listenNotifications();\n }\n\n /**\n * Create Basiq job for the new bank connection creation\n */\n createConnection(data: BankLoginData, userId: string, connection: BankConnection): Observable<string> {\n return this.http.post(`${BasiqService.basiqApiUrl}/users/${userId}/connections`, data).pipe(\n map((response: BasiqConnectionsResponse) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_JOB_CREATED, {jobId: response.id, connection}));\n\n return response.id;\n })\n );\n }\n\n /**\n * Update disconnected bank connection\n */\n updateConnection(data: object, userId: string, connection: BankConnection): Observable<string> {\n return this.http.post(`${BasiqService.basiqApiUrl}/users/${userId}/connections`, Object.assign(data, {id: connection.externalId})).pipe(\n map((response: BasiqConnectionsResponse) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_CONNECTION_UPDATED, {jobId: response.id, connection}))\n\n return response.id;\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 === UserEventTypeClientTypeEnum.BASIQ_NEW_ACCOUNTS) {\n this.resetCache();\n }\n });\n }\n}\n","/**\n * access token, needed to access basiq connect ui (https://github.com/basiqio/basiq-connect-ui)\n */\nexport class BasiqToken {\n value: string;\n expiresAt: Date;\n\n constructor(value: string, expiresAt: Date) {\n this.value = value;\n this.expiresAt = expiresAt;\n }\n\n isExpired(): boolean {\n return this.expiresAt < new Date();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BasiqToken } from '../../../../models/bank/basiq-token';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BasiqTokenResponse } from './basiq-token-response.interface';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BasiqTokenService {\n cache: BasiqToken;\n cacheSubject: ReplaySubject<BasiqToken> = new ReplaySubject<BasiqToken>(1);\n\n constructor(\n protected http: HttpClient,\n @Inject('environment') protected environment: any\n ) { }\n\n /**\n * Access token to use basiq flow\n */\n get(): Observable<BasiqToken> {\n if (!this.cache || this.cache.isExpired()) {\n this.http.get(`${this.environment.apiV2}/basiq/tokens`)\n .pipe(\n map((response: BasiqTokenResponse): BasiqToken => {\n\n const now: number = new Date().getTime();\n return new BasiqToken(response.access_token, new Date(now + response.expires_in * 1000));\n })\n )\n .subscribe((token: BasiqToken) => {\n this.cache = token;\n this.cacheSubject.next(token);\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\nimport { BasiqToken } from '../models/bank/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 BasiqInterceptor 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.get().pipe(\n mergeMap((token: BasiqToken) => {\n return next.handle(this.addToken(request, token))\n })\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 { 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 { BasiqInterceptor } from './basiq.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: BasiqInterceptor,\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@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 { 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', false)\n }\n\n isCompleted(): boolean {\n return this.filterBy('isCompleted', true).length === this.length;\n }\n}\n","import { Collection } from './collection';\nimport { Bank } from '../models/bank/bank';\n\nexport class BankCollection extends Collection<Bank> {\n static tobBanksIds: number[] = [124, 13, 134, 172, 126, 142, 135, 137, 138, 128];\n\n constructor(banks: Bank[]) {\n super(banks);\n this.sortByPopularity();\n }\n\n sortByPopularity(): void {\n this.items.sort((bank1: Bank, bank2: Bank): number => {\n // Banks already sorted on backend by name, so we just need to up top-10 banks\n return (BankCollection.tobBanksIds.includes(bank1.id) && !BankCollection.tobBanksIds.includes(bank2.id)) ? -1 : 1;\n });\n }\n}\n","import { BankAccountTypeEnum } from '../../db/Enums/bank-account-type.enum';\n\nexport const TYPE_LOAN: BankAccountTypeEnum[] = [\n BankAccountTypeEnum.MORTGAGE,\n BankAccountTypeEnum.CREDIT_CARD,\n BankAccountTypeEnum.LOAN\n];\n","import { Collection } from './collection';\nimport { BankAccountTypeEnum } from '../db/Enums/bank-account-type.enum';\nimport { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { BankAccount } from '../models/bank/bank-account';\nimport { BankAccountProperty } from '../models/bank/bank-account-property';\nimport { Property } from '../models/property/property';\nimport flatten from 'lodash/flatten';\nimport uniqBy from 'lodash/uniqBy';\nimport concat from 'lodash/concat';\nimport { TYPE_LOAN } from '../models/bank/type-loan.const';\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: boolean = 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) => {\n return sum += bankAccount.balances.length ? bankAccount.getOpeningBalance() : 0;\n }, 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) => {\n return sum += bankAccount.currentBalance;\n }, 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) => {\n return bankAccount.bankAccountProperties.find((bankAccountProperty: BankAccountProperty) => {\n return bankAccountProperty.property.id === id;\n });\n }));\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) => {\n return bankAccount.bankAccountProperties.find((bankAccountProperty: BankAccountProperty) => {\n return ids.includes(bankAccountProperty.property.id);\n });\n })\n );\n }\n\n /**\n * get collection of active bank accounts\n */\n getActiveBankAccounts(): BankAccountCollection {\n return new BankAccountCollection(this.items.filter((bankAccount: BankAccount) => {\n return bankAccount.isActive();\n }));\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 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 /**\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[] => {\n return bankAccount.bankAccountProperties;\n })\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) => {\n return bankAccountProperty.property;\n }),\n 'id'\n );\n }\n\n getPropertyBalanceAmount(propertyId: number): number {\n return this.items.reduce((sum: number, bankAccount: BankAccount): number => {\n return sum + bankAccount.getPropertyBalanceAmount(propertyId);\n }, 0);\n }\n}\n","export enum TransactionOperationEnum {\n\tALLOCATE = 1,\n\tFIND_AND_MATCH = 2,\n\tTRANSFER = 3\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';\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 +(this.getAmount() - allocations.getByBankTransactionsIds(this.getIds()).amount).toFixed(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 => {\n return item.amount + bankTransaction.amount === 0 &&\n Math.abs(bankTransaction.date.getTime() - item.date.getTime()) < TRANSACTION_TRANSFER_DELAY;\n });\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 = new CollectionDictionary(allocations, 'transaction.id');\n // Init an empty dictionary we will fill below\n const bankTransactionsByTransactions: CollectionDictionary<BankTransactionCollection> = new CollectionDictionary(new BankTransactionCollection([]));\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 getUnallocatedBankTransactions(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 { User } from '../models/user/user';\n\nexport class ClientCollection extends Collection<User> {\n}\n","export enum FirmTypeEnum {\n\tACCOUNTANT = 1,\n\tADVISOR = 2,\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';\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 * 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 { 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}\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(type?: string): string[];\n\n abstract getExportBody(type?: string): ExportCell[][];\n\n getExportFooter(type?: string): ExportCell[] {\n return [];\n };\n\n export(type?: string): ExportDataTable {\n return plainToClass(ExportDataTable, {\n header: this.getExportHeader(type),\n body: this.getExportBody(type),\n footer: [this.getExportFooter(type)]\n });\n }\n}\n","import { Transaction } from '../../models/transaction/transaction';\nimport { TransactionAllocationCollection } from './transaction-allocation.collection';\nimport { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { ExportCell } from '../../models/export/export-cell';\nimport { plainToClass } from 'class-transformer';\nimport { ExportCellTypeEnum } from '../../models/export/export-cell-type.enum';\nimport { ExportableCollection } from '../exportable.collection';\n\n/**\n * Collection of transactions\n */\nexport class TransactionCollection extends ExportableCollection<Transaction> {\n /**\n * Get total amount of all transactions in the collection\n */\n get amount(): number {\n return +this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.getNetAmount(), 0).toFixed(2);\n }\n\n /**\n * Difference between allocated amount and total amount\n */\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return +(this.amount - allocations.getByTransactionsIds(this.getIds()).amount).toFixed(2);\n }\n\n /**\n * Get cash position\n * Cash Position = Income - Expenses\n * Cash position is equal to Total Amount because income is positive and expense is negative,\n */\n get cashPosition(): number {\n return this.claimAmount;\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 /**\n * Get summary of claim amounts\n */\n get claimAmount(): number {\n return this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.claimAmount, 0);\n }\n\n get grossAmount(): number {\n return +this.items.reduce((sum: number, transaction: Transaction) => sum + transaction.amount, 0).toFixed(2);\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 list of transactions filtered by chart accounts id\n * @param chartAccountsId chart accounts id for filtering\n */\n getByChartAccountsId(chartAccountsId: number): Transaction[] {\n return this.items.filter((transaction: Transaction): boolean => transaction.chartAccounts.id === chartAccountsId);\n }\n\n getIncomeTransactions(): TransactionCollection {\n return new TransactionCollection(\n this.items.filter((transaction: Transaction): boolean => transaction.isIncome())\n );\n }\n\n get claimIncome(): number {\n return this.getIncomeTransactions().claimAmount;\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 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 => {\n return ids.includes(transaction.property?.id);\n })\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 /**\n * Get transactions related to Vehicle category\n */\n getVehicleTransactions(): this {\n return this.create(\n this.items.filter((transaction: Transaction): boolean => {\n return transaction.isVehicleTransaction();\n })\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 return this.items.map((transaction: Transaction) => {\n return [\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","import { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { Collection } from './collection';\nimport { Depreciation } from '../models/depreciation/depreciation';\nimport uniqBy from 'lodash/uniqBy';\nimport compact from 'lodash/compact';\nimport { DepreciationCapitalProject } from '../models/depreciation/depreciation-capital-project';\nimport { TransactionCollection } from './transaction/transaction.collection';\nimport { ChartAccountsCategoryEnum } from '../db/Enums/chart-accounts-category.enum';\n\nexport class DepreciationCollection extends Collection<Depreciation> {\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) => {\n return sum + depreciation.currentYearForecast.claimAmount;\n }, 0);\n }\n\n getClaimAmountByYear(year: number = +localStorage.getItem('financialYear')): number {\n return this.amount - this.items.reduce((sum: number, depreciation: Depreciation): number => {\n return sum + depreciation.getCloseBalanceByYear(year);\n }, 0);\n }\n\n getCloseBalanceByYear(year: number = +localStorage.getItem('financialYear')): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => {\n return sum + depreciation.getCloseBalanceByYear(year);\n }, 0);\n }\n\n getCurrentYearForecastAmount(): number {\n return this.items.reduce((sum: number, depreciation: Depreciation): number => {\n return sum + depreciation.currentYearForecast.amount;\n }, 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 getPlantEquipment(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isPlantEquipment())\n );\n }\n\n getCapitalDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isCapital())\n );\n }\n\n getBorrowingExpenseDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isBorrowingExpense())\n );\n }\n\n getWrittenOffDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isWrittenOff())\n );\n }\n\n getLowValuePoolDepreciations(): DepreciationCollection {\n return new DepreciationCollection(\n this.items.filter((depreciation: Depreciation): boolean => depreciation.isLowValuePool())\n );\n }\n\n getCapitalProjects(): DepreciationCapitalProject[] {\n return uniqBy(\n compact(\n this.items.map((depreciation: Depreciation): DepreciationCapitalProject => {\n return depreciation.depreciationCapitalProject;\n })\n ),\n 'id'\n );\n }\n\n /**\n * Get a new collection of depreciations related to vehicles\n */\n getVehicleDepreciations(): DepreciationCollection {\n return this.create(\n this.items.filter((depreciation: Depreciation): boolean => {\n return depreciation.isVehicleDepreciation();\n })\n );\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","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 } from '../models/income-source/income-source';\nimport { TankTypeEnum } from '../db/Enums/tank-type.enum';\nimport { IncomeSourceTypeEnum } from '../db/Enums/income-source-type.enum';\nimport { IIncomeSourceForecast } from '../interfaces/income-source-forecast.interface';\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.isSalaryIncome() || 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.isSalaryIncome());\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","import { Collection } from '../collection';\nimport { Loan } from '../../models/loan/loan';\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","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 } from '../../models/loan/loan-payment';\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 return [\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}\n","import { Collection } from './collection';\nimport { Message } from '../models/chat/message';\nimport { User } from '../models/user/user';\n\n\nexport class MessageCollection extends Collection<Message> {\n getFirstUnreadMessage(user: User): Message {\n return this.items.find((message: Message): boolean => {\n return !message.isRead() && message.isFromEmployee() !== user.isEmployee();\n }\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 /**\n * Check if chat has unread chats\n */\n hasUnread(): boolean {\n return !!this.getUnread().length;\n }\n}\n","import { Collection } from './collection';\nimport { MessageDocument } from '../models/chat/message-document';\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","import { Collection } from '../collection';\nimport { Property } from '../../models/property/property';\nimport { FinancialYear } from '../../models/financial-year/financial-year';\nimport { PropertyCategory } from '../../models/property/property-category';\nimport uniqBy from 'lodash/uniqBy';\nimport { DepreciationCollection } from '../depreciation.collection';\nimport { TransactionCollection } from '../transaction/transaction.collection';\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 * 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 forecastedRentalReturn(): number {\n return this.sumBy('forecastedRentalReturn');\n }\n\n get forecastedTaxPosition(): number {\n return this.sumBy('forecastedTaxPosition');\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.sumBy('marketValueGrowth');\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 => {\n return min < property.contractDate ? min : property.contractDate;\n }, 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 => {\n return max.growthPercent < current.growthPercent ? current : max;\n }, this.first);\n }\n\n /**\n * Get property with the lowest tax position\n */\n getBestPerformanceTaxProperty(transactions: TransactionCollection, depreciations: DepreciationCollection): Property {\n return this.items.reduce((min: Property, current: Property): Property => {\n return min.getTaxPosition(transactions.filterBy('property.id', min.id), depreciations.filterBy('property.id', min.id))\n > current.getTaxPosition(transactions.filterBy('property.id', current.id), depreciations.filterBy('property.id', current.id))\n ? current\n : min;\n }, this.first);\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 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}\n","import { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\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 ],\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 ],\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 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 // @TODO Alex why?\r\n ChartAccountsCategoryEnum.PERSONAL_EXPENSE\r\n ],\r\n workIncome: [\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_INCOME,\r\n // @TODO Alex why?\r\n ChartAccountsCategoryEnum.PERSONAL_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 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 ],\r\n all: [\r\n ChartAccountsCategoryEnum.PROPERTY_INCOME,\r\n ChartAccountsCategoryEnum.WORK_INCOME,\r\n ChartAccountsCategoryEnum.OTHER_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.PERSONAL_EXPENSE\r\n ]\r\n};\r\n","import { Property } from '../property/property';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport {AbstractModel} from '../abstract-model';\nimport {Exclude, Transform, Type} from 'class-transformer';\n\nexport class TransactionBase extends AbstractModel {\n id?: number;\n amount?: number;\n property?: Property;\n date?: Date;\n chartAccounts?: ChartAccounts;\n description?: string;\n /**\n * could be File when just added new image\n * @TODO Alex plainToClass doesn't work with File without this hack https://github.com/typestack/class-transformer/issues/1178\n */\n @Exclude({toPlainOnly: true})\n @Type(() => Object)\n @Transform(({obj}) => {\n return obj.file;\n })\n file: File;\n claimPercent?: number;\n\n /**\n * Check if current tank is Property\n */\n isPropertyTank(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.property.includes(this.chartAccounts?.category);\n }\n\n /**\n * Check if current tank is Work\n */\n isWorkTank(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.work.includes(this.chartAccounts?.category);\n }\n\n /**\n * Check if current tank is Sole\n */\n isSoleTank(): boolean {\n return CHART_ACCOUNTS_CATEGORIES.sole.includes(this.chartAccounts?.category);\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 { DepreciationReceipt } from './depreciation-receipt';\nimport { DepreciationForecast } from './depreciation-forecast';\nimport { Loan } from '../loan/loan';\nimport { TransactionBase } from '../transaction/transaction-base';\n\nexport class Depreciation extends TransactionBase {\n id?: number;\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 receipt?: DepreciationReceipt;\n forecasts?: DepreciationForecast[];\n loan?: Loan;\n createdBy?: User;\n updatedBy?: User;\n}\n","export enum DepreciationTypeEnum {\n\tPLANT_EQUIPMENT = 1,\n\tCAPITAL_WORKS = 2,\n\tBULK_DEPRECIATION = 3,\n\tBORROWING_EXPENSES = 4,\n}","export enum DepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n\tCAPITAL = 3,\n\tLVP = 4,\n\tAMORTISATION = 5,\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 INTEREST_ON_LOAN = 302,\n BORROWING_EXPENSES = 315,\n DIVIDENDS = 542,\n TRANSFER = 615,\n BUILDING_AT_COST = 304,\n MANAGEMENT_FEES_PLATFORM_FEES = 656,\n KLMS_TRAVELLED_FOR_WORK = 24,\n KLMS_TRAVELLED = 683,\n DIRECTOR_FEES = 6,\n SALARY_OR_WAGES = 2,\n VEHICLES = 25,\n COMMERCIAL_VEHICLES = 26,\n VEHICLE_LOAN_INTEREST = 37,\n VEHICLE_LOAN_PRINCIPAL = 38,\n TAX_INSTALMENTS = 662,\n INTEREST_EARNED = 22,\n TRUST_INCOME = 567,\n TAX_OFFSETS_N_R_A_S = 571,\n}\n","import { Property } from '../property/property';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DepreciationCapitalProject extends AbstractModel {\n id?: number;\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 { DepreciationCapitalProject as DepreciationCapitalProjectBase } from '../../db/Models/depreciation/depreciation-capital-project';\nimport { Type } from 'class-transformer';\n\nexport class DepreciationCapitalProject extends DepreciationCapitalProjectBase {\n // @TODO remove after new rest api ready\n propertyId: number;\n\n @Type(() => Date)\n effectiveDate: Date;\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 id?: number;\n claimPercent?: number;\n createdAt?: Date;\n updatedAt?: Date;\n depreciation?: Depreciation;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { DepreciationForecast as DepreciationForecastBase } from '../../db/Models/depreciation/depreciation-forecast';\nimport * as moment from 'moment';\nimport { DateRange } from 'moment-range';\n\nexport class DepreciationForecast extends DepreciationForecastBase {\n isLVP: boolean;\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 { ChartAccountsTypeEnum } from '../../Enums/chart-accounts-type.enum';\nimport { ChartAccountsCategoryEnum } from '../../Enums/chart-accounts-category.enum';\nimport { ChartAccountsHeading } from './chart-accounts-heading';\nimport { TaxReturnItem } from '../tax-return/tax-return-item';\nimport { ChartAccountsValue } from './chart-accounts-value';\nimport { ChartAccountsMetadata } from './chart-accounts-metadata';\nimport { ChartAccountsDepreciation } from './chart-accounts-depreciation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccounts extends AbstractModel {\n id?: number;\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 metadata?: ChartAccountsMetadata[];\n depreciations?: ChartAccountsDepreciation[];\n}\n","import { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsHeading extends AbstractModel {\n id?: number;\n name?: string;\n chartAccounts?: ChartAccounts[];\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 { ChartAccountsMetadataListEnum } from '../../Enums/chart-accounts-metadata-list.enum';\nimport { ChartAccountsMetadataTypeEnum } from '../../Enums/chart-accounts-metadata-type.enum';\nimport { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsMetadata extends AbstractModel {\n id?: number;\n label?: ChartAccountsMetadataListEnum;\n type?: ChartAccountsMetadataTypeEnum;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts[];\n}\n","export enum ChartAccountsMetadataListEnum {\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\tFRANKED = 26,\n\tTAX_OFFSETS_N_R_A_S = 29,\n}\n","import { ChartAccountsMetadata as ChartAccountsMetadataBase } from '../../db/Models/chart-accounts/chart-accounts-metadata';\r\nimport { ChartAccountsMetadataListEnum } from '../../db/Enums/chart-accounts-metadata-list.enum';\r\n\r\nexport class ChartAccountsMetadata extends ChartAccountsMetadataBase {\r\n /**\r\n * Check if metadata id is related to SHARE_PERCENTAGE value\r\n */\r\n isSharePercentage(): boolean {\r\n return this.id === ChartAccountsMetadataListEnum.SHARE_PERCENTAGE;\r\n }\r\n\r\n isHours(): boolean {\r\n return this.id === ChartAccountsMetadataListEnum.HOURS;\r\n }\r\n}\r\n","import { ChartAccounts as ChartAccountsBase } from '../../db/Models/chart-accounts/chart-accounts';\r\nimport { Type } from 'class-transformer';\r\nimport { ChartAccountsHeading } from './chart-accounts-heading';\r\nimport { ChartAccountsMetadata } from './chart-accounts-metadata';\r\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\r\nimport { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\r\nimport { ChartAccountsHeadingVehicleListEnum } from '../../db/Enums/chart-accounts-heading-vehicle-list.enum';\r\nimport { CHART_ACCOUNTS_CATEGORIES } from './chart-accounts-categories.const';\r\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\r\nimport { FinancialYear } from '../financial-year/financial-year';\r\nimport { ChartAccountsValue } from './chart-accounts-value';\r\n\r\nexport class ChartAccounts extends ChartAccountsBase {\r\n @Type(() => ChartAccountsHeading)\r\n heading: ChartAccountsHeading;\r\n\r\n @Type(() => ChartAccountsMetadata)\r\n metadata: ChartAccountsMetadata[];\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 'Klms travelled for work' category\r\n */\r\n isKlmsForWork(): 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 'Klms travelled for sole' category\r\n */\r\n isKlmsForSole(): boolean {\r\n return this.id === ChartAccountsListEnum.KLMS_TRAVELLED;\r\n }\r\n\r\n /**\r\n * Check if accounts id is related for KLMs category related to passed tank type\r\n */\r\n isKLMsByTankType(tankType: TankTypeEnum): boolean {\r\n switch (tankType) {\r\n case TankTypeEnum.WORK:\r\n return this.isKlmsForWork();\r\n case TankTypeEnum.SOLE:\r\n return this.isKlmsForSole();\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if chart accounts id is related for 'NRAS Tax Offset' category\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 this.id === ChartAccountsListEnum.VEHICLES;\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 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.category === ChartAccountsCategoryEnum.PROPERTY_EXPENSE;\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 isPropertyDepreciation(): boolean {\r\n return [ChartAccountsCategoryEnum.PROPERTY_DEPRECIATION, ChartAccountsCategoryEnum.PROPERTY_CAPITAL_WORKS]\r\n .includes(this.category);\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 /**\r\n * Check if transaction chart account is work related car expenses\r\n */\r\n isVehicleLoanExpense(): boolean {\r\n return this.id === ChartAccountsListEnum.VEHICLE_LOAN_INTEREST || this.id === ChartAccountsListEnum.VEHICLE_LOAN_PRINCIPAL;\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","import { BankTransactionTypeEnum } from '../../Enums/bank-transaction-type.enum';\nimport { BankAccount } from './bank-account';\nimport { BankTransactionImport } from './bank-transaction-import';\nimport { TransactionAllocation } from '../transaction/transaction-allocation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class BankTransaction extends AbstractModel {\n id?: number;\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","export enum BankTransactionTypeEnum {\n\tDEBIT = 1,\n\tCREDIT = 2,\n}","export enum TransactionSourceEnum {\n\tCASH = 1,\n\tBANK_TRANSACTION = 2,\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 { TransactionReceipt } from './transaction-receipt';\nimport { TransactionMetadata } from './transaction-metadata';\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';\n\nexport class Transaction extends TransactionBase {\n id?: number;\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 receipt?: TransactionReceipt;\n property?: Property;\n metadata?: TransactionMetadata[];\n transfer?: Transaction;\n allocations?: TransactionAllocation[];\n loan?: Loan;\n depreciation?: Depreciation;\n createdBy?: User;\n updatedBy?: User;\n}\n","export enum TransactionTypeEnum {\n\tDEBIT = 1,\n\tCREDIT = 2,\n}","import { Transaction } from './transaction';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionReceipt extends AbstractModel {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n transaction?: Transaction;\n}\n","import { TransactionReceipt as TransactionReceiptBase } from '../../db/Models/transaction/transaction-receipt';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\n\nexport class TransactionReceipt extends TransactionReceiptBase implements IAsset {\n type: AssetTypeEnum = AssetTypeEnum.RECEIPTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.TRANSACTIONS;\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-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class IncomeSource extends AbstractModel {\n id?: number;\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","export enum IncomeSourceTypeEnum {\n WORK = 1,\n SOLE = 2,\n OTHER = 3,\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 id?: number;\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 { SalaryForecast as SalaryForecastBase } from '../../db/Models/incomeSource/salary-forecast';\nimport { IncomeSource } from './income-source';\nimport { IIncomeSourceForecast } from '../../interfaces/income-source-forecast.interface';\nimport { Expose, Transform, Type } from 'class-transformer';\n\nexport class SalaryForecast extends SalaryForecastBase implements IIncomeSourceForecast {\n @Transform(({obj}) => obj.netPay + obj.tax)\n @Expose() grossAmount: number;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\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 id?: number;\n incomeSource?: IncomeSource;\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/income-source-forecast.interface\";\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","import { IncomeSource } from './income-source';\nimport { IncomeSourceType } from './income-source-type';\nimport {AbstractModel} from '../abstract-model';\n\nexport class IncomeSourceForecast extends AbstractModel {\n id?: number;\n financialYear?: number;\n amount?: number;\n tax?: number;\n taxInstalments?: number;\n frankingCredits?: number;\n incomeSource?: IncomeSource;\n incomeSourceType?: IncomeSourceType;\n}\n","export enum SalaryForecastFrequencyEnum {\n\tANNUAL = 1,\n\tMONTHLY = 12,\n\tFORTNIGHTLY = 26,\n\tWEEKLY = 52,\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 id?: number;\n name?: string;\n taxReturnItem?: TaxReturnItem;\n incomeSourceForecasts?: IncomeSourceForecast[];\n}\n","export enum IncomeSourceTypeListWorkEnum {\n BONUSES = 1,\n DIRECTOR_FEES = 2,\n DIVIDENDS = 3,\n INTEREST = 4,\n PENSIONS_AND_ALLOWANCES = 5,\n SUPERANNUATION = 8,\n ATTRIBUTED_P_S_I = 11,\n}\n","export enum IncomeSourceTypeListOtherEnum {\n PSI = 6,\n SOLE_TRADER = 7,\n PARTNERSHIPS_AND_TRUSTS = 9,\n OTHER_INCOME = 10,\n}\n","import { IncomeSourceType as IncomeSourceTypeBase } from '../../db/Models/incomeSource/income-source-type';\nimport { IncomeSourceTypeListWorkEnum } from '../../db/Enums/income-source-type-list-work.enum';\nimport { IncomeSourceTypeListOtherEnum } from '../../db/Enums/income-source-type-list-other.enum';\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source-type.enum';\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 isSole(): boolean {\n // @TODO use IncomeSourceTypeListSoleEnum when sole tank ready\n return !!IncomeSourceTypeListOtherEnum[this.id];\n }\n\n get type(): IncomeSourceTypeEnum {\n switch (true) {\n case this.isWork():\n return IncomeSourceTypeEnum.WORK;\n case this.isSole():\n return IncomeSourceTypeEnum.SOLE;\n default:\n return IncomeSourceTypeEnum.OTHER;\n }\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/income-source-forecast.interface';\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: number = 0;\n frequency: SalaryForecastFrequencyEnum = SalaryForecastFrequencyEnum.ANNUAL;\n isTaxFree: boolean = 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","import { IncomeSource as IncomeSourceBase } from '../../db/Models/incomeSource/income-source';\r\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source-type.enum';\r\nimport { IIncomeSourceForecast } from '../../interfaces/income-source-forecast.interface';\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/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 isSalaryIncome(): boolean {\r\n return !!this.salaryForecasts.length;\r\n // @TODO Vik: old code\r\n // return this.type === IncomeSourceTypeEnum.SALARY;\r\n }\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 /**\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 { Transaction } from './transaction';\nimport { ChartAccountsMetadata } from '../chart-accounts/chart-accounts-metadata';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionMetadata extends AbstractModel {\n value?: string;\n id?: number;\n deletedAt?: Date;\n createdAt?: Date;\n updatedAt?: Date;\n transaction?: Transaction;\n chartAccountsMetadata?: ChartAccountsMetadata;\n}\n","import { TransactionMetadata as TransactionMetadataBase } from '../../db/Models/transaction/transaction-metadata';\nimport { Type } from 'class-transformer';\nimport { ChartAccountsMetadata } from '../chart-accounts/chart-accounts-metadata';\n\nexport class TransactionMetadata extends TransactionMetadataBase {\n @Type(() => ChartAccountsMetadata)\n metadata: ChartAccountsMetadata;\n}\n","import { BankTransaction } from '../bank/bank-transaction';\nimport { Transaction } from './transaction';\nimport {AbstractModel} from '../abstract-model';\n\nexport class TransactionAllocation extends AbstractModel {\n id?: number;\n amount?: number;\n bankTransaction?: BankTransaction;\n transaction?: Transaction;\n}\n","import { TransactionAllocation as TransactionAllocationBase } from '../../db/Models/transaction/transaction-allocation';\nimport { BankTransaction } from '../bank/bank-transaction';\nimport { Transaction } from './transaction';\nimport { plainToClass, Type } 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","/**\n * Enum with income amount types (Net or Gross)\n */\nexport enum IncomeAmountTypeEnum {\n NET,\n GROSS\n}\n","import { Transaction as TransactionBase } from '../../db/Models/transaction/transaction';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport { ChartAccountsCategoryEnum } from '../../db/Enums/chart-accounts-category.enum';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { ChartAccountsMetadataListEnum } from '../../db/Enums/chart-accounts-metadata-list.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 {Exclude, plainToClass, Transform, Type} from 'class-transformer';\nimport { Property } from '../property/property';\nimport { TransactionReceipt } from './transaction-receipt';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { IncomeSource } from '../income-source/income-source';\nimport { TransactionMetadata } from './transaction-metadata';\nimport { Loan } from '../loan/loan';\nimport { TransactionAllocation } from './transaction-allocation';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../chart-accounts/chart-accounts-categories.const';\nimport { IncomeAmountTypeEnum } from './income-amount-type.enum';\nimport { IReceipt } from '../../interfaces/receipt.interface';\nimport { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\nimport { Depreciation } from '../depreciation/depreciation';\nimport { Expense } from '../../interfaces/expense.interface';\n\n// @TODO refactor with baseModel in constructor\nexport class Transaction extends TransactionBase implements Expense, IReceipt {\n // list of child transactions (fees)\n @Type(() => Transaction)\n transactions: Transaction[] = [];\n\n @Type(() => Property)\n property: Property;\n\n @Type(() => TransactionReceipt)\n receipt: TransactionReceipt;\n\n @Type(() => ChartAccounts)\n chartAccounts: ChartAccounts;\n\n @Type(() => IncomeSource)\n incomeSource: IncomeSource;\n\n @Type(() => TransactionMetadata)\n metadata: TransactionMetadata[] = [];\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 tax: number = 0;\n operation: TransactionOperationEnum = TransactionOperationEnum.FIND_AND_MATCH;\n allocatedAmount: number;\n unallocatedAmount: number;\n isSelected: boolean;\n claimPercent: number = 100;\n amount: number = 0;\n\n isDebit(): boolean {\n return this.type === TransactionTypeEnum.DEBIT;\n }\n\n isCredit(): boolean {\n return this.type === TransactionTypeEnum.CREDIT;\n }\n\n isIncome(): boolean {\n if (!this.chartAccounts) {\n return this.isCredit();\n }\n\n return CHART_ACCOUNTS_CATEGORIES.income.includes(this.chartAccounts.category);\n }\n\n isExpense(): boolean {\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 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 * Check if transaction has 'Klms travelled for work' chart accounts category\n */\n get isKlmsChartAccountsCategory(): boolean {\n return this.chartAccounts.id === ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK;\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 /**\n * Get net amount (clean amount after all deductions)\n */\n getNetAmount(): number {\n // @TODO fix hack while transactions refactoring (use class-transformer)\n return +(Math.round(this.getIncomeAmountByType(IncomeAmountTypeEnum.NET) * 100) / 100).toFixed(2);\n }\n\n /**\n * Get gross income amount\n */\n getGrossIncome(): number {\n // @TODO fix hack while transactions refactoring (use class-transformer)\n return +(Math.round(this.getIncomeAmountByType(IncomeAmountTypeEnum.GROSS) * 100) / 100).toFixed(2);\n }\n\n get taxFreeComponent(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.TAX_FREE_COMPONENT);\n }\n\n get frankingCredit(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.FRANKING_CREDIT);\n }\n\n get eligibleForReduction(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.ELIGIBLE_FOR_REDUCTION);\n }\n\n get untaxedElement(): number {\n return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.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 get debit(): number {\n return this.isDebit() ? Math.abs(this.amount) : 0;\n }\n\n get credit(): number {\n return this.isCredit() ? Math.abs(this.amount) : 0;\n }\n\n /**\n * Get value of transaction metadata field\n * @param field for which value should be returned\n */\n private getMetadataFieldValue(field: ChartAccountsMetadataListEnum): number {\n return +this.metadata.find((transactionMetadata: TransactionMetadata): boolean => {\n return transactionMetadata.chartAccountsMetadata.id === field;\n })?.value || 0;\n }\n\n /**\n * Returns Net or Gross income amount based on provided income type\n * @param incomeType by which amount should be returned\n */\n private getIncomeAmountByType(incomeType: IncomeAmountTypeEnum): number {\n // modifier that determines whether the values of the transaction fields will be added or subtracted\n const modifier: number = incomeType === IncomeAmountTypeEnum.GROSS ? 1 : -1;\n\n switch (true) {\n case this.isPropertyTank():\n return this.amount +\n (this.transactions\n .reduce((sum: number, transaction: Transaction): number => sum + Math.abs(transaction.amount), 0) * modifier);\n case this.isWorkTank():\n return this.amount + ((this.tax + this.frankingCredit - this.taxFreeComponent - this.eligibleForReduction) * modifier);\n default:\n return this.amount || 0;\n }\n }\n\n isInterest(): boolean {\n return this.chartAccounts.id === ChartAccountsListEnum.INTEREST_ON_LOAN;\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: this.amount,\n chartAccounts: this.chartAccounts,\n description: this.description,\n type: DepreciationTypeEnum.PLANT_EQUIPMENT,\n claimPercent: this.claimPercent,\n property: this.property,\n calculation: this.property ? this.property.depreciationCalculation : DepreciationCalculationEnum.PRIME_COST\n });\n }\n\n /**\n * Check if transaction is completely allocated\n */\n isAllocated(allocations: TransactionAllocationCollection): boolean {\n return this.getNetAmount() === this.getAllocatedAmount(allocations);\n }\n\n /**\n * Get transaction allocated amount\n */\n getAllocatedAmount(allocations: TransactionAllocationCollection): number {\n return allocations.getByTransactionsIds([this.id]).amount;\n }\n\n /**\n * Get transaction unallocated amount\n */\n getUnallocatedAmount(allocations: TransactionAllocationCollection): number {\n return this.getNetAmount() - this.getAllocatedAmount(allocations);\n }\n}\n","import { BankTransaction as BankTransactionBase } from '../../db/Models/bank/bank-transaction';\nimport { BankTransactionTypeEnum } from '../../db/Enums/bank-transaction-type.enum';\nimport { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { plainToClass, Type } from 'class-transformer';\nimport { TransactionOperationEnum } from '../../db/Enums/transaction-operation.enum';\nimport { Transaction } from '../transaction/transaction';\nimport { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\n\nexport class BankTransaction extends BankTransactionBase {\n // allocated money amount for bank transaction\n allocatedAmount: number = 0;\n unallocatedAmount: number = 0;\n\n operation: TransactionOperationEnum;\n\n @Type(() => Date)\n date: Date;\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(): Transaction {\n return plainToClass(Transaction, {\n amount: +this.amount.toFixed(2),\n description: this.description,\n date: this.date,\n source: TransactionSourceEnum.BANK_TRANSACTION,\n operation: this.operation,\n type: this.type,\n });\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 { 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 } from '../../db/Enums/chart-accounts-heading-vehicle-list.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { DepreciationCapitalProject } from './depreciation-capital-project';\nimport { DepreciationForecast } from './depreciation-forecast';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { ChartAccounts } from '../chart-accounts/chart-accounts';\nimport { BankTransaction } from '../bank/bank-transaction';\nimport { IReceipt } from '../../interfaces/receipt.interface';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { plainToClass, Transform, Type } from 'class-transformer';\nimport { Transaction } from '../transaction/transaction';\nimport { Expense } from '../../interfaces/expense.interface';\nimport {DepreciationReceipt} from './depreciation-receipt';\n\nexport class Depreciation extends DepreciationBase implements Expense, IReceipt {\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 receipt: DepreciationReceipt;\n\n /**\n * @TODO remove after ? signs removed from db models\n */\n amount: number = 0;\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 /**\n * check if depreciation should be displayed in written off category\n * details in project documentation\n * @TODO new FinancialYear(this.writeOffDate) === new FinancialYear()\n */\n isWrittenOff(): boolean {\n return this.isAsset && this.writeOffDate && new FinancialYear(this.writeOffDate).year === this.financialYear;\n }\n\n /**\n * Check if depreciation is Plant & Equipment\n */\n isPlantEquipment(): boolean {\n return this.isAsset() && !this.isWrittenOff() && !this.isLowValuePool();\n }\n\n /**\n * check if depreciation should be displayed in low value pool\n * details in project documentation\n * @TODO new FinancialYear(this.writeOffDate) === new FinancialYear()\n */\n isLowValuePool(): boolean {\n return this.isAsset &&\n this.calculation === DepreciationCalculationEnum.DIMINISHING &&\n this.amount > Depreciation.WRITTEN_OFF_THRESHOLD &&\n this.amount <= Depreciation.LOW_VALUE_POOL_THRESHOLD;\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 /**\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((forecast: DepreciationForecast): boolean => {\n return 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 => {\n return forecast.financialYear === year;\n });\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, {amount: this.currentYearForecast.amount})\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","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 {\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.isPlantEquipment():\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) => {\n return plainToClass(DepreciationReportItem, depreciation);\n })\n );\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 { Property } from '../../property/property';\nimport { ChartAccounts } from '../../chart-accounts/chart-accounts';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../chart-accounts/chart-accounts-categories.const';\nimport {AbstractModel} from '../../../db/Models/abstract-model';\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 +(this.amount * (this.claimPercent / 100)).toFixed(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 { 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.amount);\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: CollectionDictionary<TransactionCollection> = new CollectionDictionary<TransactionCollection>(\n transactions.getByPropertiesIds([property.id]),\n 'chartAccounts.id'\n );\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","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 { 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: CollectionDictionary<DepreciationCollection> = new CollectionDictionary<DepreciationCollection>(\n depreciations,\n 'type'\n );\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","/**\n * Vehicle expense for logbook section\n */\nimport {AbstractModel} from '../../../db/Models/abstract-model';\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 +(this.amount * (this.claimPercent / 100)).toFixed(2);\n }\n}\n","import { Collection } from '../../collection';\nimport { VehicleExpense } from '../../../models/report/vehicle-expense/vehicle-expense';\nimport { TransactionCollection } from '../../transaction/transaction.collection';\nimport { CollectionDictionary } from '../../collection-dictionary';\nimport { DepreciationCollection } from '../../depreciation.collection';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { VehicleClaim } from '../../../models/logbook/vehicle-claim';\n\nexport class VehicleExpenseCollection extends Collection<VehicleExpense> {\n constructor(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n vehicleClaim: VehicleClaim\n ) {\n super();\n this.setItems(transactions, depreciations, vehicleClaim);\n }\n\n private setItems(transactions: TransactionCollection, depreciations: DepreciationCollection, vehicleClaim: VehicleClaim): void {\n this.items = [];\n\n const transactionsByChartAccounts: CollectionDictionary<TransactionCollection> = new CollectionDictionary(\n transactions,\n 'chartAccounts.name'\n );\n\n const transactionExpenses: VehicleExpense[] = transactionsByChartAccounts.keys.map((chartAccountsName: string) => {\n return new VehicleExpense(\n transactionsByChartAccounts.get(chartAccountsName).amount,\n vehicleClaim.workUsage,\n chartAccountsName\n );\n });\n\n // group all depreciations into one expense item\n const depreciationExpense: VehicleExpense = new VehicleExpense(\n depreciations.getCurrentYearForecastAmount(),\n vehicleClaim.workUsage,\n 'Depreciation'\n );\n\n this.items.push(...[depreciationExpense, ...transactionExpenses]);\n }\n}\n","import { Collection } from '../collection';\nimport { ServiceSubscription } from '../../models/service-subscription/service-subscription';\n\nexport class ServiceSubscriptionCollection extends Collection<ServiceSubscription> {\n get individual(): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.isIndividual())[0];\n }\n\n get investor(): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.isInvestor())[0];\n }\n\n get investorPlus(): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.isInvestorPlus())[0];\n }\n\n getRecommended(properties: number): ServiceSubscription {\n return this.items.filter((subscription: ServiceSubscription) => subscription.propertyQuantity === properties)[0] ?? this.investor;\n }\n}\n","import { Collection } from '../collection';\nimport { ReportItem } from '../../models/tax-summary/report-item';\nimport { TaxReturnCategoryListEnum } from '../../db/Enums/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 let result: ReportItem[] = [];\n\n for (let reportItem of this.items) {\n if (reportItem.details.length && 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 /**\n * Recursively find report item by Tax Return Category ID\n */\n findByCategory(categoryId: TaxReturnCategoryListEnum): ReportItem {\n let result: ReportItem;\n\n for (let 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\n */\n getByCategories(categories: TaxReturnCategoryListEnum[]): ReportItemCollection {\n return this.create(\n compact(categories.map((category: TaxReturnCategoryListEnum) => this.findByCategory(category)))\n );\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.getByCategories(categories).getBySection(section).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 let result: ReportItemDetails[] = [];\n\n for (let 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","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\n WORK_EXPENSES = 7,\n\n GROSS_RENT = 8,\n\n OTHER_RENTAL_DEDUCTIONS = 12,\n\n INTEREST_DEDUCTIONS = 9,\n\n CAPITAL_WORKS = 10,\n DEPRECIATION = 11,\n\n GROSS_INTEREST = 5,\n DIVIDENDS = 6,\n SHARE_SCHEMES = 35,\n PARTNERSHIPS_TRUSTS = 13,\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\n TAX_CREDITS = 23,\n\n OTHER_DEDUCTIONS = 18,\n\n TAX_OFFSETS = 27,\n\n BORROWING_EXPENSES = 29,\n GROSS_TAX_PAYABLE = 19,\n TAX_ON_TAXABLE_INCOME = 20,\n MEDICARE = 21,\n STUDENT_LOAN_REPAYMENT = 22,\n TAX_WITHHELD = 24,\n TAX_INSTALMENTS = 25,\n FRANKING_CREDITS = 26,\n TAX_PAYABLE = 28,\n}\n","import { TaxReturnCategoryListEnum } from '../../db/Enums/tax-return-category-list.enum';\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 ],\n expenses: [\n TaxReturnCategoryListEnum.WORK_EXPENSES\n ],\n interest: [\n TaxReturnCategoryListEnum.GROSS_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 TaxReturnCategoryListEnum.DEPRECIATION\n ]\n },\n other: {\n income: [\n TaxReturnCategoryListEnum.GROSS_INTEREST,\n TaxReturnCategoryListEnum.DIVIDENDS,\n TaxReturnCategoryListEnum.SHARE_SCHEMES,\n TaxReturnCategoryListEnum.PARTNERSHIPS_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 ]\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) => {\n return taxReview.isInProgress() ||\n taxReview.isWaitingForClient() ||\n taxReview.isWaitingForApproval() ||\n taxReview.isApproved();\n });\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 { TransactionAllocation } from '../../models/transaction/transaction-allocation';\nimport { BankTransactionCollection } from '../bank-transaction.collection';\nimport { CollectionDictionary } from '../collection-dictionary';\nimport { Transaction } from '../../models/transaction/transaction';\nimport { BankTransaction } from '../../models/bank/bank-transaction';\n\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: CollectionDictionary<BankTransactionCollection> = new CollectionDictionary(bankTransactions, 'bankAccount.id');\n // Create empty dictionary of transaction allocations\n const allocationsByBankAccount: CollectionDictionary<TransactionAllocationCollection> = new CollectionDictionary(new TransactionAllocationCollection([]));\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 { 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 { Type } from 'class-transformer';\nimport { FinancialYear } from '../financial-year/financial-year';\n\n/**\n * Class contains traveled kilometers and work usage percent in 12 weeks date range\n */\nexport class LogbookPeriod {\n @Type(() => Date)\n from: Date;\n\n @Type(() => Date)\n to: Date;\n\n kilometers: number;\n workUsage: number;\n\n isEndOfYear(): boolean {\n return this.to === new FinancialYear().endDate;\n }\n}\n","import { VehicleLogbook } from '../models/logbook/vehicle-logbook';\nimport { FinancialYear } from '../models/financial-year/financial-year';\nimport { LogbookPeriod } from '../models/logbook/logbook-period';\nimport { plainToClass } from 'class-transformer';\nimport { Collection } from './collection';\n\n/**\n * 12 weeks in milliseconds\n * \"To work out your business-use percentage, you need to keep a logbook and the odometer readings for the logbook period.\n * The logbook period is a minimum continuous period of 12 weeks.\" © Nicole Kelly\n */\nconst LOGBOOK_PERIOD_DURATION = 12 * 7 * 24 * 3600 * 1000;\n\nexport class VehicleLogbookCollection extends Collection<VehicleLogbook> {\n /**\n * Check if we can calculate the best period\n */\n isBestPeriodExist(): boolean {\n if (this.items.length < 2) {\n return false;\n }\n\n return LOGBOOK_PERIOD_DURATION < (this.last.date.getTime() - this.first.date.getTime());\n }\n\n /**\n * Get collection of non-personal logbooks (work-related, sole-related).\n */\n getBusinessLogbooks(): this {\n return this.create(\n this.items.filter((logbook: VehicleLogbook) => logbook.isBusiness())\n );\n }\n\n /**\n * Logbook Period is the best when it has the biggest amount of work kilometers\n * Best period duration is defined as LOGBOOK_PERIOD_DURATION (12 weeks) by the ATO\n */\n getBestPeriod(): LogbookPeriod {\n if (!this.isBestPeriodExist()) {\n return null;\n }\n\n let bestPeriod: LogbookPeriod;\n\n const businessLogbooks: VehicleLogbook[] = this.getBusinessLogbooks().toArray();\n\n for (let i = 0; i < businessLogbooks.length; i ++) {\n const logbook: VehicleLogbook = businessLogbooks[i];\n\n // no sense to check next logbooks because we already get the end of the year\n if (bestPeriod && bestPeriod.isEndOfYear()) {\n break;\n }\n\n const dateRange: {from: Date, to: Date} = this.getPeriodRange(logbook.date);\n\n // get logbooks included in current logbook period\n const logbooksInRange: VehicleLogbookCollection = this.filterByRange('date', logbook.date, new Date(logbook.date.getTime() + LOGBOOK_PERIOD_DURATION));\n\n const workUsage: number = logbooksInRange.getWorkUsage();\n\n // compare with previous best period and overwrite if needs\n if (!bestPeriod || workUsage > bestPeriod.workUsage) {\n bestPeriod = plainToClass(LogbookPeriod, {\n from: dateRange.from,\n to: dateRange.to,\n kilometers: logbooksInRange.getBusinessLogbooks().getKlms(),\n workUsage: workUsage\n });\n }\n }\n\n return bestPeriod;\n }\n\n /**\n * Calculate total kilometers traveled\n */\n getKlms(): number {\n return this.items.reduce((sum: number, logbook: VehicleLogbook) => sum + logbook.getKlms(), 0);\n }\n\n /**\n * Calculate work usage (percent of business-related kilometers from total kilometers)\n */\n getWorkUsage(): number {\n const totalKilometers: number = this.getKlms();\n const workKilometers: number = this.getBusinessLogbooks().getKlms();\n\n return Math.round(workKilometers / totalKilometers * 100);\n }\n\n /**\n * Get LOGBOOK_PERIOD_DURATION date range from passed start date\n */\n private getPeriodRange(from: Date): {from: Date, to: Date} {\n // set end date after LOGBOOK_PERIOD_DURATION after start date\n let to: Date = new Date(from.getTime() + LOGBOOK_PERIOD_DURATION);\n\n const financialYear = new FinancialYear();\n\n // set as period last LOGBOOK_PERIOD_DURATION of current year if period end date after end of current year\n if (to > financialYear.endDate) {\n to = financialYear.endDate;\n from = new Date(to.getTime() - LOGBOOK_PERIOD_DURATION);\n }\n\n return {from, to};\n }\n}\n","import { Collection } from './collection';\nimport { Vehicle } from '../models/logbook/vehicle';\nimport { VehicleLogbookCollection } from './vehicle-logbook.collection';\nimport flatten from 'lodash/flatten';\n\nexport class VehicleCollection extends Collection<Vehicle>{\n getLogbooks(): VehicleLogbookCollection {\n return new VehicleLogbookCollection(flatten(this.items.map((vehicle: Vehicle) => vehicle.logbook)));\n }\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}","export enum ChartAccountsHeadingListEnum {\n ETP = 39\n}\n","export enum ChartAccountsHeadingTaxableEnum {\n\tGROSS_INTEREST = 7,\n\tDIVIDENDS = 38,\n\tEMPLOYEE_SHARE_SCHEMES = 42,\n\tPARTNERSHIPS_AND_TRUSTS_INCOME = 43,\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}","export enum ChartAccountsMetadataTypeEnum {\n\tNUMBER = 3,\n\tBOOLEAN = 4,\n}","export enum ChartAccountsTypeEnum {\n\tINCOME = 1,\n\tEXPENSE = 2,\n}","export enum ChatStatusEnum {\n\tACTIVE = 1,\n\tINACTIVE = 2,\n}","export enum ClientDetailsMedicareExemptionEnum {\n\tNO = 0,\n\tHALF = 1,\n\tFULL = 2,\n}","export enum ClientDetailsWorkDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}","export enum ClientDetailsWorkingHolidayMakerEnum {\n\tNO = 0,\n\tVISA417 = 1,\n\tVISA462 = 2,\n}","export enum ClientInviteStatusEnum {\n\tPENDING = 1,\n\tREJECTED = 2,\n}","export enum ClientInviteTypeEnum {\n FROM_CLIENT = 1,\n FROM_EMPLOYEE = 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}","export enum DepreciationWriteOffAmountEnum {\n\tPLANT_EQUIPMENT = 300,\n\tBORROWING_EXPENSES = 100,\n}","export enum IncomeSourceTypeListSoleEnum {\n SOLE_TRADER = 7,\n}\n","export enum InviteStatusEnum {\n\tPENDING = 1,\n\tACCEPTED = 2,\n\tREJECTED = 3,\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}","export enum LoanFrequencyEnum {\n\tANNUAL = 1,\n\tMONTHLY = 12,\n\tFORTNIGHTLY = 26,\n\tWEEKLY = 52,\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}","export enum LoanRepaymentTypeEnum {\n INTEREST_ONLY = 1,\n PRINCIPAL_AND_INTEREST = 2,\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 PropertyDepreciationCalculationEnum {\n\tPRIME_COST = 1,\n\tDIMINISHING = 2,\n}","export enum PropertyShareAccessEnum {\n\tVIEW = 1,\n\tEDIT = 2,\n}\n","export enum PropertyShareStatusEnum {\n\tPENDING = 1,\n\tAPPROVED = 2,\n\tREJECTED = 3,\n}\n","export enum RegistrationInviteStatusEnum {\n\tPENDING = 1,\n\tACCEPTED = 2,\n}","export enum ServiceNotificationStatusEnum {\n\tSENT = 1,\n\tDELIVERED = 2,\n\tREAD = 3,\n}","export enum ServiceNotificationTypeEnum {\n\tUSER = 1,\n\tSYSTEM = 2,\n}","export enum ServicePaymentStatusEnum {\n\tFAIL = 0,\n\tSUCCESS = 1,\n}","export enum ServicePriceRecurringIntervalEnum {\n\tDAY = 1,\n\tWEEK = 2,\n\tMONTH = 3,\n\tYEAR = 4,\n}","export enum ServicePriceTypeEnum {\n\tONE_TIME = 1,\n\tRECURRING = 2,\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}","export enum SpareDocumentSpareTypeEnum {\n\tDOCUMENT = 1,\n\tRECEIPT = 2,\n}","export enum TaxCalculationMedicareExemptionEnum {\n\tHALF = 1,\n\tFULL = 2,\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}","export enum TaxReturnCategorySectionEnum {\n\tWORK_TANK = 1,\n\tPROPERTY_TANK = 2,\n\tOTHER_INCOME = 3,\n\tSUMMARY = 4,\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","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}","export enum TaxSummarySectionEnum {\n\tWORK_TANK = 1,\n\tPROPERTY_TANK = 2,\n\tOTHER_INCOME = 3,\n\tSUMMARY = 4,\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}","export enum TicketFeedbackEnum {\n\tHAPPY = 1,\n\tUNHAPPY = 2,\n}","export enum TicketStatusEnum {\n\tOPEN = 1,\n\tIN_PROGRESS = 2,\n\tMISSING_INFO = 3,\n\tIN_REVIEW = 4,\n\tCOMPLETED = 5,\n}","export enum TicketTypesEnum {\n\tCLIENT_REQUEST = 1,\n}","export enum UserEventStatusEnum {\n\tNO_NEED_ACTION = 1,\n\tNEED_ACTION = 2,\n\tDONE = 3,\n\tREFUSED = 4,\n\tOUTDATED = 5,\n}","export enum UserEventTypeFrequencyEnum {\n\tDAILY = 1,\n\tWEEKLY = 2,\n\tMONTHLY = 3,\n}","export enum UserEventTypeUserTypeEnum {\n\tREGISTERED = 1000,\n\tPASSWORD_RESET = 1001,\n\tAPP_FEATURES = 1010,\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}","export enum UserMedicareExemptionEnum {\n\tNO = 0,\n\tHALF = 1,\n\tFULL = 2,\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}","export enum UserWorkingHolidayMakerEnum {\n\tNO = 0,\n\tVISA417 = 1,\n\tVISA462 = 2,\n}","export enum VehicleClaimMethodEnum {\n\tKMS = 1,\n\tLOGBOOK = 2,\n}","export enum VehicleLogbookPurposeEnum {\n\tBUSINESS = 1,\n\tPERSONAL = 2,\n}","/**\n * Account setup item instance is using for account setup checklist\n */\nimport {AbstractModel} from '../../db/Models/abstract-model';\n\nexport class AccountSetupItem extends AbstractModel {\n title: string;\n description: string;\n url: string;\n urlFragment: string;\n clientIncomeTypes: string[] = [];\n isCompleted: boolean;\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 return {\n name: bankAccount.accountName,\n data: Math.abs(bankAccount.currentBalance)\n };\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 return {\n label: bankAccount.accountName,\n value: bankAccount.currentBalance\n };\n })\n }];\n }\n}\n","import { BankAccountTypeEnum } from '../../db/Enums/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.MORTGAGE, value: 'Mortgage Accounts'},\n {key: BankAccountTypeEnum.OFFSET, value: 'Offset'},\n {key: BankAccountTypeEnum.SAVINGS, value: 'Savings Accounts'},\n {key: BankAccountTypeEnum.TRANSACTION, value: 'Transaction Accounts'},\n];\n","/**\n * Login data object for basiq banks\n */\nexport class BankLoginData {\n /**\n * Object with bank external id\n */\n institution: {id: string};\n\n /**\n * Dynamic login data fields. These fields may be different for different banks\n */\n [key: string]: string | {id: string};\n}\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","/**\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","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) => {\n return +bankTransaction.date.getMonth() === +MonthNumberEnum[key];\n });\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) => {\n return +bankTransaction.date.getMonth() === +MonthNumberEnum[key];\n });\n\n const balanceForMonth: number = bankTransactionsForMonth.reduce((sum: number, bankTransaction: BankTransaction) => {\n if (bankTransaction.isCredit()) {\n return sum += bankTransaction.allocatedAmount;\n } else {\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","/**\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: string = '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 {AbstractModel} from '../abstract-model';\n\nexport class BorrowingExpense extends AbstractModel {\n\tid?: number;\n\tname?: string;\n\tdeletedAt?: Date;\n\tcreatedAt?: Date;\n\tupdatedAt?: Date;\n}\n","import { BorrowingExpense as BorrowingExpenseBase } from '../../db/Models/loan/borrowing-expense';\n\nexport class BorrowingExpense extends BorrowingExpenseBase {\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 id?: 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 { BorrowingExpenseLoan as BorrowingExpenseLoanBase} from '../../db/Models/loan/borrowing-expense-loan';\n\nexport class BorrowingExpenseLoan extends BorrowingExpenseLoanBase {\n}\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 { ChartAccounts } from './chart-accounts';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ChartAccountsDepreciation extends AbstractModel {\n id?: number;\n effectiveYear?: number;\n effectiveLife?: number;\n limit?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts;\n}\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","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 { 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 id?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chartAccounts?: ChartAccounts;\n}\n","import { ChartAccountsValue as ChartAccountsValueBase } from '../../db/Models/chart-accounts/chart-accounts-value';\n\nexport class ChartAccountsValue extends ChartAccountsValueBase {\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 id?: number;\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 { 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","export enum ChatViewTypeEnum {\n MESSAGES,\n ATTACHMENTS\n}\n","import { Chat } from './chat';\nimport { MessageDocument } from './message-document';\nimport { User } from '../user/user';\nimport { Ticket } from './accountant/ticket';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Message extends AbstractModel {\n content?: string;\n readAt?: Date;\n id?: number;\n createdAt?: Date;\n updatedAt?: Date;\n chat?: Chat;\n documents?: MessageDocument[];\n employee?: User;\n ticket?: Ticket;\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 id?: number;\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 { 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 { Exclude, Type } from 'class-transformer';\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 // temp storage for attached file\r\n @Exclude({ toPlainOnly: true })\r\n file: File;\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\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(() => 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","import {ClientDetails} from './client-details';\nimport {AbstractModel} from '../abstract-model';\n\nexport class ClientIncomeTypes extends AbstractModel {\n salary?: boolean;\n property?: boolean;\n sole?: boolean;\n dividends?: boolean;\n other?: boolean;\n id?: number;\n deletedAt?: Date;\n clientDetails?: ClientDetails;\n}\n","import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../db/Models/user/client-income-types';\n\nexport class ClientIncomeTypes extends ClientIncomeTypesBase {\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","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 {AbstractModel} from '../abstract-model';\n\nexport class ClientInvite extends AbstractModel {\n type?: ClientInviteTypeEnum;\n id?: number;\n status?: ClientInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n employee?: User;\n client?: User;\n firm?: Firm;\n registrationInvite?: RegistrationInvite;\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 id?: number;\n email?: string;\n firstName?: string;\n message?: string;\n status?: RegistrationInviteStatusEnum;\n createdAt?: Date;\n updatedAt?: Date;\n user?: User;\n}\n","import { RegistrationInvite as RegistrationInviteBase } from '../../db/Models/user/registration-invite';\nimport { Photoable } from '../../interfaces/photoable';\n\nexport class RegistrationInvite extends RegistrationInviteBase implements Photoable {\n getInitials(): string {\n return `${this.firstName[0].toUpperCase()}${this.firstName[1]}`;\n }\n\n getPhoto(): string {\n return null;\n }\n}\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/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","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\tid?: number;\n\tdateFrom?: Date;\n\tdateTo?: Date;\n\tfirm?: Firm;\n\tclient?: User;\n\temployee?: User;\n\tsubscription?: ServiceSubscription;\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","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) => {\n return plainToClass(ChartData, {\n name: clientPortfolioReport.category,\n data: clientPortfolioReport.count\n });\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","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 DepreciationGroupEnum {\n BUILDING_IMPROVEMENTS,\n PLANT_EQUIPMENT,\n LOW_VALUE_POOL,\n WRITTEN_OFF_ITEMS,\n BORROWING_EXPENSES\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\n constructor(\n label: string,\n description?: string,\n icon?: string,\n children?: DepreciationGroup[]\n ) {\n this.label = label;\n this.description = description;\n this.icon = icon;\n this.children = children;\n }\n\n getClaimAmount(): number {\n return this.children.reduce((sum: number, child: DepreciationGroup): number => sum + child.getClaimAmount(), 0);\n }\n}\n","import { DepreciationGroup } from './depreciation-group';\nimport { Depreciation } from './depreciation';\n\n/**\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","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};\n","import { Depreciation } from './depreciation';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DepreciationReceipt extends AbstractModel {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n depreciation?: Depreciation;\n}\n","import { DepreciationReceipt as DepreciationReceiptBase } from '../../db/Models/depreciation/depreciation-receipt';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\n\nexport class DepreciationReceipt extends DepreciationReceiptBase implements IAsset {\n type: AssetTypeEnum = AssetTypeEnum.RECEIPTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.DEPRECIATIONS;\n}\n","import { DocumentFolder } from './document-folder';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Document extends AbstractModel {\n id?: number;\n name?: string;\n originalName?: string;\n size?: number;\n mimeType?: string;\n createdAt?: Date;\n updatedAt?: Date;\n folder?: DocumentFolder;\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","import { Document as DocumentBase } from '../../db/Models/document/document';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { AssetTypeEnum } from '../../interfaces/asset-type.enum';\nimport { AssetEntityTypeEnum } from '../../interfaces/asset-entity-type.enum';\nimport { DocumentFolder } from './document-folder';\nimport { DocumentApiUrlPrefixEnum } from './document-api-url-prefix.enum';\nimport { IDocument } from '../../interfaces/document.interface';\nimport { Documentable } from '../../interfaces/documentable.interface';\n\nexport class Document extends DocumentBase implements IAsset, IDocument {\n file: File;\n type: AssetTypeEnum = AssetTypeEnum.DOCUMENTS;\n entityType: AssetEntityTypeEnum = AssetEntityTypeEnum.FOLDERS;\n folder: DocumentFolder;\n\n /**\n * Get folder as document parent entity\n */\n getEntity(): Documentable {\n return this.folder;\n }\n\n /**\n * Get API url prefix\n */\n getApiUrlPrefix(): string {\n return DocumentApiUrlPrefixEnum.FOLDERS;\n }\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 { User } from '../user/user';\nimport { Document } from './document';\nimport {AbstractModel} from '../abstract-model';\n\nexport class DocumentFolder extends AbstractModel {\n id?: number;\n name?: string;\n user?: User;\n parent?: DocumentFolder;\n documents?: Document[];\n}\n","import { DocumentFolder as DocumentFolderBase } from '../../db/Models/document/document-folder';\nimport { Documentable } from '../../interfaces/documentable.interface';\nimport { Document } from './document';\nimport { Type } from 'class-transformer';\n\nexport class DocumentFolder extends DocumentFolderBase implements Documentable {\n documentFile: File;\n\n @Type(() => Document)\n documents: Document[];\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\tid?: number;\n\temployee?: User;\n\tfirm?: Firm;\n registrationInvite?: RegistrationInvite;\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","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","export const MONTHS: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan'];\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","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","/**\n * Enum with maximum number of payments, depending on the frequency\n */\nexport enum LoanMaxNumberOfPaymentsEnum {\n WEEKLY = 260,\n FORTNIGHTLY = 130,\n MONTHLY = 60,\n}\n","import { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { FinancialYear } from '../financial-year/financial-year';\n\n/**\n * Default vehicle transaction object,\n * which could be used to create transaction with 'Klms travelled for work' chart accounts category\n */\nexport const DEFAULT_VEHICLE_EXPENSE: object = {\n source: TransactionSourceEnum.CASH,\n tankType: TankTypeEnum.WORK,\n type: TransactionTypeEnum.DEBIT,\n taxWithheld: 0,\n description: 'Klm’s method',\n date: new Date(`${new FinancialYear().year}-06-30`),\n chartAccounts: {id: ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK},\n claimPercent: 100\n};\n","import { VehicleLogbookPurposeEnum } from '../../db/Enums/vehicle-logbook-purpose.enum';\n\nexport const WORK_TANK_LOGBOOK_PURPOSE_OPTIONS: {[key: string]: VehicleLogbookPurposeEnum | string}[] = [\n { label: 'Business', value: VehicleLogbookPurposeEnum.BUSINESS },\n { label: 'Personal', value: VehicleLogbookPurposeEnum.PERSONAL }\n];\n","import { User } from '../user/user';\nimport { VehicleLogbook } from './vehicle-logbook';\nimport { TankTypeEnum } from '../../Enums/tank-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class Vehicle extends AbstractModel {\n name?: string;\n id?: number;\n user?: User;\n logbook?: VehicleLogbook[];\n tankType?: TankTypeEnum;\n}\n","import { VehicleLogbookPurposeEnum } from '../../Enums/vehicle-logbook-purpose.enum';\nimport { Vehicle } from './vehicle';\nimport { User } from '../user/user';\nimport {AbstractModel} from '../abstract-model';\n\nexport class VehicleLogbook extends AbstractModel {\n date?: Date;\n odometerStart?: number;\n odometerEnd?: number;\n purpose?: VehicleLogbookPurposeEnum;\n description?: string;\n id?: number;\n createdAt?: Date;\n updatedAt?: Date;\n vehicle?: Vehicle;\n createdBy?: User;\n updatedBy?: User;\n}\n","import { VehicleLogbook as VehicleLogbookBase } from '../../db/Models/vehicle/vehicle-logbook';\nimport { VehicleLogbookPurposeEnum } from '../../db/Enums/vehicle-logbook-purpose.enum';\nimport { Type } from 'class-transformer';\n\nexport class VehicleLogbook extends VehicleLogbookBase {\n @Type(() => Date)\n date: Date;\n\n /**\n * Get amount of kilometers in this logbook\n */\n getKlms(): number {\n return this.odometerEnd - this.odometerStart;\n }\n\n /**\n * Check if logbook is business-related\n */\n isBusiness(): boolean {\n return this.purpose === VehicleLogbookPurposeEnum.BUSINESS;\n }\n}\n","import { Vehicle as VehicleBase } from '../../db/Models/vehicle/vehicle';\nimport { VehicleLogbook } from './vehicle-logbook';\nimport { Type } from 'class-transformer';\nimport { VehicleLogbookCollection } from '../../collections/vehicle-logbook.collection';\n\nexport class Vehicle extends VehicleBase {\n @Type(() => VehicleLogbook)\n logbook: VehicleLogbook[];\n\n /**\n * Get vehicle's logbooks as collection\n */\n getLogbooks(): VehicleLogbookCollection {\n return new VehicleLogbookCollection(this.logbook);\n }\n}\n","import { VehicleClaimMethodEnum } from '../../Enums/vehicle-claim-method.enum';\nimport { User } from '../user/user';\nimport { TankTypeEnum } from '../../Enums/tank-type.enum';\nimport {AbstractModel} from '../abstract-model';\n\nexport class VehicleClaim extends AbstractModel {\n financialYear?: number;\n method?: VehicleClaimMethodEnum;\n kilometers?: number;\n workUsage?: number;\n isManual?: boolean;\n id?: number;\n user?: User;\n tankType?: TankTypeEnum;\n}\n","import { VehicleClaim as VehicleClaimBase } from '../../db/Models/vehicle/vehicle-claim';\nimport { VehicleClaimMethodEnum } from '../../db/Enums/vehicle-claim-method.enum';\nimport { FinancialYear } from '../financial-year/financial-year';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { TransactionSourceEnum } from '../../db/Enums/transaction-source.enum';\nimport { TransactionTypeEnum } from '../../db/Enums/transaction-type.enum';\nimport { ChartAccountsListEnum } from '../../db/Enums/chart-accounts-list.enum';\nimport { Transaction } from '../transaction/transaction';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\n\nconst WEEKS_IN_YEAR = 52;\n\nexport class VehicleClaim extends VehicleClaimBase {\n // limit for kms claim method\n kmsLimit: number = 5000;\n financialYear: number = new FinancialYear().year;\n\n method: VehicleClaimMethodEnum = VehicleClaimMethodEnum.KMS;\n kilometers: number = 0;\n workUsage: number = 0;\n isManual: boolean = true;\n\n /**\n * get amount of kilometres per week\n */\n get averageWeeklyTraveledKms(): number {\n return this.kilometers / WEEKS_IN_YEAR;\n }\n\n isLogbookMethod(): boolean {\n return this.method === VehicleClaimMethodEnum.LOGBOOK;\n }\n\n isKLMsMethod(): boolean {\n return this.method === VehicleClaimMethodEnum.KMS;\n }\n\n isWorkTank(): boolean {\n return this.tankType === TankTypeEnum.WORK;\n }\n\n isSoleTank(): boolean {\n return this.tankType === TankTypeEnum.SOLE;\n }\n\n /**\n * Claim amount for KLMs method. Exists only for KLMs method.\n */\n getKLMsClaimAmount(vehicleClaimRate: number): number {\n if (!this.isKLMsMethod()) {\n return 0;\n }\n\n return +(this.kilometers * vehicleClaimRate).toFixed(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 if (!this.isLogbookMethod()) {\n return 0;\n }\n\n const transactionsAmount: number = transactions\n .getByTankType(this.tankType)\n .getVehicleTransactions()\n // except klms transactions because they needed only for klms method\n .filter((transaction: Transaction): boolean => !transaction.chartAccounts.isKLMsByTankType(this.tankType))\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 /**\n * Create KLMs transaction based on vehicle claim and vehicle claim rate\n * @TODO handle on backend: Create klms transaction when vhicle claim created\n */\n toTransaction(vehicleClaimRate: number): Transaction {\n return plainToClass(Transaction, {\n amount: this.kilometers * vehicleClaimRate,\n source: TransactionSourceEnum.CASH,\n type: TransactionTypeEnum.DEBIT,\n taxWithheld: 0,\n description: 'Klm’s method',\n date: new Date(`${new FinancialYear().year}-06-30`),\n claimPercent: 100,\n chartAccounts: {\n id: this.getKlmsChartAccountsIdByTankType(this.tankType)\n }\n });\n }\n\n getKlmsChartAccountsIdByTankType(tankType: TankTypeEnum = this.tankType): number {\n if (tankType === TankTypeEnum.WORK) {\n return ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK;\n }\n\n return ChartAccountsListEnum.KLMS_TRAVELLED\n }\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 id?: number;\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 { ServiceNotification as ServiceNotificationBase } from '../../db/Models/service-notification';\nimport { UserEventTypeUserTypeEnum } from '../../db/Enums/user-event-type-user-type.enum';\nimport { UserEventTypeEmployeeTypeEnum } from '../../db/Enums/user-event-type-employee-type.enum';\nimport { UserEventTypeClientTypeEnum } from '../../db/Enums/user-event-type-client-type.enum';\nimport { Expose, Transform, Type } from 'class-transformer';\nimport { User } from '../user/user';\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(): UserEventTypeUserTypeEnum | UserEventTypeEmployeeTypeEnum | UserEventTypeClientTypeEnum {\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","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: string;\n filename: string;\n orientation: PdfOrientationEnum = PdfOrientationEnum.PORTRAIT\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","/**\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 { 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: number = 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 => {\n return sum + this.getMarketValueForPropertyByYear(property, item.year);\n }, 0);\n\n item.loanBalance = Math.abs(this.properties.items.reduce((sum: number, property: Property): number => {\n return sum + this.getLoanBalanceForPropertyByYear(property, item.year);\n }, 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 => {\n return sum + Math.abs(this.bankAccounts.getPropertyBalanceAmount(property.id));\n }, 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 => {\n return totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0));\n }, 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 return property.getForecastByYear(year)?.loanBalance || this.bankAccounts.getPropertyBalanceAmount(property.id);\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","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 {AbstractModel} from '../abstract-model';\n\nexport class PropertyShare extends AbstractModel {\n id?: number;\n email?: string;\n firstName?: string;\n percent?: number;\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}\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/user';\nimport { RegistrationInvite } from '../registration-invite/registration-invite';\nimport { Property } from './property';\n\nexport class PropertyShare extends PropertyShareBase {\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","import {TaxExemption} from './tax-exemption';\nimport {TaxExemptionMetadata} from './tax-exemption-metadata';\nimport {PropertyShare} from '../property-share';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class PropertySale extends AbstractModel {\n\tid?: number;\n holdingCosts?: number;\n\tstructuralImprovementsWDV?: number;\n buildingAtCostClaimed?: number;\n\tsettlementDate?: Date;\n\tcontractDate?: Date;\n\tprice?: number;\n\tcommission?: number;\n\tlegalFees?: number;\n\totherCost?: number;\n\tcapitalLoss?: number;\n grossCGT?: number;\n netCGT?: number;\n\tcreatedAt?: Date;\n\tupdatedAt?: Date;\n\tshare?: PropertyShare;\n taxExemption?: TaxExemption;\n\ttaxExemptionMetadata?: TaxExemptionMetadata[];\n}\n","import {PropertySale} from './property-sale';\nimport {TaxExemptionMetadata} from './tax-exemption-metadata';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class PropertySaleTaxExemptionMetadata extends AbstractModel {\n\tvalue?: number;\n\tid?: number;\n\tpropertySale?: PropertySale;\n\tmetadata?: TaxExemptionMetadata;\n}\n","import { PropertySale as BasePropertySale } from '../../../db/Models/property/property-sale/property-sale';\nimport { Type } from 'class-transformer';\nimport {\n PropertySaleTaxExemptionMetadata\n} from '../../../db/Models/property/property-sale/property-sale-tax-exemption-metadata';\n\nexport class PropertySale extends BasePropertySale {\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 contractDate: Date;\n\n @Type(() => PropertySaleTaxExemptionMetadata)\n taxExemptionMetadata: PropertySaleTaxExemptionMetadata[];\n\n get saleCostsTotalAmount(): number {\n return this.commission + this.legalFees + this.otherCost;\n }\n}\n","import {TaxExemptionMetadata} from './tax-exemption-metadata';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxExemption extends AbstractModel {\n\tname?: string;\n description?: string;\n\tid?: number;\n\tmetadata?: TaxExemptionMetadata[];\n}\n","import { TaxExemption as BaseTaxExemption } from '../../../db/Models/property/property-sale/tax-exemption';\n\nexport class TaxExemption extends BaseTaxExemption {\n}\n","import {TaxExemption} from './tax-exemption';\nimport {AbstractModel} from '../../abstract-model';\n\nexport class TaxExemptionMetadata extends AbstractModel {\n\tname?: string;\n\tid?: number;\n\ttaxExemption?: TaxExemption;\n}\n","import { TaxExemptionMetadata as BaseTaxExemptionMetadata } from '../../../db/Models/property/property-sale/tax-exemption-metadata';\n\nexport class TaxExemptionMetadata extends BaseTaxExemptionMetadata {\n}\n","import { PropertySaleTaxExemptionMetadata as BasePropertySaleTaxExemptionMetadata } from '../../../db/Models/property/property-sale/property-sale-tax-exemption-metadata';\n\nexport class PropertySaleTaxExemptionMetadata extends BasePropertySaleTaxExemptionMetadata {\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","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 id?: number;\n amount?: number;\n status?: ServicePaymentStatusEnum;\n stripeId?: string;\n date?: Date;\n receipt?: string;\n subscription?: ServiceSubscription;\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 @Type(() => ServiceSubscription)\n subscription: ServiceSubscription;\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 { 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 { 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';\n\n/**\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 details: ReportItemDetails[];\n taxReturnCategory: TaxReturnCategory;\n title: string;\n\n @Type(() => ReportItem)\n @Transform(({value}) => new ReportItemCollection(value))\n items: ReportItemCollection;\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 { TaxReturnCategorySectionEnum } from '../../db/Enums/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 { 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_INCOME:\n return 'taxSummaryOtherIncome';\n default:\n return 'taxSummaryTotal';\n }\n })\n id?: string;\n}\n","import { TaxSummarySection } from './tax-summary-section';\nimport { Type } from 'class-transformer';\nimport { TAX_RETURN_CATEGORIES } from '../../collections/tax-summary/tax-return-categories.const';\nimport { TaxReturnCategoryListEnum } from '../../db/Enums/tax-return-category-list.enum';\nimport { TaxSummarySectionEnum } from '../../db/Enums/tax-summary-section.enum';\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 otherIncome: TaxSummarySection;\n\n @Type(() => TaxSummarySection)\n summary: TaxSummarySection;\n\n projectedTaxPosition: number;\n\n get sections(): TaxSummarySection[] {\n return [this.work, this.property, this.otherIncome, this.summary];\n }\n\n get taxPercent(): number {\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 /**\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.summary.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.otherIncome.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.income, TaxSummarySectionEnum.OTHER_INCOME);\n const expenses: number = this.summary.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.expenses, TaxSummarySectionEnum.OTHER_INCOME);\n const taxWithheld: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_WITHHELD], TaxSummarySectionEnum.OTHER_INCOME);\n const taxInstalments: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.TAX_INSTALMENTS], TaxSummarySectionEnum.OTHER_INCOME);\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.otherIncome.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.income, TaxSummarySectionEnum.OTHER_INCOME);\n const expenses: number = this.summary.items.sumByCategoriesAndSection(TAX_RETURN_CATEGORIES.other.expenses, TaxSummarySectionEnum.OTHER_INCOME);\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_INCOME);\n const frankingCredits: number = this.summary.items.sumByCategoriesAndSection([TaxReturnCategoryListEnum.FRANKING_CREDITS], TaxSummarySectionEnum.OTHER_INCOME);\n\n return income - Math.abs(expenses) + Math.abs(taxOffsets) + Math.abs(taxInstallments) + Math.abs(frankingCredits);\n }\n}\n","/**\n * Enum for tax summary types\n */\nexport enum TaxSummaryTypeEnum {\n ACTUALS = 'actuals',\n FORECASTS = 'forecasts'\n}\n","export enum TransactionCategoryEnum {\n PROPERTY,\n WORK,\n SOLE,\n PERSONAL\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","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 {AbstractModel} from '../abstract-model';\n\nexport class Occupation extends AbstractModel {\n\tid?: number;\n\tname?: string;\n\tcode?: string;\n}\n","import { Occupation as OccupationBase } from '../../db/Models/user/occupation';\n\nexport class Occupation extends OccupationBase {\n}\n","import { UserRolesEnum } from '../../db/Enums/user-roles.enum';\n\nexport const USER_ROLES: {[key: string]: UserRolesEnum[]} = {\n ROLE_FIRM_OWNER: [UserRolesEnum.FIRM_OWNER],\n ROLE_FIRM_MANAGER: [UserRolesEnum.FIRM_MANAGER, UserRolesEnum.FIRM_OWNER],\n ROLE_ACCOUNTANT: [UserRolesEnum.FIRM_MANAGER, UserRolesEnum.FIRM_OWNER, UserRolesEnum.ACCOUNTANT],\n ROLE_CLIENT: [UserRolesEnum.CLIENT],\n ROLE_USER: [UserRolesEnum.USER],\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_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 {AbstractModel} from '../abstract-model';\n\nexport class UserEventTypeCategory extends AbstractModel {\n\tname?: string;\n\tid?: number;\n}\n","import { UserEventTypeCategory as UserEventTypeCategoryBase } from '../../db/Models/user/user-event-type-category';\n\nexport class UserEventTypeCategory extends UserEventTypeCategoryBase {\n}\n","import {User} from './user';\nimport {UserEventType} from './user-event-type';\nimport {AbstractModel} from '../abstract-model';\n\nexport class UserEventSetting extends AbstractModel {\n\tbyEmail?: boolean;\n\tbyNotification?: boolean;\n\tfrequency?: number;\n\tid?: number;\n\tuser?: User;\n\ttype?: UserEventType;\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\ttype?: number;\n\tname?: string;\n\tbyEmail?: boolean;\n\tbyNotification?: boolean;\n\tfrequency?: UserEventTypeFrequencyEnum;\n\tcounter?: number;\n\tstatus?: number;\n\troles?: unknown;\n\tconfigurable?: boolean;\n\tid?: number;\n\tcategory?: UserEventTypeCategory;\n\tsettings?: UserEventSetting[];\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 { plainToClass, Type } from 'class-transformer';\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","import { UserEventSetting as UserEventSettingBase } from '../../db/Models/user/user-event-setting';\nimport { Exclude, Type } from 'class-transformer';\nimport { UserEventType } from './user-event-type';\n\nexport class UserEventSetting extends UserEventSettingBase {\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","/**\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 * Enum list of all possible account setup items. Using with [ACCOUNT_SETUP_ITEMS]{@link ACCOUNT_SETUP_ITEMS}\n */\nexport enum AccountSetupItemsEnum {\n SALARY,\n OTHER_INCOME,\n PROPERTY,\n BANK_FEEDS,\n WORK_LOGBOOK,\n SOLE_INCOME,\n TRANSACTION\n}\n","import { AccountSetupItemsEnum } from './account-setup-items.enum';\nimport { AccountSetupItem } from './account-setup-item';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * List of all possible account setup steps\n */\nexport const ACCOUNT_SETUP_ITEMS: {[key: number]: AccountSetupItem} = {\n [AccountSetupItemsEnum.SALARY]: plainToClass(AccountSetupItem, {\n title: 'Add your work income forecast',\n description: 'One the most important steps is to add your salary or wage incomes so we can automatically calculate tax withheld and your forecasted tax position.',\n url: '/client/work-tank/forecasting',\n urlFragment: 'salaryProductTour',\n clientIncomeTypes: ['salary']\n }),\n [AccountSetupItemsEnum.OTHER_INCOME]: plainToClass(AccountSetupItem, {\n title: 'Add any other expected incomes',\n description: 'To ensure an accurate tax position forecast, add estimates for any other income types, like dividends, interest, trusts, annuities, director payments etc.',\n url: '/client/work-tank/forecasting',\n urlFragment: 'otherIncomeProductTour',\n clientIncomeTypes: ['dividends', 'other']\n }),\n [AccountSetupItemsEnum.PROPERTY]: plainToClass(AccountSetupItem, {\n title: 'Add your properties',\n description: 'Add your properties to seamlessly manage your rental incomes and expenses, whilst tracking your cash position, tax positions and equity forecasts in real time.',\n url: '/client/property-tank',\n urlFragment: 'productTour',\n clientIncomeTypes: ['property']\n }),\n [AccountSetupItemsEnum.BANK_FEEDS]: plainToClass(AccountSetupItem, {\n title: 'Link banks and select accounts',\n description: 'Link banks to automatically feed your account transactions to save you time and money. Allocating live transactions ensures nothing is missed, lost or forgotten!',\n url: '/client/bank-feeds',\n urlFragment: 'bankAccountProductTour',\n }),\n [AccountSetupItemsEnum.WORK_LOGBOOK]: plainToClass(AccountSetupItem, {\n title: 'Set up your logbook method',\n description: 'Do you use your vehicle for work? Select your method and the klms or logbook % to automate accurately all vehicle expenses throughout the year.',\n url: '/client/work-tank/logbook',\n urlFragment: 'productTour'\n }),\n [AccountSetupItemsEnum.SOLE_INCOME]: plainToClass(AccountSetupItem, {\n title: 'Add your business details',\n description: 'Add your business details, logo and payment terms to create invoice templates in minutes.',\n url: '/client/sole-tank/forecasting',\n urlFragment: 'productTour',\n clientIncomeTypes: ['sole']\n }),\n [AccountSetupItemsEnum.TRANSACTION]: plainToClass(AccountSetupItem, {\n title: 'Allocate transactions',\n description: 'Select one or multiple transactions, the category from the dropdown and attach your receipt. It’s that simple to capture every possible deduction, and keep organised all throughout the year.',\n url: '/client/bank-feeds',\n urlFragment: 'allocationProductTour',\n }),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { ClientIncomeTypes } from '../../../../models/client/client-income-types';\nimport { ClientIncomeTypes as ClientIncomeTypesBase } from '../../../../db/Models/user/client-income-types';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * @TODO extend rest service when it could work with single objects, not only arrays\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientIncomeTypesService {\n cache: ClientIncomeTypes;\n cacheSubject: ReplaySubject<ClientIncomeTypes> = new ReplaySubject<ClientIncomeTypes>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n get(): Observable<ClientIncomeTypes> {\n if (!this.cache) {\n // @TODO alex fix everywhere, start with rest service\n this.cache = plainToClass(ClientIncomeTypes, {});\n this.http.get(`${this.environment.apiV2}/client-income-types`)\n .pipe(\n map((response: {'hydra:member': ClientIncomeTypesBase[]}): ClientIncomeTypes => {\n return plainToClass(ClientIncomeTypes, response['hydra:member'][0], { excludePrefixes: ['@'] });\n })\n )\n .subscribe((incomeTypes: ClientIncomeTypes) => {\n this.cache = incomeTypes;\n this.cacheSubject.next(this.cache);\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n update(incomeTypes: ClientIncomeTypes): Observable<ClientIncomeTypes> {\n return this.http.put(`${this.environment.apiV2}/client-income-types/${incomeTypes.id}`, incomeTypes)\n .pipe(\n map((incomeTypesBase: ClientIncomeTypesBase): ClientIncomeTypes => {\n this.cache = plainToClass(ClientIncomeTypes, incomeTypesBase);\n this.cacheSubject.next(this.cache);\n return this.cache;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Property as PropertyBase } from '../../../db/Models/property/property';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { PropertySubscription as PropertySubscriptionBase } from '../../../db/Models/property/property-subscription';\nimport { RestService } from '../rest/rest.service';\nimport { Property } from '../../../models/property/property';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { PropertySubscription } from '../../../models/property/property-subscription';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service for work with Property\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyService extends RestService<PropertyBase, Property> implements IEventListener {\n modelClass: typeof Property = Property;\n url: string = 'properties';\n\n listenEvents(): void {\n this.listenShareInviteAccepted();\n // @TODO Alex: consider to refactor property movements logic similar to client-movements\n this.listenMovementsChanged();\n }\n\n /**\n * Update cache when share invitation accepted\n */\n private listenShareInviteAccepted(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_SHARE_UPDATED).subscribe(() => this.resetCache());\n }\n\n /**\n * Update cache when property category changed\n */\n private listenMovementsChanged(): void {\n // @TODO change dispatcher logic to work with multiple events\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED).subscribe(() => this.resetCache());\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_UPDATED).subscribe(() => this.resetCache());\n this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_DELETED).subscribe(() => this.resetCache());\n }\n\n update(property: Property): Observable<Property> {\n return super.update(property).pipe(\n map((updatedProperty: Property): Property => {\n if (property.documentFile) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT, property));\n }\n return updatedProperty;\n })\n );\n }\n\n getByCategoryId(id: number): Observable<Property[]> {\n return this.get().pipe(\n map((properties: Property[]): Property[] => {\n return properties.filter((property: Property): boolean => property.category.id === id);\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 replace(this.cache, activatedProperty);\n this.updateCache();\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 replace(this.cache, deactivatedProperty);\n this.updateCache();\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 property.photo = photoLink;\n // update properties cache\n replace(this.cache, property);\n this.updateCache();\n })\n );\n }\n\n getByShareId(id: number): Observable<Property[]> {\n return this.get().pipe(\n map((properties: Property[]): Property[] => {\n return properties.filter((property: Property): boolean => property.user.id === id);\n })\n );\n }\n\n /**\n * Get list of active user's properties\n */\n getActive(): Observable<Property[]> {\n return this.get().pipe(\n map((properties: Property[]): Property[] => properties.filter((property: Property): boolean => property.isActive))\n );\n }\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 { IncomeSource as IncomeSourceBase } from '../../../db/Models/incomeSource/income-source';\nimport { RestService } from '../rest/rest.service';\nimport { IncomeSourceType } from '../../../models/income-source/income-source-type';\nimport { SalaryForecast } from '../../../models/income-source/salary-forecast';\nimport { replace } from '../../../functions/array';\nimport { IncomeSourceTypeEnum } from '../../../db/Enums/income-source-type.enum';\nimport { plainToClass } from 'class-transformer';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { IncomeSource } from '../../../models/income-source/income-source';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\n\n/**\n * Service to work with income sources\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IncomeSourceService extends RestService<IncomeSourceBase, IncomeSource> {\n url: string = 'income-sources';\n modelClass = IncomeSource;\n incomeSourceTypes: IncomeSourceType[];\n incomeSourceTypeSubject: ReplaySubject<IncomeSourceType[]> = new ReplaySubject<IncomeSourceType[]>(1);\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) => {\n return plainToClass(SalaryForecast, response);\n })\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(this.modelClass, 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 * Get other incomes types\n */\n getIncomeSourceTypes(): Observable<IncomeSourceType[]> {\n if (!this.incomeSourceTypes) {\n this.incomeSourceTypes = [];\n this.http.get(`${this.environment.apiV2}/income-source-types`)\n .pipe(\n map((response: any) => {\n return response.map((item: any) => plainToClass(IncomeSourceType, item));\n })\n )\n .subscribe((otherIncomesTypes: IncomeSourceType[]) => {\n this.incomeSourceTypes = otherIncomesTypes;\n this.incomeSourceTypeSubject.next(this.incomeSourceTypes);\n });\n }\n\n return this.incomeSourceTypeSubject.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BankAccount as BankAccountBase } from '../../../../db/Models/bank/bank-account';\nimport { map } from 'rxjs/operators';\nimport _ from 'lodash';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { BankAccount } from '../../../../models/bank/bank-account';\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 * Service that handling user's bank accounts logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankAccountService extends RestService<BankAccountBase, BankAccount> implements IEventListener {\n // api url parameter for bank accounts\n url: string = 'bank-accounts';\n modelClass = BankAccount;\n\n /**\n * Listen system notifications and update cache when got basiq notification received\n */\n listenEvents(): void {\n this.listenToEventDispatcherChanges();\n }\n\n /**\n * Created manual bank account\n * @param bankAccounts\n * @param queryParams\n */\n addBatch(bankAccounts: BankAccount[], queryParams: object = {}): Observable<BankAccount[]> {\n return this.http.post(`${this.environment.apiV2}/${this.url}`, bankAccounts)\n .pipe(\n map((newBankAccountsBase: BankAccountBase[]) => {\n const newBankAccounts: BankAccount[] = newBankAccountsBase.map((bankAccountBase: BankAccountBase): BankAccount => plainToClass(BankAccount, bankAccountBase));\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_ACCOUNT_CREATED, newBankAccounts));\n const tempCache: BankAccount[] = _.cloneDeep(this.cache);\n tempCache.push(...newBankAccounts);\n this.cache = tempCache;\n this.updateCache();\n return newBankAccounts;\n })\n );\n }\n\n /**\n * Update bank account and fire event\n */\n update(bankAccount: BankAccount): Observable<BankAccount> {\n return super.update(bankAccount).pipe(\n map((updatedBankAccount: BankAccount) => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_ACCOUNT_UPDATED, updatedBankAccount));\n return updatedBankAccount;\n })\n );\n }\n\n /**\n * Update bank account opening balance\n * @param bankAccount Bank account for balance updating\n */\n updateOpeningBalance(bankAccount: BankAccount): Observable<any> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${bankAccount.id}/opening-balances/${bankAccount.getCurrentYearBalance().id}`, bankAccount.getCurrentYearBalance())\n .pipe(\n map((response: object) => {\n const tempCache: BankAccount[] = _.cloneDeep(this.cache);\n\n replace(tempCache[tempCache.findIndex((ba: BankAccount) => ba.id === bankAccount.id)].balances, response);\n this.cache = tempCache;\n this.updateCache();\n })\n );\n }\n\n /**\n * Update bank account current balance\n */\n updateCurrentBalance(bankAccount: BankAccount): Observable<BankAccount> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${bankAccount.id}/balance`, bankAccount)\n .pipe(\n map((response: object) => {\n const updatedBankAccount: BankAccount = plainToClass(BankAccount, response);\n\n replace(this.cache, updatedBankAccount);\n this.updateCache();\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_ACCOUNT_UPDATED, updatedBankAccount));\n return updatedBankAccount;\n })\n );\n }\n\n getOwn(): Observable<BankAccount[]> {\n return this.get()\n .pipe(\n map((bankAccounts: BankAccount[]) => {\n return bankAccounts.filter((bankAccount: BankAccount) => bankAccount.isOwner(+localStorage.getItem('userId')));\n })\n );\n }\n\n /**\n * Listen to EventDispatcherService events\n */\n private listenToEventDispatcherChanges(): void {\n this.eventDispatcherService.on([\n AppEventTypeEnum.PROPERTY_SHARE_UPDATED,\n AppEventTypeEnum.LOAN_PAYOUT_UPDATED,\n AppEventTypeEnum.BANK_CONNECTION_ADDED\n ]).subscribe(() => {\n this.resetCache();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TransactionAllocation as TransactionAllocationBase } from '../../../../db/Models/transaction/transaction-allocation';\nimport { TransactionAllocation } from '../../../../models/transaction/transaction-allocation';\nimport { Transaction } from '../../../../models/transaction/transaction';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { RestService } from '../../rest/rest.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n// @TODO Don't look at the commented code. Will be refactored/removed during TT-1503\n\n/**\n * Service for transaction allocations business logic\n * @TODO alex refactor\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: string = 'transactions-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 /**\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[]) => {\n return transactionAllocations.filter((allocation: TransactionAllocation) => ids.includes(allocation.transaction.id));\n })\n );\n }\n\n listenEvents(): void {\n this.onTransactionsCreated();\n this.onDepreciationCreated();\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.resetCache();\n });\n }\n\n /**\n * Reset cache on depreciation created\n */\n private onDepreciationCreated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.DEPRECIATIONS_CREATED).subscribe((): void => {\n // @TODO Alex hack: research and refactor cache update logic, dont reset cache each time depreciations changed\n // Update allocations cache to synchronize data and fire subscriptions\n this.resetCache();\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.resetCache();\n });\n }\n}\n","export enum MessagesEnum {\n VEHICLE_CREATED = 'Vehicle created successfully',\n VEHICLE_UPDATED = 'Vehicle updated successfully',\n VEHICLE_DELETED = 'Vehicle deleted successfully',\n\n VEHICLE_CLAIM_CREATED = 'Vehicle claim created successfully',\n VEHICLE_CLAIM_UPDATED = 'Vehicle claim updated successfully',\n VEHICLE_CLAIM_DELETED = 'Vehicle claim deleted successfully',\n\n VEHICLE_LOGBOOK_CREATED = 'Vehicle logbook created successfully',\n VEHICLE_LOGBOOK_UPDATED = 'Vehicle logbook updated successfully',\n VEHICLE_LOGBOOK_DELETED = 'Vehicle logbook deleted successfully',\n}\n","import { Injectable } from '@angular/core';\nimport { VehicleClaim as VehicleClaimBase } from '../../../db/Models/vehicle/vehicle-claim';\nimport { VehicleClaim } from '../../../models/logbook/vehicle-claim';\nimport { RestService } from '../rest/rest.service';\nimport { MessagesEnum } from './messages.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleClaimService extends RestService<VehicleClaimBase, VehicleClaim>{\n modelClass: typeof VehicleClaim = VehicleClaim;\n url: string = 'vehicle-claims';\n messageCreated: string = MessagesEnum.VEHICLE_CLAIM_CREATED;\n messageUpdated: string = MessagesEnum.VEHICLE_CLAIM_UPDATED;\n messageDeleted: string = MessagesEnum.VEHICLE_CLAIM_DELETED;\n}\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","export enum MessagesEnum {\n DELETED_MESSAGE = 'Transaction deleted',\n UPDATED_MESSAGE = 'Transaction updated',\n CREATED_MESSAGE = 'Transaction(s) created'\n}\n","import { EventEmitter, 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 { enumToList } from '../../../functions/enum-to-list';\nimport { ChartAccountsHeadingTaxableEnum } from '../../../db/Enums/chart-accounts-heading-taxable.enum';\nimport { ChartAccountsHeadingTaxDeductibleEnum } from '../../../db/Enums/chart-accounts-heading-tax-deductible.enum';\nimport { TransactionOperationEnum } from '../../../db/Enums/transaction-operation.enum';\nimport { RestService } from '../rest/rest.service';\nimport { plainToClass } from 'class-transformer';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport { Transaction } from '../../../models/transaction/transaction';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { TransactionReceipt } from '../../../models/transaction/transaction-receipt';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport _ from 'lodash';\nimport { ChartAccountsTaxLabelsEnum } from '../../../models/chart-accounts/chart-accounts-tax-labels.enum';\nimport { MessagesEnum } from './messages.enum';\nimport { PropertyCategoryListEnum } from '../../../db/Enums/property/property-category-list.enum';\n\n/**\n * Service for transactions business logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TransactionService extends RestService<TransactionBase, Transaction> {\n // url part for Transaction API\n url: string = 'transactions';\n modelClass = Transaction;\n transactionDeleted: EventEmitter<Transaction> = new EventEmitter<Transaction>();\n\n /**\n * Listen events from Event Dispatcher services\n */\n listenEvents(): void {\n this.listenDepreciationChange();\n this.listenPropertyShareUpdate();\n }\n\n /**\n * get list of all user's TaxTank transactions\n */\n get(): Observable<Transaction[]> {\n if (!this.cache) {\n // set cache as default empty array to avoid multiple backend requests\n this.cache = [];\n this.fetch()\n .subscribe((transactions: Transaction[]) => {\n this.cache = transactions;\n this.updateCache();\n });\n }\n\n return this.cacheSubject.asObservable().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[] => {\n return transactions.filter((transaction: Transaction): boolean => {\n return transaction.property?.id === propertyId;\n });\n })\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[] => {\n return transactions.filter((transaction: Transaction): boolean => transaction.isWorkTank());\n })\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 this.http.get(\n `${this.environment.apiV2}/${this.url}?propertyId=${propertyId}&propertyCategoryId=${PropertyCategoryListEnum.VACANT_LAND}`\n )\n .pipe(\n map((transactionsBase: TransactionBase[]): Transaction[] => {\n return transactionsBase.map((transactionBase: TransactionBase): Transaction => plainToClass(Transaction, transactionBase));\n })\n );\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[] => {\n return transactions.filter((transaction: Transaction): boolean => !!transaction.chartAccounts.taxReturnItem);\n })\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}`, transactions)\n .pipe(\n map((response: TransactionBase[]) => {\n const addedTransactions: Transaction[] = response.map((item: TransactionBase) => plainToClass(Transaction, item));\n\n transactions.forEach((transaction: Transaction, index: number) => {\n // @TODO backend: need to upload file in the same backend endpoint with transaction add/update\n // check if passed receipt and upload file\n if (transaction.file) {\n transaction.id = response[index].id;\n addedTransactions[index].file = transaction.file;\n this.uploadReceipt(addedTransactions[index]);\n }\n\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 = plainToClass(Transaction, {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 this.toastService.success(MessagesEnum.CREATED_MESSAGE);\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}`, transaction)\n .pipe(\n map((response: TransactionBase) => {\n const updatedTransaction: Transaction = plainToClass(Transaction, response);\n\n // @TODO need to upload file in the same backend endpoint with transaction add/update\n // check if passed new receipt and upload file\n if (transaction.file) {\n updatedTransaction.file = transaction.file;\n this.uploadReceipt(updatedTransaction);\n }\n\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 = plainToClass(Transaction, {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.toastService.success(MessagesEnum.UPDATED_MESSAGE);\n\n replace(this.cache, updatedTransaction);\n this.updateCache();\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}`, transactions)\n .pipe(\n map((response: TransactionBase[]) => {\n const updatedTransactions: Transaction[] = response.map((item: TransactionBase) => plainToClass(Transaction, 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.toastService.success(MessagesEnum.DELETED_MESSAGE);\n\n this.updateCache();\n this.transactionDeleted.emit(model);\n })\n );\n }\n\n /**\n * upload transaction receipt image\n * @param transaction Еhe transaction for which the receipt will be imported\n */\n uploadReceipt(transaction: Transaction): void {\n const formData: FormData = new FormData();\n formData.append('file', transaction.file);\n transaction.receipt = null;\n\n this.http.post(`${this.environment.apiV2}/${this.url}/${transaction.id}/receipts`, formData)\n .subscribe((receiptResponse: any) => {\n // we don't need to keep file after save\n transaction.file = null;\n transaction.receipt = plainToClass(TransactionReceipt, receiptResponse);\n replace(this.cache, transaction);\n this.updateCache();\n });\n }\n\n /**\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 * get label for transaction tax field depended of selected chart account.\n * tax type depends of chart account heading or category.\n */\n getTaxLabel(chartAccounts: ChartAccounts): ChartAccountsTaxLabelsEnum {\n // get simple array of ids from enum with taxable chart accounts headings\n const taxableCAHeadingsIds: number[] = enumToList(ChartAccountsHeadingTaxableEnum)\n .map((item: { label: string, value: number }) => item.value);\n // get simple array of ids from enum with tax deductible chart accounts headings\n const deductibleCAHeadingsIds: number[] = enumToList(ChartAccountsHeadingTaxDeductibleEnum)\n .map((item: { label: string, value: number }) => item.value);\n\n // check if one of ids arrays includes current chart accounts heading id and set tax label\n // otherwise label is empty for this class\n switch (true) {\n case taxableCAHeadingsIds.includes(chartAccounts.heading?.id):\n return ChartAccountsTaxLabelsEnum.TAX_PAID;\n case deductibleCAHeadingsIds.includes(chartAccounts.heading?.id):\n return ChartAccountsTaxLabelsEnum.TAX_DEDUCTED;\n case CHART_ACCOUNTS_CATEGORIES.workIncome.includes(chartAccounts.category):\n return ChartAccountsTaxLabelsEnum.TAX_WITHHELD;\n default:\n return null;\n }\n }\n\n /**\n * Listen to EventDispatcherService event related to Depreciation changing\n */\n private listenDepreciationChange(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.DEPRECIATION_DELETED).subscribe(() => {\n this.fetch()\n .subscribe((transactions: Transaction[]) => {\n this.cache = transactions;\n this.updateCache();\n });\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.resetCache());\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ACCOUNT_SETUP_ITEMS } from '../../models/account-setup/account-setup-items.const';\nimport { AccountSetupItem } from '../../models/account-setup/account-setup-item';\nimport { AccountSetupItemsEnum } from '../../models/account-setup/account-setup-items.enum';\nimport { BankAccountService } from '../http/bank/bank-account/bank-account.service';\nimport { ClientIncomeTypes } from '../../models/client/client-income-types';\nimport { ClientIncomeTypesService } from '../http/firm/client-income/client-income-types.service';\nimport { IncomeSource } from '../../models/income-source/income-source';\nimport { IncomeSourceCollection } from '../../collections/income-source.collection';\nimport { IncomeSourceService } from '../http/income-source/income-source.service';\nimport { IncomeSourceTypeEnum } from '../../db/Enums/income-source-type.enum';\nimport { PropertyService } from '../http/property/property.service';\nimport { TransactionAllocationService } from '../http/transaction/transaction-allocation/transaction-allocation.service';\nimport { combineLatest, Observable, of, ReplaySubject } from 'rxjs';\nimport { filter, map, mergeMap } from 'rxjs/operators';\nimport { AccountSetupItemCollection } from '../../collections/account-setup-item.collection';\nimport { VehicleClaimService } from '../http/vehicle/vehicle-claim.service';\nimport fromPairs from 'lodash/fromPairs';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { plainToClass } from 'class-transformer';\nimport { TransactionService } from '../http/transaction/transaction.service';\nimport { Transaction } from '../../models/transaction/transaction';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\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 cache: AccountSetupItemCollection;\n cacheSubject: ReplaySubject<AccountSetupItemCollection> = new ReplaySubject<AccountSetupItemCollection>(1);\n clientIncomeTypesId: number;\n\n constructor(\n private clientIncomeTypesService: ClientIncomeTypesService,\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 ) {\n }\n\n /**\n * Get list of account setup items for current user\n */\n get(): Observable<AccountSetupItemCollection> {\n if (!this.cache) {\n this.cache = new AccountSetupItemCollection([]);\n\n this.clientIncomeTypesService.get()\n .pipe(\n // we need account setup only when user selected at least one income type\n filter((incomeTypes: ClientIncomeTypes) => !!incomeTypes.length),\n mergeMap((incomeTypes: ClientIncomeTypes) => {\n this.clientIncomeTypesId = incomeTypes.id;\n\n return this.createBatch(incomeTypes);\n })\n )\n .subscribe((items: AccountSetupItemCollection) => {\n switch (true) {\n case !this.cache:\n case this.cache.filterBy('isCompleted', true).length !== items.filterBy('isCompleted', true).length:\n case this.cache.length !== items.length:\n this.cache = cloneDeep(items);\n this.cacheSubject.next(this.cache);\n }\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * Prepare client income types to update to hide depended account setup items\n */\n prepareIncomeTypes(item: AccountSetupItem): ClientIncomeTypes {\n return plainToClass(\n ClientIncomeTypes,\n Object.assign({id: this.clientIncomeTypesId}, fromPairs(item.clientIncomeTypes.map((type: string) => [type, false])))\n )\n }\n\n /**\n * Get a single AccountSetupItem and check it's completion\n */\n private create(itemType: AccountSetupItemsEnum, request: Observable<object[]>): Observable<AccountSetupItem> {\n return request.pipe(\n map((result: object[]): AccountSetupItem => {\n const item: AccountSetupItem = ACCOUNT_SETUP_ITEMS[itemType];\n\n if (result.length) {\n item.isCompleted = true;\n } else {\n item.isCompleted = false;\n }\n\n return item;\n })\n );\n }\n\n /**\n * Get batch of requests to get list of required AccountSetupItem's.\n * Some items are optional and depends of user's client income types\n */\n private createBatch(incomeTypes: ClientIncomeTypes): Observable<AccountSetupItemCollection> {\n const batch: Observable<AccountSetupItem>[] = [];\n\n // Salary item is completed when user added salary income source\n if (incomeTypes.salary) {\n batch.push(\n this.create(\n AccountSetupItemsEnum.SALARY,\n this.getIncomeSources(true)\n )\n );\n }\n\n // Other income item is completed when user added at least one other income source\n if (incomeTypes.dividends || incomeTypes.other) {\n batch.push(\n this.create(\n AccountSetupItemsEnum.OTHER_INCOME,\n this.getIncomeSources()\n )\n );\n }\n\n // Rental income item is completed when user added at least one property\n if (incomeTypes.property) {\n batch.push(this.create(AccountSetupItemsEnum.PROPERTY, this.propertyService.get()));\n }\n\n // Bank feeds item is completed when user added at least one bank account (basiq or manual)\n batch.push(this.create(AccountSetupItemsEnum.BANK_FEEDS, this.bankAccountsService.get()));\n\n // Logbook item is completed when user has at least one vehicle claim with any method (klms or logbook)\n batch.push(this.getLogbookItem());\n\n // @TODO waiting for sole tank forecast page\n // Sole item is completed when user added at least one sole income source\n // if (incomeTypes.soleTrader) {\n // batch.push(\n // this.prepareItem(\n // AccountSetupItemsEnum.SOLE_INCOME,\n // this.getIncomeSourcesByType(IncomeSourceTypeEnum.SOLE)\n // )\n // );\n // }\n\n // Allocation item is completed when user added at least one transaction allocation\n batch.push(this.create(AccountSetupItemsEnum.TRANSACTION, this.transactionAllocationService.get()));\n\n return combineLatest(batch).pipe(map((items: AccountSetupItem[]) => new AccountSetupItemCollection(items)));\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: boolean = 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.isSalaryIncome() && !incomeSource.isSoleIncome());\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.create(AccountSetupItemsEnum.WORK_LOGBOOK, this.vehicleClaimService.get());\n }\n\n return of(null);\n })\n );\n }\n}\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) => {\n return response['hydra:member'].map((item: object) => plainToClass(Country, item));\n })\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 { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { IAsset } from '../../interfaces/asset.interface';\nimport { UserSwitcherService } from '../user/user-switcher.service';\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 { Bank as BankBase } from '../../../db/Models/bank/bank';\nimport { Bank } from '../../../models/bank/bank';\nimport { RestService } from '../rest/rest.service';\n\n/**\n * Service that handling banks logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankService extends RestService<BankBase, Bank> {\n modelClass: typeof Bank = Bank;\n url: string = 'banks';\n isHydra: boolean = true;\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 => {\n return this.isAllocated(bankTransaction, allocations);\n })\n );\n }\n\n /**\n * Get collection of unallocated bank transactions\n * @TODO Alex: consider to move to collection\n */\n getUnallocatedBankTransactions(bankTransactions: BankTransactionCollection, allocations: TransactionAllocationCollection): BankTransactionCollection {\n return new BankTransactionCollection(\n bankTransactions.items.filter((bankTransaction: BankTransaction): boolean => {\n return !this.isAllocated(bankTransaction, allocations);\n })\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';\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,\n bankTransactions: BankTransactionCollection,\n allocations: TransactionAllocationCollection\n ): number {\n return bankAccounts.getOpeningBalance() +\n this.bankTransactionCalculationService.getAllocatedAmount(bankTransactions.getByBankAccountsIds(bankAccounts.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 { BankTransaction as BankTransactionBase } from '../../../../db/Models/bank/bank-transaction';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RestService } from '../../rest/rest.service';\nimport { plainToClass } from 'class-transformer';\nimport { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.enum';\nimport { BankTransaction } from '../../../../models/bank/bank-transaction';\nimport { FinancialYear } from '../../../../models/financial-year/financial-year';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Notification } from '../../../../models/notification/notification';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n/**\n * Service for bank transactions business logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BankTransactionService extends RestService<BankTransactionBase, BankTransaction> implements IEventListener {\n // url part for BankTransaction API\n url: string = 'bank-transactions';\n modelClass = BankTransaction;\n\n listenEvents(): void {\n this.listenBankTransactionsImport();\n };\n\n /**\n * get list of bank transactions for passed bank account id\n * @param bankAccountId Id of bank account we search bank transactions for\n */\n getByBankAccountId(bankAccountId: number): Observable<BankTransaction[]> {\n return this.get()\n .pipe(\n map((bankTransactions: BankTransaction[]) => {\n return bankTransactions.filter((bankTransaction: BankTransaction) => bankTransaction.bankAccount.id === bankAccountId);\n })\n );\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 getTransactionsByYear(finYear: number): Observable<BankTransaction[]> {\n return this.http.get(`${this.environment.apiV2}/bank-transactions?financialYear=${finYear}`)\n .pipe(\n map((bankTransactionsBase: BankTransactionBase[]) => {\n return bankTransactionsBase.map((bankTransaction: BankTransaction) => plainToClass(BankTransaction, bankTransaction));\n })\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 newBankTransactions: BankTransaction[] = response.map((bankTransaction: BankTransactionBase) => plainToClass(BankTransaction, bankTransaction));\n // push new items to cache only if we already have cache. Otherwise cache will contain only new items.\n if (this.cache) {\n // just current year's transactions should be added\n this.cache.push(...newBankTransactions.filter((bt: BankTransaction) => new FinancialYear().includes(bt.date)));\n this.updateCache();\n }\n\n return newBankTransactions;\n })\n );\n }\n\n private listenBankTransactionsImport(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification: Notification) => {\n if (!notification.isRead && notification.eventType === UserEventTypeClientTypeEnum.BASIQ_FIRST_IMPORT_COMPLETE) {\n this.resetCache();\n }\n });\n }\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@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) => {\n return response.map((item: any) => plainToClass(BorrowingExpense, item));\n })\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 { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ChartAccountsCategoryEnum } from '../../../db/Enums/chart-accounts-category.enum';\nimport { ChartAccounts as ChartAccountBase } from '../../../db/Models/chart-accounts/chart-accounts';\nimport { plainToClass } from 'class-transformer';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport { ChartAccountsHeading } from '../../../models/chart-accounts/chart-accounts-heading';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport { TankTypeEnum } from '../../../db/Enums/tank-type.enum';\nimport { ChartAccountsListEnum } from '../../../db/Enums/chart-accounts-list.enum';\nimport { FinancialYear } from '../../../models/financial-year/financial-year';\n\n/**\n * Chart accounts service\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsService {\n _chartAccounts: ChartAccounts[];\n chartAccountsSubject: ReplaySubject<ChartAccounts[]> = new ReplaySubject<ChartAccounts[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n /**\n * get all parent and child chart accounts and group it\n */\n getChartAccounts(): Observable<ChartAccounts[]> {\n if (!this._chartAccounts) {\n this._chartAccounts = [];\n this.http.get(`${this.environment.apiV2}/chart-accounts`)\n .pipe(\n map((response: ChartAccountBase[]) => {\n return response.map((item: ChartAccountBase) => plainToClass(ChartAccounts, item));\n })\n )\n .subscribe((chartAccounts: ChartAccounts[]) => {\n this._chartAccounts = chartAccounts;\n this.chartAccountsSubject.next(this._chartAccounts);\n });\n }\n\n return this.chartAccountsSubject.asObservable();\n }\n\n /**\n * Get list of chart accounts heading\n * @param categories\n */\n getChartAccountsHeadings(categories: ChartAccountsCategoryEnum[] = CHART_ACCOUNTS_CATEGORIES.all): Observable<ChartAccountsHeading[]> {\n return this.getChartAccounts()\n .pipe(\n map((chartAccounts: ChartAccounts[]) => {\n const filteredChartAccounts: ChartAccounts[] = chartAccounts.filter((ca: ChartAccounts) => categories.includes(ca.category));\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 return headings;\n })\n );\n }\n\n /**\n * Get heading of chart accounts by it Id\n * @param id\n */\n getHeadingByChartAccountsId(id: number): Observable<ChartAccountsHeading> {\n return this.getChartAccountsById(id)\n .pipe(\n map((chartAccounts: ChartAccounts) => {\n return chartAccounts.heading;\n })\n );\n }\n\n /**\n * Get chart accounts by Id\n * @param id\n */\n getChartAccountsById(id: number): Observable<ChartAccounts> {\n return this.getChartAccounts()\n .pipe(\n map((chartAccountsList: ChartAccounts[]) => {\n return chartAccountsList.find((chartAccounts: ChartAccounts) => chartAccounts.id === id);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest.service';\nimport { ChartAccountsDepreciation as ChartAccountsDepreciationBase } from '../../../../db/Models/chart-accounts/chart-accounts-depreciation';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ChartAccountsDepreciation } from '../../../../models/chart-accounts/chart-accounts-depreciation';\nimport { FinancialYear } from '../../../../models/financial-year/financial-year';\n\n/**\n * Service to work with depreciation chart accounts\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChartAccountsDepreciationService extends RestService<ChartAccountsDepreciationBase, ChartAccountsDepreciation> {\n url: string = 'chart-accounts-depreciations';\n modelClass: typeof ChartAccountsDepreciation = ChartAccountsDepreciation;\n isHydra: boolean = true;\n\n /**\n * Get depreciation chart accounts for current financial year\n */\n getCurrent(): Observable<ChartAccountsDepreciation> {\n return this.get()\n .pipe(\n map((chartAccountsDepreciations: ChartAccountsDepreciation[]) => {\n return chartAccountsDepreciations\n .find((chartAccountsDepreciation: ChartAccountsDepreciation): boolean => {\n return chartAccountsDepreciation.effectiveYear === new FinancialYear().year;\n });\n })\n );\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@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 => {\n return JSON.parse(messageEvent.data);\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Chat as ChatBase } from '../../../db/Models/firm/chat';\nimport { HttpClient } from '@angular/common/http';\nimport { SseService } from '../../event/sse.service';\nimport { RestService } from '../rest/rest.service';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { Chat } from '../../../models/chat/chat';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { ToastService } from '../../toast/toast.service';\nimport { Message } from '../../../models/chat/message';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\n\n/**\n * Service for work with chats\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ChatService extends RestService<ChatBase, Chat> {\n modelClass: typeof Chat = Chat;\n url: string = 'chats';\n isHydra: boolean = 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.listenChats();\n this.listenMessages();\n }\n\n /**\n * Listen chats events\n */\n listenChats(): void {\n this.sseService.on(`chats`).subscribe((chatBase: ChatBase): void => {\n let cache: Chat[] = cloneDeep(this.cache);\n // chat instance from event\n const eventChat: Chat = plainToClass(Chat, chatBase);\n // chat instance from cache\n const cachedChat: Chat = cache.find((chat: Chat): boolean => chat.id === eventChat.id);\n\n switch (true) {\n // add new chat\n case (!cachedChat):\n cache.push(eventChat);\n break;\n\n // remove deactivated chat\n case !eventChat.isActive():\n cache = cache.filter((chat: Chat): boolean => chat.id !== eventChat.id);\n break;\n\n // update chat with new firm (reassign)\n case eventChat.employee.id !== cachedChat.employee.id:\n replace(cache, eventChat);\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 this.cache = cache;\n this.updateCache();\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.eventDispatcherService.on(AppEventTypeEnum.MESSAGE_CREATED).subscribe((message: Message) => {\n const cache: Chat[] = cloneDeep(this.cache);\n const updatedChat: Chat = cache.find((chat: Chat): boolean => chat.id === message.chat.id);\n updatedChat.updatedAt = message.createdAt;\n\n replace(cache, updatedChat);\n this.cache = cache;\n this.updateCache();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Message as MessageBase } from '../../../../db/Models/firm/message';\nimport { HttpClient } from '@angular/common/http';\nimport _ from 'lodash';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { Message } from '../../../../models/chat/message';\nimport { RestService } from '../../rest/rest.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 { ToastService } from '../../../toast/toast.service';\n\n/**\n * Service for work with messages\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService extends RestService<MessageBase, Message> {\n modelClass: typeof Message = Message;\n url: string = 'messages';\n isHydra: boolean = 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.listenMessages();\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 const cache: Message[] = _.clone(this.cache);\n // update existing message if read and add new message if not read\n if (message.isRead()) {\n replace(cache, message);\n } else {\n cache.push(message);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.MESSAGE_CREATED, message));\n }\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { MessageDocument as MessageDocumentBase } from '../../../../db/Models/firm/message-document';\nimport { combineLatest, Observable, ReplaySubject } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\nimport _ from 'lodash';\nimport { plainToClass } from 'class-transformer';\nimport { MessageDocument } from '../../../../models/chat/message-document';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Message } from '../../../../models/chat/message';\n\n// @TODO improve base rest service and extend it\n/**\n * Service for work with Message Documents\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageDocumentService implements IEventListener {\n url: string = 'message-documents';\n cache: Readonly<Array<Readonly<MessageDocument>>>;\n cacheSubject: ReplaySubject<Readonly<Array<Readonly<MessageDocument>>>> = new ReplaySubject<Readonly<Array<Readonly<MessageDocument>>>>();\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n @Inject('environment') private environment: any\n ) {\n this.listenEvents();\n }\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.eventDispatcherService.on(AppEventTypeEnum.MESSAGE_CREATED).subscribe((message: Message): void => {\n if (message.documents.length) {\n const cache: MessageDocument[] = _.clone(this.cache);\n const documentsIds: number[] = this.cache.map((d: MessageDocument): number => d.id);\n message.documents.forEach((d: MessageDocument): void => {\n d.chat = message.chat;\n if (!documentsIds.includes(d.id)) {\n cache.push(...message.documents);\n }\n });\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n }\n });\n }\n\n /**\n * get list of message documents\n */\n get(): Observable<Readonly<MessageDocument[]>> {\n if (!this.cache) {\n this.http.get(`${this.environment.apiV2}/${this.url}`)\n .pipe(\n map((response: object): MessageDocument[] => {\n return response['hydra:member'].map((docBase: MessageDocumentBase): MessageDocument => plainToClass(MessageDocument, docBase));\n })\n )\n .subscribe((documents: MessageDocument[]): void => {\n this.cache = documents;\n this.cacheSubject.next(this.cache);\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * Upload file to chat\n * @param chatId\n * @param file\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.environment.apiV2}/${this.url}`, formData)\n .pipe(\n map((documentBase: MessageDocumentBase): MessageDocument => {\n const document: MessageDocument = plainToClass(MessageDocument, documentBase);\n const cache: MessageDocument[] = _.clone(this.cache);\n cache.push(document);\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n return document;\n })\n );\n }\n\n /**\n * Upload multiple files to chat\n * @param chatId\n * @param files\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[] => {\n return docsBase.map((docBase: MessageDocumentBase): MessageDocument => plainToClass(MessageDocument, docBase));\n })\n );\n }\n\n /**\n * Delete uploaded chat document\n * @param chatId\n * @param documentId\n */\n delete(chatId: number, documentId: number): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/${this.url}/${documentId}`)\n .pipe(\n map((): void => {\n this.cache = this.cache.filter((document: MessageDocument): boolean => document.id !== documentId);\n this.cacheSubject.next(this.cache);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ClientInvite as ClientInviteBase } from '../../../../db/Models/firm/client-invite';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../../functions/array';\nimport _ from 'lodash';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { ClientInvite } from '../../../../models/client/client-invite';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../../models/event/app-event';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientInviteService extends RestService<ClientInviteBase, ClientInvite> {\n url: string = 'clients/invites';\n modelClass: typeof ClientInvite = ClientInvite;\n\n /**\n * Import employees for firm from CSV file\n * @param file\n */\n import(file: File): Observable<ClientInvite[]> {\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((clientInvite: ClientInvite[]) => {\n return clientInvite;\n })\n );\n }\n\n /**\n * Accept client invitation from firm to user\n * @param invite\n */\n accept(invite: ClientInvite): Observable<any> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/accept`, null)\n .pipe(\n map((): void => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_INVITE_ACCEPTED, invite));\n // set cache without accepted invite\n this.cache = this.cache.filter((clientInvite: ClientInvite) => invite.id !== clientInvite.id);\n this.updateCache();\n })\n );\n }\n\n /**\n * Reject client invitation from firm to user\n * @param invite\n */\n reject(invite: ClientInvite): Observable<ClientInvite> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/reject`, null)\n .pipe(\n map((rejectedInvite: ClientInviteBase): ClientInvite => {\n const updatedInvite: ClientInvite = plainToClass(ClientInvite, rejectedInvite);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: ClientInvite[] = _.cloneDeep(this.cache);\n replace(tempCache, plainToClass(ClientInvite, updatedInvite));\n this.cache = tempCache;\n this.updateCache();\n return updatedInvite;\n })\n );\n }\n\n /**\n * Resend invitation from firm to client\n * @param invite\n */\n resend(invite: ClientInvite): Observable<ClientInvite> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/resend`, null)\n .pipe(\n map((rejectedInvite: ClientInviteBase): ClientInvite => {\n const updatedInvite: ClientInvite = plainToClass(ClientInvite, rejectedInvite);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: ClientInvite[] = _.cloneDeep(this.cache);\n replace(tempCache, plainToClass(ClientInvite, updatedInvite));\n this.cache = tempCache;\n this.updateCache();\n return updatedInvite;\n })\n );\n }\n\n /**\n * Send invitation from client to firm\n * @param invite\n */\n inviteFirmByUser(invite: ClientInvite): Observable<ClientInvite> {\n return this.http.post(`${this.environment.apiV2}/firms/invite`, invite)\n .pipe(\n map((inviteBase: ClientInviteBase): ClientInvite => {\n const newInvite: ClientInvite = plainToClass(ClientInvite, inviteBase);\n // avoid cache changes\n // @TODO make cache readonly\n const tempCache: ClientInvite[] = _.cloneDeep(this.cache);\n tempCache.push(newInvite);\n this.cache = tempCache;\n this.updateCache();\n return newInvite;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ClientMovement as ClientMovementBase } from '../../../../db/Models/firm/client-movement';\nimport { forkJoin, Observable } 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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientMovementService extends RestService<ClientMovementBase, ClientMovement> implements IEventListener {\n modelClass: typeof ClientMovement = ClientMovement;\n url: string = 'client-movements';\n isHydra: boolean = true;\n\n /**\n * @TODO BaseRestService should return collection\n */\n getAll(): Observable<ClientMovementCollection> {\n return this.get().pipe(\n map((clientMovements: ClientMovement[]) => {\n return new ClientMovementCollection(clientMovements);\n })\n );\n }\n\n getActive(): Observable<ClientMovementCollection> {\n return this.getAll().pipe(\n map((clientMovements: ClientMovementCollection): ClientMovementCollection => {\n return clientMovements.active;\n })\n );\n }\n\n getActiveByFirmType(type: FirmTypeEnum): Observable<ClientMovementCollection> {\n return this.getActive().pipe(\n map((clientMovements: ClientMovementCollection): ClientMovementCollection => {\n return clientMovements.getByFirmType(type);\n })\n );\n }\n\n update(movement: ClientMovement): Observable<ClientMovement> {\n // extend base 'add' method and pass into it movement without id\n return super.add(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();\n\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_TRANSFER_TO_OTHER_EMPLOYEE, [updatedMovement.client]));\n\n return updatedMovement;\n })\n );\n }\n\n updateBatch(clientMovements: ClientMovement[]): Observable<ClientMovement[]> {\n const batch: Observable<ClientMovement>[] = clientMovements.map((clientMovement: ClientMovement) => this.update(clientMovement));\n return forkJoin(batch);\n }\n\n /**\n * Reject current firm\n */\n close(clientMovement: ClientMovement): Observable<void> {\n clientMovement.dateTo = new Date();\n return this.http.put(`${this.environment.apiV2}/client-movements/${clientMovement.id}/close`, clientMovement)\n .pipe(\n map((): void => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_MOVEMENT_CLOSED, null));\n this.cache = this.cache.filter((movement: ClientMovement): boolean => movement.id !== clientMovement.id);\n this.updateCache();\n })\n );\n }\n\n /**\n * Listen Event Dispatcher service\n */\n listenEvents(): void {\n this.listenClientInvites();\n }\n\n /**\n * Listen to EventDispatcherService event related to clients invitations\n */\n private listenClientInvites(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.CLIENT_INVITE_ACCEPTED)\n .subscribe((): void => {\n this.fetch().subscribe((clientMovements: ClientMovement[]) => {\n this.cache = clientMovements;\n this.updateCache();\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: string = '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['hydra:member'].map((item: object) => plainToClass(ClientPortfolioReport, item));\n return new ClientPortfolioReportCollection(clientReports);\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { DepreciationCapitalProject as DepreciationCapitalProjectBase } from '../../../../db/Models/depreciation/depreciation-capital-project';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { DepreciationCapitalProject } from '../../../../models/depreciation/depreciation-capital-project';\n\n/**\n * Service for work with DepreciationCapitalProjects\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DepreciationCapitalProjectService {\n cache: DepreciationCapitalProject[];\n cacheSubject: ReplaySubject<DepreciationCapitalProject[]> = new ReplaySubject<DepreciationCapitalProject[]>(1);\n\n constructor(\n private http: HttpClient,\n @Inject('environment') private environment: any\n ) {\n }\n\n get(propertyId: number): Observable<DepreciationCapitalProject[]> {\n this.cacheSubject.next([]);\n\n this.http.get(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects`)\n .subscribe((capitalProjectsBase: DepreciationCapitalProjectBase[]) => {\n this.cache = capitalProjectsBase.map((capitalProjectBase: DepreciationCapitalProjectBase) => {\n return plainToClass(DepreciationCapitalProject, capitalProjectBase);\n });\n this.cacheSubject.next(this.cache);\n });\n\n return this.cacheSubject.asObservable();\n }\n\n add(capitalProject: DepreciationCapitalProject, propertyId: number): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects`, capitalProject)\n .pipe(\n map((capitalProjectBase: DepreciationCapitalProjectBase): void => {\n this.cache.push(plainToClass(DepreciationCapitalProject, capitalProjectBase));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n update(capitalProject: DepreciationCapitalProject, propertyId: number): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects/${capitalProject.id}`, capitalProject)\n .pipe(\n map((capitalProjectBase: DepreciationCapitalProjectBase): void => {\n replace(this.cache, plainToClass(DepreciationCapitalProject, capitalProjectBase));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n delete(capitalProject: DepreciationCapitalProject, propertyId: number): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/properties/${propertyId}/depreciation-capital-projects/${capitalProject.id}`)\n .pipe(\n map((): void => {\n this.cache = this.cache.filter((item: DepreciationCapitalProject) => capitalProject.id !== item.id);\n this.cacheSubject.next(this.cache);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Depreciation as DepreciationBase } from '../../../db/Models/depreciation/depreciation';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../rest/rest.service';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { FinancialYear } from '../../../models/financial-year/financial-year';\nimport { DepreciationReceipt } from '../../../models/depreciation/depreciation-receipt';\nimport { BankAccount } from '../../../models/bank/bank-account';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DepreciationService extends RestService<DepreciationBase, Depreciation> implements IEventListener {\n modelClass: typeof Depreciation = Depreciation;\n url: string = 'depreciations';\n\n /**\n * Add a single depreciation\n * @TODO add auto-generation for events\n */\n add(depreciation: Depreciation): Observable<Depreciation> {\n return this.addBatch([depreciation])\n .pipe(\n map((newDepreciations: Depreciation[]): Depreciation => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.DEPRECIATIONS_CREATED, newDepreciations[0]));\n return newDepreciations[0];\n })\n );\n }\n\n /**\n * Add multiple depreciations\n * @TODO add auto-generation for events\n */\n addBatch(depreciations: Depreciation[]): Observable<Depreciation[]> {\n return super.addBatch(depreciations).pipe(\n map((newDepreciations: Depreciation[]): Depreciation[] => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.DEPRECIATIONS_CREATED, newDepreciations));\n return newDepreciations;\n })\n );\n }\n\n /**\n * Listen to Depreciations events\n */\n listenEvents(): void {\n this.listenToUpdatedLoan();\n this.listenToVehicleClaim();\n this.listenToUpdatedBankAccount();\n }\n\n getOpenBalance(depreciation: Depreciation): Observable<number> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/opening-balance?financialYear=${new FinancialYear().year}`, depreciation)\n .pipe(\n map((response: number) => {\n return response || 0;\n })\n );\n }\n\n /**\n * Upload depreciation receipt\n * @param depreciation for which will be uploaded receipt\n */\n uploadReceipt(depreciation: Depreciation): void {\n const formData: FormData = new FormData();\n formData.append('file', depreciation.file);\n depreciation.receipt = null;\n\n this.http.post(`${this.environment.apiV2}/${this.url}/${depreciation.id}/receipts`, formData)\n .subscribe((receiptResponse: any) => {\n // we don't need to keep file after save\n depreciation.file = null;\n depreciation.receipt = plainToClass(DepreciationReceipt, receiptResponse);\n replace(this.cache, depreciation);\n this.cacheSubject.next(this.cache.slice());\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated bank loan\n */\n private listenToUpdatedLoan(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.LOAN_UPDATED, AppEventTypeEnum.PROPERTY_SHARE_UPDATED]).subscribe(() => {\n this.fetch().subscribe();\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated bank account\n */\n private listenToUpdatedBankAccount(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.BANK_ACCOUNT_UPDATED]).subscribe((bankAccount: BankAccount) => {\n if (bankAccount.isPropertyTank()) {\n this.fetch().subscribe();\n }\n });\n }\n\n /**\n * Listen to EventDispatcherService event related to updated vehicle claim\n */\n private listenToVehicleClaim(): void {\n this.eventDispatcherService.on([AppEventTypeEnum.VEHICLE_CLAIM_CREATED, AppEventTypeEnum.VEHICLE_CLAIM_UPDATED]).subscribe(() => {\n this.fetch().subscribe();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { DocumentFolder as DocumentFolderBase } from '../../../../db/Models/document/document-folder';\nimport { HttpClient } from '@angular/common/http';\nimport { Document as DocumentBase } from '../../../../db/Models/document/document';\nimport { Document } from '../../../../models/document/document';\nimport { replace } from '../../../../functions/array';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { RestService } from '../../rest/rest.service';\nimport { DocumentFolder } from '../../../../models/document/document-folder';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\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> {\n url: string = 'folders';\n modelClass: typeof DocumentFolder = DocumentFolder;\n\n /**\n * Add new document to the folder\n * @param file to be uploaded to the folder\n * @param folder for document\n */\n addDocument(file: File, folder: DocumentFolder): Observable<void> {\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}/folders/${folder.id}/documents`, formDataDocument).pipe(\n map((response: DocumentBase) => {\n const updatedFolder: DocumentFolder = Object.assign(plainToClass(DocumentFolder, {}), folder);\n updatedFolder.documents.push(plainToClass(Document, response));\n\n replace(this.cache, plainToClass(DocumentFolder, updatedFolder));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Edit folder document by moving it from one folder to another\n * @param editedDocument\n * @param selectedFolder to move the document to\n * @param oldFolderId: id of old folder from which need to remove the document\n */\n updateDocument(editedDocument: Document, selectedFolder: DocumentFolder, oldFolderId: number): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/folders/${selectedFolder.id}/documents/${editedDocument.id}`, editedDocument).pipe(\n map((response: DocumentBase) => {\n const oldFolder: DocumentFolder = this.cache.find((folder: DocumentFolder) => folder.id === oldFolderId);\n // Remove document from old folder\n oldFolder.documents = oldFolder.documents.filter((deletedDocument: Document) => deletedDocument.id !== response.id);\n\n // update old folder and replace it in cache\n response.folder = plainToClass(DocumentFolder, {id: selectedFolder.id, name: selectedFolder.name});\n replace(this.cache, plainToClass(DocumentFolder, oldFolder));\n\n // update new document folder and replace it in cache\n selectedFolder.documents.push(plainToClass(Document, response));\n replace(this.cache, plainToClass(DocumentFolder, selectedFolder));\n\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Delete document from folder\n * @param document to remove\n * @param folder from which document should be removed\n */\n deleteDocument(document: Document, folder: DocumentFolder): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/folders/${folder.id}/documents/${document.id}`).pipe(\n map(() => {\n folder.documents = folder.documents\n .filter((deletedDocument: Document) => deletedDocument.id !== document.id);\n replace(this.cache, plainToClass(DocumentFolder, folder));\n\n this.cacheSubject.next(this.cache);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RestService } from '../../rest/rest.service';\nimport { User as UserBase } from '../../../../db/Models/user/user';\nimport { 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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmployeeService extends RestService<UserBase, User>{\n url: string = 'employees';\n modelClass: typeof User = User;\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","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.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmployeeInviteService extends RestService<EmployeeInviteBase, EmployeeInvite> {\n url: string = '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[]) => {\n return employeeInvite;\n })\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 { 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 => {\n return plainToClass(Firm, firm);\n })\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 => {\n return plainToClass(Firm, firm);\n })\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[] => {\n return response['hydra:member'].map((firmBase: FirmBase): Firm => plainToClass(Firm, firmBase));\n })\n );\n }\n\n getByType(type: FirmTypeEnum): Observable<Firm[]> {\n return this.getAll().pipe(\n map((firms: Firm[]): Firm[] => {\n return firms.filter((firm: Firm) => firm.type === type);\n })\n );\n }\n\n updatePhoto(firm: Firm, photo: FormData): Observable<Firm> {\n return this.http.post(`${this.environment.apiV2}/firms/photo?_method=PUT`, photo)\n .pipe(\n map((firmPhoto: string) => {\n this.firm = plainToClass(Firm, Object.assign(firm, {photo: firmPhoto}));\n this.firmSubject.next(this.firm);\n\n return firm;\n })\n );\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 } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExportFormatterService {\n constructor(private currencyPipe: CurrencyPipe, 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 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 { 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.service';\nimport { IncomeSourceForecast } from '../../../../models/income-source/income-source-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 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: string = '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 * 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.isSalaryIncome()))\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.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: string = '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.isSalaryIncome()))\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.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: string = 'sole-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.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 this.updateBatch(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","import { Inject, Injectable } from '@angular/core';\nimport { User } from '../../models/user/user';\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 { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IEventListener } from '../../interfaces/event-listener.interface';\n\n/**\n * Service listen and handle kompassify events\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class KompassifyService implements IEventListener {\n\n constructor(\n // router required for execution of js code from progressbar step\n private router: Router,\n ) {}\n\n listenEvents(): void {\n window.addEventListener('message', (event: MessageEvent) => {\n // Execute js code from progressbar step\n if (event.data.TYPE === 'KOMPASSIFY_EXECUTE_JS_CODE') {\n eval(event.data.jsCode);\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Loan as LoanBase } from '../../../db/Models/loan/loan';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../functions/array';\nimport { RestService } from '../rest/rest.service';\nimport { plainToClass } from 'class-transformer';\nimport { Loan } from '../../../models/loan/loan';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { BankAccount } from '../../../models/bank/bank-account';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { LoanPayout } from '../../../models/loan/loan-payout';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service that handling loans logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoanService extends RestService<LoanBase, Loan> implements IEventListener {\n url: string = 'bank-accounts/loans';\n modelClass: typeof Loan = Loan;\n\n /**\n * Listen to Loans events\n */\n listenEvents(): void {\n this.listenToAddedLoans();\n this.listenToUpdatedBankAccounts();\n }\n\n listenToAddedLoans(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_ACCOUNT_CREATED)\n .subscribe((bankAccounts: BankAccount[]) => {\n // fetch loans when loan bank account created\n if (bankAccounts.find(ba => !!ba.loan)) {\n this.resetCache();\n }\n });\n }\n\n listenToUpdatedBankAccounts(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.BANK_ACCOUNT_UPDATED)\n .subscribe((updatedBankAccount: BankAccount): void => {\n if (!!updatedBankAccount.loan) {\n this.resetCache();\n }\n });\n }\n\n /**\n * Create Loan\n */\n add(model: Loan): Observable<Loan> {\n return this.addBatch([model])\n .pipe(\n map((newLoan: Loan[]): Loan => {\n return newLoan[0];\n })\n );\n }\n\n /**\n * Updated loan\n * @param loan\n */\n update(loan: Loan): Observable<Loan> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${loan.id}`, loan)\n .pipe(\n map((updatedLoanBase: LoanBase) => {\n const updatedLoan: Loan = plainToClass(Loan, updatedLoanBase);\n // if loan type is NOT vehicle - fire EventDispatcher event\n if (!updatedLoan.isVehicle()) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.LOAN_UPDATED, null));\n }\n\n replace(this.cache, updatedLoan);\n this.updateCache();\n return updatedLoan;\n })\n );\n }\n\n /**\n * Get list of vehicle loans\n */\n getVehicleLoans(): Observable<Loan[]> {\n return this.get()\n .pipe(\n map((loans: Loan[]) => {\n return loans.filter((loan: Loan) => loan.isVehicle());\n })\n );\n }\n\n /**\n * Calculate loan payments\n * @param loan\n */\n calculateLoanPayments(loan: Loan): Observable<any> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/calculation`, loan).pipe(\n map((response: any) => {\n return plainToClass(Loan, response);\n })\n );\n }\n\n /**\n * Add new loan payout\n * @param loan\n * @param paidOutLoan\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.resetCache();\n }\n ));\n }\n\n /**\n * Delete loan payout\n * @param loan\n * @param payout\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.resetCache();\n }\n ));\n }\n\n /**\n * Update loan payout\n * @param loan\n * @param paidOutLoan\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.resetCache();\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.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';\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: string = 'service-notifications';\n isHydra: boolean = 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 }\n this.cache = cache;\n this.cacheSubject.next(this.cache);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.NOTIFICATION_ADDED, notification));\n });\n }\n}\n","/**\n * Configuration file with the settings to generate PDF file\n */\nexport const PDF_CONFIG: {[key: string]: {[key: string]: any}} = {\n text: {\n fontSize: 12,\n fontName: 'helvetica',\n fontStyle: '',\n fontWeight: 'bold',\n positionX: 14,\n positionY: 10,\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 // coords for file section title (group, table, e.t.c.)\n contentTitleCoords: {\n marginTop: 15\n },\n contentCoords: {\n marginTop: 15,\n marginLeft: 14\n },\n table: {\n headStyles: {\n fillColor: '#00b7f0',\n lineWidth: .2,\n halign: 'center'\n },\n footStyles: {\n fillColor: '#ffffff',\n textColor: '#000000'\n },\n }\n};\n","import { Injectable } from '@angular/core';\nimport jsPDF from 'jspdf';\nimport autoTable from 'jspdf-autotable';\nimport { PDF_CONFIG } from '../../models/pdf/pdf-config';\nimport { ExportDataTable } from '../../models/export/export-data-table';\nimport { PdfSettings } from '../../models/pdf/pdf-settings';\nimport { ExportFormatterService } from '../export/export-formatter.service';\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * @TODO vik refactor\n * Service to work with PDF (generate, download, e.t.c.)\n */\nexport class PdfService {\n constructor(private formatter: ExportFormatterService) {\n }\n\n /**\n * Export file from provided HTML tables\n */\n exportTables(tables: NodeListOf<HTMLTableElement>, fileSettings: PdfSettings): void {\n const document: jsPDF = this.generateFromTables(tables, fileSettings);\n document.save(`${fileSettings.filename}.pdf`);\n }\n\n /**\n * Export file from provided array-like table data\n */\n exportFromDataTables(dataTables: ExportDataTable[], fileSettings: PdfSettings): void {\n const document: jsPDF = this.generateFromDataTables(dataTables, fileSettings.title);\n document.save(`${fileSettings.filename}.pdf`);\n }\n\n /**\n * Generate file from array-like table data\n */\n private generateFromDataTables(dataTables: ExportDataTable[], title: string): jsPDF {\n const pdf: jsPDF = new jsPDF();\n\n this.setDocumentTitle(pdf, title);\n this.setDocumentLogo(pdf);\n\n dataTables.forEach((dataTable: ExportDataTable) => {\n autoTable(\n pdf, {\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 private generateFromTables(tables: NodeListOf<HTMLTableElement>, fileSettings: PdfSettings): jsPDF {\n const pdf: jsPDF = 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 autoTable(\n pdf,\n {\n html: table,\n ...this.setTableOptions(pdf, table.caption.innerText)\n });\n });\n\n return pdf;\n }\n\n /**\n * Set basic options for PDF table\n */\n private setTableOptions(pdf: jsPDF, tableCaption: string = ''): object {\n const lastTableCoords = pdf['lastAutoTable'].finalY || PDF_CONFIG.contentCoords.marginTop;\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, PDF_CONFIG.contentCoords.marginLeft, lastTableCoords + PDF_CONFIG.contentCoords.marginTop);\n\n return {\n headStyles: {\n fillColor: PDF_CONFIG.text.colorPrimary,\n },\n footStyles: {\n fillColor: PDF_CONFIG.text.colorWhite,\n textColor: PDF_CONFIG.text.colorBlack\n },\n startY: lastTableCoords + captionHeight + PDF_CONFIG.contentTitleCoords.marginTop,\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 private setDocumentTitle(doc: jsPDF, title?: string): void {\n doc.setFontSize(PDF_CONFIG.text.fontSize)\n .setFont(PDF_CONFIG.text.fontName, PDF_CONFIG.text.fontStyle, PDF_CONFIG.text.fontWeight)\n .text(title, PDF_CONFIG.text.positionX, PDF_CONFIG.text.positionY);\n }\n\n private setDocumentLogo(doc: jsPDF): void {\n const logo = new Image();\n logo.src = PDF_CONFIG.logo.src;\n doc.addImage(\n logo,\n 'PNG',\n doc.internal.pageSize.width - PDF_CONFIG.logo.positionX,\n PDF_CONFIG.logo.positionY,\n PDF_CONFIG.logo.width,\n PDF_CONFIG.logo.height\n )\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertyService } from '../../http/property/property.service';\nimport { TransactionService } from '../../http/transaction/transaction.service';\nimport { DepreciationService } from '../../http/depreciation/depreciation.service';\nimport { ChartAccountsService } from '../../http/chart-accounts/chart-accounts.service';\nimport { combineLatest, Observable } from 'rxjs';\nimport { Property } from '../../../models/property/property';\nimport { Transaction } from '../../../models/transaction/transaction';\nimport { Depreciation } from '../../../models/depreciation/depreciation';\nimport { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';\nimport { DepreciationCollection } from '../../../collections/depreciation.collection';\nimport { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';\nimport { Collection } from '../../../collections/collection';\nimport { CollectionDictionary } from '../../../collections/collection-dictionary';\nimport { TransactionCollection } from '../../../collections/transaction/transaction.collection';\nimport { map } from 'rxjs/operators';\nimport { PropertyCollection } from '../../../collections/property/property.collection';\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 flatten from 'lodash/flatten';\nimport { PropertyReportItemCollection } from '../../../collections/report/property/property-report-item.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: Collection<ChartAccounts>;\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<Property[]>,\n this.getTransactions() as Observable<TransactionCollection>,\n this.getDepreciations() as Observable<DepreciationCollection>,\n this.chartAccountsService.getChartAccounts() as Observable<ChartAccounts[]>\n ]).pipe(\n map(([properties, transactions, depreciations, chartAccounts]) => {\n return new CollectionDictionary(\n this.create(\n transactions,\n depreciations,\n new PropertyCollection(properties),\n new Collection(chartAccounts)\n ),\n 'propertyId'\n );\n })\n )\n }\n\n private create(\n transactions: TransactionCollection,\n depreciations: DepreciationCollection,\n properties: PropertyCollection,\n chartAccounts: Collection<ChartAccounts>\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[]) => {\n return new TransactionCollection(transactions)\n .getByChartAccountsCategories(CHART_ACCOUNTS_CATEGORIES.property);\n })\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: Depreciation[]) => {\n return new DepreciationCollection(depreciations)\n .getByChartAccountsCategories(CHART_ACCOUNTS_CATEGORIES.property)\n // we don't need borrowing expenses for this report\n .getWithoutBorrowingExpenses();\n })\n )\n }\n}\n","import { Injectable } from '@angular/core';\nimport { combineLatest, Observable } 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';\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.cashPosition - 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 => {\n return this.getTaxPosition(transactions, depreciations);\n })\n );\n }\n\n taxPositionGrowth(properties: PropertyCollection, transactions: TransactionCollection, depreciations: DepreciationCollection): number {\n const taxPosition: number = this.getTaxPosition(transactions, depreciations);\n // check if taxPosition = 0 to avoid division by zero\n if (!taxPosition) {\n return 0;\n }\n\n return (taxPosition - properties.forecastedTaxPosition) / taxPosition;\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 => {\n return this.taxPositionGrowth(properties, transactions, depreciations);\n })\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 => {\n return totalAmount + bankAccounts.items\n .reduce((propertyAmount: number, bankAccount: BankAccount): number => {\n return propertyAmount + bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.amount || 0);\n }, 0);\n }, 0);\n }\n\n getLoanValue(properties: PropertyCollection, bankAccounts: BankAccountCollection): number {\n return properties.items.reduce((totalAmount: number, property: Property): number => {\n return totalAmount + bankAccounts.items\n .reduce((propertyAmount: number, bankAccount: BankAccount): number => {\n return propertyAmount + bankAccount.getPropertyBalanceAmount(property.id);\n }, 0);\n }, 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 => {\n return this.getLvr(properties, bankAccounts);\n })\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 => {\n return this.getLvrCommencement(properties, loans, bankAccounts);\n })\n );\n }\n\n getLvrGrowth(properties: PropertyCollection, bankAccounts: BankAccountCollection, loans: LoanCollection): number {\n const lvr: number = this.getLvr(properties, bankAccounts);\n if (!lvr) {\n // check if lvr = 0 to avoid division by zero\n return 0;\n }\n\n return (lvr - this.getLvrCommencement(properties, loans, bankAccounts)) / lvr;\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 => {\n return this.getLvrGrowth(properties, bankAccounts, loans);\n })\n );\n }\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 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","import { Injectable } from '@angular/core';\nimport { PropertyCategory as PropertyCategoryBase } from '../../../../db/Models/property/property-category';\nimport { RestService } from '../../rest/rest.service';\nimport { PropertyCategory } from '../../../../models/property/property-category';\n\n/**\n * Service for work with Property Categories\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyCategoryService extends RestService<PropertyCategoryBase, PropertyCategory>{\n modelClass: typeof PropertyCategory = PropertyCategory;\n url: string = 'properties/categories';\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { PropertyDocument as PropertyDocumentBase } from '../../../../db/Models/document/property-document';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { PropertyDocument } from '../../../../models/property/property-document';\nimport { RestService } from '../../rest/rest.service';\nimport { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';\nimport { Property } from '../../../../models/property/property';\nimport { IEventListener } from '../../../../interfaces/event-listener.interface';\n\n/**\n * Class for work with Property Documents\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyDocumentService extends RestService<PropertyDocumentBase, PropertyDocument> implements IEventListener {\n modelClass: typeof PropertyDocument = PropertyDocument;\n url: string = 'properties/documents';\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.cache.push(newDocument);\n this.updateCache();\n }\n\n return newDocument;\n })\n );\n }\n\n /**\n * Get documents by property id\n * @param propertyId to get desired documents\n */\n getByPropertyId(propertyId: number): Observable<PropertyDocument[]> {\n return this.get()\n .pipe(\n map((documents: PropertyDocument[]) => {\n return documents\n .filter((document: PropertyDocument) => document.property.id === propertyId);\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 { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { PropertyShare as PropertyShareBase } from '../../../../db/Models/property/property-share';\nimport { replace } from '../../../../functions/array';\nimport { plainToClass } from 'class-transformer';\nimport { PropertyShare } from '../../../../models/property/property-share';\nimport { RestService } from '../../rest/rest.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// @TODO check and improve logic during refactoring\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyShareService extends RestService<PropertyShareBase, PropertyShare> implements IEventListener {\n // api url parameter for properties shares\n url: string = 'properties/shares';\n modelClass = PropertyShare;\n\n /**\n * Listen to Event Dispatcher events\n */\n listenEvents(): void {\n this.listenUserUpdated();\n }\n\n /**\n * Updated loan\n */\n update(propertyShare: PropertyShare): Observable<PropertyShare> {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${propertyShare.id}`, propertyShare)\n .pipe(\n map((updatedPropertyShareBase: PropertyShareBase) => {\n const updatedPropertyShare: PropertyShare = plainToClass(PropertyShare, updatedPropertyShareBase);\n // if loan type is NOT vehicle - fire EventDispatcher event\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_SHARE_UPDATED, null));\n\n replace(this.cache, updatedPropertyShare);\n this.updateCache();\n return updatedPropertyShare;\n })\n );\n }\n\n /**\n * Re-invite property share\n * @param share user to share property\n */\n reinvite(share: PropertyShare): Observable<object> {\n return this.http.post(`${this.environment.apiV2}/${this.url}/${share.id}/reinvite`, {});\n }\n\n getIncoming(): Observable<PropertyShare[]> {\n return this.get()\n .pipe(map((propertyShares: PropertyShare[]) => {\n const propertySharesIncoming: PropertyShare[] = [];\n\n propertyShares.forEach((propertyShare: PropertyShare) => {\n if (propertyShare.user?.isLoggedIn() && propertyShare.isPending() && propertyShare.property.user.id !== +localStorage.getItem('userId')) {\n propertySharesIncoming.push(propertyShare);\n }\n });\n\n return propertySharesIncoming;\n }));\n }\n\n /**\n * Get outcoming property shares list\n */\n getOutcoming(): Observable<PropertyShare[]> {\n return this.get().pipe(\n map((propertyShares: PropertyShare[]): PropertyShare[] => {\n return this.filterOutcoming(propertyShares);\n })\n );\n }\n\n /**\n * Filter outcoming property shares\n */\n filterOutcoming(propertyShares: PropertyShare[]): PropertyShare[] {\n const propertySharesOutcoming: PropertyShare[] = [];\n\n propertyShares.forEach((propertyShare: PropertyShare) => {\n if (!propertyShare.user?.isLoggedIn()) {\n propertySharesOutcoming.push(propertyShare);\n }\n });\n\n return propertySharesOutcoming;\n }\n\n getByPropertyId(propertyId: number): Observable<PropertyShare[]> {\n return this.get()\n .pipe(\n map((propertyShares: PropertyShare[]) => {\n return propertyShares.filter((propertyShare: PropertyShare) => propertyShare.property.id === propertyId);\n }));\n }\n\n /**\n * Listen to User updated event\n */\n private listenUserUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.USER_UPDATED)\n .subscribe((): void => {\n this.fetch().subscribe((propertyShares: PropertyShare[]) => {\n this.cache = propertyShares;\n this.updateCache();\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertySale as PropertySaleBase } from '../../../../db/Models/property/property-sale/property-sale';\nimport { PropertySale } from '../../../../models/property/property-sale/property-sale';\nimport { RestService } from '../../rest/rest.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertySaleService extends RestService<PropertySaleBase, PropertySale> {\n modelClass: typeof PropertySale = PropertySale;\n url: string = 'properties/sales';\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[] => {\n return response.map((item: any) => {\n return plainToClass(ChartData, {\n name: item.category.name,\n data: item.equity.map((serie: any) => {\n return plainToClass(ChartSerie, {\n label: serie.date,\n value: serie.amount\n });\n })\n });\n });\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PropertyCategoryMovement } from '../../../../models/property/property-category-movement';\nimport { PropertyCategoryMovement as PropertyCategoryMovementBase } from '../../../../db/Models/property/property-category-movement';\nimport { RestService } from '../../rest/rest.service';\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 PropertyCategoryMovementService extends RestService<PropertyCategoryMovementBase, PropertyCategoryMovement> {\n modelClass: typeof PropertyCategoryMovement = PropertyCategoryMovement;\n url: string = 'properties/category-movements';\n\n add(model: PropertyCategoryMovement): Observable<PropertyCategoryMovement> {\n return super.add(model).pipe(\n map((newMovement: PropertyCategoryMovement): PropertyCategoryMovement => {\n // @TODO Alex: we need to teach restService to dispatch events + limit list of methods (not all services have all 4 or even more considering batch requests) + collections\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null))\n return newMovement;\n })\n );\n }\n\n update(model: PropertyCategoryMovement): Observable<PropertyCategoryMovement> {\n return super.update(model).pipe(\n map((updatedMovement: PropertyCategoryMovement): PropertyCategoryMovement => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));\n return updatedMovement;\n })\n );\n }\n\n delete(model: PropertyCategoryMovement): Observable<void> {\n return super.delete(model).pipe(\n map((): void => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));\n })\n );\n }\n\n // @TODO Alex: Move to collection\n getByPropertyId(id: number): Observable<PropertyCategoryMovement[]> {\n return this.get().pipe(\n map((movements: PropertyCategoryMovement[]): PropertyCategoryMovement[] => {\n return movements.filter((movement: PropertyCategoryMovement): boolean => movement.property.id === id)\n })\n );\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {BehaviorSubject, Observable, ReplaySubject} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {loadStripe} from '@stripe/stripe-js';\nimport {ServiceSubscriptionCollection} from '../../../collections/subscription/service-subscription.collection';\nimport {plainToClass} from 'class-transformer';\nimport {ServiceSubscription} from '../../../models/service-subscription/service-subscription';\nimport {ServicePayment} from '../../../models/service-subscription/service-payment';\nimport {EventDispatcherService} from '../../event/event-dispatcher.service';\nimport {ServiceSubscriptionItem} from '../../../models/service-subscription/service-subscription-item';\nimport {AppEvent} from '../../../models/event/app-event';\nimport {AppEventTypeEnum} from '../../../models/event/app-event-type.enum';\nimport {SseService} from '../../event/sse.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SubscriptionService {\n _serviceSubscription: ServiceSubscription;\n serviceSubscriptionSubject: ReplaySubject<ServiceSubscription> = new ReplaySubject<ServiceSubscription>(1);\n serviceSubscriptionsSubject: ReplaySubject<ServiceSubscriptionCollection> = new ReplaySubject<ServiceSubscriptionCollection>(1);\n stripe: any;\n servicePaymentsSubject: ReplaySubject<ServicePayment[]> = new ReplaySubject<ServicePayment[]>(1);\n _servicePayments: ServicePayment[];\n subscriptionChangeSubject: BehaviorSubject<ServiceSubscription> = new BehaviorSubject<ServiceSubscription>(null);\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n private sseService: SseService,\n @Inject('environment') private environment: any\n ) {\n this.listenSubscriptions();\n }\n\n getSubscription(force: boolean = false): Observable<ServiceSubscription> {\n if (!this._serviceSubscription || force) {\n this.http.get(`${this.environment.apiV2}/subscriptions/last`)\n .pipe(\n map((response: any) => {\n return plainToClass(ServiceSubscription, response);\n })\n )\n .subscribe((subsciption: ServiceSubscription) => {\n this._serviceSubscription = subsciption;\n this.serviceSubscriptionSubject.next(this._serviceSubscription);\n });\n }\n\n return this.serviceSubscriptionSubject.asObservable();\n }\n\n /**\n * redirect to stripe payment page\n */\n async checkoutRedirect(subscription: ServiceSubscription): Promise<any> {\n const stripe: any = await loadStripe(this.environment.stripePk);\n\n this.http.post(`${this.environment.apiV2}/stripe/checkout-session`, {\n items: subscription.items,\n successUrl: window.location.href,\n cancelUrl: window.location.href\n })\n .subscribe((session: string) => {\n // @Todo remove user TRIAL status\n stripe.redirectToCheckout({sessionId: session});\n });\n }\n\n /**\n * redirect to stripe billing page\n */\n billingRedirect(returnUrl: string): void {\n this.http.get(`${this.environment.apiV2}/stripe/billing-portal-session`, {\n params: {returnUrl}\n }).subscribe((response: any) => {\n window.location.replace(response.url);\n });\n }\n\n getPayments(): Observable<ServicePayment[]> {\n if (!this._servicePayments) {\n this.http.get(`${this.environment.apiV2}/service-payments`).subscribe((response: object[]) => {\n this._servicePayments = response.map((item: object) => plainToClass(ServicePayment, item));\n this.servicePaymentsSubject.next(this._servicePayments);\n });\n }\n\n return this.servicePaymentsSubject.asObservable();\n }\n\n /**\n * Get difference between current subscription and selected new subscription\n */\n getProrationCost(items: ServiceSubscriptionItem[]): Observable<number> {\n return this.http.post(`${this.environment.apiV2}/subscriptions/proration-cost`, items).pipe(\n map((prorationCost: number) => {\n return prorationCost;\n })\n );\n }\n\n /**\n * Change subscription plan\n */\n changeSubscription(items: ServiceSubscriptionItem[]): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/subscriptions/items`, items);\n }\n\n private listenSubscriptions(): void {\n this.sseService.on(`serviceSubscriptions`)\n .pipe(\n map((event: object): ServiceSubscription => plainToClass(ServiceSubscription, event))\n )\n .subscribe((subscription: ServiceSubscription): void => {\n this.getSubscription(true).subscribe();\n this.subscriptionChangeSubject.next(subscription);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED, null));\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ServicePrice as ServicePriceBase } from '../../../db/Models/subscription/service-price';\nimport { ServicePrice } from '../../../models/service-subscription/service-price';\nimport { RestService } from '../rest/rest.service';\n\n/**\n * Service that handling banks logic\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ServicePriceService extends RestService<ServicePriceBase, ServicePrice> {\n modelClass: typeof ServicePrice = ServicePrice;\n url: string = 'service-prices';\n isHydra: boolean = true;\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.service';\nimport { plainToClass } from 'class-transformer';\nimport { TaxReview } from '../../../models/tax-review/tax-review';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { User } from '../../../models/user/user';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\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: string = '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 }\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.cache = [];\n this.updateCache();\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","import { Injectable } from '@angular/core';\nimport { TaxReview as TaxReviewBase } from '../../../../db/Models/firm/accountant/tax-review';\nimport { RestService } from '../../rest/rest.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: string = '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 { 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 { TransactionAllocationCollection } from '../../collections/transaction/transaction-allocation.collection';\nimport { TransactionCollection } from '../../collections/transaction/transaction.collection';\nimport { Transaction } from '../../models/transaction/transaction';\n\n/**\n * @TODO move to collection\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.getNetAmount() === this.getAllocatedAmount(new TransactionCollection([transaction]), 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 => {\n return this.isAllocated(transaction, allocations);\n })\n );\n }\n\n /**\n * Get collection of unallocated transactions\n * @TODO Alex: consider to move to collection\n */\n getUnallocatedTransactions(transactions: TransactionCollection, allocations: TransactionAllocationCollection): TransactionCollection {\n return new TransactionCollection(\n transactions.items.filter((transaction: Transaction): boolean => {\n return !this.isAllocated(transaction, allocations);\n })\n );\n }\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) => {\n return response.map((item: object) => plainToClass(Occupation, item));\n })\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 { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { User as UserBase } from '../../../db/Models/user/user';\nimport { User } from '../../../models/user/user';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { JwtService } from '../../auth/jwt.service';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport clone from 'lodash/clone';\nimport {ServiceSubscription} from '../../../models/service-subscription/service-subscription';\nimport {SseService} from '../../event/sse.service';\nimport {IEventListener} from '../../../interfaces/event-listener.interface';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n/**\n * Service to work with user\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService implements IEventListener {\n cache: User;\n cacheSubject: ReplaySubject<User> = new ReplaySubject<User>(1);\n\n constructor(\n private http: HttpClient,\n private jwtService: JwtService,\n private eventDispatcherService: EventDispatcherService,\n private sseService: SseService,\n @Inject('environment') private environment: any\n ) {\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenServiceSubscriptionUpdated();\n }\n\n get(): Observable<User> {\n if (!this.cache) {\n this.fetch().subscribe(() => {}, (error: HttpErrorResponse) => {\n // force logout user (clear localStorage) when get current user return error\n if (error.status === 500) {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CURRENT_USER_GET_FAILED, null));\n }\n });\n }\n\n return this.cacheSubject.asObservable();\n }\n\n /**\n * Get current user\n */\n fetch(): Observable<User> {\n return this.http.get(`${this.environment.apiV2}/users/current`)\n .pipe(\n map((userBase: UserBase) => {\n const user: User = plainToClass(User, userBase);\n\n localStorage.setItem('userId', user.id.toString());\n // @TODO remove\n localStorage.setItem('financialYear', user.financialYear.toString());\n this.cache = user;\n this.cacheSubject.next(this.cache);\n\n return user;\n })\n );\n }\n\n /**\n * Register new user\n */\n register(data: object): Observable<object> {\n return this.http.post(`${this.environment.apiV2}/users/registration`, data);\n }\n\n /**\n * Update user\n */\n update(user: User): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/users/${user.id}`, user)\n .pipe(\n map((userBase: UserBase) => {\n this.cache = plainToClass(User, userBase);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.USER_UPDATED, null));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Change user password\n */\n changePassword(currentPassword: string, newPassword: string): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/users/password/change`, {currentPassword, newPassword});\n }\n\n /**\n * Recovery user password\n */\n recoveryPassword(email: string): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/users/password/recovery`, {email});\n }\n\n /**\n * Reset user password\n */\n resetPassword(newPassword: string, resetToken: string): Observable<object> {\n return this.http.put(`${this.environment.apiV2}/users/password/reset`, {newPassword, resetToken});\n }\n\n /**\n * Confirm registered user\n */\n confirm(verificationCode: string): Observable<object> {\n return this.http.post(`${this.environment.apiV2}/users/confirmation`, {verificationCode});\n }\n\n /**\n * Search existing user\n */\n search(email: string): Observable<User> {\n return this.http.get(`${this.environment.apiV2}/users/search?email=${email}`)\n .pipe(\n map((userBase: UserBase) => {\n return plainToClass(User, userBase);\n })\n );\n }\n\n /**\n * Finish onboarding process\n */\n finishOnboarding(user: User): Observable<void> {\n return this.http.put(`${this.environment.apiV2}/users/status`, user)\n .pipe(\n map(() => {\n this.cache = user;\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Update user photo\n */\n updatePhoto(photo: FormData): Observable<void> {\n return this.http.post(`${this.environment.apiV2}/users/photo?_method=PUT`, photo)\n .pipe(\n map((photoUrl: string) => {\n this.cache = plainToClass(User, Object.assign(this.cache, {photo: photoUrl}));\n this.cacheSubject.next(this.cache);\n })\n );\n }\n\n /**\n * Run forecast update script on backend when user switched financial year\n */\n switchFinancialYear(): Observable<object> {\n return this.http.get(`${this.environment.apiV2}/financial-year/switch`);\n }\n\n /**\n * clear service cache\n */\n resetCache(): void {\n this.fetch().subscribe();\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.resetCache());\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { UserEventSetting } from '../../../../models/user-event/user-event-setting';\nimport { UserEventSetting as UserEventSettingBase } from '../../../../db/Models/user/user-event-setting';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { RestService } from '../../rest/rest.service';\nimport { forkJoin, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { replace } from '../../../../functions/array';\nimport { classToPlain, plainToClass } from 'class-transformer';\nimport { ToastService } from '../../../toast/toast.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserEventSettingService extends RestService<UserEventSettingBase, UserEventSetting> {\n modelClass: typeof UserEventSetting = UserEventSetting;\n url: string = 'user-event-settings';\n isHydra: boolean = true;\n\n /**\n * Send batch to add/updated settings\n */\n saveBatch(settings: UserEventSetting[]): Observable<void> {\n // batch with post/put requests based on setting id\n const batch: Observable<object>[] = settings.map((setting: UserEventSetting) => {\n setting.isUpdating = true;\n\n if (setting.id) {\n return this.http.put(`${this.environment.apiV2}/${this.url}/${setting.id}`, classToPlain(setting));\n }\n\n return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(setting));\n });\n\n return forkJoin(batch).pipe(\n map((eventSettings: UserEventSetting[]) => {\n eventSettings.forEach((eventSetting: UserEventSetting) => {\n // get setting from cache by saved setting id\n const cachedSetting: UserEventSetting = this.cache.find((setting: UserEventSetting) => setting.id === eventSetting.id);\n\n if (cachedSetting) {\n replace(this.cache, eventSetting);\n } else {\n this.cache.push(plainToClass(UserEventSetting, eventSetting));\n }\n });\n\n this.updateCache();\n })\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { UserEventType as UserEventTypeBase } from '../../../../db/Models/user/user-event-type';\nimport { UserEventType } from '../../../../models/user-event/user-event-type';\nimport { EventDispatcherService } from '../../../event/event-dispatcher.service';\nimport { RestService } from '../../rest/rest.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserEventTypeService extends RestService<UserEventTypeBase, UserEventType> {\n modelClass: typeof UserEventType = UserEventType;\n url: string = 'user-event-types';\n isHydra: boolean = true;\n}\n\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Vehicle as VehicleBase } from '../../../db/Models/vehicle/vehicle';\nimport { Vehicle } from '../../../models/logbook/vehicle';\nimport { TankTypeEnum } from '../../../db/Enums/tank-type.enum';\nimport { RestService } from '../rest/rest.service';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { VehicleLogbook } from '../../../models/logbook/vehicle-logbook';\nimport { replace } from '../../../functions/array';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { MessagesEnum } from './messages.enum';\nimport { IEventListener } from '../../../interfaces/event-listener.interface';\n\n/**\n * Service that allows to work with WorkTank operations\n * @TODO separate vehicles and logbooks to different api\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleService extends RestService<VehicleBase, Vehicle> implements IEventListener {\n url: string = 'vehicles';\n modelClass: typeof Vehicle = Vehicle;\n messageCreated: string = MessagesEnum.VEHICLE_CREATED;\n messageUpdated: string = MessagesEnum.VEHICLE_UPDATED;\n messageDeleted: string = MessagesEnum.VEHICLE_DELETED;\n\n listenEvents(): void {\n this.listenLogbookAdded();\n this.listenLogbookUpdated();\n this.listenLogbookDeleted();\n }\n\n /**\n * Add a new logbook items to the vehicle when a new one created\n */\n private listenLogbookAdded(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_CREATED)\n .subscribe((result: {logbook: VehicleLogbook, vehicleId: number}) => {\n const tempCache: Vehicle[] = cloneDeep(this.cache);\n tempCache.find((vehicle: Vehicle): boolean => vehicle.id === result.vehicleId).logbook.push(result.logbook);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n\n /**\n * Replace vehicle's logbook with updated instance when logbook item updated\n */\n private listenLogbookUpdated(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_UPDATED)\n .subscribe((result: {logbook: VehicleLogbook, vehicleId: number}): void => {\n const tempCache: Vehicle[] = cloneDeep(this.cache);\n replace(tempCache.find((vehicle: Vehicle): boolean => vehicle.id === result.vehicleId).logbook, result.logbook);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n\n /**\n * Remove logbook item from vehicle when logbook deleted\n */\n private listenLogbookDeleted(): void {\n this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_DELETED)\n .subscribe((result: {logbook: VehicleLogbook, vehicleId: number}) => {\n const tempCache: Vehicle[] = cloneDeep(this.cache);\n const vehicle: Vehicle = tempCache.find((vehicle: Vehicle): boolean => vehicle.id === result.vehicleId);\n vehicle.logbook = vehicle.logbook.filter((logbook: VehicleLogbook): boolean => logbook.id !== result.logbook.id);\n this.cache = tempCache;\n this.updateCache();\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { VehicleLogbook as VehicleLogbookBase } from '../../../db/Models/vehicle/vehicle-logbook';\nimport { VehicleLogbook } from '../../../models/logbook/vehicle-logbook';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { plainToClass } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\nimport { EventDispatcherService } from '../../event/event-dispatcher.service';\nimport { AppEvent } from '../../../models/event/app-event';\nimport { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';\nimport { ToastService } from '../../toast/toast.service';\nimport { MessagesEnum } from './messages.enum';\n\n/**\n * Vehicle logbook service. Allows user to add, update or delete vehicle trips\n * @TODO extend rest service after it refactored\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class VehicleLogbookService {\n\n constructor(\n private http: HttpClient,\n private eventDispatcherService: EventDispatcherService,\n @Inject('environment') private environment: any,\n private toastService: ToastService\n ) { }\n\n add(logbook: VehicleLogbook, vehicleId: number): Observable<VehicleLogbook> {\n return this.http.post(`${this.environment.apiV2}/vehicles/${vehicleId}/logbooks`, logbook)\n .pipe(\n map((vehicleLogbookBase: VehicleLogbookBase) => {\n const newVehicleLogbook: VehicleLogbook = plainToClass(VehicleLogbook, vehicleLogbookBase);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_LOGBOOK_CREATED, {logbook: newVehicleLogbook, vehicleId}));\n this.toastService.success(MessagesEnum.VEHICLE_LOGBOOK_CREATED);\n return newVehicleLogbook;\n })\n );\n }\n\n update(logbook: VehicleLogbook, vehicleId: number): Observable<any> {\n return this.http.put(`${this.environment.apiV2}/vehicles/${vehicleId}/logbooks/${logbook.id}`, logbook).pipe(\n map((vehicleLogbookBase: VehicleLogbookBase) => {\n const updatedVehicleLogbook: VehicleLogbook = plainToClass(VehicleLogbook, vehicleLogbookBase);\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_LOGBOOK_UPDATED, {logbook: updatedVehicleLogbook, vehicleId}));\n this.toastService.success(MessagesEnum.VEHICLE_LOGBOOK_UPDATED);\n return plainToClass(VehicleLogbook, updatedVehicleLogbook);\n })\n );\n }\n\n delete(logbook: VehicleLogbook, vehicleId: number): Observable<void> {\n return this.http.delete(`${this.environment.apiV2}/vehicles/${vehicleId}/logbooks/${logbook.id}`)\n .pipe(\n map(() => {\n this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_LOGBOOK_DELETED, {logbook, vehicleId}));\n this.toastService.success(MessagesEnum.VEHICLE_LOGBOOK_DELETED);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as xlsx from 'xlsx';\nimport * as FileSaver from 'file-saver';\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: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'\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","import { Injectable } from '@angular/core';\nimport { RestService } from '../../../rest/rest.service';\nimport { TaxExemption as BaseTaxExemption } from '../../../../../db/Models/property/property-sale/tax-exemption';\nimport { TaxExemption } from '../../../../../models/property/property-sale/tax-exemption';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TaxExemptionService extends RestService<BaseTaxExemption, TaxExemption> {\n modelClass: typeof TaxExemption = TaxExemption;\n url: string = 'tax-exemptions';\n isHydra: boolean = true;\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 { IAsset } from '../interfaces/asset.interface';\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(document: IAsset): IconsFileEnum {\n switch (document.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 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","/**\n * Function which round value to the provided decimals\n * @param value to be rounded\n * @param decimals: amount of decimals\n */\nexport function roundTo(value: number, decimals: number = 2): number {\n const multiplier: number = Math.pow(10, decimals);\n return Math.round((value * 100) * multiplier) / multiplier;\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, FormGroup, ValidatorFn } from '@angular/forms';\nimport { Type } from '@angular/core';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * Abstract form class\n */\nexport abstract class AbstractForm<Model> extends FormGroup {\n protected modelClass: Type<Model>\n model: Model | object;\n submitted: boolean;\n\n protected constructor(\n controls: {[key: string]: AbstractControl},\n model: Model | object = {},\n validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(controls, validatorOrOpts, asyncValidator);\n this.model = model;\n this.modelClass = this.model.constructor as new () => Model;\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 */\n submit(data: object = {}): Model {\n this.submitted = true;\n this.markAllAsTouched();\n\n if (!this.valid) {\n return null;\n }\n\n return plainToClass(this.modelClass, Object.assign({}, this.model, this.value, data));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { Loan } from '../../models/loan/loan';\nimport { plainToClass } from 'class-transformer';\n\nexport class BankAccountLoanForm extends AbstractForm<Loan> {\n constructor(loan: Loan = plainToClass(Loan, {})) {\n super({\n type: new FormControl(loan.type, Validators.required),\n amount: new FormControl(loan.amount, Validators.required),\n repaymentType: new FormControl(loan.repaymentType, Validators.required),\n interestRate: new FormControl(loan.interestRate, [Validators.required, Validators.min(0), Validators.max(100)]),\n interestType: new FormControl(loan.interestType, Validators.required),\n availableRedraw: new FormControl(loan.availableRedraw, Validators.required),\n commencementDate: new FormControl(loan.commencementDate, Validators.required),\n repaymentAmount: new FormControl(loan.repaymentAmount, Validators.required),\n repaymentFrequency: new FormControl(loan.repaymentFrequency, Validators.required)\n }, loan);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BankAccountProperty } from '../../models/bank/bank-account-property';\nimport { plainToClass } from 'class-transformer';\n\nexport class BankAccountPropertyForm extends AbstractForm<BankAccountProperty> {\n constructor(\n isLoan: boolean,\n bankAccountProperty: BankAccountProperty = plainToClass(BankAccountProperty, {})\n ) {\n super({\n property: new FormControl(bankAccountProperty.property, Validators.required),\n percent: new FormControl({value: bankAccountProperty.percent, disabled: !isLoan}, Validators.required)\n }, bankAccountProperty);\n }\n}\n","import { FormArray } from '@angular/forms';\nimport { BankAccountPropertyForm } from './bank-account-property.form';\nimport { BankAccountProperty } from '../../models/bank/bank-account-property';\n\nexport class BankAccountPropertiesForm extends FormArray {\n constructor(\n private isLoan: boolean,\n private bankAccountProperties: BankAccountProperty[] = []\n ) {\n super(\n bankAccountProperties.length\n ? bankAccountProperties.map((bankAccountProperty: BankAccountProperty) => new BankAccountPropertyForm(isLoan, bankAccountProperty))\n : [new BankAccountPropertyForm(isLoan)]\n );\n }\n\n add(): void {\n this.push(new BankAccountPropertyForm(this.isLoan));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { TankTypeEnum } from '../../db/Enums/tank-type.enum';\nimport { BankAccountLoanForm } from './bank-account-loan.form';\nimport { BankAccount } from '../../models/bank/bank-account';\nimport { plainToClass } from 'class-transformer';\nimport { BankAccountPropertiesForm } from './bank-account-properties.form';\nimport { IEventListener } from '../../interfaces/event-listener.interface';\n\n/**\n * Form for additional data for bank accounts. Allow user to set tank type, loan and properties for new not-saved bank accounts.\n * Works with manual and basiq bank accounts.\n */\nexport class BankAccountForm extends AbstractForm<BankAccount> implements IEventListener {\n constructor(\n private bankAccount: BankAccount = plainToClass(BankAccount, {})\n ) {\n super({\n tankType: new FormControl(bankAccount.tankType, Validators.required),\n }, bankAccount);\n\n if (bankAccount.isLoan()) {\n this.addControl('loan', new BankAccountLoanForm());\n }\n\n this.listenEvents();\n }\n\n listenEvents(): void {\n this.listenTankTypeChanges();\n }\n\n get properties(): BankAccountPropertiesForm {\n return this.get('bankAccountProperties') as BankAccountPropertiesForm;\n }\n\n isLoan(): boolean {\n return BankAccount.loanTypes.includes(this.bankAccount.type);\n }\n\n isPropertyTank(): boolean {\n return this.get('tankType').value === TankTypeEnum.PROPERTY;\n }\n\n private addPropertiesArray(): void {\n const control = new BankAccountPropertiesForm(this.isLoan(), this.bankAccount.bankAccountProperties);\n // Default form behaviour is: iw we add enabled form control to disabled form group then this form group enable.\n // Disable form control before add to avoid form group enabling.\n if (this.disabled) {\n control.disable();\n }\n this.addControl('bankAccountProperties', control);\n }\n\n /**\n * Add/Remove properties form array depending on selected tank type\n */\n private listenTankTypeChanges(): void {\n this.get('tankType').valueChanges.subscribe((): void => {\n this.isPropertyTank() ? this.addPropertiesArray() : this.removeControl('bankAccountProperties');\n })\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { BankAccount } from '../../models/bank/bank-account';\nimport { FormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { BankConnection } from '../../models/bank/bank-connection';\n\n/**\n * Form is using for manual bank account creation (not Basiq), prepares bank account data for the next saving.\n */\nexport class BankAccountAddManualForm extends AbstractForm<BankAccount> {\n static accountNumberPattern: string = '^[0-9]{6}[ ]{1}[0-9]{1,}$';\n\n constructor(connection: BankConnection) {\n super({\n type: new FormControl(null, Validators.required),\n accountName: new FormControl(null, Validators.required),\n currentBalance: new FormControl(null, Validators.required),\n accountNumber: new FormControl(null, [Validators.required, Validators.pattern(BankAccountAddManualForm.accountNumberPattern)]),\n }, plainToClass(BankAccount, {bankConnection: connection}));\n }\n}\n","import { FormControl, 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: FormControl): 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 { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { FinancialYear } from '../../models/financial-year/financial-year';\nimport { dateRangeValidator } from '../../validators/date-range.validator';\n\nexport class BankAccountMigrateForm extends AbstractForm<{migrateFrom: Date, migrateTo: Date}> {\n static minDate: Date = new FinancialYear().prevFinYear.startDate;\n static maxDate: Date = new Date();\n\n constructor() {\n super({\n migrateFrom: new FormControl(BankAccountMigrateForm.minDate, [Validators.required, dateRangeValidator(BankAccountMigrateForm.minDate, BankAccountMigrateForm.maxDate)]),\n migrateTo: new FormControl(BankAccountMigrateForm.maxDate, [Validators.required, dateRangeValidator(BankAccountMigrateForm.minDate, BankAccountMigrateForm.maxDate)])\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { BankConnection } from '../../models/bank/bank-connection';\nimport { FormControl, Validators } from '@angular/forms';\nimport { BankLoginData } from '../../models/bank/bank-login-data';\nimport { plainToClass } from 'class-transformer';\n\n/**\n * Form with basiq bank login fields.\n * https://api.basiq.io/v2.0/docs/build-your-own-1#step-3-create-a-connection\n */\nexport class BankLoginForm extends AbstractForm<BankLoginData> {\n constructor(\n private connection: BankConnection\n ) {\n super({}, plainToClass(BankLoginData, {institution: {id: connection.bank.externalId}}));\n\n // Each Basiq banks has its own set of login fields, so we need to add these controls dynamically depended on the bank\n Object.keys(connection.bank.loginFields).forEach((key: string) => {\n this.addControl(key, new FormControl(null, Validators.required));\n });\n }\n}\n","import { FormControl, FormGroup, 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: FormGroup): ValidationErrors => {\n return Object.values(formGroup.controls)\n .find((control: FormControl): boolean => control.value) ? null : {nothingChecked: true};\n }\n}\n","import { FormControl, 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 */\nexport function requireAutocomplete(): ValidatorFn {\n return (control: FormControl) => {\n if (typeof control.value === 'string' && !!control.value) {\n return { notFromList: true };\n } else {\n return null;\n }\n };\n}\n","import { FormControl, 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: FormControl) => {\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, FormGroup, ValidatorFn } from '@angular/forms';\n\nexport function passwordMatchValidator(newPassControlName: string, confirmPassControlName: string): ValidatorFn {\n return (group: FormGroup) => {\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","import { AbstractForm } from '../abstract.form';\nimport { FormControl } from '@angular/forms';\nimport { ClientIncomeTypes } from '../../models/client/client-income-types';\nimport { atLeastOneCheckedValidator } from '../../validators';\n\nexport class ClientIncomeTypesForm extends AbstractForm<ClientIncomeTypes> {\n constructor(\n private clientIncomeTypes: ClientIncomeTypes\n ) {\n super({\n salary: new FormControl(clientIncomeTypes.salary),\n property: new FormControl(clientIncomeTypes.property),\n sole: new FormControl(clientIncomeTypes.sole),\n dividends: new FormControl(clientIncomeTypes.dividends),\n other: new FormControl(clientIncomeTypes.other)\n }, clientIncomeTypes, atLeastOneCheckedValidator());\n }\n}\n","import { FormControl, 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 FormControl(null, [Validators.required, Validators.email]),\n password: new FormControl(null, Validators.required)\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { passwordValidator } from '../../validators/password.validator';\nimport { passwordMatchValidator } from '../../validators/password-match.validator';\n\nexport class PasswordForm extends AbstractForm<{password: string, confirm: string}> {\n constructor() {\n super({\n password: new FormControl(null, [Validators.required, passwordValidator()]),\n confirm: new FormControl(null, Validators.required),\n }, {}, passwordMatchValidator('password', 'confirm'));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { PasswordForm } from '../user/password.form';\n\n// @TODO Alex: Create a model and handle request fields via class-transformer\nexport class RegisterClientForm extends AbstractForm<object> {\n constructor(\n referenceCode?: string\n ) {\n super({\n firstName: new FormControl('', [Validators.required]),\n lastName: new FormControl('', [Validators.required]),\n email: new FormControl('', [Validators.required, Validators.email]),\n password: new PasswordForm(),\n acceptTerms: new FormControl(false, [Validators.requiredTrue]),\n referenceCode: new FormControl(referenceCode)\n });\n }\n\n submit(): object {\n const formValue: object = super.submit();\n\n if (!formValue) {\n return null;\n }\n\n return {\n firstName: this.value.firstName,\n lastName: this.value.lastName,\n email: this.value.email,\n password: this.value.password.password,\n referenceCode: this.value.referenceCode\n };\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, 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 FormControl('', Validators.required),\n abn: new FormControl('', Validators.required),\n tan: new FormControl({value: '', disabled: firmType !== FirmTypeEnum.ACCOUNTANT}, Validators.required),\n owner: new RegisterClientForm(referenceCode),\n type: new FormControl(firmType)\n }, plainToClass(Firm, {}));\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\n\nexport class ResetPasswordForm extends AbstractForm<{email: string}> {\n constructor() {\n super({\n email: new FormControl(null, [Validators.required, Validators.email]),\n });\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { FormControl, Validators } from '@angular/forms';\nimport { Vehicle } from '../../models/logbook/vehicle';\nimport { plainToClass } from 'class-transformer';\n\nexport class VehicleForm extends AbstractForm<Vehicle> {\n static maxNameLength: number = 60;\n\n constructor(\n private vehicle: Vehicle = plainToClass(Vehicle, {})\n ) {\n super({\n name: new FormControl(vehicle.name, [Validators.required, Validators.maxLength(VehicleForm.maxNameLength)])\n }, vehicle);\n }\n}\n","import { AbstractForm } from '../abstract.form';\nimport { VehicleClaim } from '../../models/logbook/vehicle-claim';\nimport { FormControl, Validators } from '@angular/forms';\nimport { plainToClass } from 'class-transformer';\nimport { VehicleLogbookCollection } from '../../collections/vehicle-logbook.collection';\nimport { VehicleClaimMethodEnum } from '../../db/Enums/vehicle-claim-method.enum';\n\nexport class VehicleClaimForm extends AbstractForm<VehicleClaim> {\n constructor(\n private vehicleClaim: VehicleClaim,\n private logbooks: VehicleLogbookCollection\n ) {\n super({\n method: new FormControl(vehicleClaim.method, Validators.required),\n isManual: new FormControl(vehicleClaim.isManual),\n kilometers: new FormControl({\n value: vehicleClaim.kilometers,\n disabled: !vehicleClaim.isManual\n }),\n workUsage: new FormControl({\n value: vehicleClaim.workUsage,\n disabled: !vehicleClaim.isManual\n })\n }, vehicleClaim);\n\n this.setIsManualState();\n this.listenMethodChanges();\n this.listenIsManualChanges();\n }\n\n /**\n * Check if vehicle claim method changed\n */\n isMethodChanged(): boolean {\n return this.vehicleClaim.method !== this.get('method').value;\n }\n\n /**\n * Check if KLMs method selected\n */\n isKLMsMethod(): boolean {\n return this.get('method').value === VehicleClaimMethodEnum.KMS;\n }\n\n /**\n * Check if Logbook method selected\n */\n isLogbookMethod(): boolean {\n return this.get('method').value === VehicleClaimMethodEnum.LOGBOOK;\n }\n\n /**\n * Check if user selected manual calculation\n */\n isManual(): boolean {\n return this.get('isManual').value;\n }\n\n /**\n * @TODO save model, add generics and handle it in AbstractForm\n */\n submit(): VehicleClaim {\n return plainToClass(VehicleClaim, Object.assign({}, this.vehicleClaim, this.getRawValue()));\n }\n\n private setIsManualState() {\n if (this.logbooks.isBestPeriodExist()) {\n this.get('isManual').enable();\n } else {\n this.get('isManual').disable();\n this.get('isManual').setValue(true);\n }\n }\n\n /**\n * Handle method field value changes.\n * Set work usage value depended of selected method.\n */\n private listenMethodChanges(): void {\n this.get('method').valueChanges.subscribe((method: VehicleClaimMethodEnum): void => {\n if (method === VehicleClaimMethodEnum.KMS) {\n this.get('workUsage').setValue(0);\n } else if (method === VehicleClaimMethodEnum.LOGBOOK && !this.isManual()) {\n this.get('workUsage').setValue(this.logbooks.getBestPeriod().workUsage);\n }\n\n this.setValues();\n });\n }\n\n /**\n * Handle isManual field value changes.\n * Enable/disable fields depended of isManual value\n */\n private listenIsManualChanges(): void {\n this.get('isManual').valueChanges.subscribe((isManual: boolean): void => {\n if (isManual) {\n this.get('kilometers').enable();\n this.get('workUsage').enable();\n } else {\n this.get('kilometers').disable();\n this.get('workUsage').disable();\n }\n\n this.setValues();\n });\n }\n\n /**\n * Set automatic calculated values depended of current method for non-manual vehicle claim\n */\n private setValues(): void {\n if (this.isManual()) {\n return;\n }\n\n switch (this.get('method').value) {\n case VehicleClaimMethodEnum.LOGBOOK:\n this.get('workUsage').setValue(this.logbooks.getBestPeriod().workUsage);\n break;\n case VehicleClaimMethodEnum.KMS:\n const businessKms: number = this.logbooks.getBusinessLogbooks().getKlms();\n this.get('kilometers').setValue(businessKms < this.vehicleClaim.kmsLimit ? businessKms : this.vehicleClaim.kmsLimit);\n }\n }\n}\n","/**\n * Public API Surface of tt-core\n */\n\nexport * from './lib/tt-core.module';\n\n/**\n * Collections\n */\nexport * from './lib/collections/collection';\nexport * from './lib/collections/account-setup-item.collection';\nexport * from './lib/collections/bank.collection';\nexport * from './lib/collections/bank-account.collection';\nexport * from './lib/collections/bank-transaction.collection';\nexport * from './lib/collections/client.collection';\nexport * from './lib/collections/client-movement.collection';\nexport * from './lib/collections/client-portfolio-report.collection';\nexport * from './lib/collections/collection-dictionary';\nexport * from './lib/collections/depreciation.collection';\nexport * from './lib/collections/depreciation-forecast.collection';\nexport * from './lib/collections/employee.collection';\nexport * from './lib/collections/income-source.collection';\nexport * from './lib/collections/loan/loan.collection';\nexport * from './lib/collections/loan/loan-payment.collection';\nexport * from './lib/collections/message.collection';\nexport * from './lib/collections/message-document.collection';\nexport * from './lib/collections/property/property.collection';\nexport * from './lib/collections/report/depreciation/depreciation-lvp-report-item.collection';\nexport * from './lib/collections/report/depreciation/depreciation-report-item.collection';\nexport * from './lib/collections/report/property/property-report-item.collection';\nexport * from './lib/collections/report/property/property-report-item-transaction.collection';\nexport * from './lib/collections/report/property/property-report-item-depreciation.collection';\nexport * from './lib/collections/report/vehicle-expense/vehicle-expense.collection';\nexport * from './lib/collections/subscription/service-subscription.collection';\nexport * from './lib/collections/tax-summary/report-item.collection';\nexport * from './lib/collections/tax-summary/tax-return-categories.const';\nexport * from './lib/collections/tax-review.collection';\nexport * from './lib/collections/transaction/transaction-allocation.collection';\nexport * from './lib/collections/transaction/transaction.collection';\nexport * from './lib/collections/user-event-setting.collection';\nexport * from './lib/collections/vehicle.collection';\nexport * from './lib/collections/vehicle-logbook.collection';\nexport * from './lib/collections/exportable.collection';\n\n/**\n * DB models\n */\nexport * from './lib/db/Models/abstract-model';\nexport * from './lib/db/Models/transaction/transaction-base';\n\n/**\n * DB enums\n */\nexport * from './lib/db/Enums/address-type.enum';\n\nexport * from './lib/db/Enums/bank-account-status.enum';\nexport * from './lib/db/Enums/bank-account-type.enum';\nexport * from './lib/db/Enums/bank-connection-status.enum';\nexport * from './lib/db/Enums/bank-transaction-type.enum';\n\nexport * from './lib/db/Enums/chart-accounts-category.enum';\nexport * from './lib/db/Enums/chart-accounts-etp.enum';\nexport * from './lib/db/Enums/chart-accounts-heading-list.enum';\nexport * from './lib/db/Enums/chart-accounts-heading-taxable.enum';\nexport * from './lib/db/Enums/chart-accounts-heading-tax-deductible.enum';\nexport * from './lib/db/Enums/chart-accounts-heading-vehicle-list.enum';\nexport * from './lib/db/Enums/chart-accounts-list.enum';\nexport * from './lib/db/Enums/chart-accounts-metadata-list.enum';\nexport * from './lib/db/Enums/chart-accounts-metadata-type.enum';\nexport * from './lib/db/Enums/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-type.enum';\nexport * from './lib/db/Enums/income-source-type-list-other.enum';\nexport * from './lib/db/Enums/income-source-type-list-sole.enum';\nexport * from './lib/db/Enums/income-source-type-list-work.enum';\n\nexport * from './lib/db/Enums/invite-status.enum';\n\nexport * from './lib/db/Enums/loan-bank-type.enum';\nexport * from './lib/db/Enums/loan-frequency.enum';\nexport * from './lib/db/Enums/loan-interest-type.enum';\nexport * from './lib/db/Enums/loan-payout-type.enum';\nexport * from './lib/db/Enums/loan-repayment-frequency.enum';\nexport * from './lib/db/Enums/loan-repayment-type.enum';\nexport * from './lib/db/Enums/loan-type.enum';\nexport * from './lib/db/Enums/loan-vehicle-type.enum';\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/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-category-list.enum';\nexport * from './lib/db/Enums/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-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-metadata.enum';\n\n/**\n * Models and related enums and consts\n */\nexport * from './lib/models/account-setup/account-setup-item';\n\nexport * from './lib/models/address/address';\nexport * from './lib/models/address/country';\n\nexport * from './lib/models/bank/bank';\nexport * from './lib/models/bank/bank-account';\nexport * from './lib/models/bank/bank-account-chart-data';\nexport * from './lib/models/bank/bank-account-property';\nexport * from './lib/models/bank/bank-account-types.const';\nexport * from './lib/models/bank/bank-connection';\nexport * from './lib/models/bank/bank-login-data';\nexport * from './lib/models/bank/bank-transaction';\nexport * from './lib/models/bank/bank-transaction-chart-data';\nexport * from './lib/models/bank/bank-transaction-summary-fields.enum';\nexport * from './lib/models/bank/basiq-config';\nexport * from './lib/models/bank/basiq-job';\nexport * from './lib/models/bank/basiq-token';\nexport * from './lib/models/bank/type-loan.const';\n\nexport * from './lib/models/borrowing-expense/borrowing-expense';\nexport * from './lib/models/borrowing-expense/borrowing-expense-loan';\n\nexport * from './lib/models/chart/chart-data';\nexport * from './lib/models/chart/chart-serie';\n\nexport * from './lib/models/chart-accounts/chart-accounts';\nexport * from './lib/models/chart-accounts/chart-accounts-categories.const';\nexport * from './lib/models/chart-accounts/chart-accounts-depreciation';\nexport * from './lib/models/chart-accounts/chart-accounts-heading';\nexport * from './lib/models/chart-accounts/chart-accounts-metadata';\nexport * from './lib/models/chart-accounts/chart-accounts-tax-labels.enum';\nexport * from './lib/models/chart-accounts/chart-accounts-value';\n\nexport * from './lib/models/chat/chat';\nexport * from './lib/models/chat/chat-view-type.enum';\nexport * from './lib/models/chat/message';\nexport * from './lib/models/chat/message-document';\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/depreciation/depreciation';\nexport * from './lib/models/depreciation/depreciation-capital-project';\nexport * from './lib/models/depreciation/depreciation-forecast';\nexport * from './lib/models/depreciation/depreciation-group.enum';\nexport * from './lib/models/depreciation/depreciation-group';\nexport * from './lib/models/depreciation/depreciation-group-item';\nexport * from './lib/models/depreciation/depreciation-groups.const';\nexport * from './lib/models/depreciation/depreciation-receipt';\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/income-source/income-source';\nexport * from './lib/models/income-source/income-source-chart-data';\nexport * from './lib/models/income-source/income-source-forecast';\nexport * from './lib/models/income-source/income-source-type';\nexport * from './lib/models/income-source/salary-forecast';\nexport * from './lib/models/income-source/sole-forecast';\n\nexport * from './lib/models/loan/loan';\nexport * from './lib/models/loan/loan-max-number-of-payments.enum';\nexport * from './lib/models/loan/loan-payment';\nexport * from './lib/models/loan/loan-payout';\n\nexport * from './lib/models/logbook/default-vehicle-expense';\nexport * from './lib/models/logbook/logbook-period';\nexport * from './lib/models/logbook/logbook-purpose-options.const';\nexport * from './lib/models/logbook/vehicle';\nexport * from './lib/models/logbook/vehicle-claim';\nexport * from './lib/models/logbook/vehicle-logbook';\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/property/calculation-form-item';\nexport * from './lib/models/property/calculation-form-type.enum';\nexport * from './lib/models/property/capital-costs-itmes.const';\nexport * from './lib/models/property/corelogic-suggestion';\nexport * from './lib/models/property/share-filter-options.enum';\nexport * from './lib/models/property/property';\nexport * from './lib/models/property/property-category';\nexport * from './lib/models/property/property-category-movement';\nexport * from './lib/models/property/property-document';\nexport * from './lib/models/property/property-equity-chart-data';\nexport * from './lib/models/property/property-equity-chart-item';\nexport * from './lib/models/property/property-forecast';\nexport * from './lib/models/property/property-share';\nexport * from './lib/models/property/property-sale/property-sale';\nexport * from './lib/models/property/property-sale/tax-exemption';\nexport * from './lib/models/property/property-sale/tax-exemption-metadata';\nexport * from './lib/models/property/property-sale/property-sale-tax-exemption-metadata';\n\nexport * from './lib/models/property/property-subscription';\nexport * from './lib/models/property/property-valuation';\n\nexport * from './lib/models/registration-invite/registration-invite';\n\nexport * from './lib/models/report/depreciation/depreciation-lvp-report-item';\nexport * from './lib/models/report/depreciation/depreciation-report-item';\nexport * from './lib/models/report/depreciation/depreciation-lvp-asset-type.enum';\n\nexport * from './lib/models/report/property/property-report-item';\nexport * from './lib/models/report/property/property-report-item-transaction';\n\nexport * from './lib/models/report/vehicle-expense/vehicle-expense';\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';\nexport * from './lib/models/service-subscription/subscription-description.const';\nexport * from './lib/models/service-subscription/subscription-title.const';\nexport * from './lib/models/service-subscription/subscription-type.enum';\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-metadata';\nexport * from './lib/models/transaction/transaction-receipt';\n\nexport * from './lib/models/user/my-account-history';\nexport * from './lib/models/user/my-account-history-initiated-by.enum';\nexport * from './lib/models/user/my-account-history-status.enum';\nexport * from './lib/models/user/my-account-history-type.enum';\n\nexport * from './lib/models/user/occupation';\nexport * from './lib/models/user/user';\nexport * from './lib/models/user/user-roles.const';\nexport * from './lib/models/user/user-to-register';\nexport * from './lib/models/user/user-work-position.const';\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/account-setup/account-setup.service';\n\nexport * from './lib/services/http/address/address.service';\n\nexport * from './lib/services/asset/assets.service';\n\nexport * from './lib/services/auth/auth.service';\nexport * from './lib/services/auth/jwt.service';\n\nexport * from './lib/services/http/bank/bank.service';\nexport * from './lib/services/http/bank/bank-account/bank-account.service';\nexport * from './lib/services/bank/bank-account-calculation.service';\nexport * from './lib/services/http/bank/bank-connection/bank-connection.service';\nexport * from './lib/services/http/bank/bank-transaction/bank-transaction.service';\nexport * from './lib/services/bank/bank-transaction-calculation.service';\nexport * from './lib/services/http/bank/basiq/basiq.service';\n\nexport * from './lib/services/http/loan/borrowing-expense/borrowing-expense.service';\n\nexport * from './lib/services/http/chart-accounts/chart-accounts.service';\nexport * from './lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service';\n\nexport * from './lib/services/http/chat/chat.service';\nexport * from './lib/services/http/chat/message/message.service';\nexport * from './lib/services/http/chat/message-document/message-document.service';\n\nexport * from './lib/services/http/firm/client-invite/client-invite.service';\nexport * from './lib/services/http/firm/client-movement/client-movement.service';\nexport * from './lib/services/http/firm/portfolio-report/client-portfolio-report.service';\n\nexport * from './lib/services/http/depreciation/depreciation-capital-project/depreciation-capital-project.service';\nexport * from './lib/services/http/depreciation/depreciation.service';\n\nexport * from './lib/services/http/document/document-folder/document-folder.service';\n\nexport * from './lib/services/http/firm/employee/employee.service';\nexport * from './lib/services/http/firm/employee-invite/employee-invite.service';\nexport * from './lib/services/http/firm/client-income/client-income-types.service';\n\nexport * from './lib/services/event/event-dispatcher.service';\nexport * from './lib/services/event/sse.service';\n\nexport * from './lib/services/http/firm/firm.service';\n\nexport * from './lib/services/export/export-formatter.service';\n\nexport * from './lib/services/header-title/header-title.service';\n\nexport * from './lib/services/http/income-source/income-source.service';\nexport * from './lib/services/http/income-source/income-source-forecast/income-source-forecast.service';\nexport * from './lib/services/http/income-source/salary-forecast/salary-forecast.service';\nexport * from './lib/services/http/income-source/sole-forecast/sole-forecast.service';\n\nexport * from './lib/services/intercom/intercom.service';\n\nexport * from './lib/services/kompassify/kompassify.service';\n\nexport * from './lib/services/http/loan/loan.service';\n\nexport * from './lib/services/http/service-notification/service-notification.service';\n\nexport * from './lib/services/pdf/pdf.service';\n\nexport * from './lib/services/preloader/preloader.service';\n\nexport * from './lib/services/report/property/property-transaction-report.service';\n\nexport * from './lib/services/property/corelogic/corelogic.service';\nexport * from './lib/services/http/property/property.service';\nexport * from './lib/services/property/property-calculation/property-calculation.service';\nexport * from './lib/services/http/property/property-category/property-category.service';\nexport * from './lib/services/http/property/property-document/property-document.service';\nexport * from './lib/services/http/property/property-share/property-share.service';\nexport * from './lib/services/http/property/property-sale/property-sale.service';\nexport * from './lib/services/property/equity-position-chart/equity-position-chart.service';\nexport * from './lib/services/http/property/property.service';\nexport * from './lib/services/http/property/property-category-movement/property-category-movement.service';\n\nexport * from './lib/services/http/subscription/subscription.service';\nexport * from './lib/services/http/subscription/service-price.service';\n\nexport * from './lib/services/http/tax-review/tax-review.service';\nexport * from './lib/services/http/tax-review/tax-review-history/tax-review-history.service';\n\nexport * from './lib/services/http/tax-summary/tax-summary.service';\n\nexport * from './lib/services/toast/toast.service';\n\nexport * from './lib/services/http/transaction/transaction.service';\nexport * from './lib/services/http/transaction/transaction-allocation/transaction-allocation.service';\n\nexport * from './lib/services/transaction/transaction-calculation.service';\n\nexport * from './lib/services/http/user/occupation/occupation.service';\nexport * from './lib/services/http/user/user.service';\nexport * from './lib/services/user/user-switcher.service';\n\nexport * from './lib/services/http/user/user-event-setting/user-event-setting.service';\nexport * from './lib/services/http/user/user-event-type/user-event-type.service';\n\nexport * from './lib/services/http/vehicle/vehicle.service';\nexport * from './lib/services/http/vehicle/vehicle-claim.service';\nexport * from './lib/services/http/vehicle/vehicle-logbook.service';\n\nexport * from './lib/services/xlsx/xlsx.service';\n\nexport * from './lib/services/http/property/property-sale/tax-exemption/tax-exemption.service';\n\n/**\n * Interfaces\n */\nexport * from './lib/interfaces/asset.interface';\nexport * from './lib/interfaces/asset-entity-type.enum';\nexport * from './lib/interfaces/asset-type.enum';\nexport * from './lib/interfaces/chart-data.interface';\nexport * from './lib/interfaces/chart-serie.interface';\nexport * from './lib/interfaces/document.interface';\nexport * from './lib/interfaces/documentable.interface';\nexport * from './lib/interfaces/event-listener.interface';\nexport * from './lib/interfaces/income-source-forecast.interface';\nexport * from './lib/interfaces/option.interface';\nexport * from './lib/interfaces/photoable';\nexport * from './lib/interfaces/receipt.interface';\nexport * from './lib/interfaces/tank.interface';\nexport * from './lib/interfaces/table-exportable.interface';\nexport * from './lib/interfaces/updatable.interface';\nexport * from './lib/interfaces/expense.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/round-to';\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 * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ReplaySubject","map","plainToClass","Injectable","Inject","HttpParams","JwtHelperService","AppEventTypeEnum","Subject","filter","BehaviorSubject","catchError","HttpErrorResponse","observableThrowError","take","switchMap","finalize","UserEventTypeClientTypeEnum","ToastTypeEnum","classToPlain","get","BankAccountTypeEnum","BankAccountStatusEnum","LoanVehicleTypeEnum","Type","LoanPayoutTypeEnum","LoanPayoutBase","last","LoanBase","TankTypeEnum","UserStatusEnum","UserRolesEnum","CountryBase","AddressTypeEnum","AddressBase","_a","ClientDetailsBase","PhoneTypeEnum","PhoneBase","FirmBase","EmployeeDetailsBase","ServiceProductStatusEnum","ServiceProductIdEnum","BaseServiceProduct","BaseServicePrice","ServiceSubscriptionItemBase","SubscriptionTypeEnum","ServiceSubscriptionBase","BaseUser","PropertySubscriptionBase","PropertyCategoryBase","AssetTypeEnum","AssetEntityTypeEnum","PropertyDocumentBase","PropertyValuationBase","Exclude","PropertyForecastBase","Transform","PropertyCategoryMovementBase","TaxExemptionEnum","PropertyCategoryListEnum","hasIn","flatten","first","TaxExemptionMetadataEnum","moment","PropertyBase","BankAccountPropertyBase","Expose","BasiqJobBase","BankBase","BankConnectionStatusEnum","BankConnectionBase","BankAccountBase","cloneDeep","mergeMap","HTTP_INTERCEPTORS","NgModule","CommonModule","compact","concat","uniqBy","TransactionOperationEnum","FirmTypeEnum","DepreciationLvpAssetTypeEnum","ChartAccountsCategoryEnum","DepreciationTypeEnum","DepreciationCalculationEnum","ChartAccountsHeadingVehicleListEnum","ChartAccountsListEnum","DepreciationCapitalProjectBase","DateRange","DepreciationForecastBase","ChartAccountsHeadingBase","ChartAccountsMetadataListEnum","ChartAccountsMetadataBase","ChartAccountsBase","BankTransactionTypeEnum","TransactionSourceEnum","TransactionTypeEnum","TransactionReceiptBase","IncomeSourceTypeEnum","SalaryForecastBase","SoleForecastBase","SalaryForecastFrequencyEnum","IncomeSourceTypeListWorkEnum","IncomeSourceTypeListOtherEnum","IncomeSourceTypeBase","IncomeSourceForecastBase","IncomeSourceBase","TransactionMetadataBase","TransactionAllocationBase","IncomeAmountTypeEnum","TransactionBase","BankTransactionBase","DepreciationBase","TaxReturnCategoryListEnum","ChartAccountsEtpEnum","ChartAccountsHeadingListEnum","ChartAccountsHeadingTaxableEnum","ChartAccountsHeadingTaxDeductibleEnum","ChartAccountsMetadataTypeEnum","ChartAccountsTypeEnum","ChatStatusEnum","ClientDetailsMedicareExemptionEnum","ClientDetailsWorkDepreciationCalculationEnum","ClientDetailsWorkingHolidayMakerEnum","ClientInviteStatusEnum","ClientInviteTypeEnum","DepreciationCalculationPercentEnum","DepreciationWriteOffAmountEnum","IncomeSourceTypeListSoleEnum","InviteStatusEnum","LoanBankTypeEnum","LoanFrequencyEnum","LoanInterestTypeEnum","LoanRepaymentFrequencyEnum","LoanRepaymentTypeEnum","LoanTypeEnum","PropertyDepreciationCalculationEnum","PropertyShareAccessEnum","PropertyShareStatusEnum","RegistrationInviteStatusEnum","ServiceNotificationStatusEnum","ServiceNotificationTypeEnum","ServicePaymentStatusEnum","ServicePriceRecurringIntervalEnum","ServicePriceTypeEnum","ServiceSubscriptionStatusEnum","SpareDocumentSpareTypeEnum","TaxCalculationMedicareExemptionEnum","TaxCalculationTypeEnum","TaxReturnCategorySectionEnum","TaxReviewStatusEnum","TaxSummaryListEnum","TaxSummarySectionEnum","TaxSummaryTaxSummaryEnum","TicketFeedbackEnum","TicketStatusEnum","TicketTypesEnum","UserEventStatusEnum","UserEventTypeFrequencyEnum","UserEventTypeUserTypeEnum","UserEventTypeEmployeeTypeEnum","UserMedicareExemptionEnum","UserTitleEnum","UserWorkDepreciationCalculationEnum","UserWorkingHolidayMakerEnum","VehicleClaimMethodEnum","VehicleLogbookPurposeEnum","MonthNumberEnum","MonthNameShortEnum","BankTransactionSummaryFieldsEnum","BorrowingExpenseBase","BorrowingExpenseLoanBase","ChartAccountsDepreciationBase","ChartAccountsTaxLabelsEnum","ChartAccountsValueBase","ChatBase","ChatViewTypeEnum","MessageDocumentBase","MessageBase","ClientIncomeTypesBase","RegistrationInviteBase","ClientInviteBase","ClientMovementBase","AlphabetColorsEnum","DepreciationGroupEnum","DepreciationReceiptBase","DocumentApiUrlPrefixEnum","DocumentBase","DocumentFolderBase","EmployeeInviteBase","ExportFormatEnum","IconsFileEnum","LoanMaxNumberOfPaymentsEnum","VehicleLogbookBase","VehicleBase","VehicleClaimBase","ServiceNotificationBase","PdfOrientationEnum","CalculationFormTypeEnum","Validators","ShareFilterOptionsEnum","PropertyShareBase","BasePropertySale","PropertySaleTaxExemptionMetadata","BaseTaxExemption","BaseTaxExemptionMetadata","BasePropertySaleTaxExemptionMetadata","BaseServicePayment","TaxReviewBase","TaxSummaryTypeEnum","TransactionCategoryEnum","MyAccountHistoryInitiatedByEnum","MyAccountHistoryStatusEnum","MyAccountHistoryTypeEnum","OccupationBase","UserEventTypeCategoryBase","UserEventTypeBase","UserEventSettingBase","UserEventSettingFieldEnum","_","MessagesEnum","EventEmitter","fromPairs","combineLatest","of","Observable","EventSourcePolyfill","forkJoin","NavigationEnd","clone","jsPDF","autoTable","loadStripe","FileSaver","xlsx","FormGroup","FormControl","FormArray"],"mappings":"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"}
|