taxtank-core 0.21.9 → 0.21.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/bundles/taxtank-core.umd.js +238 -150
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/db/Enums/chart-accounts-heading-list.enum.js +8 -1
  4. package/esm2015/lib/db/Models/bank/bank-account.js +1 -1
  5. package/esm2015/lib/db/Models/depreciation/depreciation.js +1 -1
  6. package/esm2015/lib/db/Models/sole/sole-business-allocation.js +4 -0
  7. package/esm2015/lib/db/Models/sole/sole-business-loss.js +4 -0
  8. package/esm2015/lib/db/Models/sole/sole-business.js +4 -0
  9. package/esm2015/lib/db/Models/sole/sole-contact.js +4 -0
  10. package/esm2015/lib/db/Models/sole/sole-forecast.js +1 -1
  11. package/esm2015/lib/db/Models/sole/sole-invoice-item.js +4 -0
  12. package/esm2015/lib/db/Models/sole/sole-invoice-template.js +4 -0
  13. package/esm2015/lib/db/Models/sole/sole-invoice.js +4 -0
  14. package/esm2015/lib/db/Models/transaction/transaction.js +1 -1
  15. package/esm2015/lib/db/Models/vehicle/vehicle-claim.js +1 -1
  16. package/esm2015/lib/db/Models/vehicle/vehicle.js +1 -1
  17. package/esm2015/lib/forms/abstract.form.js +6 -1
  18. package/esm2015/lib/forms/bank/bank-account/bank-account-add-manual.form.js +9 -42
  19. package/esm2015/lib/forms/bank/bank-account/bank-account-allocation.form.js +31 -0
  20. package/esm2015/lib/forms/bank/bank-account/bank-account-import.form.js +4 -30
  21. package/esm2015/lib/forms/bank/bank-account/bank-account-properties.form.js +28 -7
  22. package/esm2015/lib/forms/index.js +2 -1
  23. package/esm2015/lib/forms/report/my-tax/my-tax-deductions.form.js +9 -3
  24. package/esm2015/lib/models/bank/bank-account.js +14 -4
  25. package/esm2015/lib/models/logbook/vehicle-claim.js +6 -3
  26. package/esm2015/lib/models/report/my-tax/my-tax-deductions/deduction-fields.const.js +10 -4
  27. package/esm2015/lib/models/report/my-tax/my-tax-deductions/my-tax-deductions.js +15 -15
  28. package/esm2015/lib/models/report/my-tax/my-tax-estimate/my-tax-estimate.js +3 -3
  29. package/esm2015/lib/models/report/my-tax/my-tax-interest/my-tax-interest.js +2 -2
  30. package/esm2015/lib/models/report/my-tax/my-tax-rent/my-tax-rent.js +33 -9
  31. package/esm2015/lib/services/event/sse.service.js +2 -1
  32. package/esm2015/lib/validators/fields-sum.validator.js +26 -0
  33. package/fesm2015/taxtank-core.js +221 -145
  34. package/fesm2015/taxtank-core.js.map +1 -1
  35. package/lib/db/Enums/chart-accounts-heading-list.enum.d.ts +7 -0
  36. package/lib/db/Models/bank/bank-account.d.ts +2 -2
  37. package/lib/db/Models/depreciation/depreciation.d.ts +2 -0
  38. package/lib/db/Models/sole/sole-business-allocation.d.ts +9 -0
  39. package/lib/db/Models/sole/sole-business-loss.d.ts +9 -0
  40. package/lib/db/Models/sole/sole-business.d.ts +26 -0
  41. package/lib/db/Models/sole/sole-contact.d.ts +17 -0
  42. package/lib/db/Models/sole/sole-invoice-item.d.ts +12 -0
  43. package/lib/db/Models/sole/sole-invoice-template.d.ts +10 -0
  44. package/lib/db/Models/sole/sole-invoice.d.ts +18 -0
  45. package/lib/db/Models/transaction/transaction.d.ts +2 -0
  46. package/lib/db/Models/vehicle/vehicle-claim.d.ts +2 -2
  47. package/lib/db/Models/vehicle/vehicle.d.ts +0 -2
  48. package/lib/forms/abstract.form.d.ts +4 -0
  49. package/lib/forms/bank/bank-account/bank-account-add-manual.form.d.ts +2 -6
  50. package/lib/forms/bank/bank-account/bank-account-allocation.form.d.ts +7 -0
  51. package/lib/forms/bank/bank-account/bank-account-import.form.d.ts +2 -8
  52. package/lib/forms/bank/bank-account/bank-account-properties.form.d.ts +1 -0
  53. package/lib/forms/index.d.ts +1 -0
  54. package/lib/forms/report/my-tax/my-tax-deductions.form.d.ts +1 -1
  55. package/lib/models/bank/bank-account.d.ts +2 -0
  56. package/lib/models/logbook/vehicle-claim.d.ts +1 -0
  57. package/lib/models/report/my-tax/my-tax-rent/my-tax-rent.d.ts +11 -1
  58. package/lib/services/event/sse.service.d.ts +1 -0
  59. package/lib/validators/fields-sum.validator.d.ts +8 -0
  60. package/package.json +1 -1
@@ -3376,20 +3376,34 @@
3376
3376
  * check if bank account related to work tank
3377
3377
  */
3378
3378
  BankAccount.prototype.isWorkTank = function () {
3379
- return this.tankType === exports.TankTypeEnum.WORK;
3379
+ return !this.isPropertyTank() && !this.isSoleTank();
3380
3380
  };
