taxtank-core 0.8.4 → 0.9.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.
Files changed (167) hide show
  1. package/bundles/taxtank-core.umd.js +180 -134
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/collections/tax-summary/report-item.collection.js +141 -0
  4. package/esm2015/lib/db/Models/transaction-base.js +2 -1
  5. package/esm2015/lib/models/tax-summary/report-item-details.js +9 -0
  6. package/esm2015/lib/models/tax-summary/report-item.js +15 -0
  7. package/esm2015/lib/models/tax-summary/tax-summary-section.js +5 -5
  8. package/esm2015/lib/models/toast/toast-type.enum.js +8 -0
  9. package/esm2015/lib/models/toast/toast.js +9 -0
  10. package/esm2015/lib/services/http/address/address.service.js +39 -0
  11. package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +118 -0
  12. package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +52 -0
  13. package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +89 -0
  14. package/esm2015/lib/services/http/bank/bank.service.js +24 -0
  15. package/esm2015/lib/services/http/bank/basiq/basiq.service.js +94 -0
  16. package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +38 -0
  17. package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +89 -0
  18. package/esm2015/lib/services/http/chat/chat.service.js +77 -0
  19. package/esm2015/lib/services/http/chat/message/message.service.js +65 -0
  20. package/esm2015/lib/services/http/chat/message-document/message-document.service.js +118 -0
  21. package/esm2015/lib/services/{depreciation/capital-project.service.js → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js} +7 -7
  22. package/esm2015/lib/services/http/depreciation/depreciation.service.js +146 -0
  23. package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +84 -0
  24. package/esm2015/lib/services/{client → http/firm/client-invite}/client-invite.service.js +7 -7
  25. package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +98 -0
  26. package/esm2015/lib/services/http/firm/employee/employee.service.js +39 -0
  27. package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +53 -0
  28. package/esm2015/lib/services/http/firm/firm.service.js +79 -0
  29. package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +37 -0
  30. package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +90 -0
  31. package/esm2015/lib/services/http/income-source/income-source.service.js +109 -0
  32. package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +90 -0
  33. package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +87 -0
  34. package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +73 -0
  35. package/esm2015/lib/services/http/loan/loan.service.js +145 -0
  36. package/esm2015/lib/services/http/property/property-category/property-category.service.js +23 -0
  37. package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +47 -0
  38. package/esm2015/lib/services/http/property/property-document/property-document.service.js +70 -0
  39. package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +20 -0
  40. package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +21 -0
  41. package/esm2015/lib/services/http/property/property-share/property-share.service.js +115 -0
  42. package/esm2015/lib/services/http/property/property.service.js +126 -0
  43. package/esm2015/lib/services/http/rest/rest.service.js +190 -0
  44. package/esm2015/lib/services/http/service-notification/service-notification.service.js +65 -0
  45. package/esm2015/lib/services/http/subscription/subscription.service.js +157 -0
  46. package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +41 -0
  47. package/esm2015/lib/services/http/tax-review/tax-review.service.js +103 -0
  48. package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +71 -0
  49. package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +85 -0
  50. package/esm2015/lib/services/http/transaction/transaction.service.js +319 -0
  51. package/esm2015/lib/services/http/user/occupation/occupation.service.js +45 -0
  52. package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +59 -0
  53. package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +29 -0
  54. package/esm2015/lib/services/http/user/user.service.js +124 -0
  55. package/esm2015/lib/services/http/vehicle/vehicle.service.js +237 -0
  56. package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +45 -0
  57. package/esm2015/lib/services/toast/toast.service.js +26 -0
  58. package/esm2015/public-api.js +54 -51
  59. package/fesm2015/taxtank-core.js +98 -56
  60. package/fesm2015/taxtank-core.js.map +1 -1
  61. package/lib/collections/{tax-return-category-item.collection.d.ts → tax-summary/report-item.collection.d.ts} +5 -5
  62. package/lib/models/tax-summary/{tax-return-category-item-details.d.ts → report-item-details.d.ts} +2 -2
  63. package/lib/models/tax-summary/{tax-return-category-item.d.ts → report-item.d.ts} +4 -4
  64. package/lib/models/tax-summary/tax-summary-section.d.ts +2 -2
  65. package/lib/models/toast/toast-type.enum.d.ts +6 -0
  66. package/lib/models/toast/toast.d.ts +10 -0
  67. package/lib/services/{address → http/address}/address.service.d.ts +1 -1
  68. package/lib/services/{bank → http/bank/bank-account}/bank-account.service.d.ts +5 -5
  69. package/lib/services/{bank → http/bank/bank-connection}/bank-connection.service.d.ts +5 -5
  70. package/lib/services/{bank → http/bank/bank-transaction}/bank-transaction.service.d.ts +5 -5
  71. package/lib/services/{bank → http/bank}/bank.service.d.ts +4 -4
  72. package/lib/services/{bank → http/bank/basiq}/basiq.service.d.ts +7 -7
  73. package/lib/services/{chart-accounts → http/chart-accounts/chart-accounts-depreciations}/chart-accounts-depreciations.service.d.ts +4 -4
  74. package/lib/services/{chart-accounts → http/chart-accounts}/chart-accounts.service.d.ts +3 -3
  75. package/lib/services/{chat → http/chat}/chat.service.d.ts +7 -7
  76. package/lib/services/{chat → http/chat/message}/message.service.d.ts +7 -7
  77. package/lib/services/{chat → http/chat/message-document}/message-document.service.d.ts +3 -3
  78. package/lib/services/{depreciation/capital-project.service.d.ts → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.d.ts} +4 -4
  79. package/lib/services/{depreciation → http/depreciation}/depreciation.service.d.ts +5 -5
  80. package/lib/services/{document → http/document/document-folder}/document-folder.service.d.ts +6 -6
  81. package/lib/services/{client → http/firm/client-invite}/client-invite.service.d.ts +4 -4
  82. package/lib/services/{client → http/firm/client-movement}/client-movement.service.d.ts +7 -7
  83. package/lib/services/{employee → http/firm/employee}/employee.service.d.ts +4 -4
  84. package/lib/services/{employee → http/firm/employee-invite}/employee-invite.service.d.ts +4 -4
  85. package/lib/services/{firm → http/firm}/firm.service.d.ts +2 -2
  86. package/lib/services/{client → http/firm/portfolio-report}/client-portfolio-report.service.d.ts +1 -1
  87. package/lib/services/{income-source → http/income-source/income-source-forecast}/income-source-forecast.service.d.ts +5 -5
  88. package/lib/services/{income-source → http/income-source}/income-source.service.d.ts +8 -8
  89. package/lib/services/{income-source → http/income-source/salary-forecast}/salary-forecast.service.d.ts +6 -6
  90. package/lib/services/{income-source → http/income-source/sole-forecast}/sole-forecast.service.d.ts +5 -5
  91. package/lib/services/{borrowing-expense → http/loan/borrowing-expense}/borrowing-expense.service.d.ts +2 -2
  92. package/lib/services/{loan → http/loan}/loan.service.d.ts +6 -6
  93. package/lib/services/{property → http/property}/property-category/property-category.service.d.ts +4 -4
  94. package/lib/services/{property → http/property/property-category-movement}/property-category-movement.service.d.ts +4 -4
  95. package/lib/services/{property → http/property}/property-document/property-document.service.d.ts +5 -5
  96. package/lib/services/http/property/property-sale/property-sale.service.d.ts +10 -0
  97. package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +11 -0
  98. package/lib/services/{property → http/property}/property-share/property-share.service.d.ts +5 -5
  99. package/lib/services/{property → http/property}/property.service.d.ts +5 -5
  100. package/lib/services/{base-rest.service.d.ts → http/rest/rest.service.d.ts} +4 -4
  101. package/lib/services/http/service-notification/service-notification.service.d.ts +31 -0
  102. package/lib/services/{subscription → http/subscription}/subscription.service.d.ts +6 -6
  103. package/lib/services/{tax-review → http/tax-review/tax-review-history}/tax-review-history.service.d.ts +5 -5
  104. package/lib/services/{tax-review → http/tax-review}/tax-review.service.d.ts +6 -6
  105. package/lib/services/{tax-summary → http/tax-summary}/tax-summary.service.d.ts +2 -2
  106. package/lib/services/{transaction → http/transaction/transaction-allocation}/transaction-allocation.service.d.ts +6 -6
  107. package/lib/services/{transaction → http/transaction}/transaction.service.d.ts +7 -7
  108. package/lib/services/{user → http/user/occupation}/occupation.service.d.ts +1 -1
  109. package/lib/services/{user-event → http/user/user-event-setting}/user-event-setting.service.d.ts +5 -5
  110. package/lib/services/{user-event → http/user/user-event-type}/user-event-type.service.d.ts +5 -5
  111. package/lib/services/{user → http/user}/user.service.d.ts +3 -3
  112. package/lib/services/{work/work-tank.service.d.ts → http/vehicle/vehicle.service.d.ts} +9 -8
  113. package/lib/services/property/{equity-position-chart.service.d.ts → equity-position-chart/equity-position-chart.service.d.ts} +1 -1
  114. package/lib/services/toast/toast.service.d.ts +13 -0
  115. package/package.json +1 -1
  116. package/public-api.d.ts +53 -50
  117. package/esm2015/lib/collections/tax-return-category-item.collection.js +0 -141
  118. package/esm2015/lib/models/tax-summary/tax-return-category-item-details.js +0 -9
  119. package/esm2015/lib/models/tax-summary/tax-return-category-item.js +0 -15
  120. package/esm2015/lib/services/address/address.service.js +0 -39
  121. package/esm2015/lib/services/bank/bank-account.service.js +0 -118
  122. package/esm2015/lib/services/bank/bank-connection.service.js +0 -52
  123. package/esm2015/lib/services/bank/bank-transaction.service.js +0 -89
  124. package/esm2015/lib/services/bank/bank.service.js +0 -24
  125. package/esm2015/lib/services/bank/basiq.service.js +0 -94
  126. package/esm2015/lib/services/base-rest.service.js +0 -190
  127. package/esm2015/lib/services/borrowing-expense/borrowing-expense.service.js +0 -73
  128. package/esm2015/lib/services/chart-accounts/chart-accounts-depreciations.service.js +0 -38
  129. package/esm2015/lib/services/chart-accounts/chart-accounts.service.js +0 -89
  130. package/esm2015/lib/services/chat/chat.service.js +0 -77
  131. package/esm2015/lib/services/chat/message-document.service.js +0 -118
  132. package/esm2015/lib/services/chat/message.service.js +0 -65
  133. package/esm2015/lib/services/client/client-movement.service.js +0 -98
  134. package/esm2015/lib/services/client/client-portfolio-report.service.js +0 -37
  135. package/esm2015/lib/services/depreciation/depreciation.service.js +0 -146
  136. package/esm2015/lib/services/document/document-folder.service.js +0 -84
  137. package/esm2015/lib/services/employee/employee-invite.service.js +0 -53
  138. package/esm2015/lib/services/employee/employee.service.js +0 -39
  139. package/esm2015/lib/services/firm/firm.service.js +0 -79
  140. package/esm2015/lib/services/income-source/income-source-forecast.service.js +0 -90
  141. package/esm2015/lib/services/income-source/income-source.service.js +0 -109
  142. package/esm2015/lib/services/income-source/salary-forecast.service.js +0 -90
  143. package/esm2015/lib/services/income-source/sole-forecast.service.js +0 -87
  144. package/esm2015/lib/services/loan/loan.service.js +0 -145
  145. package/esm2015/lib/services/notification/notification.service.js +0 -65
  146. package/esm2015/lib/services/property/equity-position-chart.service.js +0 -45
  147. package/esm2015/lib/services/property/property-category/property-category.service.js +0 -23
  148. package/esm2015/lib/services/property/property-category-movement.service.js +0 -47
  149. package/esm2015/lib/services/property/property-document/property-document.service.js +0 -70
  150. package/esm2015/lib/services/property/property-sale/property-sale.service.js +0 -20
  151. package/esm2015/lib/services/property/property-sale/tax-exemption/tax-exemption.service.js +0 -21
  152. package/esm2015/lib/services/property/property-share/property-share.service.js +0 -115
  153. package/esm2015/lib/services/property/property.service.js +0 -126
  154. package/esm2015/lib/services/subscription/subscription.service.js +0 -157
  155. package/esm2015/lib/services/tax-review/tax-review-history.service.js +0 -41
  156. package/esm2015/lib/services/tax-review/tax-review.service.js +0 -103
  157. package/esm2015/lib/services/tax-summary/tax-summary.service.js +0 -71
  158. package/esm2015/lib/services/transaction/transaction-allocation.service.js +0 -85
  159. package/esm2015/lib/services/transaction/transaction.service.js +0 -319
  160. package/esm2015/lib/services/user/occupation.service.js +0 -45
  161. package/esm2015/lib/services/user/user.service.js +0 -124
  162. package/esm2015/lib/services/user-event/user-event-setting.service.js +0 -59
  163. package/esm2015/lib/services/user-event/user-event-type.service.js +0 -29
  164. package/esm2015/lib/services/work/work-tank.service.js +0 -236
  165. package/lib/services/notification/notification.service.d.ts +0 -31
  166. package/lib/services/property/property-sale/property-sale.service.d.ts +0 -10
  167. package/lib/services/property/property-sale/tax-exemption/tax-exemption.service.d.ts +0 -11
