taxtank-core 0.8.3 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/taxtank-core.umd.js +145 -140
- package/bundles/taxtank-core.umd.js.map +1 -1
- package/esm2015/lib/collections/collection.js +2 -2
- package/esm2015/lib/collections/depreciation.collection.js +3 -3
- package/esm2015/lib/collections/tax-summary/report-item.collection.js +141 -0
- package/esm2015/lib/db/Models/transaction-base.js +2 -1
- package/esm2015/lib/models/property/property.js +7 -4
- package/esm2015/lib/models/tax-summary/report-item-details.js +9 -0
- package/esm2015/lib/models/tax-summary/report-item.js +15 -0
- package/esm2015/lib/models/tax-summary/tax-summary-section.js +5 -5
- package/esm2015/lib/services/http/address/address.service.js +39 -0
- package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +118 -0
- package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +52 -0
- package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +89 -0
- package/esm2015/lib/services/http/bank/bank.service.js +24 -0
- package/esm2015/lib/services/http/bank/basiq/basiq.service.js +94 -0
- package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +38 -0
- package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +89 -0
- package/esm2015/lib/services/http/chat/chat.service.js +77 -0
- package/esm2015/lib/services/http/chat/message/message.service.js +65 -0
- package/esm2015/lib/services/http/chat/message-document/message-document.service.js +118 -0
- package/esm2015/lib/services/{depreciation/capital-project.service.js → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js} +7 -7
- package/esm2015/lib/services/http/depreciation/depreciation.service.js +146 -0
- package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +84 -0
- package/esm2015/lib/services/{client → http/firm/client-invite}/client-invite.service.js +7 -7
- package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +98 -0
- package/esm2015/lib/services/http/firm/employee/employee.service.js +39 -0
- package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +53 -0
- package/esm2015/lib/services/http/firm/firm.service.js +79 -0
- package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +37 -0
- package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +90 -0
- package/esm2015/lib/services/http/income-source/income-source.service.js +109 -0
- package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +90 -0
- package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +87 -0
- package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +73 -0
- package/esm2015/lib/services/http/loan/loan.service.js +145 -0
- package/esm2015/lib/services/http/property/property-category/property-category.service.js +23 -0
- package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +47 -0
- package/esm2015/lib/services/http/property/property-document/property-document.service.js +70 -0
- package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +20 -0
- package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +21 -0
- package/esm2015/lib/services/http/property/property-share/property-share.service.js +115 -0
- package/esm2015/lib/services/http/property/property.service.js +126 -0
- package/esm2015/lib/services/http/rest/rest.service.js +190 -0
- package/esm2015/lib/services/http/service-notification/service-notification.service.js +65 -0
- package/esm2015/lib/services/http/subscription/subscription.service.js +157 -0
- package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +41 -0
- package/esm2015/lib/services/http/tax-review/tax-review.service.js +103 -0
- package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +71 -0
- package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +85 -0
- package/esm2015/lib/services/http/transaction/transaction.service.js +319 -0
- package/esm2015/lib/services/http/user/occupation/occupation.service.js +45 -0
- package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +59 -0
- package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +29 -0
- package/esm2015/lib/services/http/user/user.service.js +124 -0
- package/esm2015/lib/services/http/vehicle/vehicle.service.js +237 -0
- package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +45 -0
- package/esm2015/public-api.js +51 -51
- package/fesm2015/taxtank-core.js +67 -62
- package/fesm2015/taxtank-core.js.map +1 -1
- package/lib/collections/collection.d.ts +1 -1
- package/lib/collections/{tax-return-category-item.collection.d.ts → tax-summary/report-item.collection.d.ts} +5 -5
- package/lib/models/property/property.d.ts +1 -0
- package/lib/models/tax-summary/{tax-return-category-item-details.d.ts → report-item-details.d.ts} +2 -2
- package/lib/models/tax-summary/{tax-return-category-item.d.ts → report-item.d.ts} +4 -4
- package/lib/models/tax-summary/tax-summary-section.d.ts +2 -2
- package/lib/services/{address → http/address}/address.service.d.ts +1 -1
- package/lib/services/{bank → http/bank/bank-account}/bank-account.service.d.ts +5 -5
- package/lib/services/{bank → http/bank/bank-connection}/bank-connection.service.d.ts +5 -5
- package/lib/services/{bank → http/bank/bank-transaction}/bank-transaction.service.d.ts +5 -5
- package/lib/services/{bank → http/bank}/bank.service.d.ts +4 -4
- package/lib/services/{bank → http/bank/basiq}/basiq.service.d.ts +7 -7
- package/lib/services/{chart-accounts → http/chart-accounts/chart-accounts-depreciations}/chart-accounts-depreciations.service.d.ts +4 -4
- package/lib/services/{chart-accounts → http/chart-accounts}/chart-accounts.service.d.ts +3 -3
- package/lib/services/{chat → http/chat}/chat.service.d.ts +7 -7
- package/lib/services/{chat → http/chat/message}/message.service.d.ts +7 -7
- package/lib/services/{chat → http/chat/message-document}/message-document.service.d.ts +3 -3
- package/lib/services/{depreciation/capital-project.service.d.ts → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.d.ts} +4 -4
- package/lib/services/{depreciation → http/depreciation}/depreciation.service.d.ts +5 -5
- package/lib/services/{document → http/document/document-folder}/document-folder.service.d.ts +6 -6
- package/lib/services/{client → http/firm/client-invite}/client-invite.service.d.ts +4 -4
- package/lib/services/{client → http/firm/client-movement}/client-movement.service.d.ts +7 -7
- package/lib/services/{employee → http/firm/employee}/employee.service.d.ts +4 -4
- package/lib/services/{employee → http/firm/employee-invite}/employee-invite.service.d.ts +4 -4
- package/lib/services/{firm → http/firm}/firm.service.d.ts +2 -2
- package/lib/services/{client → http/firm/portfolio-report}/client-portfolio-report.service.d.ts +1 -1
- package/lib/services/{income-source → http/income-source/income-source-forecast}/income-source-forecast.service.d.ts +5 -5
- package/lib/services/{income-source → http/income-source}/income-source.service.d.ts +8 -8
- package/lib/services/{income-source → http/income-source/salary-forecast}/salary-forecast.service.d.ts +6 -6
- package/lib/services/{income-source → http/income-source/sole-forecast}/sole-forecast.service.d.ts +5 -5
- package/lib/services/{borrowing-expense → http/loan/borrowing-expense}/borrowing-expense.service.d.ts +2 -2
- package/lib/services/{loan → http/loan}/loan.service.d.ts +6 -6
- package/lib/services/{property → http/property}/property-category/property-category.service.d.ts +4 -4
- package/lib/services/{property → http/property/property-category-movement}/property-category-movement.service.d.ts +4 -4
- package/lib/services/{property → http/property}/property-document/property-document.service.d.ts +5 -5
- package/lib/services/http/property/property-sale/property-sale.service.d.ts +10 -0
- package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +11 -0
- package/lib/services/{property → http/property}/property-share/property-share.service.d.ts +5 -5
- package/lib/services/{property → http/property}/property.service.d.ts +5 -5
- package/lib/services/{base-rest.service.d.ts → http/rest/rest.service.d.ts} +4 -4
- package/lib/services/http/service-notification/service-notification.service.d.ts +31 -0
- package/lib/services/{subscription → http/subscription}/subscription.service.d.ts +6 -6
- package/lib/services/{tax-review → http/tax-review/tax-review-history}/tax-review-history.service.d.ts +5 -5
- package/lib/services/{tax-review → http/tax-review}/tax-review.service.d.ts +6 -6
- package/lib/services/{tax-summary → http/tax-summary}/tax-summary.service.d.ts +2 -2
- package/lib/services/{transaction → http/transaction/transaction-allocation}/transaction-allocation.service.d.ts +6 -6
- package/lib/services/{transaction → http/transaction}/transaction.service.d.ts +7 -7
- package/lib/services/{user → http/user/occupation}/occupation.service.d.ts +1 -1
- package/lib/services/{user-event → http/user/user-event-setting}/user-event-setting.service.d.ts +5 -5
- package/lib/services/{user-event → http/user/user-event-type}/user-event-type.service.d.ts +5 -5
- package/lib/services/{user → http/user}/user.service.d.ts +3 -3
- package/lib/services/{work/work-tank.service.d.ts → http/vehicle/vehicle.service.d.ts} +9 -8
- package/lib/services/property/{equity-position-chart.service.d.ts → equity-position-chart/equity-position-chart.service.d.ts} +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +50 -50
- package/esm2015/lib/collections/tax-return-category-item.collection.js +0 -141
- package/esm2015/lib/models/tax-summary/tax-return-category-item-details.js +0 -9
- package/esm2015/lib/models/tax-summary/tax-return-category-item.js +0 -15
- package/esm2015/lib/services/address/address.service.js +0 -39
- package/esm2015/lib/services/bank/bank-account.service.js +0 -118
- package/esm2015/lib/services/bank/bank-connection.service.js +0 -52
- package/esm2015/lib/services/bank/bank-transaction.service.js +0 -89
- package/esm2015/lib/services/bank/bank.service.js +0 -24
- package/esm2015/lib/services/bank/basiq.service.js +0 -94
- package/esm2015/lib/services/base-rest.service.js +0 -190
- package/esm2015/lib/services/borrowing-expense/borrowing-expense.service.js +0 -73
- package/esm2015/lib/services/chart-accounts/chart-accounts-depreciations.service.js +0 -38
- package/esm2015/lib/services/chart-accounts/chart-accounts.service.js +0 -89
- package/esm2015/lib/services/chat/chat.service.js +0 -77
- package/esm2015/lib/services/chat/message-document.service.js +0 -118
- package/esm2015/lib/services/chat/message.service.js +0 -65
- package/esm2015/lib/services/client/client-movement.service.js +0 -98
- package/esm2015/lib/services/client/client-portfolio-report.service.js +0 -37
- package/esm2015/lib/services/depreciation/depreciation.service.js +0 -146
- package/esm2015/lib/services/document/document-folder.service.js +0 -84
- package/esm2015/lib/services/employee/employee-invite.service.js +0 -53
- package/esm2015/lib/services/employee/employee.service.js +0 -39
- package/esm2015/lib/services/firm/firm.service.js +0 -79
- package/esm2015/lib/services/income-source/income-source-forecast.service.js +0 -90
- package/esm2015/lib/services/income-source/income-source.service.js +0 -109
- package/esm2015/lib/services/income-source/salary-forecast.service.js +0 -90
- package/esm2015/lib/services/income-source/sole-forecast.service.js +0 -87
- package/esm2015/lib/services/loan/loan.service.js +0 -145
- package/esm2015/lib/services/notification/notification.service.js +0 -65
- package/esm2015/lib/services/property/equity-position-chart.service.js +0 -45
- package/esm2015/lib/services/property/property-category/property-category.service.js +0 -23
- package/esm2015/lib/services/property/property-category-movement.service.js +0 -47
- package/esm2015/lib/services/property/property-document/property-document.service.js +0 -70
- package/esm2015/lib/services/property/property-sale/property-sale.service.js +0 -20
- package/esm2015/lib/services/property/property-sale/tax-exemption/tax-exemption.service.js +0 -21
- package/esm2015/lib/services/property/property-share/property-share.service.js +0 -115
- package/esm2015/lib/services/property/property.service.js +0 -126
- package/esm2015/lib/services/subscription/subscription.service.js +0 -157
- package/esm2015/lib/services/tax-review/tax-review-history.service.js +0 -41
- package/esm2015/lib/services/tax-review/tax-review.service.js +0 -103
- package/esm2015/lib/services/tax-summary/tax-summary.service.js +0 -71
- package/esm2015/lib/services/transaction/transaction-allocation.service.js +0 -85
- package/esm2015/lib/services/transaction/transaction.service.js +0 -319
- package/esm2015/lib/services/user/occupation.service.js +0 -45
- package/esm2015/lib/services/user/user.service.js +0 -124
- package/esm2015/lib/services/user-event/user-event-setting.service.js +0 -59
- package/esm2015/lib/services/user-event/user-event-type.service.js +0 -29
- package/esm2015/lib/services/work/work-tank.service.js +0 -236
- package/lib/services/notification/notification.service.d.ts +0 -31
- package/lib/services/property/property-sale/property-sale.service.d.ts +0 -10
- package/lib/services/property/property-sale/tax-exemption/tax-exemption.service.d.ts +0 -11
|
@@ -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=
|
|
@@ -0,0 +1,87 @@
|
|
|
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 { SoleForecast } from '../../../../models/income-source/sole-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
|
+
export class SoleForecastService 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.modelClass = SoleForecast;
|
|
19
|
+
this.url = 'sole-forecasts';
|
|
20
|
+
this.listenEvents();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Listen to Income Sources events
|
|
24
|
+
*/
|
|
25
|
+
listenEvents() {
|
|
26
|
+
this.listenToAddedIncomeSources();
|
|
27
|
+
this.listenToUpdatedIncomeSources();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Listen to EventDispatcherService event related to added Income Sources
|
|
31
|
+
*/
|
|
32
|
+
listenToAddedIncomeSources() {
|
|
33
|
+
this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_CREATED)
|
|
34
|
+
.pipe(map((incomeSources) => incomeSources
|
|
35
|
+
.filter((incomeSource) => incomeSource.isSoleIncome())))
|
|
36
|
+
.subscribe((incomeSources) => {
|
|
37
|
+
const soleForecasts = this.assignSoleForecasts(incomeSources);
|
|
38
|
+
if (soleForecasts.length) {
|
|
39
|
+
this.addBatch(soleForecasts).subscribe((createdSoleForecasts) => {
|
|
40
|
+
this.eventDispatcherService
|
|
41
|
+
.dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_CREATED, createdSoleForecasts));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Listen to EventDispatcherService event related to updated Income Sources
|
|
48
|
+
*/
|
|
49
|
+
listenToUpdatedIncomeSources() {
|
|
50
|
+
this.eventDispatcherService.on(AppEventTypeEnum.INCOME_SOURCES_UPDATED)
|
|
51
|
+
.subscribe((incomeSources) => {
|
|
52
|
+
const soleForecasts = this.assignSoleForecasts(incomeSources);
|
|
53
|
+
if (soleForecasts.length) {
|
|
54
|
+
this.updateBatch(soleForecasts).subscribe((updatedSoleForecasts) => {
|
|
55
|
+
this.eventDispatcherService
|
|
56
|
+
.dispatch(new AppEvent(AppEventTypeEnum.INCOME_SOURCES_FORECASTS_UPDATED, updatedSoleForecasts));
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Assign sole forecasts based on provided income sources
|
|
63
|
+
* @param incomeSources by which sole forecasts will be assigned
|
|
64
|
+
*/
|
|
65
|
+
assignSoleForecasts(incomeSources) {
|
|
66
|
+
return incomeSources.map((incomeSource) => {
|
|
67
|
+
incomeSource.soleForecasts = incomeSource.soleForecasts
|
|
68
|
+
.map((soleForecast) => {
|
|
69
|
+
soleForecast.incomeSource = plainToClass(IncomeSource, { id: incomeSource.id });
|
|
70
|
+
return soleForecast;
|
|
71
|
+
});
|
|
72
|
+
return incomeSource.soleForecasts;
|
|
73
|
+
}).flat();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
SoleForecastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleForecastService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
77
|
+
SoleForecastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleForecastService, providedIn: 'root' });
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SoleForecastService, decorators: [{
|
|
79
|
+
type: Injectable,
|
|
80
|
+
args: [{
|
|
81
|
+
providedIn: 'root'
|
|
82
|
+
}]
|
|
83
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
|
|
84
|
+
type: Inject,
|
|
85
|
+
args: ['environment']
|
|
86
|
+
}] }]; } });
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sZS1mb3JlY2FzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvaW5jb21lLXNvdXJjZS9zb2xlLWZvcmVjYXN0L3NvbGUtZm9yZWNhc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQUs5RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBMkM7SUFJbEYsWUFDWSxJQUFnQixFQUNoQixzQkFBOEMsRUFDdkIsV0FBZ0I7UUFFakQsS0FBSyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUp2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFObkQsZUFBVSxHQUF3QixZQUFZLENBQUM7UUFDL0MsUUFBRyxHQUFXLGdCQUFnQixDQUFDO1FBUTdCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7YUFDcEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGFBQTZCLEVBQUUsRUFBRSxDQUFDLGFBQWE7YUFDakQsTUFBTSxDQUFDLENBQUMsWUFBMEIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FDeEU7YUFDQSxTQUFTLENBQUMsQ0FBQyxhQUE2QixFQUFFLEVBQUU7WUFFM0MsTUFBTSxhQUFhLEdBQW1CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsb0JBQW9DLEVBQUUsRUFBRTtvQkFDOUUsSUFBSSxDQUFDLHNCQUFzQjt5QkFDeEIsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztnQkFDckcsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssNEJBQTRCO1FBQ2xDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7YUFDcEUsU0FBUyxDQUFDLENBQUMsYUFBNkIsRUFBRSxFQUFFO1lBQzNDLE1BQU0sYUFBYSxHQUFtQixJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUUsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO2dCQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLG9CQUFvQyxFQUFFLEVBQUU7b0JBQ2pGLElBQUksQ0FBQyxzQkFBc0I7eUJBQ3hCLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JHLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUIsQ0FBQyxhQUE2QjtRQUN2RCxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUEwQixFQUFFLEVBQUU7WUFDdEQsWUFBWSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYTtpQkFDcEQsR0FBRyxDQUFDLENBQUMsWUFBMEIsRUFBRSxFQUFFO2dCQUNsQyxZQUFZLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7Z0JBQzlFLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsT0FBTyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ1osQ0FBQzs7aUhBdkVVLG1CQUFtQixrRkFPcEIsYUFBYTtxSEFQWixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTb2xlRm9yZWNhc3QgYXMgU29sZUZvcmVjYXN0QmFzZX0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvTW9kZWxzL3NvbGUtZm9yZWNhc3QnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTb2xlRm9yZWNhc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvaW5jb21lLXNvdXJjZS9zb2xlLWZvcmVjYXN0JztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwRXZlbnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IEluY29tZVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9pbmNvbWUtc291cmNlL2luY29tZS1zb3VyY2UnO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU29sZUZvcmVjYXN0U2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFNvbGVGb3JlY2FzdEJhc2UsIFNvbGVGb3JlY2FzdD4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgU29sZUZvcmVjYXN0ID0gU29sZUZvcmVjYXN0O1xuICB1cmw6IHN0cmluZyA9ICdzb2xlLWZvcmVjYXN0cyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICBzdXBlcihodHRwLCBldmVudERpc3BhdGNoZXJTZXJ2aWNlLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gSW5jb21lIFNvdXJjZXMgZXZlbnRzXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Ub0FkZGVkSW5jb21lU291cmNlcygpO1xuICAgIHRoaXMubGlzdGVuVG9VcGRhdGVkSW5jb21lU291cmNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gYWRkZWQgSW5jb21lIFNvdXJjZXNcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9BZGRlZEluY29tZVNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uSU5DT01FX1NPVVJDRVNfQ1JFQVRFRClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGluY29tZVNvdXJjZXM6IEluY29tZVNvdXJjZVtdKSA9PiBpbmNvbWVTb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoaW5jb21lU291cmNlOiBJbmNvbWVTb3VyY2UpID0+IGluY29tZVNvdXJjZS5pc1NvbGVJbmNvbWUoKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpbmNvbWVTb3VyY2VzOiBJbmNvbWVTb3VyY2VbXSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHNvbGVGb3JlY2FzdHM6IFNvbGVGb3JlY2FzdFtdID0gdGhpcy5hc3NpZ25Tb2xlRm9yZWNhc3RzKGluY29tZVNvdXJjZXMpO1xuICAgICAgICBpZiAoc29sZUZvcmVjYXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmFkZEJhdGNoKHNvbGVGb3JlY2FzdHMpLnN1YnNjcmliZSgoY3JlYXRlZFNvbGVGb3JlY2FzdHM6IFNvbGVGb3JlY2FzdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2VcbiAgICAgICAgICAgICAgLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLklOQ09NRV9TT1VSQ0VTX0ZPUkVDQVNUU19DUkVBVEVELCBjcmVhdGVkU29sZUZvcmVjYXN0cykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRXZlbnREaXNwYXRjaGVyU2VydmljZSBldmVudCByZWxhdGVkIHRvIHVwZGF0ZWQgSW5jb21lIFNvdXJjZXNcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9VcGRhdGVkSW5jb21lU291cmNlcygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5JTkNPTUVfU09VUkNFU19VUERBVEVEKVxuICAgICAgLnN1YnNjcmliZSgoaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10pID0+IHtcbiAgICAgICAgY29uc3Qgc29sZUZvcmVjYXN0czogU29sZUZvcmVjYXN0W10gPSB0aGlzLmFzc2lnblNvbGVGb3JlY2FzdHMoaW5jb21lU291cmNlcyk7XG4gICAgICAgIGlmIChzb2xlRm9yZWNhc3RzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQmF0Y2goc29sZUZvcmVjYXN0cykuc3Vic2NyaWJlKCh1cGRhdGVkU29sZUZvcmVjYXN0czogU29sZUZvcmVjYXN0W10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZVxuICAgICAgICAgICAgICAuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uSU5DT01FX1NPVVJDRVNfRk9SRUNBU1RTX1VQREFURUQsIHVwZGF0ZWRTb2xlRm9yZWNhc3RzKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBzb2xlIGZvcmVjYXN0cyBiYXNlZCBvbiBwcm92aWRlZCBpbmNvbWUgc291cmNlc1xuICAgKiBAcGFyYW0gaW5jb21lU291cmNlcyBieSB3aGljaCBzb2xlIGZvcmVjYXN0cyB3aWxsIGJlIGFzc2lnbmVkXG4gICAqL1xuICBwcml2YXRlIGFzc2lnblNvbGVGb3JlY2FzdHMoaW5jb21lU291cmNlczogSW5jb21lU291cmNlW10pOiBTb2xlRm9yZWNhc3RbXSB7XG4gICAgcmV0dXJuIGluY29tZVNvdXJjZXMubWFwKChpbmNvbWVTb3VyY2U6IEluY29tZVNvdXJjZSkgPT4ge1xuICAgICAgaW5jb21lU291cmNlLnNvbGVGb3JlY2FzdHMgPSBpbmNvbWVTb3VyY2Uuc29sZUZvcmVjYXN0c1xuICAgICAgICAubWFwKChzb2xlRm9yZWNhc3Q6IFNvbGVGb3JlY2FzdCkgPT4ge1xuICAgICAgICAgIHNvbGVGb3JlY2FzdC5pbmNvbWVTb3VyY2UgPSBwbGFpblRvQ2xhc3MoSW5jb21lU291cmNlLCB7aWQ6IGluY29tZVNvdXJjZS5pZH0pO1xuICAgICAgICAgIHJldHVybiBzb2xlRm9yZWNhc3Q7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGluY29tZVNvdXJjZS5zb2xlRm9yZWNhc3RzO1xuICAgIH0pLmZsYXQoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,73 @@
|
|
|
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 { BorrowingExpense } from '../../../../models/borrowing-expense/borrowing-expense';
|
|
6
|
+
import { BorrowingExpenseLoan } from '../../../../models/borrowing-expense/borrowing-expense-loan';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common/http";
|
|
9
|
+
export class BorrowingExpenseService {
|
|
10
|
+
constructor(http, environment) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
this.environment = environment;
|
|
13
|
+
this.borrowingExpensesSubject = new ReplaySubject(1);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get borrowing expenses
|
|
17
|
+
*/
|
|
18
|
+
get() {
|
|
19
|
+
if (!this._borrowingExpenses) {
|
|
20
|
+
this.http.get(`${this.environment.apiV2}/borrowing-expenses`)
|
|
21
|
+
.pipe(map((response) => {
|
|
22
|
+
return response.map((item) => plainToClass(BorrowingExpense, item));
|
|
23
|
+
}))
|
|
24
|
+
.subscribe((borrowingExpenses) => {
|
|
25
|
+
this._borrowingExpenses = borrowingExpenses;
|
|
26
|
+
this.borrowingExpensesSubject.next(this._borrowingExpenses);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return this.borrowingExpensesSubject.asObservable();
|
|
30
|
+
}
|
|
31
|
+
getLoanBorrowingExpenses(loan) {
|
|
32
|
+
return this.get()
|
|
33
|
+
.pipe(map((borrowingExpenses) => {
|
|
34
|
+
// Loan borrowing expenses array
|
|
35
|
+
const borrowingExpensesLoan = [];
|
|
36
|
+
// Combined array of borrowing expenses list & loan borrowing expenses
|
|
37
|
+
const combinedBorrowingExpenses = [];
|
|
38
|
+
borrowingExpenses.forEach((borrowingExpense, index) => {
|
|
39
|
+
// Fill borrowingExpensesLoan with values based on borrowingExpenses list
|
|
40
|
+
borrowingExpensesLoan.push(plainToClass(BorrowingExpenseLoan, {
|
|
41
|
+
borrowingExpense: borrowingExpense,
|
|
42
|
+
loan: loan,
|
|
43
|
+
amount: 0,
|
|
44
|
+
id: null,
|
|
45
|
+
createdAt: null,
|
|
46
|
+
updatedAt: null,
|
|
47
|
+
createdBy: null,
|
|
48
|
+
updatedBy: null
|
|
49
|
+
}));
|
|
50
|
+
combinedBorrowingExpenses
|
|
51
|
+
.push(Object.assign(plainToClass(BorrowingExpenseLoan, {}), borrowingExpenses[index], borrowingExpensesLoan[index]));
|
|
52
|
+
// Find current loan borrowing expense in loan object by index
|
|
53
|
+
const targetBorrowingExpense = loan.borrowingExpenses.find((updBorrowingExpensesLoan) => updBorrowingExpensesLoan.borrowingExpense.id === borrowingExpensesLoan[index].borrowingExpense.id);
|
|
54
|
+
// ... and set its value to current loan borrowing expense in combinedBorrowingExpenses array
|
|
55
|
+
combinedBorrowingExpenses[index].amount = targetBorrowingExpense ? targetBorrowingExpense.amount : 0;
|
|
56
|
+
return combinedBorrowingExpenses;
|
|
57
|
+
});
|
|
58
|
+
return combinedBorrowingExpenses;
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
BorrowingExpenseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BorrowingExpenseService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
63
|
+
BorrowingExpenseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BorrowingExpenseService, providedIn: 'root' });
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BorrowingExpenseService, decorators: [{
|
|
65
|
+
type: Injectable,
|
|
66
|
+
args: [{
|
|
67
|
+
providedIn: 'root'
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
70
|
+
type: Inject,
|
|
71
|
+
args: ['environment']
|
|
72
|
+
}] }]; } });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93aW5nLWV4cGVuc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2xvYW4vYm9ycm93aW5nLWV4cGVuc2UvYm9ycm93aW5nLWV4cGVuc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkRBQTZELENBQUM7OztBQUtuRyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQ1UsSUFBZ0IsRUFDUyxXQUFnQjtRQUR6QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ1MsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFKbkQsNkJBQXdCLEdBQXNDLElBQUksYUFBYSxDQUFxQixDQUFDLENBQUMsQ0FBQztJQUtuRyxDQUFDO0lBRUw7O09BRUc7SUFDSCxHQUFHO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxxQkFBcUIsQ0FBQztpQkFDMUQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNwQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzNFLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLGlCQUFxQyxFQUFFLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQVc7UUFDbEMsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQ2QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGlCQUFxQyxFQUFFLEVBQUU7WUFDNUMsZ0NBQWdDO1lBQ2hDLE1BQU0scUJBQXFCLEdBQTJCLEVBQUUsQ0FBQztZQUN6RCxzRUFBc0U7WUFDdEUsTUFBTSx5QkFBeUIsR0FBMkIsRUFBRSxDQUFDO1lBRzdELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFrQyxFQUFFLEtBQWEsRUFBRSxFQUFFO2dCQUM5RSx5RUFBeUU7Z0JBQ3pFLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUU7b0JBQzVELGdCQUFnQixFQUFFLGdCQUFnQjtvQkFDbEMsSUFBSSxFQUFFLElBQUk7b0JBQ1YsTUFBTSxFQUFFLENBQUM7b0JBQ1QsRUFBRSxFQUFFLElBQUk7b0JBQ1IsU0FBUyxFQUFFLElBQUk7b0JBQ2YsU0FBUyxFQUFFLElBQUk7b0JBQ2YsU0FBUyxFQUFFLElBQUk7b0JBQ2YsU0FBUyxFQUFFLElBQUk7aUJBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUVKLHlCQUF5QjtxQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLEVBQTBCLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRS9JLDhEQUE4RDtnQkFDOUQsTUFBTSxzQkFBc0IsR0FBUSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsd0JBQThDLEVBQUUsRUFBRSxDQUNqSCx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUsscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRXJHLDZGQUE2RjtnQkFDN0YseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFckcsT0FBTyx5QkFBeUIsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8seUJBQXlCLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7O3FIQXBFVSx1QkFBdUIsNENBTXhCLGFBQWE7eUhBTlosdUJBQXVCLGNBRnRCLE1BQU07NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBT0ksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgQm9ycm93aW5nRXhwZW5zZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ib3Jyb3dpbmctZXhwZW5zZS9ib3Jyb3dpbmctZXhwZW5zZSc7XG5pbXBvcnQgeyBMb2FuIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2xvYW4vbG9hbic7XG5pbXBvcnQgeyBCb3Jyb3dpbmdFeHBlbnNlTG9hbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ib3Jyb3dpbmctZXhwZW5zZS9ib3Jyb3dpbmctZXhwZW5zZS1sb2FuJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9ycm93aW5nRXhwZW5zZVNlcnZpY2Uge1xuICBfYm9ycm93aW5nRXhwZW5zZXM6IEJvcnJvd2luZ0V4cGVuc2VbXTtcbiAgYm9ycm93aW5nRXhwZW5zZXNTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PEJvcnJvd2luZ0V4cGVuc2VbXT4gPSBuZXcgUmVwbGF5U3ViamVjdDxCb3Jyb3dpbmdFeHBlbnNlW10+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55XG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIEdldCBib3Jyb3dpbmcgZXhwZW5zZXNcbiAgICovXG4gIGdldCgpOiBPYnNlcnZhYmxlPEJvcnJvd2luZ0V4cGVuc2VbXT4ge1xuICAgIGlmICghdGhpcy5fYm9ycm93aW5nRXhwZW5zZXMpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vYm9ycm93aW5nLWV4cGVuc2VzYClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UubWFwKChpdGVtOiBhbnkpID0+IHBsYWluVG9DbGFzcyhCb3Jyb3dpbmdFeHBlbnNlLCBpdGVtKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChib3Jyb3dpbmdFeHBlbnNlczogQm9ycm93aW5nRXhwZW5zZVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYm9ycm93aW5nRXhwZW5zZXMgPSBib3Jyb3dpbmdFeHBlbnNlcztcbiAgICAgICAgICB0aGlzLmJvcnJvd2luZ0V4cGVuc2VzU3ViamVjdC5uZXh0KHRoaXMuX2JvcnJvd2luZ0V4cGVuc2VzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYm9ycm93aW5nRXhwZW5zZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0TG9hbkJvcnJvd2luZ0V4cGVuc2VzKGxvYW4/OiBMb2FuKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoYm9ycm93aW5nRXhwZW5zZXM6IEJvcnJvd2luZ0V4cGVuc2VbXSkgPT4ge1xuICAgICAgICAgIC8vIExvYW4gYm9ycm93aW5nIGV4cGVuc2VzIGFycmF5XG4gICAgICAgICAgY29uc3QgYm9ycm93aW5nRXhwZW5zZXNMb2FuOiBCb3Jyb3dpbmdFeHBlbnNlTG9hbltdID0gW107XG4gICAgICAgICAgLy8gQ29tYmluZWQgYXJyYXkgb2YgYm9ycm93aW5nIGV4cGVuc2VzIGxpc3QgJiBsb2FuIGJvcnJvd2luZyBleHBlbnNlc1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkQm9ycm93aW5nRXhwZW5zZXM6IEJvcnJvd2luZ0V4cGVuc2VMb2FuW10gPSBbXTtcblxuXG4gICAgICAgICAgYm9ycm93aW5nRXhwZW5zZXMuZm9yRWFjaCgoYm9ycm93aW5nRXhwZW5zZTogQm9ycm93aW5nRXhwZW5zZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgLy8gRmlsbCBib3Jyb3dpbmdFeHBlbnNlc0xvYW4gd2l0aCB2YWx1ZXMgYmFzZWQgb24gYm9ycm93aW5nRXhwZW5zZXMgbGlzdFxuICAgICAgICAgICAgYm9ycm93aW5nRXhwZW5zZXNMb2FuLnB1c2gocGxhaW5Ub0NsYXNzKEJvcnJvd2luZ0V4cGVuc2VMb2FuLCB7XG4gICAgICAgICAgICAgIGJvcnJvd2luZ0V4cGVuc2U6IGJvcnJvd2luZ0V4cGVuc2UsXG4gICAgICAgICAgICAgIGxvYW46IGxvYW4sXG4gICAgICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICAgIGNyZWF0ZWRBdDogbnVsbCxcbiAgICAgICAgICAgICAgdXBkYXRlZEF0OiBudWxsLFxuICAgICAgICAgICAgICBjcmVhdGVkQnk6IG51bGwsXG4gICAgICAgICAgICAgIHVwZGF0ZWRCeTogbnVsbFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBjb21iaW5lZEJvcnJvd2luZ0V4cGVuc2VzXG4gICAgICAgICAgICAgIC5wdXNoKE9iamVjdC5hc3NpZ24ocGxhaW5Ub0NsYXNzKEJvcnJvd2luZ0V4cGVuc2VMb2FuLCB7fSBhcyBCb3Jyb3dpbmdFeHBlbnNlTG9hbiksIGJvcnJvd2luZ0V4cGVuc2VzW2luZGV4XSwgYm9ycm93aW5nRXhwZW5zZXNMb2FuW2luZGV4XSkpO1xuXG4gICAgICAgICAgICAvLyBGaW5kIGN1cnJlbnQgbG9hbiBib3Jyb3dpbmcgZXhwZW5zZSBpbiBsb2FuIG9iamVjdCBieSBpbmRleFxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Qm9ycm93aW5nRXhwZW5zZTogYW55ID0gbG9hbi5ib3Jyb3dpbmdFeHBlbnNlcy5maW5kKCh1cGRCb3Jyb3dpbmdFeHBlbnNlc0xvYW46IEJvcnJvd2luZ0V4cGVuc2VMb2FuKSA9PlxuICAgICAgICAgICAgICB1cGRCb3Jyb3dpbmdFeHBlbnNlc0xvYW4uYm9ycm93aW5nRXhwZW5zZS5pZCA9PT0gYm9ycm93aW5nRXhwZW5zZXNMb2FuW2luZGV4XS5ib3Jyb3dpbmdFeHBlbnNlLmlkKTtcblxuICAgICAgICAgICAgLy8gLi4uIGFuZCBzZXQgaXRzIHZhbHVlIHRvIGN1cnJlbnQgbG9hbiBib3Jyb3dpbmcgZXhwZW5zZSBpbiBjb21iaW5lZEJvcnJvd2luZ0V4cGVuc2VzIGFycmF5XG4gICAgICAgICAgICBjb21iaW5lZEJvcnJvd2luZ0V4cGVuc2VzW2luZGV4XS5hbW91bnQgPSB0YXJnZXRCb3Jyb3dpbmdFeHBlbnNlID8gdGFyZ2V0Qm9ycm93aW5nRXhwZW5zZS5hbW91bnQgOiAwO1xuXG4gICAgICAgICAgICByZXR1cm4gY29tYmluZWRCb3Jyb3dpbmdFeHBlbnNlcztcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBjb21iaW5lZEJvcnJvd2luZ0V4cGVuc2VzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
|