3381
3381
  /**
3382
3382
  * check if bank account related to work tank
3383
3383
  */
3384
3384
  BankAccount.prototype.isPropertyTank = function () {
3385
- return this.tankType === exports.TankTypeEnum.PROPERTY;
3385
+ return !!this.bankAccountProperties.length;
3386
3386
  };
3387
3387
  /**
3388
3388
  * check if bank account related to sole tank
3389
3389
  */
3390
3390
  BankAccount.prototype.isSoleTank = function () {
3391
- return this.tankType === exports.TankTypeEnum.SOLE;
3391
+ return !!this.businessAllocations.length;
3392
3392
  };
3393
+ Object.defineProperty(BankAccount.prototype, "tankType", {
3394
+ get: function () {
3395
+ switch (true) {
3396
+ case this.isPropertyTank():
3397
+ return exports.TankTypeEnum.PROPERTY;
3398
+ case this.isSoleTank():
3399
+ return exports.TankTypeEnum.SOLE;
3400
+ default:
3401
+ return exports.TankTypeEnum.WORK;
3402
+ }
3403
+ },
3404
+ enumerable: false,
3405
+ configurable: true
3406
+ });
3393
3407
  /**
3394
3408
  * Get Bank account property by id
3395
3409
  * @param id Id of property
@@ -7145,6 +7159,13 @@
7145
7159
  ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["HOME_OFFICE_RUNNING"] = 17] = "HOME_OFFICE_RUNNING";
7146
7160
  ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["TOOLS_EQUIPMENT"] = 18] = "TOOLS_EQUIPMENT";
7147
7161
  ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["HOME_OFFICE_OCCUPANCY"] = 19] = "HOME_OFFICE_OCCUPANCY";
7162
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["AWARD_OVERTIME_MEAL_ALLOWANCE_EXPENSE"] = 20] = "AWARD_OVERTIME_MEAL_ALLOWANCE_EXPENSE";
7163
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["NEWSPAPER"] = 21] = "NEWSPAPER";
7164
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["PRINTING_POSTAGE_STATIONERY"] = 22] = "PRINTING_POSTAGE_STATIONERY";
7165
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["SEMINARS_ETC"] = 23] = "SEMINARS_ETC";
7166
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["TELEPHONE"] = 24] = "TELEPHONE";
7167
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["UNION_FEES"] = 25] = "UNION_FEES";
7168
+ ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["OTHER"] = 26] = "OTHER";
7148
7169
  ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["DONATIONS"] = 27] = "DONATIONS";
7149
7170
  ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["PSI"] = 30] = "PSI";
7150
7171
  ChartAccountsHeadingListEnum[ChartAccountsHeadingListEnum["BONUSES"] = 34] = "BONUSES";
@@ -8742,11 +8763,18 @@
8742
8763
  return this.method === exports.VehicleClaimMethodEnum.KMS;
8743
8764
  };
8744
8765
  VehicleClaim.prototype.isWorkTank = function () {
8745
- return this.tankType === exports.TankTypeEnum.WORK;
8766
+ return !this.business;
8746
8767
  };
8747
8768
  VehicleClaim.prototype.isSoleTank = function () {
8748
- return this.tankType === exports.TankTypeEnum.SOLE;
8769
+ return !!this.business;
8749
8770
  };
8771
+ Object.defineProperty(VehicleClaim.prototype, "tankType", {
8772
+ get: function () {
8773
+ return this.isSoleTank() ? exports.TankTypeEnum.SOLE : exports.TankTypeEnum.WORK;
8774
+ },
8775
+ enumerable: false,
8776
+ configurable: true
8777
+ });
8750
8778
  /**
8751
8779
  * Claim amount for KLMs method. Exists only for KLMs method.
8752
8780
  */
@@ -9337,14 +9365,20 @@
9337
9365
  workRelatedClothingExpenses: [
9338
9366
  exports.ChartAccountsHeadingListEnum.COMPULSORY_WORK_UNIFORM,
9339
9367
  exports.ChartAccountsHeadingListEnum.PROTECTION_CLOTHING,
9340
- exports.ChartAccountsHeadingListEnum.OCCUPATIONAL_SPECIFIC_CLOTHING,
9341
- exports.ChartAccountsHeadingListEnum.SELF_EDUCATIONAL_EXPENSES
9368
+ exports.ChartAccountsHeadingListEnum.OCCUPATIONAL_SPECIFIC_CLOTHING
9342
9369
  ],
9343
9370
  otherIncomeRelatedExpenses: [
9344
9371
  exports.ChartAccountsHeadingListEnum.OTHER_WORK_RELATED_EXPENSES,
9345
9372
  exports.ChartAccountsHeadingListEnum.SUBSCRIPTIONS,
9346
9373
  exports.ChartAccountsHeadingListEnum.HOME_OFFICE_RUNNING,
9347
- exports.ChartAccountsHeadingListEnum.HOME_OFFICE_OCCUPANCY
9374
+ exports.ChartAccountsHeadingListEnum.HOME_OFFICE_OCCUPANCY,
9375
+ exports.ChartAccountsHeadingListEnum.AWARD_OVERTIME_MEAL_ALLOWANCE_EXPENSE,
9376
+ exports.ChartAccountsHeadingListEnum.NEWSPAPER,
9377
+ exports.ChartAccountsHeadingListEnum.PRINTING_POSTAGE_STATIONERY,
9378
+ exports.ChartAccountsHeadingListEnum.SEMINARS_ETC,
9379
+ exports.ChartAccountsHeadingListEnum.TELEPHONE,
9380
+ exports.ChartAccountsHeadingListEnum.UNION_FEES,
9381
+ exports.ChartAccountsHeadingListEnum.OTHER
9348
9382
  ],
