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,157 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Inject, Injectable } from '@angular/core';
3
+ import { BehaviorSubject, ReplaySubject } from 'rxjs';
4
+ import { map } from 'rxjs/operators';
5
+ import { loadStripe } from '@stripe/stripe-js';
6
+ import { ServicePriceCollection } from '../../../collections/service-price.collection';
7
+ import { ServiceSubscriptionCollection } from '../../../collections/service-subscription.collection';
8
+ import { plainToClass } from 'class-transformer';
9
+ import { ServiceSubscription } from '../../../models/service-subscription/service-subscription';
10
+ import { ServicePayment } from '../../../models/service-subscription/service-payment';
11
+ import { ServicePrice } from '../../../models/service-subscription/service-price';
12
+ import { ServiceSubscriptionItem } from '../../../models/service-subscription/service-subscription-item';
13
+ import { AppEvent } from '../../../models/event/app-event';
14
+ import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@angular/common/http";
17
+ import * as i2 from "../../event/event-dispatcher.service";
18
+ import * as i3 from "../../event/sse.service";
19
+ export class SubscriptionService {
20
+ constructor(http, eventDispatcherService, sseService, environment) {
21
+ this.http = http;
22
+ this.eventDispatcherService = eventDispatcherService;
23
+ this.sseService = sseService;
24
+ this.environment = environment;
25
+ this.serviceSubscriptionSubject = new ReplaySubject(1);
26
+ this.serviceSubscriptionsSubject = new ReplaySubject(1);
27
+ this.servicePaymentsSubject = new ReplaySubject(1);
28
+ this.subscriptionChangeSubject = new BehaviorSubject(null);
29
+ this.listenEvents();
30
+ }
31
+ listenEvents() {
32
+ this.listenSubscriptions();
33
+ }
34
+ getSubscription(force = false) {
35
+ if (!this._serviceSubscription || force) {
36
+ this.http.get(`${this.environment.apiV2}/subscriptions/last`)
37
+ .pipe(map((response) => {
38
+ return plainToClass(ServiceSubscription, response);
39
+ }))
40
+ .subscribe((subsciption) => {
41
+ this._serviceSubscription = subsciption;
42
+ this.serviceSubscriptionSubject.next(this._serviceSubscription);
43
+ });
44
+ }
45
+ return this.serviceSubscriptionSubject.asObservable();
46
+ }
47
+ /**
48
+ * @TODO right now we have only monthly prices, the function should be refactored to support other options in future
49
+ *
50
+ * create available subscription plans based on existing products
51
+ */
52
+ getSubscriptionPlans() {
53
+ if (!this._serviceSubscriptions) {
54
+ this.http.get(`${this.environment.apiV2}/service-prices`)
55
+ .pipe(map((response) => {
56
+ return new ServicePriceCollection(response['hydra:member'].map((item) => plainToClass(ServicePrice, item)));
57
+ }))
58
+ .subscribe((prices) => {
59
+ this._serviceSubscriptions = new ServiceSubscriptionCollection([
60
+ plainToClass(ServiceSubscription, { items: [] }),
61
+ plainToClass(ServiceSubscription, {
62
+ items: [plainToClass(ServiceSubscriptionItem, {
63
+ price: prices.property,
64
+ quantity: 2
65
+ })]
66
+ }),
67
+ plainToClass(ServiceSubscription, {
68
+ items: [plainToClass(ServiceSubscriptionItem, {
69
+ price: prices.property,
70
+ quantity: 3
71
+ })]
72
+ })
73
+ ]);
74
+ this._serviceSubscriptions.items.forEach((subscription) => {
75
+ subscription.items.push(plainToClass(ServiceSubscriptionItem, { price: prices.work, quantity: 1 }));
76
+ });
77
+ this.serviceSubscriptionsSubject.next(this._serviceSubscriptions);
78
+ });
79
+ }
80
+ return this.serviceSubscriptionsSubject.asObservable();
81
+ }
82
+ /**
83
+ * redirect to stripe payment page
84
+ */
85
+ checkoutRedirect(subscription, successUrl, cancelUrl) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ const stripe = yield loadStripe(this.environment.stripePk);
88
+ // @TODO vik
89
+ const lineItems = subscription.items.map((item) => {
90
+ return { servicePriceId: item.price.id, quantity: item.quantity };
91
+ });
92
+ this.http.post(`${this.environment.apiV2}/stripe/checkout-session`, {
93
+ lineItems,
94
+ successUrl: successUrl,
95
+ cancelUrl: cancelUrl
96
+ })
97
+ .subscribe((session) => {
98
+ // @Todo remove user TRIAL status
99
+ stripe.redirectToCheckout({ sessionId: session });
100
+ });
101
+ });
102
+ }
103
+ /**
104
+ * redirect to stripe billing page
105
+ */
106
+ billingRedirect(returnUrl) {
107
+ this.http.get(`${this.environment.apiV2}/stripe/billing-portal-session`, {
108
+ params: { returnUrl }
109
+ }).subscribe((response) => {
110
+ window.location.replace(response.url);
111
+ });
112
+ }
113
+ getPayments() {
114
+ if (!this._servicePayments) {
115
+ this.http.get(`${this.environment.apiV2}/service-payments`).subscribe((response) => {
116
+ this._servicePayments = response.map((item) => plainToClass(ServicePayment, item));
117
+ this.servicePaymentsSubject.next(this._servicePayments);
118
+ });
119
+ }
120
+ return this.servicePaymentsSubject.asObservable();
121
+ }
122
+ /**
123
+ * Get difference between current subscription and selected new subscription
124
+ */
125
+ getProrationCost(items) {
126
+ return this.http.post(`${this.environment.apiV2}/subscriptions/proration-cost`, items).pipe(map((prorationCost) => {
127
+ return prorationCost;
128
+ }));
129
+ }
130
+ /**
131
+ * Change subscription plan
132
+ */
133
+ changeSubscription(items) {
134
+ return this.http.put(`${this.environment.apiV2}/subscriptions/items`, items);
135
+ }
136
+ listenSubscriptions() {
137
+ this.sseService.on(`serviceSubscriptions`)
138
+ .pipe(map((event) => plainToClass(ServiceSubscription, event)))
139
+ .subscribe((subscription) => {
140
+ this.getSubscription(true).subscribe();
141
+ this.subscriptionChangeSubject.next(subscription);
142
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED, null));
143
+ });
144
+ }
145
+ }
146
+ SubscriptionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: i3.SseService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
147
+ SubscriptionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, providedIn: 'root' });
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, decorators: [{
149
+ type: Injectable,
150
+ args: [{
151
+ providedIn: 'root'
152
+ }]
153
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: i3.SseService }, { type: undefined, decorators: [{
154
+ type: Inject,
155
+ args: ['environment']
156
+ }] }]; } });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9zdWJzY3JpcHRpb24vc3Vic2NyaXB0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdkYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDekcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7OztBQU03RSxNQUFNLE9BQU8sbUJBQW1CO0lBVTlCLFlBQ1UsSUFBZ0IsRUFDaEIsc0JBQThDLEVBQzlDLFVBQXNCLEVBQ0MsV0FBZ0I7UUFIdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0Is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SUFDSCxrQkFBa0IsQ0FBQyxLQUFnQztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDdkMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBdUIsRUFBRSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUN0RjthQUNBLFNBQVMsQ0FBQyxDQUFDLFlBQWlDLEVBQVEsRUFBRTtZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7aUhBdkpVLG1CQUFtQiw0R0FjcEIsYUFBYTtxSEFkWixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFlSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGxvYWRTdHJpcGUgfSBmcm9tICdAc3RyaXBlL3N0cmlwZS1qcyc7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpY2VDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMvc2VydmljZS1wcmljZS5jb2xsZWN0aW9uJztcbmltcG9ydCB7IFNlcnZpY2VTdWJzY3JpcHRpb25Db2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMvc2VydmljZS1zdWJzY3JpcHRpb24uY29sbGVjdGlvbic7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBTZXJ2aWNlU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NlcnZpY2Utc3Vic2NyaXB0aW9uL3NlcnZpY2Utc3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IFNlcnZpY2VQYXltZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NlcnZpY2Utc3Vic2NyaXB0aW9uL3NlcnZpY2UtcGF5bWVudCc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXZlbnQvZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VQcmljZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zZXJ2aWNlLXN1YnNjcmlwdGlvbi9zZXJ2aWNlLXByaWNlJztcbmltcG9ydCB7IFNlcnZpY2VTdWJzY3JpcHRpb25JdGVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NlcnZpY2Utc3Vic2NyaXB0aW9uL3NlcnZpY2Utc3Vic2NyaXB0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXZlbnQvc3NlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25TZXJ2aWNlIHtcbiAgX3NlcnZpY2VTdWJzY3JpcHRpb246IFNlcnZpY2VTdWJzY3JpcHRpb247XG4gIHNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFNlcnZpY2VTdWJzY3JpcHRpb24+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2VydmljZVN1YnNjcmlwdGlvbj4oMSk7XG4gIF9zZXJ2aWNlU3Vic2NyaXB0aW9uczogU2VydmljZVN1YnNjcmlwdGlvbkNvbGxlY3Rpb247XG4gIHNlcnZpY2VTdWJzY3JpcHRpb25zU3ViamVjdDogUmVwbGF5U3ViamVjdDxTZXJ2aWNlU3Vic2NyaXB0aW9uQ29sbGVjdGlvbj4gPSBuZXcgUmVwbGF5U3ViamVjdDxTZXJ2aWNlU3Vic2NyaXB0aW9uQ29sbGVjdGlvbj4oMSk7XG4gIHN0cmlwZTogYW55O1xuICBzZXJ2aWNlUGF5bWVudHNTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFNlcnZpY2VQYXltZW50W10+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2VydmljZVBheW1lbnRbXT4oMSk7XG4gIF9zZXJ2aWNlUGF5bWVudHM6IFNlcnZpY2VQYXltZW50W107XG4gIHN1YnNjcmlwdGlvbkNoYW5nZVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxTZXJ2aWNlU3Vic2NyaXB0aW9uPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VydmljZVN1YnNjcmlwdGlvbj4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBwcml2YXRlIHNzZVNlcnZpY2U6IFNzZVNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIGdldFN1YnNjcmlwdGlvbihmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxTZXJ2aWNlU3Vic2NyaXB0aW9uPiB7XG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlU3Vic2NyaXB0aW9uIHx8IGZvcmNlKSB7XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3N1YnNjcmlwdGlvbnMvbGFzdGApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uLCByZXNwb25zZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY2lwdGlvbjogU2VydmljZVN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlcnZpY2VTdWJzY3JpcHRpb24gPSBzdWJzY2lwdGlvbjtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0Lm5leHQodGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUT0RPIHJpZ2h0IG5vdyB3ZSBoYXZlIG9ubHkgbW9udGhseSBwcmljZXMsIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBzdXBwb3J0IG90aGVyIG9wdGlvbnMgaW4gZnV0dXJlXG4gICAqXG4gICAqIGNyZWF0ZSBhdmFpbGFibGUgc3Vic2NyaXB0aW9uIHBsYW5zIGJhc2VkIG9uIGV4aXN0aW5nIHByb2R1Y3RzXG4gICAqL1xuICBnZXRTdWJzY3JpcHRpb25QbGFucygpOiBPYnNlcnZhYmxlPFNlcnZpY2VTdWJzY3JpcHRpb25Db2xsZWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlU3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zZXJ2aWNlLXByaWNlc2ApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpY2VDb2xsZWN0aW9uKHJlc3BvbnNlWydoeWRyYTptZW1iZXInXS5tYXAoKGl0ZW06IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKFNlcnZpY2VQcmljZSwgaXRlbSkpKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHByaWNlczogU2VydmljZVByaWNlQ29sbGVjdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlcnZpY2VTdWJzY3JpcHRpb25zID0gbmV3IFNlcnZpY2VTdWJzY3JpcHRpb25Db2xsZWN0aW9uKFtcbiAgICAgICAgICAgIHBsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uLCB7aXRlbXM6IFtdfSksXG4gICAgICAgICAgICBwbGFpblRvQ2xhc3MoU2VydmljZVN1YnNjcmlwdGlvbiwge1xuICAgICAgICAgICAgICBpdGVtczogW3BsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uSXRlbSwge1xuICAgICAgICAgICAgICAgIHByaWNlOiBwcmljZXMucHJvcGVydHksXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IDJcbiAgICAgICAgICAgICAgfSldXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHBsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uLCB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBbcGxhaW5Ub0NsYXNzKFNlcnZpY2VTdWJzY3JpcHRpb25JdGVtLCB7XG4gICAgICAgICAgICAgICAgcHJpY2U6IHByaWNlcy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogM1xuICAgICAgICAgICAgICB9KV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgdGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbnMuaXRlbXMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uOiBTZXJ2aWNlU3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24uaXRlbXMucHVzaChwbGFpblRvQ2xhc3MoU2VydmljZVN1YnNjcmlwdGlvbkl0ZW0sIHtwcmljZTogcHJpY2VzLndvcmssIHF1YW50aXR5OiAxfSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlU3Vic2NyaXB0aW9uc1N1YmplY3QubmV4dCh0aGlzLl9zZXJ2aWNlU3Vic2NyaXB0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWRpcmVjdCB0byBzdHJpcGUgcGF5bWVudCBwYWdlXG4gICAqL1xuICBhc3luYyBjaGVja291dFJlZGlyZWN0KHN1YnNjcmlwdGlvbjogU2VydmljZVN1YnNjcmlwdGlvbiwgc3VjY2Vzc1VybDogc3RyaW5nLCBjYW5jZWxVcmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc3RyaXBlOiBhbnkgPSBhd2FpdCBsb2FkU3RyaXBlKHRoaXMuZW52aXJvbm1lbnQuc3RyaXBlUGspO1xuICAgIC8vIEBUT0RPIHZpa1xuICAgIGNvbnN0IGxpbmVJdGVtczogYW55ID0gc3Vic2NyaXB0aW9uLml0ZW1zLm1hcCgoaXRlbTogU2VydmljZVN1YnNjcmlwdGlvbkl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB7c2VydmljZVByaWNlSWQ6IGl0ZW0ucHJpY2UuaWQsIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5fTtcbiAgICB9KTtcblxuICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3N0cmlwZS9jaGVja291dC1zZXNzaW9uYCwge1xuICAgICAgbGluZUl0ZW1zLFxuICAgICAgc3VjY2Vzc1VybDogc3VjY2Vzc1VybCxcbiAgICAgIGNhbmNlbFVybDogY2FuY2VsVXJsXG4gICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHNlc3Npb246IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBAVG9kbyByZW1vdmUgdXNlciBUUklBTCBzdGF0dXNcbiAgICAgICAgc3RyaXBlLnJlZGlyZWN0VG9DaGVja291dCh7c2Vzc2lvbklkOiBzZXNzaW9ufSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWRpcmVjdCB0byBzdHJpcGUgYmlsbGluZyBwYWdlXG4gICAqL1xuICBiaWxsaW5nUmVkaXJlY3QocmV0dXJuVXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3N0cmlwZS9iaWxsaW5nLXBvcnRhbC1zZXNzaW9uYCwge1xuICAgICAgcGFyYW1zOiB7cmV0dXJuVXJsfVxuICAgIH0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocmVzcG9uc2UudXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBheW1lbnRzKCk6IE9ic2VydmFibGU8U2VydmljZVBheW1lbnRbXT4ge1xuICAgIGlmICghdGhpcy5fc2VydmljZVBheW1lbnRzKSB7XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3NlcnZpY2UtcGF5bWVudHNgKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBvYmplY3RbXSkgPT4ge1xuICAgICAgICB0aGlzLl9zZXJ2aWNlUGF5bWVudHMgPSByZXNwb25zZS5tYXAoKGl0ZW06IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKFNlcnZpY2VQYXltZW50LCBpdGVtKSk7XG4gICAgICAgIHRoaXMuc2VydmljZVBheW1lbnRzU3ViamVjdC5uZXh0KHRoaXMuX3NlcnZpY2VQYXltZW50cyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUGF5bWVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBzdWJzY3JpcHRpb24gYW5kIHNlbGVjdGVkIG5ldyBzdWJzY3JpcHRpb25cbiAgICovXG4gIGdldFByb3JhdGlvbkNvc3QoaXRlbXM6IFNlcnZpY2VTdWJzY3JpcHRpb25JdGVtW10pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zdWJzY3JpcHRpb25zL3Byb3JhdGlvbi1jb3N0YCwgaXRlbXMpLnBpcGUoXG4gICAgICBtYXAoKHByb3JhdGlvbkNvc3Q6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gcHJvcmF0aW9uQ29zdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugc3Vic2NyaXB0aW9uIHBsYW5cbiAgICovXG4gIGNoYW5nZVN1YnNjcmlwdGlvbihpdGVtczogU2VydmljZVN1YnNjcmlwdGlvbkl0ZW1bXSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc3Vic2NyaXB0aW9ucy9pdGVtc2AsIGl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnNzZVNlcnZpY2Uub24oYHNlcnZpY2VTdWJzY3JpcHRpb25zYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50OiBvYmplY3QpOiBTZXJ2aWNlU3Vic2NyaXB0aW9uID0+IHBsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uLCBldmVudCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzdWJzY3JpcHRpb246IFNlcnZpY2VTdWJzY3JpcHRpb24pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb24odHJ1ZSkuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uQ2hhbmdlU3ViamVjdC5uZXh0KHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5TRVJWSUNFX1NVQlNDUklQVElPTl9VUERBVEVELCBudWxsKSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,41 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { RestService } from '../../rest/rest.service';
3
+ import { TaxReview } from '../../../../models/tax-review/tax-review';
4
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
5
+ import _ from 'lodash';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../../../event/event-dispatcher.service";
9
+ /**
10
+ * Service to work with tax review history
11
+ */
12
+ export class TaxReviewHistoryService extends RestService {
13
+ constructor(http, eventDispatcherService, environment) {
14
+ super(http, eventDispatcherService, environment);
15
+ this.http = http;
16
+ this.eventDispatcherService = eventDispatcherService;
17
+ this.environment = environment;
18
+ this.url = 'tax-reviews/history';
19
+ this.modelClass = TaxReview;
20
+ // subscribe on tax review updating
21
+ eventDispatcherService.on(AppEventTypeEnum.TAX_REVIEW_UPDATED).subscribe((taxReview) => {
22
+ const tempCache = _.cloneDeep(this.cache);
23
+ // insert element at the beginning of the array
24
+ tempCache.unshift(taxReview);
25
+ this.cache = tempCache;
26
+ this.updateCache();
27
+ });
28
+ }
29
+ }
30
+ TaxReviewHistoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxReviewHistoryService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
31
+ TaxReviewHistoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxReviewHistoryService, providedIn: 'root' });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxReviewHistoryService, decorators: [{
33
+ type: Injectable,
34
+ args: [{
35
+ providedIn: 'root'
36
+ }]
37
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
38
+ type: Inject,
39
+ args: ['environment']
40
+ }] }]; } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LXJldmlldy1oaXN0b3J5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC90YXgtcmV2aWV3L3RheC1yZXZpZXctaGlzdG9yeS90YXgtcmV2aWV3LWhpc3Rvcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7OztBQUV2Qjs7R0FFRztBQUlILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxXQUFxQztJQUloRixZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQjtRQUVqRCxLQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBSnZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQU5uRCxRQUFHLEdBQVcscUJBQXFCLENBQUM7UUFDcEMsZUFBVSxHQUFxQixTQUFTLENBQUM7UUFRdkMsbUNBQW1DO1FBQ25DLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQW9CLEVBQVEsRUFBRTtZQUN0RyxNQUFNLFNBQVMsR0FBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsK0NBQStDO1lBQy9DLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBbEJVLHVCQUF1QixrRkFPeEIsYUFBYTt5SEFQWix1QkFBdUIsY0FGdEIsTUFBTTs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRheFJldmlldyBhcyBUYXhSZXZpZXdCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvTW9kZWxzL3RheC1yZXZpZXcnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGF4UmV2aWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RheC1yZXZpZXcvdGF4LXJldmlldyc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gd29yayB3aXRoIHRheCByZXZpZXcgaGlzdG9yeVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYXhSZXZpZXdIaXN0b3J5U2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFRheFJldmlld0Jhc2UsIFRheFJldmlldz4ge1xuICB1cmw6IHN0cmluZyA9ICd0YXgtcmV2aWV3cy9oaXN0b3J5JztcbiAgbW9kZWxDbGFzczogdHlwZW9mIFRheFJldmlldyA9IFRheFJldmlldztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHN1cGVyKGh0dHAsIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsIGVudmlyb25tZW50KTtcbiAgICAvLyBzdWJzY3JpYmUgb24gdGF4IHJldmlldyB1cGRhdGluZ1xuICAgIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5UQVhfUkVWSUVXX1VQREFURUQpLnN1YnNjcmliZSgodGF4UmV2aWV3OiBUYXhSZXZpZXcpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHRlbXBDYWNoZTogVGF4UmV2aWV3W10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgIC8vIGluc2VydCBlbGVtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XG4gICAgICB0ZW1wQ2FjaGUudW5zaGlmdCh0YXhSZXZpZXcpO1xuICAgICAgdGhpcy5jYWNoZSA9IHRlbXBDYWNoZTtcbiAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,103 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import _ from 'lodash';
4
+ import { replace } from '../../../functions/array';
5
+ import { RestService } from '../rest/rest.service';
6
+ import { plainToClass } from 'class-transformer';
7
+ import { TaxReview } from '../../../models/tax-review/tax-review';
8
+ import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
9
+ import { AppEvent } from '../../../models/event/app-event';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common/http";
12
+ import * as i2 from "../../event/event-dispatcher.service";
13
+ /**
14
+ * Service to work with tax review
15
+ */
16
+ export class TaxReviewService extends RestService {
17
+ constructor(http, eventDispatcherService, environment) {
18
+ super(http, eventDispatcherService, environment);
19
+ this.http = http;
20
+ this.eventDispatcherService = eventDispatcherService;
21
+ this.environment = environment;
22
+ this.url = 'tax-reviews';
23
+ this.modelClass = TaxReview;
24
+ this.listenEvents();
25
+ }
26
+ /**
27
+ * Listen events from SSE and Event Dispatcher services
28
+ */
29
+ listenEvents() {
30
+ this.listenFirmChanges();
31
+ this.listenClientTransfer();
32
+ }
33
+ /**
34
+ * Add new Tax Review (request from client to firm)
35
+ * @param finYear
36
+ */
37
+ request(finYear) {
38
+ return this.http.post(`${this.environment.apiV2}/${this.url}?financialYear=${finYear}`, {})
39
+ .pipe(map((newTaxReview) => {
40
+ const taxReview = plainToClass(TaxReview, newTaxReview);
41
+ const tempCache = _.cloneDeep(this.cache);
42
+ tempCache.push(taxReview);
43
+ this.cache = tempCache;
44
+ this.updateCache();
45
+ return taxReview;
46
+ }));
47
+ }
48
+ /**
49
+ * Update tax review
50
+ * @param taxReview to be updated
51
+ */
52
+ update(taxReview) {
53
+ return this.http.put(`${this.environment.apiV2}/${this.url}/${taxReview.id}`, taxReview)
54
+ .pipe(map((updatedTaxReview) => {
55
+ const updatedInstance = plainToClass(TaxReview, updatedTaxReview);
56
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.TAX_REVIEW_UPDATED, updatedInstance));
57
+ const tempCache = _.cloneDeep(this.cache);
58
+ replace(tempCache, updatedInstance);
59
+ this.cache = tempCache;
60
+ this.updateCache();
61
+ return updatedInstance;
62
+ }));
63
+ }
64
+ /**
65
+ * Clear cache when user reject firm
66
+ */
67
+ listenFirmChanges() {
68
+ this.eventDispatcherService.on([AppEventTypeEnum.CLIENT_MOVEMENT_CLOSED, AppEventTypeEnum.CLIENT_INVITE_ACCEPTED])
69
+ .subscribe(() => {
70
+ this.cache = [];
71
+ this.updateCache();
72
+ });
73
+ }
74
+ /**
75
+ * Update firm for all transferred clients
76
+ * @private
77
+ */
78
+ listenClientTransfer() {
79
+ this.eventDispatcherService.on(AppEventTypeEnum.CLIENT_TRANSFER_TO_OTHER_EMPLOYEE)
80
+ .subscribe((transferredClients) => {
81
+ const tempCache = _.cloneDeep(this.cache);
82
+ transferredClients.forEach((transferredClient) => {
83
+ const taxReviewIndex = tempCache.findIndex((taxReview) => taxReview.id === transferredClient.id);
84
+ // @TODO vik
85
+ // tempCache[taxReviewIndex].employee = transferredClient.accountant;
86
+ });
87
+ this.cache = tempCache;
88
+ this.updateCache();
89
+ });
90
+ }
91
+ }
92
+ TaxReviewService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxReviewService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
93
+ TaxReviewService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxReviewService, providedIn: 'root' });
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxReviewService, decorators: [{
95
+ type: Injectable,
96
+ args: [{
97
+ providedIn: 'root'
98
+ }]
99
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
100
+ type: Inject,
101
+ args: ['environment']
102
+ }] }]; } });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LXJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvdGF4LXJldmlldy90YXgtcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBRzNEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQXFDO0lBSXpFLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFKdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBTm5ELFFBQUcsR0FBVyxhQUFhLENBQUM7UUFDNUIsZUFBVSxHQUFxQixTQUFTLENBQUM7UUFRdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFF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cUVBQXFFO1lBQ3ZFLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7OEdBMUZVLGdCQUFnQixrRkFPakIsYUFBYTtrSEFQWixnQkFBZ0IsY0FGZixNQUFNOzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGF4UmV2aWV3IGFzIFRheFJldmlld0Jhc2UgfSBmcm9tICcuLi8uLi8uLi9kYi9Nb2RlbHMvdGF4LXJldmlldyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IFRheFJldmlldyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YXgtcmV2aWV3L3RheC1yZXZpZXcnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci91c2VyJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHdvcmsgd2l0aCB0YXggcmV2aWV3XG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRheFJldmlld1NlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxUYXhSZXZpZXdCYXNlLCBUYXhSZXZpZXc+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICB1cmw6IHN0cmluZyA9ICd0YXgtcmV2aWV3cyc7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBUYXhSZXZpZXcgPSBUYXhSZXZpZXc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICBzdXBlcihodHRwLCBldmVudERpc3BhdGNoZXJTZXJ2aWNlLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZXZlbnRzIGZyb20gU1NFIGFuZCBFdmVudCBEaXNwYXRjaGVyIHNlcnZpY2VzXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5GaXJtQ2hhbmdlcygpO1xuICAgIHRoaXMubGlzdGVuQ2xpZW50VHJhbnNmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IFRheCBSZXZpZXcgKHJlcXVlc3QgZnJvbSBjbGllbnQgdG8gZmlybSlcbiAgICogQHBhcmFtIGZpblllYXJcbiAgICovXG4gIHJlcXVlc3QoZmluWWVhcjogbnVtYmVyKTogT2JzZXJ2YWJsZTxUYXhSZXZpZXc+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0/ZmluYW5jaWFsWWVhcj0ke2ZpblllYXJ9YCwge30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChuZXdUYXhSZXZpZXc6IFRheFJldmlld0Jhc2UpOiBUYXhSZXZpZXcgPT4ge1xuICAgICAgICAgIGNvbnN0IHRheFJldmlldzogVGF4UmV2aWV3ID0gcGxhaW5Ub0NsYXNzKFRheFJldmlldywgbmV3VGF4UmV2aWV3KTtcbiAgICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IFRheFJldmlld1tdID0gXy5jbG9uZURlZXAodGhpcy5jYWNoZSk7XG4gICAgICAgICAgdGVtcENhY2hlLnB1c2godGF4UmV2aWV3KTtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gdGVtcENhY2hlO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgICByZXR1cm4gdGF4UmV2aWV3O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGF4IHJldmlld1xuICAgKiBAcGFyYW0gdGF4UmV2aWV3IHRvIGJlIHVwZGF0ZWRcbiAgICovXG4gIHVwZGF0ZSh0YXhSZXZpZXc6IFRheFJldmlldyk6IE9ic2VydmFibGU8VGF4UmV2aWV3PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vJHt0YXhSZXZpZXcuaWR9YCwgdGF4UmV2aWV3KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXBkYXRlZFRheFJldmlldzogVGF4UmV2aWV3QmFzZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnN0YW5jZTogVGF4UmV2aWV3ID0gcGxhaW5Ub0NsYXNzKFRheFJldmlldywgdXBkYXRlZFRheFJldmlldyk7XG5cbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uVEFYX1JFVklFV19VUERBVEVELCB1cGRhdGVkSW5zdGFuY2UpKTtcblxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogVGF4UmV2aWV3W10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgdXBkYXRlZEluc3RhbmNlKTtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gdGVtcENhY2hlO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcblxuICAgICAgICAgIHJldHVybiB1cGRhdGVkSW5zdGFuY2U7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGNhY2hlIHdoZW4gdXNlciByZWplY3QgZmlybVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5GaXJtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oW0FwcEV2ZW50VHlwZUVudW0uQ0xJRU5UX01PVkVNRU5UX0NMT1NFRCwgQXBwRXZlbnRUeXBlRW51bS5DTElFTlRfSU5WSVRFX0FDQ0VQVEVEXSlcbiAgICAgIC5zdWJzY3JpYmUoKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmNhY2hlID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmaXJtIGZvciBhbGwgdHJhbnNmZXJyZWQgY2xpZW50c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5DbGllbnRUcmFuc2ZlcigpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5DTElFTlRfVFJBTlNGRVJfVE9fT1RIRVJfRU1QTE9ZRUUpXG4gICAgICAuc3Vic2NyaWJlKCh0cmFuc2ZlcnJlZENsaWVudHM6IFVzZXJbXSk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IFRheFJldmlld1tdID0gXy5jbG9uZURlZXAodGhpcy5jYWNoZSk7XG5cbiAgICAgICAgdHJhbnNmZXJyZWRDbGllbnRzLmZvckVhY2goKHRyYW5zZmVycmVkQ2xpZW50OiBVc2VyKTogdm9pZCA9PiB7XG4gICAgICAgICAgY29uc3QgdGF4UmV2aWV3SW5kZXg6IG51bWJlciA9IHRlbXBDYWNoZS5maW5kSW5kZXgoKHRheFJldmlldzogVGF4UmV2aWV3KTogYm9vbGVhbiA9PiB0YXhSZXZpZXcuaWQgPT09IHRyYW5zZmVycmVkQ2xpZW50LmlkKTtcbiAgICAgICAgICAvLyBAVE9ETyB2aWtcbiAgICAgICAgICAvLyB0ZW1wQ2FjaGVbdGF4UmV2aWV3SW5kZXhdLmVtcGxveWVlID0gdHJhbnNmZXJyZWRDbGllbnQuYWNjb3VudGFudDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWNoZSA9IHRlbXBDYWNoZTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,71 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ import { plainToClass } from 'class-transformer';
4
+ import { TaxSummary } from '../../../models/tax-summary/tax-summary';
5
+ import { TaxSummaryTypeEnum } from '../../../models/tax-summary/tax-summary-type.enum';
6
+ import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "../../event/event-dispatcher.service";
10
+ /**
11
+ * Service to work with tax summary logic
12
+ */
13
+ export class TaxSummaryService {
14
+ constructor(http, eventDispatcherService, environment) {
15
+ this.http = http;
16
+ this.eventDispatcherService = eventDispatcherService;
17
+ this.environment = environment;
18
+ this.taxSummaryActualsSubject = new ReplaySubject(1);
19
+ this.taxSummaryForecastsSubject = new ReplaySubject(1);
20
+ this.listenEvents();
21
+ }
22
+ listenEvents() {
23
+ this.listenToIncomeSourceForecastsEvents();
24
+ }
25
+ /**
26
+ * Get actual tax summary items
27
+ */
28
+ getActuals() {
29
+ this.http.get(`${this.environment.apiV2}/tax-summary/${TaxSummaryTypeEnum.ACTUALS}`, {})
30
+ .subscribe((response) => {
31
+ const taxSummary = plainToClass(TaxSummary, response);
32
+ this.taxSummaryActualsSubject.next(taxSummary);
33
+ return taxSummary;
34
+ });
35
+ return this.taxSummaryActualsSubject.asObservable();
36
+ }
37
+ /**
38
+ * Get forecast tax summary items
39
+ */
40
+ getForecast() {
41
+ this.http.get(`${this.environment.apiV2}/tax-summary/${TaxSummaryTypeEnum.FORECASTS}`, {})
42
+ .subscribe((response) => {
43
+ const taxSummary = plainToClass(TaxSummary, response);
44
+ this.taxSummaryForecastsSubject.next(taxSummary);
45
+ return taxSummary;
46
+ });
47
+ return this.taxSummaryForecastsSubject.asObservable();
48
+ }
49
+ /**
50
+ * Listen to EventDispatcherService events related to Income source forecasts
51
+ */
52
+ listenToIncomeSourceForecastsEvents() {
53
+ this.eventDispatcherService
54
+ .on([AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED])
55
+ .subscribe(() => {
56
+ this.getForecast().subscribe();
57
+ });
58
+ }
59
+ }
60
+ TaxSummaryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxSummaryService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ TaxSummaryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxSummaryService, providedIn: 'root' });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TaxSummaryService, decorators: [{
63
+ type: Injectable,
64
+ args: [{
65
+ providedIn: 'root'
66
+ }]
67
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
68
+ type: Inject,
69
+ args: ['environment']
70
+ }] }]; } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LXN1bW1hcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3RheC1zdW1tYXJ5L3RheC1zdW1tYXJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7O0FBRTdFOztHQUVHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QixZQUNVLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUNyQixXQUFnQjtRQUZ6QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFObkQsNkJBQXdCLEdBQThCLElBQUksYUFBYSxDQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLCtCQUEwQixHQUE4QixJQUFJLGFBQWEsQ0FBYSxDQUFDLENBQUMsQ0FBQztRQU92RixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssZ0JBQWdCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUNyRixTQUFTLENBQUMsQ0FBQyxRQUFnQixFQUFjLEVBQUU7WUFDeEMsTUFBTSxVQUFVLEdBQWUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FDRixDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGdCQUFnQixrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDdkYsU0FBUyxDQUFDLENBQUMsUUFBZ0IsRUFBYyxFQUFFO1lBQ3hDLE1BQU0sVUFBVSxHQUFlLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQ0YsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNLLG1DQUFtQztRQUN6QyxJQUFJLENBQUMsc0JBQXNCO2FBQ3hCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxFQUFFLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7YUFDMUcsU0FBUyxDQUFDLEdBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzsrR0FyRFUsaUJBQWlCLGtGQU9sQixhQUFhO21IQVBaLGlCQUFpQixjQUZoQixNQUFNOzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IFRheFN1bW1hcnkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGF4LXN1bW1hcnkvdGF4LXN1bW1hcnknO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYXhTdW1tYXJ5VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGF4LXN1bW1hcnkvdGF4LXN1bW1hcnktdHlwZS5lbnVtJztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5cbi8qKlxuICogU2VydmljZSB0byB3b3JrIHdpdGggdGF4IHN1bW1hcnkgbG9naWNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGF4U3VtbWFyeVNlcnZpY2Uge1xuICB0YXhTdW1tYXJ5QWN0dWFsc1N1YmplY3Q6IFJlcGxheVN1YmplY3Q8VGF4U3VtbWFyeT4gPSBuZXcgUmVwbGF5U3ViamVjdDxUYXhTdW1tYXJ5PigxKTtcbiAgdGF4U3VtbWFyeUZvcmVjYXN0c1N1YmplY3Q6IFJlcGxheVN1YmplY3Q8VGF4U3VtbWFyeT4gPSBuZXcgUmVwbGF5U3ViamVjdDxUYXhTdW1tYXJ5PigxKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblRvSW5jb21lU291cmNlRm9yZWNhc3RzRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFjdHVhbCB0YXggc3VtbWFyeSBpdGVtc1xuICAgKi9cbiAgZ2V0QWN0dWFscygpOiBPYnNlcnZhYmxlPFRheFN1bW1hcnk+IHtcbiAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3RheC1zdW1tYXJ5LyR7VGF4U3VtbWFyeVR5cGVFbnVtLkFDVFVBTFN9YCwge30pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogb2JqZWN0KTogVGF4U3VtbWFyeSA9PiB7XG4gICAgICAgICAgY29uc3QgdGF4U3VtbWFyeTogVGF4U3VtbWFyeSA9IHBsYWluVG9DbGFzcyhUYXhTdW1tYXJ5LCByZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy50YXhTdW1tYXJ5QWN0dWFsc1N1YmplY3QubmV4dCh0YXhTdW1tYXJ5KTtcbiAgICAgICAgICByZXR1cm4gdGF4U3VtbWFyeTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy50YXhTdW1tYXJ5QWN0dWFsc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZvcmVjYXN0IHRheCBzdW1tYXJ5IGl0ZW1zXG4gICAqL1xuICBnZXRGb3JlY2FzdCgpOiBPYnNlcnZhYmxlPFRheFN1bW1hcnk+IHtcbiAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3RheC1zdW1tYXJ5LyR7VGF4U3VtbWFyeVR5cGVFbnVtLkZPUkVDQVNUU31gLCB7fSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBvYmplY3QpOiBUYXhTdW1tYXJ5ID0+IHtcbiAgICAgICAgICBjb25zdCB0YXhTdW1tYXJ5OiBUYXhTdW1tYXJ5ID0gcGxhaW5Ub0NsYXNzKFRheFN1bW1hcnksIHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLnRheFN1bW1hcnlGb3JlY2FzdHNTdWJqZWN0Lm5leHQodGF4U3VtbWFyeSk7XG4gICAgICAgICAgcmV0dXJuIHRheFN1bW1hcnk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMudGF4U3VtbWFyeUZvcmVjYXN0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgZXZlbnRzIHJlbGF0ZWQgdG8gSW5jb21lIHNvdXJjZSBmb3JlY2FzdHNcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9JbmNvbWVTb3VyY2VGb3JlY2FzdHNFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlXG4gICAgICAub24oW0FwcEV2ZW50VHlwZUVudW0uSU5DT01FX1NPVVJDRVNfRk9SRUNBU1RTX0NSRUFURUQsIEFwcEV2ZW50VHlwZUVudW0uSU5DT01FX1NPVVJDRVNfRk9SRUNBU1RTX1VQREFURURdKVxuICAgICAgLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZ2V0Rm9yZWNhc3QoKS5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,85 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { TransactionAllocation } from '../../../../models/transaction/transaction-allocation';
3
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
4
+ import { RestService } from '../../rest/rest.service';
5
+ import { map } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../../../event/event-dispatcher.service";
9
+ // @TODO Don't look at the commented code. Will be refactored/removed during TT-1503
10
+ /**
11
+ * Service for transaction allocations business logic
12
+ * @TODO alex refactor
13
+ */
14
+ export class TransactionAllocationService extends RestService {
15
+ constructor(http, eventDispatcherService, environment) {
16
+ super(http, eventDispatcherService, environment);
17
+ this.http = http;
18
+ this.eventDispatcherService = eventDispatcherService;
19
+ this.environment = environment;
20
+ // API URL param for transaction allocations
21
+ this.url = 'transactions-allocations';
22
+ this.modelClass = TransactionAllocation;
23
+ this.listenEvents();
24
+ }
25
+ /**
26
+ * Add single transaction allocation
27
+ */
28
+ add(allocation) {
29
+ return this.addBatch([allocation]).pipe(map((newAllocations) => newAllocations[0]));
30
+ }
31
+ /**
32
+ * get list of transactions allocations related with passed bank transactions list
33
+ */
34
+ getByTransactions(transactions) {
35
+ const ids = transactions.map((transaction) => transaction.id);
36
+ return this.get()
37
+ .pipe(map((transactionAllocations) => {
38
+ return transactionAllocations.filter((allocation) => ids.includes(allocation.transaction.id));
39
+ }));
40
+ }
41
+ listenEvents() {
42
+ this.onTransactionsCreated();
43
+ this.onDepreciationCreated();
44
+ this.onTransactionDeleted();
45
+ }
46
+ /**
47
+ * Reset cache on transactions created
48
+ */
49
+ onTransactionsCreated() {
50
+ this.eventDispatcherService.on(AppEventTypeEnum.TRANSACTIONS_CREATED).subscribe(() => {
51
+ // Update allocations cache to synchronize data and fire subscriptions
52
+ this.resetCache();
53
+ });
54
+ }
55
+ /**
56
+ * Reset cache on depreciation created
57
+ */
58
+ onDepreciationCreated() {
59
+ this.eventDispatcherService.on(AppEventTypeEnum.DEPRECIATIONS_CREATED).subscribe(() => {
60
+ // Update allocations cache to synchronize data and fire subscriptions
61
+ this.resetCache();
62
+ });
63
+ }
64
+ /**
65
+ * Reset cache on transaction deleted
66
+ */
67
+ onTransactionDeleted() {
68
+ this.eventDispatcherService.on(AppEventTypeEnum.TRANSACTION_DELETED).subscribe(() => {
69
+ // Update allocations cache to synchronize data and fire subscriptions
70
+ this.resetCache();
71
+ });
72
+ }
73
+ }
74
+ TransactionAllocationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TransactionAllocationService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
75
+ TransactionAllocationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TransactionAllocationService, providedIn: 'root' });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TransactionAllocationService, decorators: [{
77
+ type: Injectable,
78
+ args: [{
79
+ providedIn: 'root'
80
+ }]
81
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
82
+ type: Inject,
83
+ args: ['environment']
84
+ }] }]; } });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYWxsb2NhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24tYWxsb2NhdGlvbi90cmFuc2FjdGlvbi1hbGxvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFFOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUVyQyxvRkFBb0Y7QUFFcEY7OztHQUdHO0FBSUgsTUFBTSxPQUFPLDRCQUE2QixTQUFRLFdBQTZEO0lBSzdHLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFKdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBUG5ELDRDQUE0QztRQUM1QyxRQUFHLEdBQVcsMEJBQTBCLENBQUM7UUFDekMsZUFBVSxHQUFHLHFCQUFxQixDQUFDO1FBUWpDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsVUFBaUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxDQUFDLGNBQXVDLEVBQXlCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLFlBQTJCO1FBQzNDLE1BQU0sR0FBRyxHQUFhLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckYsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQ2QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLHNCQUErQyxFQUFFLEVBQUU7WUFDdEQsT0FBTyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFpQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2SCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCO1FBQzNCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBUyxFQUFFO1lBQ3pGLHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFTLEVBQUU7WUFDMUYsc0VBQXNFO1lBQ3RFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQVMsRUFBRTtZQUN4RixzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MEhBdEVVLDRCQUE0QixrRkFRN0IsYUFBYTs4SEFSWiw0QkFBNEIsY0FGM0IsTUFBTTs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkFsbG9jYXRpb24gYXMgVHJhbnNhY3Rpb25BbGxvY2F0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy90cmFuc2FjdGlvbi1hbGxvY2F0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQWxsb2NhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy90cmFuc2FjdGlvbi90cmFuc2FjdGlvbi1hbGxvY2F0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBAVE9ETyBEb24ndCBsb29rIGF0IHRoZSBjb21tZW50ZWQgY29kZS4gV2lsbCBiZSByZWZhY3RvcmVkL3JlbW92ZWQgZHVyaW5nIFRULTE1MDNcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciB0cmFuc2FjdGlvbiBhbGxvY2F0aW9ucyBidXNpbmVzcyBsb2dpY1xuICogQFRPRE8gYWxleCByZWZhY3RvclxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkFsbG9jYXRpb25TZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8VHJhbnNhY3Rpb25BbGxvY2F0aW9uQmFzZSwgVHJhbnNhY3Rpb25BbGxvY2F0aW9uPiB7XG4gIC8vIEFQSSBVUkwgcGFyYW0gZm9yIHRyYW5zYWN0aW9uIGFsbG9jYXRpb25zXG4gIHVybDogc3RyaW5nID0gJ3RyYW5zYWN0aW9ucy1hbGxvY2F0aW9ucyc7XG4gIG1vZGVsQ2xhc3MgPSBUcmFuc2FjdGlvbkFsbG9jYXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICBzdXBlcihodHRwLCBldmVudERpc3BhdGNoZXJTZXJ2aWNlLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2luZ2xlIHRyYW5zYWN0aW9uIGFsbG9jYXRpb25cbiAgICovXG4gIGFkZChhbGxvY2F0aW9uOiBUcmFuc2FjdGlvbkFsbG9jYXRpb24pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uQWxsb2NhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhdGNoKFthbGxvY2F0aW9uXSkucGlwZShcbiAgICAgIG1hcCgobmV3QWxsb2NhdGlvbnM6IFRyYW5zYWN0aW9uQWxsb2NhdGlvbltdKTogVHJhbnNhY3Rpb25BbGxvY2F0aW9uID0+IG5ld0FsbG9jYXRpb25zWzBdKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGFsbG9jYXRpb25zIHJlbGF0ZWQgd2l0aCBwYXNzZWQgYmFuayB0cmFuc2FjdGlvbnMgbGlzdFxuICAgKi9cbiAgZ2V0QnlUcmFuc2FjdGlvbnModHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbkFsbG9jYXRpb25bXT4ge1xuICAgIGNvbnN0IGlkczogbnVtYmVyW10gPSB0cmFuc2FjdGlvbnMubWFwKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLmlkKTtcbiAgICByZXR1cm4gdGhpcy5nZXQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodHJhbnNhY3Rpb25BbGxvY2F0aW9uczogVHJhbnNhY3Rpb25BbGxvY2F0aW9uW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25BbGxvY2F0aW9ucy5maWx0ZXIoKGFsbG9jYXRpb246IFRyYW5zYWN0aW9uQWxsb2NhdGlvbikgPT4gaWRzLmluY2x1ZGVzKGFsbG9jYXRpb24udHJhbnNhY3Rpb24uaWQpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLm9uVHJhbnNhY3Rpb25zQ3JlYXRlZCgpO1xuICAgIHRoaXMub25EZXByZWNpYXRpb25DcmVhdGVkKCk7XG4gICAgdGhpcy5vblRyYW5zYWN0aW9uRGVsZXRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGNhY2hlIG9uIHRyYW5zYWN0aW9ucyBjcmVhdGVkXG4gICAqL1xuICBwcml2YXRlIG9uVHJhbnNhY3Rpb25zQ3JlYXRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5UUkFOU0FDVElPTlNfQ1JFQVRFRCkuc3Vic2NyaWJlKCgpOiB2b2lkID0+IHtcbiAgICAgIC8vIFVwZGF0ZSBhbGxvY2F0aW9ucyBjYWNoZSB0byBzeW5jaHJvbml6ZSBkYXRhIGFuZCBmaXJlIHN1YnNjcmlwdGlvbnNcbiAgICAgIHRoaXMucmVzZXRDYWNoZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGNhY2hlIG9uIGRlcHJlY2lhdGlvbiBjcmVhdGVkXG4gICAqL1xuICBwcml2YXRlIG9uRGVwcmVjaWF0aW9uQ3JlYXRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5ERVBSRUNJQVRJT05TX0NSRUFURUQpLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICAvLyBVcGRhdGUgYWxsb2NhdGlvbnMgY2FjaGUgdG8gc3luY2hyb25pemUgZGF0YSBhbmQgZmlyZSBzdWJzY3JpcHRpb25zXG4gICAgICB0aGlzLnJlc2V0Q2FjaGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBjYWNoZSBvbiB0cmFuc2FjdGlvbiBkZWxldGVkXG4gICAqL1xuICBwcml2YXRlIG9uVHJhbnNhY3Rpb25EZWxldGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlRSQU5TQUNUSU9OX0RFTEVURUQpLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICAvLyBVcGRhdGUgYWxsb2NhdGlvbnMgY2FjaGUgdG8gc3luY2hyb25pemUgZGF0YSBhbmQgZmlyZSBzdWJzY3JpcHRpb25zXG4gICAgICB0aGlzLnJlc2V0Q2FjaGUoKTtcbiAgICB9KTtcbiAgfVxufVxuIl19