@@ -0,0 +1,53 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { replace } from '../../../../functions/array';
4
+ import _ from 'lodash';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { EmployeeInvite } from '../../../../models/employee/employee-invite';
7
+ import { RestService } from '../../rest/rest.service';
8
+ import * as i0 from "@angular/core";
9
+ export class EmployeeInviteService extends RestService {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.url = 'employees/invites';
13
+ this.modelClass = EmployeeInvite;
14
+ }
15
+ /**
16
+ * Import employees for firm from CSV file
17
+ * @param file
18
+ */
19
+ import(file) {
20
+ const formData = new FormData();
21
+ formData.append('file', file);
22
+ return this.http.post(`${this.environment.apiV2}/${this.url}/import`, formData)
23
+ .pipe(map((employeeInvite) => {
24
+ return employeeInvite;
25
+ }));
26
+ }
27
+ /**
28
+ * Resend invitation from firm to client
29
+ * @param invite
30
+ */
31
+ resend(invite) {
32
+ return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/resend`, null)
33
+ .pipe(map((resentInviteBase) => {
34
+ const updatedInvite = plainToClass(EmployeeInvite, resentInviteBase);
35
+ // avoid cache changes
36
+ // @TODO make cache readonly
37
+ const tempCache = _.cloneDeep(this.cache);
38
+ replace(tempCache, plainToClass(EmployeeInvite, updatedInvite));
39
+ this.cache = tempCache;
40
+ this.updateCache();
41
+ return updatedInvite;
42
+ }));
43
+ }
44
+ }
45
+ EmployeeInviteService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeInviteService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
46
+ EmployeeInviteService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeInviteService, providedIn: 'root' });
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeInviteService, decorators: [{
48
+ type: Injectable,
49
+ args: [{
50
+ providedIn: 'root'
51
+ }]
52
+ }] });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wbG95ZWUtaW52aXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9maXJtL2VtcGxveWVlLWludml0ZS9lbXBsb3llZS1pbnZpdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUt0RCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBK0M7SUFIMUY7O1FBSUUsUUFBRyxHQUFXLG1CQUFtQixDQUFDO1FBQ2xDLGVBQVUsR0FBMEIsY0FBYyxDQUFDO0tBcUNwRDtJQW5DQzs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBVTtRQUNmLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUM7YUFDNUUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQWdDLEVBQUUsRUFBRTtZQUN2QyxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO2FBQ3JGLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxnQkFBb0MsRUFBa0IsRUFBRTtZQUMzRCxNQUFNLGFBQWEsR0FBbUIsWUFBWSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JGLHNCQUFzQjtZQUN0Qiw0QkFBNEI7WUFDNUIsTUFBTSxTQUFTLEdBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs7bUhBdENVLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVtcGxveWVlSW52aXRlIGFzIEVtcGxveWVlSW52aXRlQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9lbXBsb3llZS1pbnZpdGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgRW1wbG95ZWVJbnZpdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZW1wbG95ZWUvZW1wbG95ZWUtaW52aXRlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFbXBsb3llZUludml0ZVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxFbXBsb3llZUludml0ZUJhc2UsIEVtcGxveWVlSW52aXRlPiB7XG4gIHVybDogc3RyaW5nID0gJ2VtcGxveWVlcy9pbnZpdGVzJztcbiAgbW9kZWxDbGFzczogdHlwZW9mIEVtcGxveWVlSW52aXRlID0gRW1wbG95ZWVJbnZpdGU7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBlbXBsb3llZXMgZm9yIGZpcm0gZnJvbSBDU1YgZmlsZVxuICAgKiBAcGFyYW0gZmlsZVxuICAgKi9cbiAgaW1wb3J0KGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEVtcGxveWVlSW52aXRlW10+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS9pbXBvcnRgLCBmb3JtRGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGVtcGxveWVlSW52aXRlOiBFbXBsb3llZUludml0ZVtdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVtcGxveWVlSW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNlbmQgaW52aXRhdGlvbiBmcm9tIGZpcm0gdG8gY2xpZW50XG4gICAqIEBwYXJhbSBpbnZpdGVcbiAgICovXG4gIHJlc2VuZChpbnZpdGU6IEVtcGxveWVlSW52aXRlKTogT2JzZXJ2YWJsZTxFbXBsb3llZUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS8ke2ludml0ZS5pZH0vcmVzZW5kYCwgbnVsbClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc2VudEludml0ZUJhc2U6IEVtcGxveWVlSW52aXRlQmFzZSk6IEVtcGxveWVlSW52aXRlID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkSW52aXRlOiBFbXBsb3llZUludml0ZSA9IHBsYWluVG9DbGFzcyhFbXBsb3llZUludml0ZSwgcmVzZW50SW52aXRlQmFzZSk7XG4gICAgICAgICAgLy8gYXZvaWQgY2FjaGUgY2hhbmdlc1xuICAgICAgICAgIC8vIEBUT0RPIG1ha2UgY2FjaGUgcmVhZG9ubHlcbiAgICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IEVtcGxveWVlSW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgcGxhaW5Ub0NsYXNzKEVtcGxveWVlSW52aXRlLCB1cGRhdGVkSW52aXRlKSk7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRlbXBDYWNoZTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRJbnZpdGU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,79 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { plainToClass } from 'class-transformer';
5
+ import { Firm } from '../../../models/firm/firm';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ // @TODO Alex: think about extend base rest service
9
+ export class FirmService {
10
+ constructor(http, environment) {
11
+ this.http = http;
12
+ this.environment = environment;
13
+ this.firmSubject = new ReplaySubject(1);
14
+ }
15
+ /**
16
+ * Register new firm
17
+ * @param data: firm and firm owner data to register
18
+ */
19
+ register(data) {
20
+ return this.http.post(`${this.environment.apiV2}/firms/registration`, data)
21
+ .pipe(map((firm) => {
22
+ return plainToClass(Firm, firm);
23
+ }));
24
+ }
25
+ get() {
26
+ if (!this.firm) {
27
+ this.http.get(`${this.environment.apiV2}/firms/current`)
28
+ .pipe(map((firm) => {
29
+ return plainToClass(Firm, firm);
30
+ }))
31
+ .subscribe((firm) => {
32
+ this.firm = firm;
33
+ this.firmSubject.next(this.firm);
34
+ });
35
+ }
36
+ return this.firmSubject.asObservable();
37
+ }
38
+ update(firm) {
39
+ return this.http.put(`${this.environment.apiV2}/firms/current`, firm)
40
+ .pipe(map((updatedItem) => {
41
+ const updatedInstance = plainToClass(Firm, updatedItem);
42
+ this.firmSubject.next(updatedInstance);
43
+ }));
44
+ }
45
+ /**
46
+ * get list of all registered firms
47
+ */
48
+ getAll() {
49
+ return this.http.get(`${this.environment.apiV2}/firms`)
50
+ .pipe(map((response) => {
51
+ return response['hydra:member'].map((firmBase) => plainToClass(Firm, firmBase));
52
+ }));
53
+ }
54
+ getByType(type) {
55
+ return this.getAll().pipe(map((firms) => {
56
+ return firms.filter((firm) => firm.type === type);
57
+ }));
58
+ }
59
+ updatePhoto(firm, photo) {
60
+ return this.http.post(`${this.environment.apiV2}/firms/photo?_method=PUT`, photo)
61
+ .pipe(map((firmPhoto) => {
62
+ this.firm = plainToClass(Firm, Object.assign(firm, { photo: firmPhoto }));
63
+ this.firmSubject.next(this.firm);
64
+ return firm;
65
+ }));
66
+ }
67
+ }
68
+ FirmService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FirmService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
69
+ FirmService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FirmService, providedIn: 'root' });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FirmService, decorators: [{
71
+ type: Injectable,
72
+ args: [{
73
+ providedIn: 'root'
74
+ }]
75
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
76
+ type: Inject,
77
+ args: ['environment']
78
+ }] }]; } });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvZmlybS9maXJtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBR2pELG1EQUFtRDtBQUluRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNVLElBQWdCLEVBQ1MsV0FBZ0I7UUFEekMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNTLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBSm5ELGdCQUFXLEdBQXdCLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO0lBSzNELENBQUM7SUFFSjs7O09BR0c7SUFDSCxRQUFRLENBQUMsSUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLHFCQUFxQixFQUFFLElBQUksQ0FBQzthQUN4RSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsSUFBYyxFQUFRLEVBQUU7WUFDM0IsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssZ0JBQWdCLENBQUM7aUJBQ3JELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxJQUFjLEVBQVEsRUFBRTtnQkFDM0IsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLElBQVUsRUFBUSxFQUFFO2dCQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM7YUFDbEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFdBQXFCLEVBQUUsRUFBRTtZQUM1QixNQUFNLGVBQWUsR0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRLENBQUM7YUFDcEQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWdCLEVBQVUsRUFBRTtZQUMvQixPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFrQixFQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBa0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUN2QixHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQVUsRUFBRTtZQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVSxFQUFFLEtBQWU7UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSywwQkFBMEIsRUFBRSxLQUFLLENBQUM7YUFDOUUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVqQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDOzt5R0EvRVUsV0FBVyw0Q0FNWixhQUFhOzZHQU5aLFdBQVcsY0FGVixNQUFNOzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGaXJtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9kYi9FbnVtcy9maXJtLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBGaXJtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zpcm0vZmlybSc7XG5pbXBvcnQgeyBGaXJtIGFzIEZpcm1CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL2Zpcm0nO1xuXG4vLyBAVE9ETyBBbGV4OiB0aGluayBhYm91dCBleHRlbmQgYmFzZSByZXN0IHNlcnZpY2VcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpcm1TZXJ2aWNlIHtcbiAgZmlybTogRmlybTtcbiAgZmlybVN1YmplY3Q6IFJlcGxheVN1YmplY3Q8RmlybT4gPSBuZXcgUmVwbGF5U3ViamVjdDxGaXJtPigxKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIG5ldyBmaXJtXG4gICAqIEBwYXJhbSBkYXRhOiBmaXJtIGFuZCBmaXJtIG93bmVyIGRhdGEgdG8gcmVnaXN0ZXJcbiAgICovXG4gIHJlZ2lzdGVyKGRhdGE6IEZpcm0pOiBPYnNlcnZhYmxlPEZpcm0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vZmlybXMvcmVnaXN0cmF0aW9uYCwgZGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGZpcm06IEZpcm1CYXNlKTogRmlybSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhGaXJtLCBmaXJtKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxGaXJtPiB7XG4gICAgaWYgKCF0aGlzLmZpcm0pIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vZmlybXMvY3VycmVudGApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoZmlybTogRmlybUJhc2UpOiBGaXJtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3MoRmlybSwgZmlybSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChmaXJtOiBGaXJtKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5maXJtID0gZmlybTtcbiAgICAgICAgICB0aGlzLmZpcm1TdWJqZWN0Lm5leHQodGhpcy5maXJtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmlybVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICB1cGRhdGUoZmlybTogRmlybSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L2Zpcm1zL2N1cnJlbnRgLCBmaXJtKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXBkYXRlZEl0ZW06IEZpcm1CYXNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEluc3RhbmNlOiBGaXJtID0gcGxhaW5Ub0NsYXNzKEZpcm0sIHVwZGF0ZWRJdGVtKTtcbiAgICAgICAgICB0aGlzLmZpcm1TdWJqZWN0Lm5leHQodXBkYXRlZEluc3RhbmNlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgZmlybXNcbiAgICovXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPEZpcm1bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L2Zpcm1zYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBvYmplY3QpOiBGaXJtW10gPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVsnaHlkcmE6bWVtYmVyJ10ubWFwKChmaXJtQmFzZTogRmlybUJhc2UpOiBGaXJtID0+IHBsYWluVG9DbGFzcyhGaXJtLCBmaXJtQmFzZSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGdldEJ5VHlwZSh0eXBlOiBGaXJtVHlwZUVudW0pOiBPYnNlcnZhYmxlPEZpcm1bXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbCgpLnBpcGUoXG4gICAgICBtYXAoKGZpcm1zOiBGaXJtW10pOiBGaXJtW10gPT4ge1xuICAgICAgICByZXR1cm4gZmlybXMuZmlsdGVyKChmaXJtOiBGaXJtKSA9PiBmaXJtLnR5cGUgPT09IHR5cGUpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlUGhvdG8oZmlybTogRmlybSwgcGhvdG86IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTxGaXJtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L2Zpcm1zL3Bob3RvP19tZXRob2Q9UFVUYCwgcGhvdG8pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChmaXJtUGhvdG86IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuZmlybSA9IHBsYWluVG9DbGFzcyhGaXJtLCBPYmplY3QuYXNzaWduKGZpcm0sIHtwaG90bzogZmlybVBob3RvfSkpO1xuICAgICAgICAgIHRoaXMuZmlybVN1YmplY3QubmV4dCh0aGlzLmZpcm0pO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcm07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,37 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { plainToClass } from 'class-transformer';
4
+ import { ClientPortfolioReport } from '../../../../models/client/client-portfolio-report';
5
+ import { ClientPortfolioReportCollection } from '../../../../collections/client-portfolio-report.collection';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ // @Todo refactor with BaseRest service
9
+ /**
10
+ * Service to work with employee clients tax summary data
11
+ */
12
+ export class ClientPortfolioReportService {
13
+ constructor(http, environment) {
14
+ this.http = http;
15
+ this.environment = environment;
16
+ this.url = 'portfolio-reports';
17
+ }
18
+ get() {
19
+ return this.http.get(`${this.environment.apiV2}/${this.url}`)
20
+ .pipe(map((response) => {
21
+ const clientReports = response['hydra:member'].map((item) => plainToClass(ClientPortfolioReport, item));
22
+ return new ClientPortfolioReportCollection(clientReports);
23
+ }));
24
+ }
25
+ }
26
+ ClientPortfolioReportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ClientPortfolioReportService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
27
+ ClientPortfolioReportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ClientPortfolioReportService, providedIn: 'root' });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ClientPortfolioReportService, decorators: [{
29
+ type: Injectable,
30
+ args: [{
31
+ providedIn: 'root'
32
+ }]
33
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
34
+ type: Inject,
35
+ args: ['environment']
36
+ }] }]; } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXBvcnRmb2xpby1yZXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2Zpcm0vcG9ydGZvbGlvLXJlcG9ydC9jbGllbnQtcG9ydGZvbGlvLXJlcG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDMUYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNERBQTRELENBQUM7OztBQUU3Ryx1Q0FBdUM7QUFDdkM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBR3ZDLFlBQ1UsSUFBZ0IsRUFDTyxXQUFnQjtRQUR2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ08sZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFKakQsUUFBRyxHQUFXLG1CQUFtQixDQUFDO0lBTWxDLENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUMxRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sYUFBYSxHQUE0QixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6SSxPQUFPLElBQUksK0JBQStCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7OzBIQWpCVSw0QkFBNEIsNENBSzdCLGFBQWE7OEhBTFosNEJBQTRCLGNBRjNCLE1BQU07NEZBRVAsNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBTUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgQ2xpZW50UG9ydGZvbGlvUmVwb3J0IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2NsaWVudC9jbGllbnQtcG9ydGZvbGlvLXJlcG9ydCc7XG5pbXBvcnQgeyBDbGllbnRQb3J0Zm9saW9SZXBvcnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29sbGVjdGlvbnMvY2xpZW50LXBvcnRmb2xpby1yZXBvcnQuY29sbGVjdGlvbic7XG5cbi8vIEBUb2RvIHJlZmFjdG9yIHdpdGggQmFzZVJlc3Qgc2VydmljZVxuLyoqXG4gKiBTZXJ2aWNlIHRvIHdvcmsgd2l0aCBlbXBsb3llZSBjbGllbnRzIHRheCBzdW1tYXJ5IGRhdGFcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2xpZW50UG9ydGZvbGlvUmVwb3J0U2VydmljZSB7XG4gIHVybDogc3RyaW5nID0gJ3BvcnRmb2xpby1yZXBvcnRzJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gIH1cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxDbGllbnRQb3J0Zm9saW9SZXBvcnRDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IG9iamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsaWVudFJlcG9ydHM6IENsaWVudFBvcnRmb2xpb1JlcG9ydFtdID0gcmVzcG9uc2VbJ2h5ZHJhOm1lbWJlciddLm1hcCgoaXRlbTogb2JqZWN0KSA9PiBwbGFpblRvQ2xhc3MoQ2xpZW50UG9ydGZvbGlvUmVwb3J0LCBpdGVtKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRQb3J0Zm9saW9SZXBvcnRDb2xsZWN0aW9uKGNsaWVudFJlcG9ydHMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,90 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { plainToClass } from 'class-transformer';
4
+ import { RestService } from '../../rest/rest.service';
5
+ import { IncomeSourceForecast } from '../../../../models/income-source/income-source-forecast';
6
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
7
+ import { IncomeSource } from '../../../../models/income-source/income-source';
8
+ import { AppEvent } from '../../../../models/event/app-event';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common/http";
11
+ import * as i2 from "../../../event/event-dispatcher.service";
12
+ /**
13
+ * Service to work with Other Income Forecasts
14
+ */
15
+ export class IncomeSourceForecastService extends RestService {
16
+ constructor(http, eventDispatcherService, environment) {
17
+ super(http, eventDispatcherService, environment);
18
+ this.http = http;
19
+ this.eventDispatcherService = eventDispatcherService;
20
+ this.environment = environment;
21
+ this.modelClass = IncomeSourceForecast;
22
+ this.url = 'income-source-forecasts';
23
+ this.listenEvents();
24
+ }
25
+ /**
26
+ * Listen to Income Sources events
27
+ */
28
+ listenEvents() {
29
+ this.listenToAddedIncomeSources();
30
+ this.listenToUpdatedIncomeSources();
31
+ }
32
+ /**
33
+ * Listen to EventDispatcherService event related to added Income Sources
34
+ */
35
+ listenToAddedIncomeSources() {
36
+ this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_CREATED)
37
+ .pipe(map((incomeSources) => incomeSources
38
+ .filter((incomeSource) => !incomeSource.isSalaryIncome())))
39
+ .subscribe((incomeSources) => {
40
+ const incomeSourceForecasts = this.assignIncomeSourceForecasts(incomeSources);
41
+ if (incomeSourceForecasts.length) {
42
+ this.addBatch(incomeSourceForecasts).subscribe((createdIncomeSourceForecasts) => {
43
+ this.eventDispatcherService
44
+ .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, createdIncomeSourceForecasts));
45
+ });
46
+ }
47
+ });
48
+ }
49
+ /**
50
+ * Listen to EventDispatcherService event related to updated Income Sources
51
+ */
52
+ listenToUpdatedIncomeSources() {
53
+ this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_UPDATED)
54
+ .subscribe((incomeSources) => {
55
+ const incomeSourceForecasts = this.assignIncomeSourceForecasts(incomeSources);
56
+ if (incomeSourceForecasts.length) {
57
+ this.updateBatch(incomeSourceForecasts).subscribe((updatedIncomeSourceForecasts) => {
58
+ this.eventDispatcherService
59
+ .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED, updatedIncomeSourceForecasts));
60
+ });
61
+ }
62
+ });
63
+ }
64
+ /**
65
+ * Assign other income forecasts based on provided income sources
66
+ * @param incomeSources by which other income forecasts will be assigned
67
+ */
68
+ assignIncomeSourceForecasts(incomeSources) {
69
+ return incomeSources.map((incomeSource) => {
70
+ incomeSource.incomeSourceForecasts = incomeSource.incomeSourceForecasts
71
+ .map((incomeSourceForecast) => {
72
+ incomeSourceForecast.incomeSource = plainToClass(IncomeSource, { id: incomeSource.id });
73
+ return incomeSourceForecast;
74
+ });
75
+ return incomeSource.incomeSourceForecasts;
76
+ }).flat();
77
+ }
78
+ }
79
+ IncomeSourceForecastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IncomeSourceForecastService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
80
+ IncomeSourceForecastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IncomeSourceForecastService, providedIn: 'root' });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IncomeSourceForecastService, decorators: [{
82
+ type: Injectable,
83
+ args: [{
84
+ providedIn: 'root'
85
+ }]
86
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
87
+ type: Inject,
88
+ args: ['environment']
89
+ }] }]; } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jb21lLXNvdXJjZS1mb3JlY2FzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvaW5jb21lLXNvdXJjZS9pbmNvbWUtc291cmNlLWZvcmVjYXN0L2luY29tZS1zb3VyY2UtZm9yZWNhc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUUvRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7O0FBRTlEOztHQUVHO0FBSUgsTUFBTSxPQUFPLDJCQUE0QixTQUFRLFdBQTJEO0lBSTFHLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFKdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBTm5ELGVBQVUsR0FBZ0Msb0JBQW9CLENBQUM7UUFDL0QsUUFBRyxHQUFXLHlCQUF5QixDQUFDO1FBUXRDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7YUFDcEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGFBQTZCLEVBQUUsRUFBRSxDQUFDLGFBQWE7YUFDakQsTUFBTSxDQUFDLENBQUMsWUFBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUMzRTthQUNBLFNBQVMsQ0FBQyxDQUFDLGFBQTZCLEVBQUUsRUFBRTtZQUUzQyxNQUFNLHFCQUFxQixHQUEyQixJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEcsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyw0QkFBb0QsRUFBRSxFQUFFO29CQUN0RyxJQUFJLENBQUMsc0JBQXNCO3lCQUN4QixRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0NBQWdDLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO2dCQUM3RyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQzthQUNwRSxTQUFTLENBQUMsQ0FBQyxhQUE2QixFQUFFLEVBQUU7WUFDM0MsTUFBTSxxQkFBcUIsR0FBMkIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RHLElBQUkscUJBQXFCLENBQUMsTUFBTSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsNEJBQW9ELEVBQUUsRUFBRTtvQkFDekcsSUFBSSxDQUFDLHNCQUFzQjt5QkFDeEIsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxFQUFFLDRCQUE0QixDQUFDLENBQUMsQ0FBQztnQkFDN0csQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDJCQUEyQixDQUFDLGFBQTZCO1FBQy9ELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtZQUN0RCxZQUFZLENBQUMscUJBQXFCLEdBQUcsWUFBWSxDQUFDLHFCQUFxQjtpQkFDcEUsR0FBRyxDQUFDLENBQUMsb0JBQTBDLEVBQUUsRUFBRTtnQkFDbEQsb0JBQW9CLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7Z0JBQ3RGLE9BQU8sb0JBQW9CLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxPQUFPLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNaLENBQUM7O3lIQXZFVSwyQkFBMkIsa0ZBTzVCLGFBQWE7NkhBUFosMkJBQTJCLGNBRjFCLE1BQU07NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5jb21lU291cmNlRm9yZWNhc3QgYXMgSW5jb21lU291cmNlRm9yZWNhc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvTW9kZWxzL2luY29tZS1zb3VyY2UtZm9yZWNhc3QnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJbmNvbWVTb3VyY2VGb3JlY2FzdCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9pbmNvbWUtc291cmNlL2luY29tZS1zb3VyY2UtZm9yZWNhc3QnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgSW5jb21lU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2luY29tZS1zb3VyY2UvaW5jb21lLXNvdXJjZSc7XG5pbXBvcnQgeyBBcHBFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gd29yayB3aXRoIE90aGVyIEluY29tZSBGb3JlY2FzdHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW5jb21lU291cmNlRm9yZWNhc3RTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8SW5jb21lU291cmNlRm9yZWNhc3RCYXNlLCBJbmNvbWVTb3VyY2VGb3JlY2FzdD4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgSW5jb21lU291cmNlRm9yZWNhc3QgPSBJbmNvbWVTb3VyY2VGb3JlY2FzdDtcbiAgdXJsOiBzdHJpbmcgPSAnaW5jb21lLXNvdXJjZS1mb3JlY2FzdHMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoaHR0cCwgZXZlbnREaXNwYXRjaGVyU2VydmljZSwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIEluY29tZSBTb3VyY2VzIGV2ZW50c1xuICAgKi9cbiAgbGlzdGVuRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuVG9BZGRlZEluY29tZVNvdXJjZXMoKTtcbiAgICB0aGlzLmxpc3RlblRvVXBkYXRlZEluY29tZVNvdXJjZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRXZlbnREaXNwYXRjaGVyU2VydmljZSBldmVudCByZWxhdGVkIHRvIGFkZGVkIEluY29tZSBTb3VyY2VzXG4gICAqL1xuICBwcml2YXRlIGxpc3RlblRvQWRkZWRJbmNvbWVTb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLklOQ09NRV9TT1VSQ0VTX0NSRUFURUQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChpbmNvbWVTb3VyY2VzOiBJbmNvbWVTb3VyY2VbXSkgPT4gaW5jb21lU291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoKGluY29tZVNvdXJjZTogSW5jb21lU291cmNlKSA9PiAhaW5jb21lU291cmNlLmlzU2FsYXJ5SW5jb21lKCkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10pID0+IHtcblxuICAgICAgICBjb25zdCBpbmNvbWVTb3VyY2VGb3JlY2FzdHM6IEluY29tZVNvdXJjZUZvcmVjYXN0W10gPSB0aGlzLmFzc2lnbkluY29tZVNvdXJjZUZvcmVjYXN0cyhpbmNvbWVTb3VyY2VzKTtcbiAgICAgICAgaWYgKGluY29tZVNvdXJjZUZvcmVjYXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmFkZEJhdGNoKGluY29tZVNvdXJjZUZvcmVjYXN0cykuc3Vic2NyaWJlKChjcmVhdGVkSW5jb21lU291cmNlRm9yZWNhc3RzOiBJbmNvbWVTb3VyY2VGb3JlY2FzdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLklOQ09NRV9TT1VSQ0VTX0ZPUkVDQVNUU19DUkVBVEVELCBjcmVhdGVkSW5jb21lU291cmNlRm9yZWNhc3RzKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gdXBkYXRlZCBJbmNvbWUgU291cmNlc1xuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub1VwZGF0ZWRJbmNvbWVTb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLklOQ09NRV9TT1VSQ0VTX1VQREFURUQpXG4gICAgICAuc3Vic2NyaWJlKChpbmNvbWVTb3VyY2VzOiBJbmNvbWVTb3VyY2VbXSkgPT4ge1xuICAgICAgICBjb25zdCBpbmNvbWVTb3VyY2VGb3JlY2FzdHM6IEluY29tZVNvdXJjZUZvcmVjYXN0W10gPSB0aGlzLmFzc2lnbkluY29tZVNvdXJjZUZvcmVjYXN0cyhpbmNvbWVTb3VyY2VzKTtcbiAgICAgICAgaWYgKGluY29tZVNvdXJjZUZvcmVjYXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUJhdGNoKGluY29tZVNvdXJjZUZvcmVjYXN0cykuc3Vic2NyaWJlKCh1cGRhdGVkSW5jb21lU291cmNlRm9yZWNhc3RzOiBJbmNvbWVTb3VyY2VGb3JlY2FzdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLklOQ09NRV9TT1VSQ0VTX0ZPUkVDQVNUU19VUERBVEVELCB1cGRhdGVkSW5jb21lU291cmNlRm9yZWNhc3RzKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBvdGhlciBpbmNvbWUgZm9yZWNhc3RzIGJhc2VkIG9uIHByb3ZpZGVkIGluY29tZSBzb3VyY2VzXG4gICAqIEBwYXJhbSBpbmNvbWVTb3VyY2VzIGJ5IHdoaWNoIG90aGVyIGluY29tZSBmb3JlY2FzdHMgd2lsbCBiZSBhc3NpZ25lZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3NpZ25JbmNvbWVTb3VyY2VGb3JlY2FzdHMoaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10pOiBJbmNvbWVTb3VyY2VGb3JlY2FzdFtdIHtcbiAgICByZXR1cm4gaW5jb21lU291cmNlcy5tYXAoKGluY29tZVNvdXJjZTogSW5jb21lU291cmNlKSA9PiB7XG4gICAgICBpbmNvbWVTb3VyY2UuaW5jb21lU291cmNlRm9yZWNhc3RzID0gaW5jb21lU291cmNlLmluY29tZVNvdXJjZUZvcmVjYXN0c1xuICAgICAgICAubWFwKChpbmNvbWVTb3VyY2VGb3JlY2FzdDogSW5jb21lU291cmNlRm9yZWNhc3QpID0+IHtcbiAgICAgICAgICBpbmNvbWVTb3VyY2VGb3JlY2FzdC5pbmNvbWVTb3VyY2UgPSBwbGFpblRvQ2xhc3MoSW5jb21lU291cmNlLCB7aWQ6IGluY29tZVNvdXJjZS5pZH0pO1xuICAgICAgICAgIHJldHVybiBpbmNvbWVTb3VyY2VGb3JlY2FzdDtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5jb21lU291cmNlLmluY29tZVNvdXJjZUZvcmVjYXN0cztcbiAgICB9KS5mbGF0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,109 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { RestService } from '../rest/rest.service';
5
+ import { IncomeSourceType } from '../../../models/income-source/income-source-type';
6
+ import { SalaryForecast } from '../../../models/income-source/salary-forecast';
7
+ import { replace } from '../../../functions/array';
8
+ import { plainToClass } from 'class-transformer';
9
+ import { IncomeSource } from '../../../models/income-source/income-source';
10
+ import { AppEvent } from '../../../models/event/app-event';
11
+ import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/common/http";
14
+ import * as i2 from "../../event/event-dispatcher.service";
15
+ /**
16
+ * Service to work with income sources
17
+ */
18
+ export class IncomeSourceService extends RestService {
19
+ constructor(http, eventDispatcherService, environment) {
20
+ super(http, eventDispatcherService, environment);
21
+ this.http = http;
22
+ this.eventDispatcherService = eventDispatcherService;
23
+ this.environment = environment;
24
+ this.url = 'income-sources';
25
+ this.modelClass = IncomeSource;
26
+ this.incomeSourceTypeSubject = new ReplaySubject(1);
27
+ }
28
+ /**
29
+ * Get income sources tax calculation
30
+ * @param salaryForecast for which tax should be calculated
31
+ */
32
+ getTaxCalculation(salaryForecast) {
33
+ return this.http.post(`${this.environment.apiV2}/${this.url}/tax-calculation`, salaryForecast)
34
+ .pipe(map((response) => {
35
+ return plainToClass(SalaryForecast, response);
36
+ }));
37
+ }
38
+ /**
39
+ * Add batch of income sources
40
+ * @param incomeSources to add
41
+ */
42
+ addBatch(incomeSources) {
43
+ return this.http.post(`${this.environment.apiV2}/${this.url}`, incomeSources)
44
+ .pipe(map((addedIncomeSources) => {
45
+ // assign respond income sources to provided income sources
46
+ const assignedIncomeSources = addedIncomeSources
47
+ .map((incomeSource, index) => Object.assign(plainToClass(IncomeSource, {}), incomeSource, incomeSources[index]));
48
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_CREATED, assignedIncomeSources));
49
+ this.cache.push(...assignedIncomeSources);
50
+ this.updateCache();
51
+ return assignedIncomeSources;
52
+ }));
53
+ }
54
+ /**
55
+ * Update batch of income sources
56
+ */
57
+ updateBatch(incomeSources, queryParams = {}) {
58
+ return this.http.put(`${this.environment.apiV2}/${this.url}`, incomeSources, queryParams)
59
+ .pipe(map((updatedItems) => {
60
+ const updatedInstances = updatedItems.map((item) => this.createModelInstance(this.modelClass, item));
61
+ updatedInstances.forEach((instance) => {
62
+ replace(this.cache, instance);
63
+ });
64
+ if (incomeSources[0].forecasts.length) {
65
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_UPDATED, incomeSources));
66
+ }
67
+ this.updateCache();
68
+ return updatedInstances;
69
+ }));
70
+ }
71
+ /**
72
+ * Get income sources by provided types
73
+ * @param types
74
+ */
75
+ getByTypes(types) {
76
+ return this.get()
77
+ .pipe(map((incomeSources) => incomeSources
78
+ .filter((incomeSource) => types.includes(incomeSource.type))));
79
+ }
80
+ /**
81
+ * Get other incomes types
82
+ */
83
+ getIncomeSourceTypes() {
84
+ if (!this.incomeSourceTypes) {
85
+ this.incomeSourceTypes = [];
86
+ this.http.get(`${this.environment.apiV2}/income-source-types`)
87
+ .pipe(map((response) => {
88
+ return response.map((item) => plainToClass(IncomeSourceType, item));
89
+ }))
90
+ .subscribe((otherIncomesTypes) => {
91
+ this.incomeSourceTypes = otherIncomesTypes;
92
+ this.incomeSourceTypeSubject.next(this.incomeSourceTypes);
93
+ });
94
+ }
95
+ return this.incomeSourceTypeSubject.asObservable();
96
+ }
97
+ }
98
+ IncomeSourceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IncomeSourceService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
99
+ IncomeSourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IncomeSourceService, providedIn: 'root' });
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: IncomeSourceService, decorators: [{
101
+ type: Injectable,
102
+ args: [{
103
+ providedIn: 'root'
104
+ }]
105
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
106
+ type: Inject,
107
+ args: ['environment']
108
+ }] }]; } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jb21lLXNvdXJjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvaW5jb21lLXNvdXJjZS9pbmNvbWUtc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7QUFFN0U7O0dBRUc7QUFJSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBMkM7SUFNbEYsWUFDWSxJQUFnQixFQUNoQixzQkFBOEMsRUFDdkIsV0FBZ0I7UUFFakQsS0FBSyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUp2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxX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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmNvbWVTb3VyY2UgYXMgSW5jb21lU291cmNlQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9pbmNvbWUtc291cmNlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSW5jb21lU291cmNlVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmNvbWUtc291cmNlL2luY29tZS1zb3VyY2UtdHlwZSc7XG5pbXBvcnQgeyBTYWxhcnlGb3JlY2FzdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmNvbWUtc291cmNlL3NhbGFyeS1mb3JlY2FzdCc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IEluY29tZVNvdXJjZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZGIvRW51bXMvaW5jb21lLXNvdXJjZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJbmNvbWVTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5jb21lLXNvdXJjZS9pbmNvbWUtc291cmNlJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gd29yayB3aXRoIGluY29tZSBzb3VyY2VzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEluY29tZVNvdXJjZVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxJbmNvbWVTb3VyY2VCYXNlLCBJbmNvbWVTb3VyY2U+IHtcbiAgdXJsOiBzdHJpbmcgPSAnaW5jb21lLXNvdXJjZXMnO1xuICBtb2RlbENsYXNzID0gSW5jb21lU291cmNlO1xuICBpbmNvbWVTb3VyY2VUeXBlczogSW5jb21lU291cmNlVHlwZVtdO1xuICBpbmNvbWVTb3VyY2VUeXBlU3ViamVjdDogUmVwbGF5U3ViamVjdDxJbmNvbWVTb3VyY2VUeXBlW10+ID0gbmV3IFJlcGxheVN1YmplY3Q8SW5jb21lU291cmNlVHlwZVtdPigxKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHN1cGVyKGh0dHAsIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsIGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW5jb21lIHNvdXJjZXMgdGF4IGNhbGN1bGF0aW9uXG4gICAqIEBwYXJhbSBzYWxhcnlGb3JlY2FzdCBmb3Igd2hpY2ggdGF4IHNob3VsZCBiZSBjYWxjdWxhdGVkXG4gICAqL1xuICBnZXRUYXhDYWxjdWxhdGlvbihzYWxhcnlGb3JlY2FzdDogU2FsYXJ5Rm9yZWNhc3QpOiBPYnNlcnZhYmxlPFNhbGFyeUZvcmVjYXN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9L3RheC1jYWxjdWxhdGlvbmAsIHNhbGFyeUZvcmVjYXN0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3MoU2FsYXJ5Rm9yZWNhc3QsIHJlc3BvbnNlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGJhdGNoIG9mIGluY29tZSBzb3VyY2VzXG4gICAqIEBwYXJhbSBpbmNvbWVTb3VyY2VzIHRvIGFkZFxuICAgKi9cbiAgYWRkQmF0Y2goaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10pOiBPYnNlcnZhYmxlPEluY29tZVNvdXJjZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgaW5jb21lU291cmNlcylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGFkZGVkSW5jb21lU291cmNlczogSW5jb21lU291cmNlQmFzZVtdKSA9PiB7XG4gICAgICAgICAgLy8gYXNzaWduIHJlc3BvbmQgaW5jb21lIHNvdXJjZXMgdG8gcHJvdmlkZWQgaW5jb21lIHNvdXJjZXNcbiAgICAgICAgICBjb25zdCBhc3NpZ25lZEluY29tZVNvdXJjZXM6IEluY29tZVNvdXJjZVtdID0gYWRkZWRJbmNvbWVTb3VyY2VzXG4gICAgICAgICAgICAubWFwKChpbmNvbWVTb3VyY2U6IEluY29tZVNvdXJjZSwgaW5kZXg6IG51bWJlcikgPT4gT2JqZWN0LmFzc2lnbihwbGFpblRvQ2xhc3MoSW5jb21lU291cmNlLCB7fSksIGluY29tZVNvdXJjZSwgaW5jb21lU291cmNlc1tpbmRleF0pKTtcblxuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5JTkNPTUVfU09VUkNFU19DUkVBVEVELCBhc3NpZ25lZEluY29tZVNvdXJjZXMpKTtcblxuICAgICAgICAgIHRoaXMuY2FjaGUucHVzaCguLi5hc3NpZ25lZEluY29tZVNvdXJjZXMpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgICByZXR1cm4gYXNzaWduZWRJbmNvbWVTb3VyY2VzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYmF0Y2ggb2YgaW5jb21lIHNvdXJjZXNcbiAgICovXG5cbiAgdXBkYXRlQmF0Y2goaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10sIHF1ZXJ5UGFyYW1zOiBvYmplY3QgPSB7fSk6IE9ic2VydmFibGU8SW5jb21lU291cmNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfWAsIGluY29tZVNvdXJjZXMsIHF1ZXJ5UGFyYW1zKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXBkYXRlZEl0ZW1zOiBJbmNvbWVTb3VyY2VbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnN0YW5jZXM6IEluY29tZVNvdXJjZVtdID0gdXBkYXRlZEl0ZW1zLm1hcChcbiAgICAgICAgICAgIChpdGVtOiBJbmNvbWVTb3VyY2UpID0+IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZSh0aGlzLm1vZGVsQ2xhc3MsIGl0ZW0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB1cGRhdGVkSW5zdGFuY2VzLmZvckVhY2goKGluc3RhbmNlOiBJbmNvbWVTb3VyY2UpID0+IHtcbiAgICAgICAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgaW5zdGFuY2UpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGluY29tZVNvdXJjZXNbMF0uZm9yZWNhc3RzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLklOQ09NRV9TT1VSQ0VTX1VQREFURUQsIGluY29tZVNvdXJjZXMpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRJbnN0YW5jZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmNvbWUgc291cmNlcyBieSBwcm92aWRlZCB0eXBlc1xuICAgKiBAcGFyYW0gdHlwZXNcbiAgICovXG4gIGdldEJ5VHlwZXModHlwZXM6IEluY29tZVNvdXJjZVR5cGVFbnVtW10pOiBPYnNlcnZhYmxlPEluY29tZVNvdXJjZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGluY29tZVNvdXJjZXM6IEluY29tZVNvdXJjZVtdKSA9PiBpbmNvbWVTb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoaW5jb21lU291cmNlOiBJbmNvbWVTb3VyY2UpID0+IHR5cGVzLmluY2x1ZGVzKGluY29tZVNvdXJjZS50eXBlKSkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3RoZXIgaW5jb21lcyB0eXBlc1xuICAgKi9cbiAgZ2V0SW5jb21lU291cmNlVHlwZXMoKTogT2JzZXJ2YWJsZTxJbmNvbWVTb3VyY2VUeXBlW10+IHtcbiAgICBpZiAoIXRoaXMuaW5jb21lU291cmNlVHlwZXMpIHtcbiAgICAgIHRoaXMuaW5jb21lU291cmNlVHlwZXMgPSBbXTtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vaW5jb21lLXNvdXJjZS10eXBlc2ApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm1hcCgoaXRlbTogYW55KSA9PiBwbGFpblRvQ2xhc3MoSW5jb21lU291cmNlVHlwZSwgaXRlbSkpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3RoZXJJbmNvbWVzVHlwZXM6IEluY29tZVNvdXJjZVR5cGVbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5jb21lU291cmNlVHlwZXMgPSBvdGhlckluY29tZXNUeXBlcztcbiAgICAgICAgICB0aGlzLmluY29tZVNvdXJjZVR5cGVTdWJqZWN0Lm5leHQodGhpcy5pbmNvbWVTb3VyY2VUeXBlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluY29tZVNvdXJjZVR5cGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,90 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { plainToClass } from 'class-transformer';
4
+ import { RestService } from '../../rest/rest.service';
5
+ import { SalaryForecast } from '../../../../models/income-source/salary-forecast';
6
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
7
+ import { IncomeSource } from '../../../../models/income-source/income-source';
8
+ import { AppEvent } from '../../../../models/event/app-event';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common/http";
11
+ import * as i2 from "../../../event/event-dispatcher.service";
12
+ /**
13
+ * Service to work with Salary Forecasts
14
+ */
15
+ export class SalaryForecastService extends RestService {
16
+ constructor(http, eventDispatcherService, environment) {
17
+ super(http, eventDispatcherService, environment);
18
+ this.http = http;
19
+ this.eventDispatcherService = eventDispatcherService;
20
+ this.environment = environment;
21
+ this.modelClass = SalaryForecast;
22
+ this.url = 'salary-forecasts';
23
+ this.listenEvents();
24
+ }
25
+ /**
26
+ * Listen to Income Sources events
27
+ */
28
+ listenEvents() {
29
+ this.listenToAddedIncomeSources();
30
+ this.listenToUpdatedIncomeSources();
31
+ }
32
+ /**
33
+ * Listen to EventDispatcherService event related to added Income Sources
34
+ */
35
+ listenToAddedIncomeSources() {
36
+ this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_CREATED)
37
+ .pipe(map((incomeSources) => incomeSources
38
+ .filter((incomeSource) => incomeSource.isSalaryIncome())))
39
+ .subscribe((incomeSources) => {
40
+ const salaryForecasts = this.assignSalaryForecasts(incomeSources);
41
+ if (salaryForecasts.length) {
42
+ this.addBatch(salaryForecasts).subscribe((createdSalaryForecasts) => {
43
+ this.eventDispatcherService
44
+ .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, createdSalaryForecasts));
45
+ });
46
+ }
47
+ });
48
+ }
49
+ /**
50
+ * Listen to EventDispatcherService event related to updated Income Sources
51
+ */
52
+ listenToUpdatedIncomeSources() {
53
+ this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_UPDATED)
54
+ .subscribe((incomeSources) => {
55
+ const salaryForecasts = this.assignSalaryForecasts(incomeSources);
56
+ if (salaryForecasts.length) {
57
+ this.updateBatch(salaryForecasts).subscribe((updatedSalaryForecasts) => {
58
+ this.eventDispatcherService
59
+ .dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED, updatedSalaryForecasts));
60
+ });
61
+ }
62
+ });
63
+ }
64
+ /**
65
+ * Assign salary forecasts based on provided income sources
66
+ * @param incomeSources by which salary forecasts will be assigned
67
+ */
68
+ assignSalaryForecasts(incomeSources) {
69
+ return incomeSources.map((incomeSource) => {
70
+ incomeSource.salaryForecasts = incomeSource.salaryForecasts
71
+ .map((salaryForecast) => {
72
+ salaryForecast.incomeSource = plainToClass(IncomeSource, { id: incomeSource.id });
73
+ return salaryForecast;
74
+ });
75
+ return incomeSource.salaryForecasts;
76
+ }).flat();
77
+ }
78
+ }
79
+ SalaryForecastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SalaryForecastService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
80
+ SalaryForecastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SalaryForecastService, providedIn: 'root' });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SalaryForecastService, decorators: [{
82
+ type: Injectable,
83
+ args: [{
84
+ providedIn: 'root'
85
+ }]
86
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
87
+ type: Inject,
88
+ args: ['environment']
89
+ }] }]; } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsYXJ5LWZvcmVjYXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9pbmNvbWUtc291cmNlL3NhbGFyeS1mb3JlY2FzdC9zYWxhcnktZm9yZWNhc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQUU5RDs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxXQUErQztJQUl4RixZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQjtRQUVqRCxLQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBSnZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQU5uRCxlQUFVLEdBQTBCLGNBQWMsQ0FBQztRQUNuRCxRQUFHLEdBQVcsa0JBQWtCLENBQUM7UUFRL0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQzthQUNwRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsYUFBNkIsRUFBRSxFQUFFLENBQUMsYUFBYTthQUNqRCxNQUFNLENBQUMsQ0FBQyxZQUEwQixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUMxRTthQUNBLFNBQVMsQ0FBQyxDQUFDLGFBQTZCLEVBQUUsRUFBRTtZQUUzQyxNQUFNLGVBQWUsR0FBcUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BGLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxzQkFBd0MsRUFBRSxFQUFFO29CQUNwRixJQUFJLENBQUMsc0JBQXNCO3lCQUN4QixRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0NBQWdDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2dCQUN2RyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQzthQUNwRSxTQUFTLENBQUMsQ0FBQyxhQUE2QixFQUFFLEVBQUU7WUFDM0MsTUFBTSxlQUFlLEdBQXFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsc0JBQXdDLEVBQUUsRUFBRTtvQkFDdkYsSUFBSSxDQUFDLHNCQUFzQjt5QkFDeEIsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztnQkFDdkcsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHFCQUFxQixDQUFDLGFBQTZCO1FBQ3pELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtZQUN0RCxZQUFZLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQyxlQUFlO2lCQUN4RCxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUU7Z0JBQ3RDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxFQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztnQkFDaEYsT0FBTyxjQUFjLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxPQUFPLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDWixDQUFDOzttSEF2RVUscUJBQXFCLGtGQU90QixhQUFhO3VIQVBaLHFCQUFxQixjQUZwQixNQUFNOzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2FsYXJ5Rm9yZWNhc3QgYXMgU2FsYXJ5Rm9yZWNhc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvTW9kZWxzL3NhbGFyeS1mb3JlY2FzdCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNhbGFyeUZvcmVjYXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2luY29tZS1zb3VyY2Uvc2FsYXJ5LWZvcmVjYXN0JztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwRXZlbnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IEluY29tZVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9pbmNvbWUtc291cmNlL2luY29tZS1zb3VyY2UnO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHdvcmsgd2l0aCBTYWxhcnkgRm9yZWNhc3RzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNhbGFyeUZvcmVjYXN0U2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFNhbGFyeUZvcmVjYXN0QmFzZSwgU2FsYXJ5Rm9yZWNhc3Q+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgU2FsYXJ5Rm9yZWNhc3QgPSBTYWxhcnlGb3JlY2FzdDtcbiAgdXJsOiBzdHJpbmcgPSAnc2FsYXJ5LWZvcmVjYXN0cyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICBzdXBlcihodHRwLCBldmVudERpc3BhdGNoZXJTZXJ2aWNlLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gSW5jb21lIFNvdXJjZXMgZXZlbnRzXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Ub0FkZGVkSW5jb21lU291cmNlcygpO1xuICAgIHRoaXMubGlzdGVuVG9VcGRhdGVkSW5jb21lU291cmNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gYWRkZWQgSW5jb21lIFNvdXJjZXNcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9BZGRlZEluY29tZVNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uSU5DT01FX1NPVVJDRVNfQ1JFQVRFRClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGluY29tZVNvdXJjZXM6IEluY29tZVNvdXJjZVtdKSA9PiBpbmNvbWVTb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoaW5jb21lU291cmNlOiBJbmNvbWVTb3VyY2UpID0+IGluY29tZVNvdXJjZS5pc1NhbGFyeUluY29tZSgpKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluY29tZVNvdXJjZXM6IEluY29tZVNvdXJjZVtdKSA9PiB7XG5cbiAgICAgICAgY29uc3Qgc2FsYXJ5Rm9yZWNhc3RzOiBTYWxhcnlGb3JlY2FzdFtdID0gdGhpcy5hc3NpZ25TYWxhcnlGb3JlY2FzdHMoaW5jb21lU291cmNlcyk7XG4gICAgICAgIGlmIChzYWxhcnlGb3JlY2FzdHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5hZGRCYXRjaChzYWxhcnlGb3JlY2FzdHMpLnN1YnNjcmliZSgoY3JlYXRlZFNhbGFyeUZvcmVjYXN0czogU2FsYXJ5Rm9yZWNhc3RbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlXG4gICAgICAgICAgICAgIC5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5JTkNPTUVfU09VUkNFU19GT1JFQ0FTVFNfQ1JFQVRFRCwgY3JlYXRlZFNhbGFyeUZvcmVjYXN0cykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRXZlbnREaXNwYXRjaGVyU2VydmljZSBldmVudCByZWxhdGVkIHRvIHVwZGF0ZWQgSW5jb21lIFNvdXJjZXNcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9VcGRhdGVkSW5jb21lU291cmNlcygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5JTkNPTUVfU09VUkNFU19VUERBVEVEKVxuICAgICAgLnN1YnNjcmliZSgoaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FsYXJ5Rm9yZWNhc3RzOiBTYWxhcnlGb3JlY2FzdFtdID0gdGhpcy5hc3NpZ25TYWxhcnlGb3JlY2FzdHMoaW5jb21lU291cmNlcyk7XG4gICAgICAgIGlmIChzYWxhcnlGb3JlY2FzdHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVCYXRjaChzYWxhcnlGb3JlY2FzdHMpLnN1YnNjcmliZSgodXBkYXRlZFNhbGFyeUZvcmVjYXN0czogU2FsYXJ5Rm9yZWNhc3RbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlXG4gICAgICAgICAgICAgIC5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5JTkNPTUVfU09VUkNFU19GT1JFQ0FTVFNfVVBEQVRFRCwgdXBkYXRlZFNhbGFyeUZvcmVjYXN0cykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gc2FsYXJ5IGZvcmVjYXN0cyBiYXNlZCBvbiBwcm92aWRlZCBpbmNvbWUgc291cmNlc1xuICAgKiBAcGFyYW0gaW5jb21lU291cmNlcyBieSB3aGljaCBzYWxhcnkgZm9yZWNhc3RzIHdpbGwgYmUgYXNzaWduZWRcbiAgICovXG4gIHByaXZhdGUgYXNzaWduU2FsYXJ5Rm9yZWNhc3RzKGluY29tZVNvdXJjZXM6IEluY29tZVNvdXJjZVtdKTogU2FsYXJ5Rm9yZWNhc3RbXSB7XG4gICAgcmV0dXJuIGluY29tZVNvdXJjZXMubWFwKChpbmNvbWVTb3VyY2U6IEluY29tZVNvdXJjZSkgPT4ge1xuICAgICAgaW5jb21lU291cmNlLnNhbGFyeUZvcmVjYXN0cyA9IGluY29tZVNvdXJjZS5zYWxhcnlGb3JlY2FzdHNcbiAgICAgICAgLm1hcCgoc2FsYXJ5Rm9yZWNhc3Q6IFNhbGFyeUZvcmVjYXN0KSA9PiB7XG4gICAgICAgICAgc2FsYXJ5Rm9yZWNhc3QuaW5jb21lU291cmNlID0gcGxhaW5Ub0NsYXNzKEluY29tZVNvdXJjZSwge2lkOiBpbmNvbWVTb3VyY2UuaWR9KTtcbiAgICAgICAgICByZXR1cm4gc2FsYXJ5Rm9yZWNhc3Q7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGluY29tZVNvdXJjZS5zYWxhcnlGb3JlY2FzdHM7XG4gICAgfSkuZmxhdCgpO1xuICB9XG59XG4iXX0=