9349
9383
  workRelatedSelfEducationExpenses: [
9350
9384
  exports.ChartAccountsHeadingListEnum.SELF_EDUCATIONAL_EXPENSES
@@ -9420,45 +9454,45 @@
9420
9454
  this.workRelatedClothingExpenses = this.transactions
9421
9455
  .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.workRelatedClothingExpenses);
9422
9456
  this.personalSuperContributions = this.transactions
9423
- .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.personalSuperContributions);
9457
+ .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.personalSuperContributions);
9424
9458
  this.workRelatedSelfEducationExpenses = this.transactions
9425
9459
  .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.workRelatedSelfEducationExpenses);
9426
9460
  this.vehicleExpensesTotalAmount = this.getVehicleExpensesTotalAmount();
9427
9461
  this.workRelatedTravelExpensesTotalAmount = this.transactions
9428
9462
  .filterBy('chartAccounts.heading.id', exports.ChartAccountsHeadingListEnum.WORK_RELATED_TRAVEL_EXPENSES)
9429
- .sumBy('amount');
9463
+ .sumBy('claimAmount');
9430
9464
  this.workRelatedClothingType = this.workRelatedClothingExpenses.length ? exports.DeductionClothingTypeEnum.COMPULSORY_C : null;
9431
- this.workRelatedClothingTotalAmount = this.workRelatedClothingExpenses.sumBy('amount');
9465
+ this.workRelatedClothingTotalAmount = this.workRelatedClothingExpenses.sumBy('claimAmount');
9432
9466
  this.workRelatedSelfEducationType = this.workRelatedSelfEducationExpenses.length ?
9433
9467
  exports.DeductionSelfEducationTypeEnum.IMPROVE_SKILLS_FOR_CURRENT_EARNINGS_K : null;
9434
- this.workRelatedSelfEducationTotalAmount = this.workRelatedSelfEducationExpenses.sumBy('amount');
9468
+ this.workRelatedSelfEducationTotalAmount = this.workRelatedSelfEducationExpenses.sumBy('claimAmount');
9435
9469
  this.lowValuePoolDeductionTotalAmount = this.depreciations.getByTankType(exports.TankTypeEnum.WORK)
9436
9470
  .getLowValuePoolDepreciations().sumBy('claimAmount');
9437
9471
  this.interestExpensesTotalAmount = this.transactions
9438
9472
  .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.interestExpenses)
9439
- .sumBy('amount');
9473
+ .sumBy('claimAmount');
9440
9474
  this.dividendExpensesTotalAmount = this.transactions
9441
9475
  .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.dividendExpenses)
9442
- .sumBy('amount');
9476
+ .sumBy('claimAmount');
9443
9477
  this.donationsTotalAmount = this.transactions
9444
9478
  .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.donations)
9445
- .sumBy('amount');
9479
+ .sumBy('claimAmount');
9446
9480
  this.interestsChargedByATOTotalAmount = this.transactions
9447
9481
  .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.interestsChargedByATO)
9448
- .sumBy('amount');
9482
+ .sumBy('claimAmount');
9449
9483
  this.litigationCostsTotalAmount = this.transactions
9450
9484
  .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.litigationCosts)
9451
- .sumBy('amount');
9485
+ .sumBy('claimAmount');
9452
9486
  this.otherManagingCostsTotalAmount = this.transactions
9453
9487
  .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.otherManagingCosts)
9454
- .sumBy('amount');
9455
- this.personalSuperContributionsTotalAmount = this.personalSuperContributions.sumBy('amount');
9488
+ .sumBy('claimAmount');
9489
+ this.personalSuperContributionsTotalAmount = this.personalSuperContributions.sumBy('claimAmount');
9456
9490
  this.forestryManagedInvestmentSchemesDeductionsTotalAmount = this.transactions
9457
9491
  .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.forestryManagedInvestmentSchemesDeductions)
9458
- .sumBy('amount');
9492
+ .sumBy('claimAmount');
9459
9493
  this.otherDeductionsTotalAmount = this.transactions
9460
9494
  .filterBy('chartAccounts.id', DEDUCTION_CATEGORIES.otherDeductions)
9461
- .sumBy('amount');
9495
+ .sumBy('claimAmount');
9462
9496
  }
9463
9497
  MyTaxDeductions.prototype.getVehicleExpensesTotalAmount = function () {
9464
9498
  var _a;
@@ -9477,7 +9511,7 @@
9477
9511
  MyTaxDeductions.prototype.setOtherWorkRelatedExpensesTotalAmount = function () {
9478
9512
  var otherIncomeRelatedExpenses = this.transactions
9479
9513
  .filterBy('chartAccounts.heading.id', DEDUCTION_CATEGORIES.otherIncomeRelatedExpenses);
9480
- this.otherWorkRelatedExpensesTotalAmount = Math.abs(otherIncomeRelatedExpenses.sumBy('amount')) +
9514
+ this.otherWorkRelatedExpensesTotalAmount = -Math.abs(otherIncomeRelatedExpenses.sumBy('claimAmount')) +
9481
9515
  this.depreciations.filterBy('chartAccounts.heading.id', exports.ChartAccountsHeadingListEnum.TOOLS_EQUIPMENT).sumBy('claimAmount');
9482
9516
  };
9483
9517
  return MyTaxDeductions;
@@ -9536,8 +9570,8 @@
9536
9570
  var taxOffsetsReportItem = summarySection.items.findBy('taxReturnCategory.id', exports.TaxReturnCategoryListEnum.TAX_OFFSETS);
9537
9571
  var lowMiddleIncomeTaxOffsets = this.getLowMiddleIncomeTaxOffsets(taxOffsetsReportItem);
9538
9572
  var taxPayable = grossTaxPayableReportItem.items.findBy('taxReturnCategory.id', exports.TaxReturnCategoryListEnum.TAX_ON_TAXABLE_INCOME).amount;
9539
- var medicareLevy = medicareReportItem.details.findBy('name', 'Medicare Levy Surcharge').amount;
9540
- var medicareLevySurcharge = medicareReportItem.details.findBy('name', 'Medicare Levy (based on single)').amount;
9573
+ var medicareLevy = medicareReportItem.details.findBy('name', 'Medicare Levy (based on single)').amount;
9574
+ var medicareLevySurcharge = medicareReportItem.details.findBy('name', 'Medicare Levy Surcharge').amount;
9541
9575
  var taxCredits = summarySection.items.findBy('taxReturnCategory.id', exports.TaxReturnCategoryListEnum.TAX_CREDITS).amount;
9542
9576
  var taxOffsets = this.getTaxOffsets(taxOffsetsReportItem.amount, lowMiddleIncomeTaxOffsets);
9543
9577
  return classTransformer.plainToClass(MyTaxEstimate, {
@@ -9645,7 +9679,7 @@
9645
9679
  this.interestPaidTransactions = transactions.filterBy('chartAccounts.id', exports.ChartAccountsListEnum.ATO_INTEREST_PAID);
9646
9680
  this.interestEarnedTotalAmount = this.interestEarnedTransactions.sumBy('amount');
9647
9681
  this.interestEarnedTotalTax = this.interestEarnedTransactions.sumBy('tax');
9648
- this.interestPaidTotalAmount = this.interestEarnedTransactions.sumBy('amount');
9682
+ this.interestPaidTotalAmount = this.interestPaidTransactions.sumBy('amount');
9649
9683
  }
9650
9684
  return MyTaxInterest;
9651
9685
  }());
@@ -9744,26 +9778,49 @@
9744
9778
  }());
9745
9779
 
9746
9780
  var MyTaxRent = /** @class */ (function () {
9747
- function MyTaxRent(transactions, depreciations) {
9781
+ function MyTaxRent(transactions, depreciations, taxSummary) {
9748
9782
  this.propertyExpenses = transactions.getPropertyTransactions().getExpenseTransactions();
9783
+ this.taxSummaryPropertySection = taxSummary.property;
9749
9784
  this.grossRentAmount = transactions
9785
+ .getPropertyTransactions()
9750
9786
  .getIncomeTransactions()
9751
9787
  .filterBy('chartAccounts.id', exports.ChartAccountsListEnum.RENTAL_INCOME)
9752
- .sumBy('amount') +
9753
- transactions.
9754
- getIncomeTransactions()
9788
+ .sumBy('claimAmount') +
9789
+ transactions
9790
+ .getPropertyTransactions()
9791
+ .getIncomeTransactions()
9755
9792
  .filterBy('chartAccounts.id', exports.ChartAccountsListEnum.OTHER_RENTAL_INCOME)
9756
- .sumBy('amount');
9793
+ .sumBy('claimAmount');
9757
9794
  this.interestDeductionsAmount = Math.abs(transactions.getInterestTransactions().sumBy('amount'));
9758
9795
  this.capitalWorksDeductionsAmount = Math.abs(depreciations.getCapitalDepreciations().sumBy('claimAmount'));
9759
- this.otherRentalDeductionsAmount = Math.abs(depreciations.getAssets().sumBy('claimAmount') +
9760
- depreciations.getBorrowingExpenseDepreciations().sumBy('claimAmount') +
9761
- this.propertyExpenses.sumBy('amount'));
9796
+ this.otherRentalDeductionsAmount = this.calculateOtherRentalDeductionsAmount();
9797
+ /**
9798
+ * @Todo Vik uncomment when task TT-2009 will be implemented
9799
+ */
9800
+ // this.otherRentalDeductionsAmount = depreciations.getByTankType(TankTypeEnum.PROPERTY).getAssets().claimAmount +
9801
+ // depreciations.getByTankType(TankTypeEnum.PROPERTY).getBorrowingExpenseDepreciations().claimAmount +
9802
+ // Math.abs(this.propertyExpenses.sumBy('claimAmount'));
9762
9803
  this.netRent = this.grossRentAmount -
9763
9804
  this.interestDeductionsAmount -
9764
9805
  this.capitalWorksDeductionsAmount -
9765
9806
  this.otherRentalDeductionsAmount;
9766
9807
  }
9808
+ /**
9809
+ * @Todo Vik remove when TT-2009 will be implemented.
9810
+ * We use tax summary data here because claim amount from depreciation is different
9811
+ * from the claim amount that we get from tax summary (depreciation claim amount is not affected by property share,
9812
+ * property contract date, e.t.c.). Details in the TT-2009 task
9813
+ */
9814
+ MyTaxRent.prototype.calculateOtherRentalDeductionsAmount = function () {
9815
+ var _a, _b, _c;
9816
+ var plantAndEquipmentAmount = Math.abs(((_a = this.taxSummaryPropertySection.items
9817
+ .findBy('taxReturnCategory.id', exports.TaxReturnCategoryListEnum.DEPRECIATION)) === null || _a === void 0 ? void 0 : _a.amount) || 0);
9818
+ var borrowingExpensesAmount = Math.abs(((_b = this.taxSummaryPropertySection.items
9819
+ .findBy('taxReturnCategory.id', exports.TaxReturnCategoryListEnum.BORROWING_EXPENSES)) === null || _b === void 0 ? void 0 : _b.amount) || 0);
9820
+ var otherRentalDeductionsAmount = Math.abs(((_c = this.taxSummaryPropertySection.items
9821
+ .findBy('taxReturnCategory.id', exports.TaxReturnCategoryListEnum.OTHER_RENTAL_DEDUCTIONS)) === null || _c === void 0 ? void 0 : _c.amount) || 0);
9822
+ return +Math.floor(plantAndEquipmentAmount + borrowingExpensesAmount + otherRentalDeductionsAmount).toFixed(2);
9823
+ };
9767
9824
  return MyTaxRent;
9768
9825
  }());
9769
9826
 
@@ -11775,6 +11832,7 @@
11775
11832
 
11776
11833
  /**
11777
11834
  * server sent events service
11835
+ * https://symfony.com/doc/current/mercure.html
11778
11836
  */
11779
11837
  var SseService = /** @class */ (function () {
11780
11838
  function SseService(zone, jwtService, environment) {
@@ -14967,6 +15025,7 @@
14967
15025
 
14968
15026
  /**
14969
15027
  * Abstract form class
15028
+ * @TODO rename to AbstractFormGroup
14970
15029
  */
14971
15030
  var AbstractForm = /** @class */ (function (_super) {
14972
15031
  __extends(AbstractForm, _super);
@@ -14993,6 +15052,10 @@
14993
15052
  this.onSubmit.emit(model);
14994
15053
  return model;
14995
15054
  };
15055
+ AbstractForm.prototype.addControl = function (name, control, options) {
15056
+ _super.prototype.addControl.call(this, name, control, options);
15057
+ return this;
15058
+ };
14996
15059
  AbstractForm.prototype.createModelInstance = function (data) {
14997
15060
  if (data === void 0) { data = {}; }
14998
15061
  return classTransformer.plainToClass(this.modelClass, data);
@@ -15000,30 +15063,61 @@
15000
15063
  return AbstractForm;
15001
15064
  }(forms.FormGroup));
15002
15065
 
15066
+ function conditionalValidator(condition, validator) {
15067
+ return function (control) {
15068
+ revalidateOnChanges(control);
15069
+ if (control && control.parent) {
15070
+ if (condition(control.parent)) {
15071
+ return validator(control);
15072
+ }
15073
+ }
15074
+ return null;
15075
+ };
15076
+ }
15003
15077
  /**
15004
- * Form with bank account loan details
15078
+ * Conditional validator depends on other fields and should be updated on each form value change
15005
15079
  */
15006
- var BankAccountLoanForm = /** @class */ (function (_super) {
15007
- __extends(BankAccountLoanForm, _super);
15008
- function BankAccountLoanForm(loan) {
15009
- if (loan === void 0) { loan = classTransformer.plainToClass(Loan, {}); }
15010
- return _super.call(this, {
15011
- type: new forms.FormControl(loan.type, forms.Validators.required),
15012
- amount: new forms.FormControl(loan.amount, forms.Validators.required),
15013
- repaymentType: new forms.FormControl(loan.repaymentType, forms.Validators.required),
15014
- interestRate: new forms.FormControl(loan.interestRate, [forms.Validators.required, forms.Validators.min(0), forms.Validators.max(100)]),
15015
- interestType: new forms.FormControl(loan.interestType, forms.Validators.required),
15016
- availableRedraw: new forms.FormControl(loan.availableRedraw, forms.Validators.required),
15017
- commencementDate: new forms.FormControl(loan.commencementDate, forms.Validators.required),
15018
- repaymentAmount: new forms.FormControl(loan.repaymentAmount, forms.Validators.required),
15019
- repaymentFrequency: new forms.FormControl(loan.repaymentFrequency, forms.Validators.required)
15020
- }, loan) || this;
15080
+ function revalidateOnChanges(control) {
15081
+ if (control && control.parent && !control['_revalidateOnChanges']) {
15082
+ control['_revalidateOnChanges'] = true;
15083
+ control.parent.valueChanges.pipe(operators.distinctUntilChanged(function (a, b) { return JSON.stringify(a) === JSON.stringify(b); }))
15084
+ .subscribe(function () {
15085
+ control.updateValueAndValidity({ emitEvent: false });
15086
+ });
15021
15087
  }
15022
- return BankAccountLoanForm;
15023
- }(AbstractForm));
15088
+ return;
15089
+ }
15090
+
15091
+ /**
15092
+ * Validator that check if sum amount of provided fields is greater than provided sum
15093
+ * @param field to check in each formArray element
15094
+ * @param summary to compare with fields sum
15095
+ * @param fieldAlias to show it in error message
15096
+ */
15097
+ function fieldsSumValidator(field, summary, fieldAlias) {
15098
+ if (summary === void 0) { summary = 100; }
15099
+ return function (formArray) {
15100
+ // calculate sum of desired fields in formArray control
15101
+ var fieldsSum = formArray['controls']
15102
+ .reduce(function (acc, group) { return acc += group.get(field).value; }, 0);
15103
+ if (fieldsSum <= summary) {
15104
+ return null;
15105
+ }
15106
+ else {
15107
+ return {
15108
+ fieldsSum: {
15109
+ name: field,
15110
+ alias: fieldAlias,
15111
+ summary: summary
15112
+ }
15113
+ };
15114
+ }
15115
+ };
15116
+ }
15024
15117
 
15025
15118
  /**
15026
15119
  * Form array with bank account properties
15120
+ * @TODO create AbstractFormArray
15027
15121
  */
15028
15122
  var BankAccountPropertiesForm = /** @class */ (function (_super) {
15029
15123
  __extends(BankAccountPropertiesForm, _super);
@@ -15031,20 +15125,37 @@
15031
15125
  if (bankAccountProperties === void 0) { bankAccountProperties = [classTransformer.plainToClass(BankAccountProperty, {})]; }
15032
15126
  return _super.call(this, bankAccountProperties.map(function (bankAccountProperty) {
15033
15127
  return new forms.FormGroup({
15034
- property: new forms.FormControl(bankAccountProperty.property, forms.Validators.required),
15128
+ property: new forms.FormControl(bankAccountProperty === null || bankAccountProperty === void 0 ? void 0 : bankAccountProperty.property, forms.Validators.required),
15035
15129
  percent: new forms.FormControl(bankAccountProperty.percent, forms.Validators.required)
15036
15130
  });
15037
- })) || this;
15131
+ }), [
15132
+ conditionalValidator(function (control) { return control.get('tankType').value === exports.TankTypeEnum.PROPERTY; }, forms.Validators.required),
15133
+ fieldsSumValidator('percent', 100)
15134
+ ]) || this;
15038
15135
  }
15039
15136
  BankAccountPropertiesForm.prototype.add = function () {
15040
15137
  this.push(new forms.FormGroup({
15041
15138
  property: new forms.FormControl(null, forms.Validators.required),
15042
- percent: new forms.FormControl({
15043
- value: 100,
15044
- disabled: !this.at(0).contains('percent')
15045
- }, forms.Validators.required)
15046
- }));
15047
- };
15139
+ // @TODO disable for loans
15140
+ percent: new forms.FormControl({ value: 100, disabled: !this.at(0).contains('percent') }, forms.Validators.required),
15141
+ // @TODO enable for loans
15142
+ // amount: new FormControl(
15143
+ // {value: this.bankAccount.currentBalance * bankAccountProperty.percent / 100},
15144
+ // [Validators.required, Validators.max(Math.abs(this.bankAccount.currentBalance))]
15145
+ // ),
15146
+ }));
15147
+ };
15148
+ // @TODO enable for loans
15149
+ // /**
15150
+ // * Recalculate property percentage for current property form group and round to no more than 3 decimal places
15151
+ // * @param amount: new control value
15152
+ // * @param currentPropertyGroup for which amount will be recalculated
15153
+ // */
15154
+ // recalculatePropertyPercentage(amount: number, currentPropertyGroup: FormGroup): void {
15155
+ // currentPropertyGroup.get('percent').setValue(
15156
+ // roundTo(amount / this.bankAccount.currentBalance, 3)
15157
+ // );
15158
+ // }
15048
15159
  BankAccountPropertiesForm.prototype.enablePercent = function () {
15049
15160
  this.controls.forEach(function (propertyFormGroup) {
15050
15161
  propertyFormGroup.get('percent').enable();
@@ -15058,6 +15169,57 @@
15058
15169
  return BankAccountPropertiesForm;
15059
15170
  }(forms.FormArray));
15060
15171
 
15172
+ var BankAccountAllocationForm = /** @class */ (function (_super) {
15173
+ __extends(BankAccountAllocationForm, _super);
15174
+ function BankAccountAllocationForm(bankAccount) {
15175
+ var _this = _super.call(this, {
15176
+ tankType: new forms.FormControl(bankAccount ? bankAccount.tankType : null, forms.Validators.required),
15177
+ }, classTransformer.plainToClass(BankAccount, bankAccount || {})) || this;
15178
+ _this.bankAccount = bankAccount;
15179
+ if (bankAccount === null || bankAccount === void 0 ? void 0 : bankAccount.isPropertyTank()) {
15180
+ _this.addControl('bankAccountProperties', new BankAccountPropertiesForm(bankAccount.bankAccountProperties));
15181
+ }
15182
+ _this.watchTankType();
15183
+ return _this;
15184
+ }
15185
+ BankAccountAllocationForm.prototype.watchTankType = function () {
15186
+ var _this = this;
15187
+ this.get('tankType').valueChanges.subscribe(function (tankType) {
15188
+ var _a;
15189
+ // @TODO vik add businessAllocation
15190
+ if (tankType === exports.TankTypeEnum.PROPERTY) {
15191
+ _this.addControl('bankAccountProperties', new BankAccountPropertiesForm((_a = _this.bankAccount) === null || _a === void 0 ? void 0 : _a.bankAccountProperties));
15192
+ }
15193
+ else {
15194
+ _this.removeControl('bankAccountProperties');
15195
+ }
15196
+ });
15197
+ };
15198
+ return BankAccountAllocationForm;
15199
+ }(AbstractForm));
15200
+
15201
+ /**
15202
+ * Form with bank account loan details
15203
+ */
15204
+ var BankAccountLoanForm = /** @class */ (function (_super) {
15205
+ __extends(BankAccountLoanForm, _super);
15206
+ function BankAccountLoanForm(loan) {
15207
+ if (loan === void 0) { loan = classTransformer.plainToClass(Loan, {}); }
15208
+ return _super.call(this, {
15209
+ type: new forms.FormControl(loan.type, forms.Validators.required),
15210
+ amount: new forms.FormControl(loan.amount, forms.Validators.required),
15211
+ repaymentType: new forms.FormControl(loan.repaymentType, forms.Validators.required),
15212
+ interestRate: new forms.FormControl(loan.interestRate, [forms.Validators.required, forms.Validators.min(0), forms.Validators.max(100)]),
15213
+ interestType: new forms.FormControl(loan.interestType, forms.Validators.required),
15214
+ availableRedraw: new forms.FormControl(loan.availableRedraw, forms.Validators.required),
15215
+ commencementDate: new forms.FormControl(loan.commencementDate, forms.Validators.required),
15216
+ repaymentAmount: new forms.FormControl(loan.repaymentAmount, forms.Validators.required),
15217
+ repaymentFrequency: new forms.FormControl(loan.repaymentFrequency, forms.Validators.required)
15218
+ }, loan) || this;
15219
+ }
15220
+ return BankAccountLoanForm;
15221
+ }(AbstractForm));
15222
+
15061
15223
  /**
15062
15224
  * Form is using for import basiq bank accounts.
15063
15225
  * Basiq accounts has all data except tank type, properties and loan partially
@@ -15065,40 +15227,16 @@
15065
15227
  var BankAccountImportForm = /** @class */ (function (_super) {
15066
15228
  __extends(BankAccountImportForm, _super);
15067
15229
  function BankAccountImportForm(bankAccount) {
15068
- var _this = _super.call(this, {
15069
- tankType: new forms.FormControl(bankAccount.tankType, forms.Validators.required),
15070
- }, bankAccount) || this;
15230
+ var _this = _super.call(this, bankAccount) || this;
15071
15231
  if (bankAccount.isLoan()) {
15072
15232
  _this.addControl('loan', new BankAccountLoanForm(bankAccount.loan));
15073
15233
  }
15074
15234
  // basiq account import form should be disabled (unchecked) by default
15075
15235
  _this.disable();
15076
- _this.listenEvents();
15077
15236
  return _this;
15078
15237
  }
15079
- BankAccountImportForm.prototype.listenEvents = function () {
15080
- this.listenTankTypeChanges();
15081
- };
15082
- /**
15083
- * Add/Remove bank account properties form depends on selected tank type
15084
- */
15085
- BankAccountImportForm.prototype.listenTankTypeChanges = function () {
15086
- var _this = this;
15087
- this.get('tankType').valueChanges.subscribe(function (tankType) {
15088
- if (tankType === exports.TankTypeEnum.PROPERTY) {
15089
- _this.addControl('bankAccountProperties', new BankAccountPropertiesForm());
15090
- // property percent allowed only for loan bank accounts
15091
- if (!_this.contains('loan')) {
15092
- _this.get('bankAccountProperties').disablePercent();
15093
- }
15094
- }
15095
- else {
15096
- _this.removeControl('bankAccountProperties');
15097
- }
15098
- });
15099
- };
15100
15238
  return BankAccountImportForm;
15101
- }(AbstractForm));
15239
+ }(BankAccountAllocationForm));
15102
15240
 
15103
15241
  /**
15104
15242
  * Form is using for single manual bank account creation (not Basiq)
@@ -15106,20 +15244,18 @@
15106
15244
  var BankAccountAddManualForm = /** @class */ (function (_super) {
15107
15245
  __extends(BankAccountAddManualForm, _super);
15108
15246
  function BankAccountAddManualForm(connection) {
15109
- var _this = _super.call(this, {
15110
- type: new forms.FormControl(null, forms.Validators.required),
15111
- accountName: new forms.FormControl(null, forms.Validators.required),
15112
- currentBalance: new forms.FormControl(null, forms.Validators.required),
15113
- accountNumber: new forms.FormControl(null, [forms.Validators.required, forms.Validators.pattern(BankAccountAddManualForm.accountNumberPattern)]),
15114
- tankType: new forms.FormControl(null, forms.Validators.required),
15115
- }, classTransformer.plainToClass(BankAccount, {})) || this;
15247
+ var _this = _super.call(this) || this;
15116
15248
  _this.connection = connection;
15249
+ _this
15250
+ .addControl('type', new forms.FormControl(null, forms.Validators.required))
15251
+ .addControl('accountName', new forms.FormControl(null, forms.Validators.required))
15252
+ .addControl('currentBalance', new forms.FormControl(null, forms.Validators.required))
15253
+ .addControl('accountNumber', new forms.FormControl(null, [forms.Validators.required, forms.Validators.pattern(BankAccountAddManualForm.accountNumberPattern)]));
15117
15254
  _this.listenEvents();
15118
15255
  return _this;
15119
15256
  }
15120
15257
  BankAccountAddManualForm.prototype.listenEvents = function () {
15121
15258
  this.listenTypeChanges();
15122
- this.listenTankTypeChanges();
15123
15259
  };
15124
15260
  /**
15125
15261
  * Add/Remove loan form depends on selected bank account type
@@ -15129,38 +15265,9 @@
15129
15265
  this.get('type').valueChanges.subscribe(function (type) {
15130
15266
  if (BankAccount.loanTypes.includes(type)) {
15131
15267
  _this.addControl('loan', new BankAccountLoanForm());
15132
- // property percent allowed only for loan bank accounts
15133
- if (_this.contains('bankAccountProperties')) {
15134
- _this.get('bankAccountProperties').enablePercent();
15135
- }
15136
15268
  }
15137
15269
  else {
15138
15270
  _this.removeControl('loan');
15139
- // property percent allowed only for loan bank accounts
15140
- if (_this.contains('bankAccountProperties')) {
15141
- _this.get('bankAccountProperties').disablePercent();
15142
- }
15143
- }
15144
- });
15145
- };
15146
- /**
15147
- * Add/Remove bank account properties form depends on selected tank type
15148
- */
15149
- BankAccountAddManualForm.prototype.listenTankTypeChanges = function () {
15150
- var _this = this;
15151
- this.get('tankType').valueChanges.subscribe(function (tankType) {
15152
- if (tankType === exports.TankTypeEnum.PROPERTY) {
15153
- _this.addControl('bankAccountProperties', new BankAccountPropertiesForm());
15154
- // property percent allowed only for loan bank accounts
15155
- if (_this.contains('loan')) {
15156
- _this.get('bankAccountProperties').enablePercent();
15157
- }
15158
- else {
15159
- _this.get('bankAccountProperties').disablePercent();
15160
- }
15161
- }
15162
- else {
15163
- _this.removeControl('bankAccountProperties');
15164
15271
  }
15165
15272
  });
15166
15273
  };
@@ -15171,7 +15278,7 @@
15171
15278
  return _super.prototype.submit.call(this, { bankConnection: this.connection });
15172
15279
  };
15173
15280
  return BankAccountAddManualForm;
15174
- }(AbstractForm));
15281
+ }(BankAccountAllocationForm));
15175
15282
  BankAccountAddManualForm.accountNumberPattern = '^[0-9]{6}[ ]{1}[0-9]{1,}$';
15176
15283
 
15177
15284
  /**
@@ -15304,31 +15411,6 @@
15304
15411
  };
15305
15412
  }
15306
15413
 
15307
- function conditionalValidator(condition, validator) {
15308
- return function (control) {
15309
- revalidateOnChanges(control);
15310
- if (control && control.parent) {
15311
- if (condition(control.parent)) {
15312
- return validator(control);
15313
- }
15314
- }
15315
- return null;
15316
- };
15317
- }
15318
- /**
15319
- * Conditional validator depends on other fields and should be updated on each form value change
15320
- */
15321
- function revalidateOnChanges(control) {
15322
- if (control && control.parent && !control['_revalidateOnChanges']) {
15323
- control['_revalidateOnChanges'] = true;
15324
- control.parent.valueChanges.pipe(operators.distinctUntilChanged(function (a, b) { return JSON.stringify(a) === JSON.stringify(b); }))
15325
- .subscribe(function () {
15326
- control.updateValueAndValidity({ emitEvent: false });
15327
- });
15328
- }
15329
- return;
15330
- }
15331
-
15332
15414
  /**
15333
15415
  * Regular expressions that are used to check password strength and valid values
15334
15416
  */
@@ -15617,12 +15699,12 @@
15617
15699
  value: deductions.workRelatedTravelExpensesTotalAmount,
15618
15700
  disabled: true
15619
15701
  }),
15620
- workRelatedClothingType: new forms.FormControl(deductions.workRelatedClothingType, forms.Validators.required),
15702
+ workRelatedClothingType: new forms.FormControl(deductions.workRelatedClothingType, conditionalValidator(function () { return !!deductions.workRelatedClothingTotalAmount; }, forms.Validators.required)),
15621
15703
  workRelatedClothingTotalAmount: new forms.FormControl({
15622
15704
  value: deductions.workRelatedClothingTotalAmount,
15623
15705
  disabled: true
15624
15706
  }),
15625
- workRelatedSelfEducationType: new forms.FormControl(deductions.workRelatedSelfEducationType, forms.Validators.required),
15707
+ workRelatedSelfEducationType: new forms.FormControl(deductions.workRelatedSelfEducationType, conditionalValidator(function () { return !!deductions.workRelatedSelfEducationTotalAmount; }, forms.Validators.required)),
15626
15708
  workRelatedSelfEducationTotalAmount: new forms.FormControl({
15627
15709
  value: deductions.workRelatedSelfEducationTotalAmount,
15628
15710
  disabled: true
@@ -15659,6 +15741,11 @@
15659
15741
  value: deductions.otherManagingCostsTotalAmount,
15660
15742
  disabled: true
15661
15743
  }),
15744
+ fundName: new forms.FormControl(''),
15745
+ hasFund: new forms.FormControl(true),
15746
+ fundABN: new forms.FormControl(''),
15747
+ fundTFN: new forms.FormControl(''),
15748
+ fundAccountNumber: new forms.FormControl(''),
15662
15749
  personalSuperContributionsTotalAmount: new forms.FormControl({
15663
15750
  value: deductions.personalSuperContributionsTotalAmount,
15664
15751
  disabled: true
@@ -15995,6 +16082,7 @@
15995
16082
  exports.Bank = Bank;
15996
16083
  exports.BankAccount = BankAccount;
15997
16084
  exports.BankAccountAddManualForm = BankAccountAddManualForm;
16085
+ exports.BankAccountAllocationForm = BankAccountAllocationForm;
15998
16086
  exports.BankAccountCalculationService = BankAccountCalculationService;
15999
16087
  exports.BankAccountChartData = BankAccountChartData;
16000
16088
  exports.BankAccountCollection = BankAccountCollection;