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,124 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ReplaySubject } from 'rxjs';
|
|
3
|
+
import { User } from '../../../models/user/user';
|
|
4
|
+
import { AppEvent } from '../../../models/event/app-event';
|
|
5
|
+
import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
|
|
6
|
+
import { map } from 'rxjs/operators';
|
|
7
|
+
import { plainToClass } from 'class-transformer';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common/http";
|
|
10
|
+
import * as i2 from "../../auth/jwt.service";
|
|
11
|
+
import * as i3 from "../../event/event-dispatcher.service";
|
|
12
|
+
/**
|
|
13
|
+
* Service to work with user
|
|
14
|
+
*/
|
|
15
|
+
export class UserService {
|
|
16
|
+
constructor(http, jwtService, eventDispatcherService, environment) {
|
|
17
|
+
this.http = http;
|
|
18
|
+
this.jwtService = jwtService;
|
|
19
|
+
this.eventDispatcherService = eventDispatcherService;
|
|
20
|
+
this.environment = environment;
|
|
21
|
+
this.cacheSubject = new ReplaySubject(1);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get current user
|
|
25
|
+
*/
|
|
26
|
+
get() {
|
|
27
|
+
if (!this.cache) {
|
|
28
|
+
this.http.get(`${this.environment.apiV2}/users/current`)
|
|
29
|
+
.pipe(map((userBase) => {
|
|
30
|
+
return plainToClass(User, userBase);
|
|
31
|
+
}))
|
|
32
|
+
.subscribe((user) => {
|
|
33
|
+
localStorage.setItem('userId', user.id.toString());
|
|
34
|
+
// @TODO remove
|
|
35
|
+
localStorage.setItem('financialYear', user.financialYear.toString());
|
|
36
|
+
this.cache = user;
|
|
37
|
+
this.cacheSubject.next(this.cache);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return this.cacheSubject.asObservable();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Register new user
|
|
44
|
+
*/
|
|
45
|
+
register(data) {
|
|
46
|
+
return this.http.post(`${this.environment.apiV2}/users/registration`, data);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Update user
|
|
50
|
+
*/
|
|
51
|
+
update(user) {
|
|
52
|
+
return this.http.put(`${this.environment.apiV2}/users/${user.id}`, user)
|
|
53
|
+
.pipe(map((userBase) => {
|
|
54
|
+
this.cache = plainToClass(User, userBase);
|
|
55
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.USER_UPDATED, null));
|
|
56
|
+
this.cacheSubject.next(this.cache);
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Change user password
|
|
61
|
+
*/
|
|
62
|
+
changePassword(currentPassword, newPassword) {
|
|
63
|
+
return this.http.put(`${this.environment.apiV2}/users/current/password`, { currentPassword, newPassword });
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Reset user password
|
|
67
|
+
*/
|
|
68
|
+
resetPassword(email) {
|
|
69
|
+
return this.http.put(`${this.environment.apiV2}/users/reset-password`, { email });
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Confirm registered user
|
|
73
|
+
*/
|
|
74
|
+
confirm(verificationCode) {
|
|
75
|
+
return this.http.post(`${this.environment.apiV2}/users/confirmation`, { verificationCode });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Search existing user
|
|
79
|
+
*/
|
|
80
|
+
search(email) {
|
|
81
|
+
return this.http.get(`${this.environment.apiV2}/users/search?email=${email}`)
|
|
82
|
+
.pipe(map((userBase) => {
|
|
83
|
+
return plainToClass(User, userBase);
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Finish onboarding process
|
|
88
|
+
*/
|
|
89
|
+
finishOnboarding(user) {
|
|
90
|
+
return this.http.put(`${this.environment.apiV2}/users/status`, user)
|
|
91
|
+
.pipe(map(() => {
|
|
92
|
+
this.cache = user;
|
|
93
|
+
this.cacheSubject.next(this.cache);
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Update user photo
|
|
98
|
+
*/
|
|
99
|
+
updatePhoto(photo) {
|
|
100
|
+
return this.http.post(`${this.environment.apiV2}/users/photo?_method=PUT`, photo)
|
|
101
|
+
.pipe(map((photoUrl) => {
|
|
102
|
+
this.cache = plainToClass(User, Object.assign(this.cache, { photo: photoUrl }));
|
|
103
|
+
this.cacheSubject.next(this.cache);
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Run forecast update script on backend when user switched financial year
|
|
108
|
+
*/
|
|
109
|
+
switchFinancialYear() {
|
|
110
|
+
return this.http.get(`${this.environment.apiV2}/financial-year/switch`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserService, deps: [{ token: i1.HttpClient }, { token: i2.JwtService }, { token: i3.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
114
|
+
UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserService, providedIn: 'root' });
|
|
115
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserService, decorators: [{
|
|
116
|
+
type: Injectable,
|
|
117
|
+
args: [{
|
|
118
|
+
providedIn: 'root'
|
|
119
|
+
}]
|
|
120
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.JwtService }, { type: i3.EventDispatcherService }, { type: undefined, decorators: [{
|
|
121
|
+
type: Inject,
|
|
122
|
+
args: ['environment']
|
|
123
|
+
}] }]; } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvdXNlci91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBRWpEOztHQUVHO0FBSUgsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFDVSxJQUFnQixFQUNoQixVQUFzQixFQUN0QixzQkFBOEMsRUFDdkIsV0FBZ0I7UUFIdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFOakQsaUJBQVksR0FBd0IsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7SUFRL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssZ0JBQWdCLENBQUM7aUJBQ3JELElBQUksQ0FDSCxHQUFHLENBQUMs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QU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXIgYXMgVXNlckJhc2UgfSBmcm9tICcuLi8uLi8uLi9kYi9Nb2RlbHMvdXNlcic7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3VzZXIvdXNlcic7XG5pbXBvcnQgeyBBcHBFdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQnO1xuaW1wb3J0IHsgQXBwRXZlbnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSnd0U2VydmljZSB9IGZyb20gJy4uLy4uL2F1dGgvand0LnNlcnZpY2UnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gd29yayB3aXRoIHVzZXJcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xuICBjYWNoZTogVXNlcjtcbiAgY2FjaGVTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFVzZXI+ID0gbmV3IFJlcGxheVN1YmplY3Q8VXNlcj4oMSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgand0U2VydmljZTogSnd0U2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlclxuICAgKi9cbiAgZ2V0KCk6IE9ic2VydmFibGU8VXNlcj4ge1xuICAgIGlmICghdGhpcy5jYWNoZSkge1xuICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS91c2Vycy9jdXJyZW50YClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh1c2VyQmFzZTogVXNlckJhc2UpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3MoVXNlciwgdXNlckJhc2UpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHVzZXI6IFVzZXIpID0+IHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlcklkJywgdXNlci5pZC50b1N0cmluZygpKTtcbiAgICAgICAgICAvLyBAVE9ETyByZW1vdmVcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZmluYW5jaWFsWWVhcicsIHVzZXIuZmluYW5jaWFsWWVhci50b1N0cmluZygpKTtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gdXNlcjtcbiAgICAgICAgICB0aGlzLmNhY2hlU3ViamVjdC5uZXh0KHRoaXMuY2FjaGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgbmV3IHVzZXJcbiAgICovXG4gIHJlZ2lzdGVyKGRhdGE6IG9iamVjdCk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3VzZXJzL3JlZ2lzdHJhdGlvbmAsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyXG4gICAqL1xuICB1cGRhdGUodXNlcjogVXNlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3VzZXJzLyR7dXNlci5pZH1gLCB1c2VyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXNlckJhc2U6IFVzZXJCYXNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHBsYWluVG9DbGFzcyhVc2VyLCB1c2VyQmFzZSk7XG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLlVTRVJfVVBEQVRFRCwgbnVsbCkpO1xuICAgICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB1c2VyIHBhc3N3b3JkXG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZChjdXJyZW50UGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdXNlcnMvY3VycmVudC9wYXNzd29yZGAsIHtjdXJyZW50UGFzc3dvcmQsIG5ld1Bhc3N3b3JkfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdXNlciBwYXNzd29yZFxuICAgKi9cbiAgcmVzZXRQYXNzd29yZChlbWFpbDogc3RyaW5nKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS91c2Vycy9yZXNldC1wYXNzd29yZGAsIHtlbWFpbH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm0gcmVnaXN0ZXJlZCB1c2VyXG4gICAqL1xuICBjb25maXJtKHZlcmlmaWNhdGlvbkNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3VzZXJzL2NvbmZpcm1hdGlvbmAsIHt2ZXJpZmljYXRpb25Db2RlfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGV4aXN0aW5nIHVzZXJcbiAgICovXG4gIHNlYXJjaChlbWFpbDogc3RyaW5nKTogT2JzZXJ2YWJsZTxVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdXNlcnMvc2VhcmNoP2VtYWlsPSR7ZW1haWx9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHVzZXJCYXNlOiBVc2VyQmFzZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3MoVXNlciwgdXNlckJhc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5pc2ggb25ib2FyZGluZyBwcm9jZXNzXG4gICAqL1xuICBmaW5pc2hPbmJvYXJkaW5nKHVzZXI6IFVzZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS91c2Vycy9zdGF0dXNgLCB1c2VyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHVzZXI7XG4gICAgICAgICAgdGhpcy5jYWNoZVN1YmplY3QubmV4dCh0aGlzLmNhY2hlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHVzZXIgcGhvdG9cbiAgICovXG4gIHVwZGF0ZVBob3RvKHBob3RvOiBGb3JtRGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS91c2Vycy9waG90bz9fbWV0aG9kPVBVVGAsIHBob3RvKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocGhvdG9Vcmw6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSBwbGFpblRvQ2xhc3MoVXNlciwgT2JqZWN0LmFzc2lnbih0aGlzLmNhY2hlLCB7cGhvdG86IHBob3RvVXJsfSkpO1xuICAgICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBmb3JlY2FzdCB1cGRhdGUgc2NyaXB0IG9uIGJhY2tlbmQgd2hlbiB1c2VyIHN3aXRjaGVkIGZpbmFuY2lhbCB5ZWFyXG4gICAqL1xuICBzd2l0Y2hGaW5hbmNpYWxZZWFyKCk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vZmluYW5jaWFsLXllYXIvc3dpdGNoYCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { combineLatest, ReplaySubject } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import { ChartAccountsHeadingVehicleListEnum } from '../../../db/Enums/chart-accounts-heading-vehicle-list.enum';
|
|
5
|
+
import { ChartAccountsListEnum } from '../../../db/Enums/chart-accounts-list.enum';
|
|
6
|
+
import { plainToClass } from 'class-transformer';
|
|
7
|
+
import { enumToList } from '../../../functions/enum-to-list';
|
|
8
|
+
import { Vehicle } from '../../../models/logbook/vehicle';
|
|
9
|
+
import { VehicleClaim } from '../../../models/logbook/vehicle-claim';
|
|
10
|
+
import { VehicleLogbook } from '../../../models/logbook/vehicle-logbook';
|
|
11
|
+
import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
|
|
12
|
+
import { AppEvent } from '../../../models/event/app-event';
|
|
13
|
+
import { FinancialYear } from '../../../models/financial-year/financial-year';
|
|
14
|
+
import { Depreciation } from '../../../models/depreciation/depreciation';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "@angular/common/http";
|
|
17
|
+
import * as i2 from "../transaction/transaction.service";
|
|
18
|
+
import * as i3 from "../depreciation/depreciation.service";
|
|
19
|
+
import * as i4 from "../chart-accounts/chart-accounts.service";
|
|
20
|
+
import * as i5 from "../../event/event-dispatcher.service";
|
|
21
|
+
/**
|
|
22
|
+
* Service that allows to work with WorkTank operations
|
|
23
|
+
* @TODO separate into multiple services, extend restService
|
|
24
|
+
*/
|
|
25
|
+
export class VehicleService {
|
|
26
|
+
constructor(http, transactionService, depreciationService, chartAccountsService, eventDispatcherService, environment) {
|
|
27
|
+
this.http = http;
|
|
28
|
+
this.transactionService = transactionService;
|
|
29
|
+
this.depreciationService = depreciationService;
|
|
30
|
+
this.chartAccountsService = chartAccountsService;
|
|
31
|
+
this.eventDispatcherService = eventDispatcherService;
|
|
32
|
+
this.environment = environment;
|
|
33
|
+
this.vehiclesSubject = new ReplaySubject(1);
|
|
34
|
+
this.vehicleClaimSubject = new ReplaySubject(1);
|
|
35
|
+
this.vehicleClaimRateSubject = new ReplaySubject(1);
|
|
36
|
+
this.vehicleTaxReturnSubject = new ReplaySubject(1);
|
|
37
|
+
this.incomePositionsSubject = new ReplaySubject(1);
|
|
38
|
+
}
|
|
39
|
+
getVehicles() {
|
|
40
|
+
// @TODO create backend for get logbook
|
|
41
|
+
if (!this._vehicles) {
|
|
42
|
+
this.http.get(`${this.environment.apiV2}/vehicles`)
|
|
43
|
+
.pipe(map((response) => {
|
|
44
|
+
return response.map((item) => plainToClass(Vehicle, item));
|
|
45
|
+
}))
|
|
46
|
+
.subscribe((vehicles) => {
|
|
47
|
+
this._vehicles = vehicles;
|
|
48
|
+
this.vehiclesSubject.next(vehicles);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return this.vehiclesSubject.asObservable();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get vehicles claim amount
|
|
55
|
+
*/
|
|
56
|
+
getVehiclesClaim() {
|
|
57
|
+
if (!this._vehicleClaim) {
|
|
58
|
+
this.http.get(`${this.environment.apiV2}/vehicle-claims`)
|
|
59
|
+
.pipe(map((response) => {
|
|
60
|
+
// return Vehicle claim from backend or create new if it not exist
|
|
61
|
+
return response.length ? response.map((item) => plainToClass(VehicleClaim, item))[0] : plainToClass(VehicleClaim, {});
|
|
62
|
+
}))
|
|
63
|
+
.subscribe((vehicleClaim) => {
|
|
64
|
+
this._vehicleClaim = vehicleClaim;
|
|
65
|
+
this.vehicleClaimSubject.next(vehicleClaim);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return this.vehicleClaimSubject.asObservable();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Add new vehicle claim
|
|
72
|
+
* @param claim object which should be added
|
|
73
|
+
*/
|
|
74
|
+
addVehicleClaim(claim) {
|
|
75
|
+
return this.http.post(`${this.environment.apiV2}/vehicle-claims`, claim).pipe(map((response) => {
|
|
76
|
+
this._vehicleClaim = plainToClass(VehicleClaim, response);
|
|
77
|
+
this.vehicleClaimSubject.next(this._vehicleClaim);
|
|
78
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_CREATED, null));
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get vehicles claim rate for current financial year
|
|
83
|
+
*/
|
|
84
|
+
getVehiclesClaimRate() {
|
|
85
|
+
if (!this._vehicleClaimRate) {
|
|
86
|
+
this.chartAccountsService.getChartAccountsById(ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK)
|
|
87
|
+
.pipe(map((response) => {
|
|
88
|
+
return response.values.find((chartAccount) => chartAccount.financialYear === new FinancialYear().year).value;
|
|
89
|
+
}))
|
|
90
|
+
.subscribe((claimRate) => {
|
|
91
|
+
this._vehicleClaimRate = claimRate;
|
|
92
|
+
this.vehicleClaimRateSubject.next(this._vehicleClaimRate);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return this.vehicleClaimRateSubject.asObservable();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get vehicles tax return for vehicle transactions & depreciations
|
|
99
|
+
*/
|
|
100
|
+
getVehiclesTaxReturn() {
|
|
101
|
+
if (!this._vehicleTaxReturn) {
|
|
102
|
+
combineLatest([
|
|
103
|
+
// @Todo refactor to avoid injection of another services
|
|
104
|
+
this.transactionService.get(),
|
|
105
|
+
this.depreciationService.get(),
|
|
106
|
+
this.getVehiclesClaim()
|
|
107
|
+
]).pipe(map(([transactions, depreciations, vehicleClaim]) => {
|
|
108
|
+
const chartAccountsHeadingsIds = enumToList(ChartAccountsHeadingVehicleListEnum)
|
|
109
|
+
.map((item) => item.value);
|
|
110
|
+
// get transactions & depreciations which chart accounts headings are belong to vehicle category
|
|
111
|
+
// but except KLMS transaction
|
|
112
|
+
const filteredItems = [...transactions, ...depreciations].filter((item) => {
|
|
113
|
+
var _a;
|
|
114
|
+
return chartAccountsHeadingsIds.includes((_a = item.chartAccounts.heading) === null || _a === void 0 ? void 0 : _a.id) && !item.chartAccounts.isKlmsForWork();
|
|
115
|
+
});
|
|
116
|
+
// get claim amount sum
|
|
117
|
+
return filteredItems.reduce((sum, item) =>
|
|
118
|
+
// @Todo remove item.amount negative sign when depreciations will be refactored and will have negative sign
|
|
119
|
+
sum + ((item instanceof Depreciation ? item.currentYearForecast.amount : -item.amount) * (vehicleClaim.workUsage / 100)), 0);
|
|
120
|
+
}))
|
|
121
|
+
.subscribe((taxReturn) => {
|
|
122
|
+
this._vehicleTaxReturn = taxReturn;
|
|
123
|
+
this.vehicleTaxReturnSubject.next(this._vehicleTaxReturn);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return this.vehicleTaxReturnSubject.asObservable();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Update vehicle claim
|
|
130
|
+
* @param claim which should be updated
|
|
131
|
+
*
|
|
132
|
+
* @TODO alex refresh depreciation/transaction cache
|
|
133
|
+
*/
|
|
134
|
+
updateVehicleClaim(claim) {
|
|
135
|
+
return this.http.put(`${this.environment.apiV2}/vehicle-claims/${claim.id}`, claim).pipe(map((response) => {
|
|
136
|
+
const updatedVehicleClaim = plainToClass(VehicleClaim, response);
|
|
137
|
+
this._vehicleClaim = updatedVehicleClaim;
|
|
138
|
+
this.vehicleClaimSubject.next(this._vehicleClaim);
|
|
139
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_UPDATED, null));
|
|
140
|
+
return updatedVehicleClaim;
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Add new logbook for desired vehicle
|
|
145
|
+
* @param logbook which should be added
|
|
146
|
+
* @param vehicle for which logbook object should be added
|
|
147
|
+
*/
|
|
148
|
+
addLogbook(logbook, vehicle) {
|
|
149
|
+
return this.http.post(`${this.environment.apiV2}/vehicles/${vehicle.id}/logbooks`, logbook)
|
|
150
|
+
.pipe(map((response) => {
|
|
151
|
+
this._vehicles.find((v) => v.id === vehicle.id).logbook.push(response);
|
|
152
|
+
// we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
|
|
153
|
+
// that is why we recreate vehicles array
|
|
154
|
+
this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Update logbook
|
|
159
|
+
* @param logbook which should be updated
|
|
160
|
+
* @param vehicle for which logbook object should be updated
|
|
161
|
+
*/
|
|
162
|
+
updateLogbook(logbook, vehicle) {
|
|
163
|
+
return this.http.put(`${this.environment.apiV2}/vehicles/${vehicle.id}/logbooks/${logbook.id}`, logbook).pipe(map((response) => {
|
|
164
|
+
const editedVehicle = this._vehicles.find((v) => v.id === vehicle.id);
|
|
165
|
+
const editedLogbookIndex = editedVehicle.logbook.findIndex((l) => l.id === logbook.id);
|
|
166
|
+
editedVehicle.logbook.splice(editedLogbookIndex, 1, plainToClass(VehicleLogbook, response));
|
|
167
|
+
// we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
|
|
168
|
+
// that is why we recreate vehicles array
|
|
169
|
+
this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Delete trip
|
|
174
|
+
* @param logbook for which trip should be deleted
|
|
175
|
+
* @param vehicle for which trip should be deleted
|
|
176
|
+
*/
|
|
177
|
+
deleteTrip(logbook, vehicle) {
|
|
178
|
+
return this.http.delete(`${this.environment.apiV2}/vehicles/${vehicle.id}/logbooks/${logbook.id}`)
|
|
179
|
+
.pipe(map(() => {
|
|
180
|
+
const editedVehicle = this._vehicles.find((v) => v.id === vehicle.id);
|
|
181
|
+
const deletedLogbookIndex = editedVehicle.logbook.findIndex((l) => l.id === logbook.id);
|
|
182
|
+
editedVehicle.logbook.splice(deletedLogbookIndex, 1);
|
|
183
|
+
// we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
|
|
184
|
+
// that is why we recreate vehicles array
|
|
185
|
+
this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Add new vehicle
|
|
190
|
+
* @param vehicle which should be added
|
|
191
|
+
*/
|
|
192
|
+
addVehicle(vehicle) {
|
|
193
|
+
return this.http.post(`${this.environment.apiV2}/vehicles`, { name: vehicle.name })
|
|
194
|
+
.pipe(map((response) => {
|
|
195
|
+
this._vehicles.push(plainToClass(Vehicle, response));
|
|
196
|
+
this.vehiclesSubject.next(this._vehicles);
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Update vehicle
|
|
201
|
+
* @param vehicle which should be updated
|
|
202
|
+
*/
|
|
203
|
+
updateVehicle(vehicle) {
|
|
204
|
+
return this.http.put(`${this.environment.apiV2}/vehicles/${vehicle.id}`, { name: vehicle.name })
|
|
205
|
+
.pipe(map((response) => {
|
|
206
|
+
const editedVehicleIndex = this._vehicles.findIndex((v) => v.id === vehicle.id);
|
|
207
|
+
this._vehicles.splice(editedVehicleIndex, 1, plainToClass(Vehicle, response));
|
|
208
|
+
this.vehiclesSubject.next(this._vehicles);
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Delete vehicle
|
|
213
|
+
* @param vehicle which should be deleted
|
|
214
|
+
*/
|
|
215
|
+
deleteVehicle(vehicle) {
|
|
216
|
+
return this.http.delete(`${this.environment.apiV2}/vehicles/${vehicle.id}`)
|
|
217
|
+
.pipe(map(() => {
|
|
218
|
+
const deletedVehicleIndex = this._vehicles.findIndex((v) => v.id === vehicle.id);
|
|
219
|
+
this._vehicles.splice(deletedVehicleIndex, 1);
|
|
220
|
+
// we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
|
|
221
|
+
// that is why we recreate vehicles array
|
|
222
|
+
this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
VehicleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, deps: [{ token: i1.HttpClient }, { token: i2.TransactionService }, { token: i3.DepreciationService }, { token: i4.ChartAccountsService }, { token: i5.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
227
|
+
VehicleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, providedIn: 'root' });
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, decorators: [{
|
|
229
|
+
type: Injectable,
|
|
230
|
+
args: [{
|
|
231
|
+
providedIn: 'root'
|
|
232
|
+
}]
|
|
233
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.TransactionService }, { type: i3.DepreciationService }, { type: i4.ChartAccountsService }, { type: i5.EventDispatcherService }, { type: undefined, decorators: [{
|
|
234
|
+
type: Inject,
|
|
235
|
+
args: ['environment']
|
|
236
|
+
}] }]; } });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVoaWNsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvdmVoaWNsZS92ZWhpY2xlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGFBQWEsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7QUFLekU7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFhekIsWUFDVSxJQUFnQixFQUNoQixrQkFBc0MsRUFDdEMsbUJBQXdDLEVBQ3hDLG9CQUEwQyxFQUMxQyxzQkFBOEMsRUFDdkIsV0FBZ0I7UUFMdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBaEJqRCxvQkFBZSxHQUE2QixJQUFJLGFBQWEsQ0FBWSxDQUFDLENBQUMsQ0FBQztRQUU1RSx3QkFBbUIsR0FBZ0MsSUFBSSxhQUFhLENBQWUsQ0FBQyxDQUFDLENBQUM7UUFFdEYsNEJBQXVCLEdBQTBCLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTlFLDRCQUF1QixHQUEwQixJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUU5RSwyQkFBc0IsR0FBb0MsSUFBSSxhQUFhLENBQW1CLENBQUMsQ0FBQyxDQUFDO0lBVWpHLENBQUM7SUFFRCxXQUFXO1FBQ1QsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFdBQVcsQ0FBQztpQkFDaEQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNwQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLENBQUMsQ0FBQyxRQUFtQixFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGlCQUFpQixDQUFDO2lCQUN0RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3BCLGtFQUFrRTtnQkFDbEUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0gsQ0FBQyxDQUFDLENBQ0g7aUJBQ0EsU0FBUyxDQUFDLENBQUMsWUFBMEIsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztnQkFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxLQUFtQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDM0UsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDO2lCQUMxRixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3BCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3BILENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsYUFBYSxDQUFDO2dCQUNaLHdEQUF3RDtnQkFDeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBZ0QsRUFBRSxFQUFFO2dCQUNqRyxNQUFNLHdCQUF3QixHQUFhLFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQztxQkFDdkYsR0FBRyxDQUFDLENBQUMsSUFBc0MsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvRCxnR0FBZ0c7Z0JBQ2hHLDhCQUE4QjtnQkFDOUIsTUFBTSxhQUFhLEdBQXNDLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFnQyxFQUFFLEVBQUU7O29CQUN2SSxPQUFPLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTywwQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2xILENBQUMsQ0FBQyxDQUFDO2dCQUVILHVCQUF1QjtnQkFDdkIsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLElBQWdDLEVBQUUsRUFBRTtnQkFDNUUsMkdBQTJHO2dCQUMzRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pJLENBQUMsQ0FBQyxDQUNIO2lCQUNGLFNBQVMsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsS0FBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxtQkFBbUIsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxtQkFBbUIsR0FBaUIsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRWxELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVqRyxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxPQUF1QixFQUFFLE9BQWdCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssYUFBYSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDO2FBQ3hGLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRix3SEFBd0g7WUFDeEgseUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsT0FBdUIsRUFBRSxPQUFnQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGFBQWEsT0FBTyxDQUFDLEVBQUUsYUFBYSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMzRyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNwQixNQUFNLGFBQWEsR0FBWSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEYsTUFBTSxrQkFBa0IsR0FBVyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUYsd0hBQXdIO1lBQ3hILHlDQUF5QztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE9BQXVCLEVBQUUsT0FBZ0I7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxhQUFhLE9BQU8sQ0FBQyxFQUFFLGFBQWEsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQy9GLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsTUFBTSxhQUFhLEdBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sbUJBQW1CLEdBQVcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoSCxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCx3SEFBd0g7WUFDeEgseUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxPQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDOUUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsT0FBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxhQUFhLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDM0YsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sa0JBQWtCLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE9BQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssYUFBYSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDeEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLG1CQUFtQixHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5Qyx3SEFBd0g7WUFDeEgseUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs7NEdBdlBVLGNBQWMsMkxBbUJmLGFBQWE7Z0hBbkJaLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFvQkksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhcnRBY2NvdW50c0hlYWRpbmdWZWhpY2xlTGlzdEVudW0gfSBmcm9tICcuLi8uLi8uLi9kYi9FbnVtcy9jaGFydC1hY2NvdW50cy1oZWFkaW5nLXZlaGljbGUtbGlzdC5lbnVtJztcbmltcG9ydCB7IENoYXJ0QWNjb3VudHNMaXN0RW51bSB9IGZyb20gJy4uLy4uLy4uL2RiL0VudW1zL2NoYXJ0LWFjY291bnRzLWxpc3QuZW51bSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGVudW1Ub0xpc3QgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvZW51bS10by1saXN0JztcbmltcG9ydCB7IFZlaGljbGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbG9nYm9vay92ZWhpY2xlJztcbmltcG9ydCB7IFZlaGljbGVDbGFpbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9sb2dib29rL3ZlaGljbGUtY2xhaW0nO1xuaW1wb3J0IHsgVmVoaWNsZUxvZ2Jvb2sgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbG9nYm9vay92ZWhpY2xlLWxvZ2Jvb2snO1xuaW1wb3J0IHsgSW5jb21lUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5jb21lLXBvc2l0aW9uL2luY29tZS1wb3NpdGlvbic7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7IEZpbmFuY2lhbFllYXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmluYW5jaWFsLXllYXIvZmluYW5jaWFsLXllYXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRGVwcmVjaWF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RlcHJlY2lhdGlvbi9kZXByZWNpYXRpb24nO1xuaW1wb3J0IHsgRGVwcmVjaWF0aW9uU2VydmljZSB9IGZyb20gJy4uL2RlcHJlY2lhdGlvbi9kZXByZWNpYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydEFjY291bnRzU2VydmljZSB9IGZyb20gJy4uL2NoYXJ0LWFjY291bnRzL2NoYXJ0LWFjY291bnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGFsbG93cyB0byB3b3JrIHdpdGggV29ya1Rhbmsgb3BlcmF0aW9uc1xuICogQFRPRE8gc2VwYXJhdGUgaW50byBtdWx0aXBsZSBzZXJ2aWNlcywgZXh0ZW5kIHJlc3RTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFZlaGljbGVTZXJ2aWNlIHtcbiAgLy8gQFRPRE8gcmVmYWN0b3IgYW5kIG1heWJlIGJyZWFrIHRvIHNlcGFyYXRlZCBzZXJ2aWNlc1xuICBfdmVoaWNsZXM6IFZlaGljbGVbXTtcbiAgdmVoaWNsZXNTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFZlaGljbGVbXT4gPSBuZXcgUmVwbGF5U3ViamVjdDxWZWhpY2xlW10+KDEpO1xuICBfdmVoaWNsZUNsYWltOiBWZWhpY2xlQ2xhaW07XG4gIHZlaGljbGVDbGFpbVN1YmplY3Q6IFJlcGxheVN1YmplY3Q8VmVoaWNsZUNsYWltPiA9IG5ldyBSZXBsYXlTdWJqZWN0PFZlaGljbGVDbGFpbT4oMSk7XG4gIF92ZWhpY2xlQ2xhaW1SYXRlOiBudW1iZXI7XG4gIHZlaGljbGVDbGFpbVJhdGVTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PG51bWJlcj4gPSBuZXcgUmVwbGF5U3ViamVjdDxudW1iZXI+KDEpO1xuICBfdmVoaWNsZVRheFJldHVybjogbnVtYmVyO1xuICB2ZWhpY2xlVGF4UmV0dXJuU3ViamVjdDogUmVwbGF5U3ViamVjdDxudW1iZXI+ID0gbmV3IFJlcGxheVN1YmplY3Q8bnVtYmVyPigxKTtcbiAgX2luY29tZVBvc2l0aW9uczogSW5jb21lUG9zaXRpb25bXTtcbiAgaW5jb21lUG9zaXRpb25zU3ViamVjdDogUmVwbGF5U3ViamVjdDxJbmNvbWVQb3NpdGlvbltdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PEluY29tZVBvc2l0aW9uW10+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uU2VydmljZTogVHJhbnNhY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZGVwcmVjaWF0aW9uU2VydmljZTogRGVwcmVjaWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXJ0QWNjb3VudHNTZXJ2aWNlOiBDaGFydEFjY291bnRzU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gIH1cblxuICBnZXRWZWhpY2xlcygpOiBPYnNlcnZhYmxlPFZlaGljbGVbXT4ge1xuICAgIC8vIEBUT0RPIGNyZWF0ZSBiYWNrZW5kIGZvciBnZXQgbG9nYm9va1xuICAgIGlmICghdGhpcy5fdmVoaWNsZXMpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZXNgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5tYXAoKGl0ZW06IGFueSkgPT4gcGxhaW5Ub0NsYXNzKFZlaGljbGUsIGl0ZW0pKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZlaGljbGVzOiBWZWhpY2xlW10pID0+IHtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlcyA9IHZlaGljbGVzO1xuICAgICAgICAgIHRoaXMudmVoaWNsZXNTdWJqZWN0Lm5leHQodmVoaWNsZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52ZWhpY2xlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZlaGljbGVzIGNsYWltIGFtb3VudFxuICAgKi9cbiAgZ2V0VmVoaWNsZXNDbGFpbSgpOiBPYnNlcnZhYmxlPFZlaGljbGVDbGFpbT4ge1xuICAgIGlmICghdGhpcy5fdmVoaWNsZUNsYWltKSB7XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGUtY2xhaW1zYClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyByZXR1cm4gVmVoaWNsZSBjbGFpbSBmcm9tIGJhY2tlbmQgb3IgY3JlYXRlIG5ldyBpZiBpdCBub3QgZXhpc3RcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5sZW5ndGggPyByZXNwb25zZS5tYXAoKGl0ZW06IGFueSkgPT4gcGxhaW5Ub0NsYXNzKFZlaGljbGVDbGFpbSwgaXRlbSkpWzBdIDogcGxhaW5Ub0NsYXNzKFZlaGljbGVDbGFpbSwge30pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmVoaWNsZUNsYWltOiBWZWhpY2xlQ2xhaW0pID0+IHtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlQ2xhaW0gPSB2ZWhpY2xlQ2xhaW07XG4gICAgICAgICAgdGhpcy52ZWhpY2xlQ2xhaW1TdWJqZWN0Lm5leHQodmVoaWNsZUNsYWltKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmVoaWNsZUNsYWltU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IHZlaGljbGUgY2xhaW1cbiAgICogQHBhcmFtIGNsYWltIG9iamVjdCB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICovXG4gIGFkZFZlaGljbGVDbGFpbShjbGFpbTogVmVoaWNsZUNsYWltKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZS1jbGFpbXNgLCBjbGFpbSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl92ZWhpY2xlQ2xhaW0gPSBwbGFpblRvQ2xhc3MoVmVoaWNsZUNsYWltLCByZXNwb25zZSk7XG4gICAgICAgIHRoaXMudmVoaWNsZUNsYWltU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVDbGFpbSk7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5WRUhJQ0xFX0NMQUlNX0NSRUFURUQsIG51bGwpKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmVoaWNsZXMgY2xhaW0gcmF0ZSBmb3IgY3VycmVudCBmaW5hbmNpYWwgeWVhclxuICAgKi9cbiAgZ2V0VmVoaWNsZXNDbGFpbVJhdGUoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAoIXRoaXMuX3ZlaGljbGVDbGFpbVJhdGUpIHtcbiAgICAgIHRoaXMuY2hhcnRBY2NvdW50c1NlcnZpY2UuZ2V0Q2hhcnRBY2NvdW50c0J5SWQoQ2hhcnRBY2NvdW50c0xpc3RFbnVtLktMTVNfVFJBVkVMTEVEX0ZPUl9XT1JLKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS52YWx1ZXMuZmluZCgoY2hhcnRBY2NvdW50OiBhbnkpID0+IGNoYXJ0QWNjb3VudC5maW5hbmNpYWxZZWFyID09PSBuZXcgRmluYW5jaWFsWWVhcigpLnllYXIpLnZhbHVlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2xhaW1SYXRlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlQ2xhaW1SYXRlID0gY2xhaW1SYXRlO1xuICAgICAgICAgIHRoaXMudmVoaWNsZUNsYWltUmF0ZVN1YmplY3QubmV4dCh0aGlzLl92ZWhpY2xlQ2xhaW1SYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmVoaWNsZUNsYWltUmF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZlaGljbGVzIHRheCByZXR1cm4gZm9yIHZlaGljbGUgdHJhbnNhY3Rpb25zICYgZGVwcmVjaWF0aW9uc1xuICAgKi9cbiAgZ2V0VmVoaWNsZXNUYXhSZXR1cm4oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAoIXRoaXMuX3ZlaGljbGVUYXhSZXR1cm4pIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAvLyBAVG9kbyByZWZhY3RvciB0byBhdm9pZCBpbmplY3Rpb24gb2YgYW5vdGhlciBzZXJ2aWNlc1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5nZXQoKSxcbiAgICAgICAgdGhpcy5kZXByZWNpYXRpb25TZXJ2aWNlLmdldCgpLFxuICAgICAgICB0aGlzLmdldFZlaGljbGVzQ2xhaW0oKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgICBtYXAoKFt0cmFuc2FjdGlvbnMsIGRlcHJlY2lhdGlvbnMsIHZlaGljbGVDbGFpbV06IFtUcmFuc2FjdGlvbltdLCBEZXByZWNpYXRpb25bXSwgVmVoaWNsZUNsYWltXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hhcnRBY2NvdW50c0hlYWRpbmdzSWRzOiBudW1iZXJbXSA9IGVudW1Ub0xpc3QoQ2hhcnRBY2NvdW50c0hlYWRpbmdWZWhpY2xlTGlzdEVudW0pXG4gICAgICAgICAgICAgIC5tYXAoKGl0ZW06IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciB9KSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIC8vIGdldCB0cmFuc2FjdGlvbnMgJiBkZXByZWNpYXRpb25zIHdoaWNoIGNoYXJ0IGFjY291bnRzIGhlYWRpbmdzIGFyZSBiZWxvbmcgdG8gdmVoaWNsZSBjYXRlZ29yeVxuICAgICAgICAgICAgLy8gYnV0IGV4Y2VwdCBLTE1TIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxUcmFuc2FjdGlvbiB8IERlcHJlY2lhdGlvbj4gPSBbLi4udHJhbnNhY3Rpb25zLCAuLi5kZXByZWNpYXRpb25zXS5maWx0ZXIoKGl0ZW06IFRyYW5zYWN0aW9uIHwgRGVwcmVjaWF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjaGFydEFjY291bnRzSGVhZGluZ3NJZHMuaW5jbHVkZXMoaXRlbS5jaGFydEFjY291bnRzLmhlYWRpbmc/LmlkKSAmJiAhaXRlbS5jaGFydEFjY291bnRzLmlzS2xtc0ZvcldvcmsoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBnZXQgY2xhaW0gYW1vdW50IHN1bVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgaXRlbTogVHJhbnNhY3Rpb24gfCBEZXByZWNpYXRpb24pID0+XG4gICAgICAgICAgICAgIC8vIEBUb2RvIHJlbW92ZSBpdGVtLmFtb3VudCBuZWdhdGl2ZSBzaWduIHdoZW4gZGVwcmVjaWF0aW9ucyB3aWxsIGJlIHJlZmFjdG9yZWQgYW5kIHdpbGwgaGF2ZSBuZWdhdGl2ZSBzaWduXG4gICAgICAgICAgICAgIHN1bSArICgoaXRlbSBpbnN0YW5jZW9mIERlcHJlY2lhdGlvbiA/IGl0ZW0uY3VycmVudFllYXJGb3JlY2FzdC5hbW91bnQgOiAtaXRlbS5hbW91bnQpICogKHZlaGljbGVDbGFpbS53b3JrVXNhZ2UgLyAxMDApKSwgMCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodGF4UmV0dXJuOiBudW1iZXIpID0+IHtcbiAgICAgICAgdGhpcy5fdmVoaWNsZVRheFJldHVybiA9IHRheFJldHVybjtcbiAgICAgICAgdGhpcy52ZWhpY2xlVGF4UmV0dXJuU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVUYXhSZXR1cm4pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmVoaWNsZVRheFJldHVyblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHZlaGljbGUgY2xhaW1cbiAgICogQHBhcmFtIGNsYWltIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkXG4gICAqXG4gICAqIEBUT0RPIGFsZXggcmVmcmVzaCBkZXByZWNpYXRpb24vdHJhbnNhY3Rpb24gY2FjaGVcbiAgICovXG4gIHVwZGF0ZVZlaGljbGVDbGFpbShjbGFpbTogVmVoaWNsZUNsYWltKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS92ZWhpY2xlLWNsYWltcy8ke2NsYWltLmlkfWAsIGNsYWltKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWZWhpY2xlQ2xhaW06IFZlaGljbGVDbGFpbSA9IHBsYWluVG9DbGFzcyhWZWhpY2xlQ2xhaW0sIHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5fdmVoaWNsZUNsYWltID0gdXBkYXRlZFZlaGljbGVDbGFpbTtcbiAgICAgICAgdGhpcy52ZWhpY2xlQ2xhaW1TdWJqZWN0Lm5leHQodGhpcy5fdmVoaWNsZUNsYWltKTtcblxuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uVkVISUNMRV9DTEFJTV9VUERBVEVELCBudWxsKSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRWZWhpY2xlQ2xhaW07XG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyBsb2dib29rIGZvciBkZXNpcmVkIHZlaGljbGVcbiAgICogQHBhcmFtIGxvZ2Jvb2sgd2hpY2ggc2hvdWxkIGJlIGFkZGVkXG4gICAqIEBwYXJhbSB2ZWhpY2xlIGZvciB3aGljaCBsb2dib29rIG9iamVjdCBzaG91bGQgYmUgYWRkZWRcbiAgICovXG4gIGFkZExvZ2Jvb2sobG9nYm9vazogVmVoaWNsZUxvZ2Jvb2ssIHZlaGljbGU6IFZlaGljbGUpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZXMvJHt2ZWhpY2xlLmlkfS9sb2dib29rc2AsIGxvZ2Jvb2spXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVoaWNsZXMuZmluZCgodjogVmVoaWNsZSkgPT4gdi5pZCA9PT0gdmVoaWNsZS5pZCkubG9nYm9vay5wdXNoKHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyB3ZSB1cGRhdGUgbmVzdGVkIGxvZ2Jvb2sgb2JqZWN0IGluc2lkZSB2ZWhpY2xlcyBsaXN0LiBTbyBsaXN0IGlzIG5vdCBjaGFuZ2VkIGFuZCBuZXh0IG5vdCBlbWl0IHN1YnNjcmlwdGlvbnMgdXBkYXRlcy5cbiAgICAgICAgICAvLyB0aGF0IGlzIHdoeSB3ZSByZWNyZWF0ZSB2ZWhpY2xlcyBhcnJheVxuICAgICAgICAgIHRoaXMudmVoaWNsZXNTdWJqZWN0Lm5leHQodGhpcy5fdmVoaWNsZXMubWFwKChpdGVtOiBvYmplY3QpID0+IHBsYWluVG9DbGFzcyhWZWhpY2xlLCBpdGVtKSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbG9nYm9va1xuICAgKiBAcGFyYW0gbG9nYm9vayB3aGljaCBzaG91bGQgYmUgdXBkYXRlZFxuICAgKiBAcGFyYW0gdmVoaWNsZSBmb3Igd2hpY2ggbG9nYm9vayBvYmplY3Qgc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICovXG4gIHVwZGF0ZUxvZ2Jvb2sobG9nYm9vazogVmVoaWNsZUxvZ2Jvb2ssIHZlaGljbGU6IFZlaGljbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGVzLyR7dmVoaWNsZS5pZH0vbG9nYm9va3MvJHtsb2dib29rLmlkfWAsIGxvZ2Jvb2spLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdGVkVmVoaWNsZTogVmVoaWNsZSA9IHRoaXMuX3ZlaGljbGVzLmZpbmQoKHY6IFZlaGljbGUpID0+IHYuaWQgPT09IHZlaGljbGUuaWQpO1xuICAgICAgICBjb25zdCBlZGl0ZWRMb2dib29rSW5kZXg6IG51bWJlciA9IGVkaXRlZFZlaGljbGUubG9nYm9vay5maW5kSW5kZXgoKGw6IFZlaGljbGVMb2dib29rKSA9PiBsLmlkID09PSBsb2dib29rLmlkKTtcbiAgICAgICAgZWRpdGVkVmVoaWNsZS5sb2dib29rLnNwbGljZShlZGl0ZWRMb2dib29rSW5kZXgsIDEsIHBsYWluVG9DbGFzcyhWZWhpY2xlTG9nYm9vaywgcmVzcG9uc2UpKTtcbiAgICAgICAgLy8gd2UgdXBkYXRlIG5lc3RlZCBsb2dib29rIG9iamVjdCBpbnNpZGUgdmVoaWNsZXMgbGlzdC4gU28gbGlzdCBpcyBub3QgY2hhbmdlZCBhbmQgbmV4dCBub3QgZW1pdCBzdWJzY3JpcHRpb25zIHVwZGF0ZXMuXG4gICAgICAgIC8vIHRoYXQgaXMgd2h5IHdlIHJlY3JlYXRlIHZlaGljbGVzIGFycmF5XG4gICAgICAgIHRoaXMudmVoaWNsZXNTdWJqZWN0Lm5leHQodGhpcy5fdmVoaWNsZXMubWFwKChpdGVtOiBvYmplY3QpID0+IHBsYWluVG9DbGFzcyhWZWhpY2xlLCBpdGVtKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0cmlwXG4gICAqIEBwYXJhbSBsb2dib29rIGZvciB3aGljaCB0cmlwIHNob3VsZCBiZSBkZWxldGVkXG4gICAqIEBwYXJhbSB2ZWhpY2xlIGZvciB3aGljaCB0cmlwIHNob3VsZCBiZSBkZWxldGVkXG4gICAqL1xuICBkZWxldGVUcmlwKGxvZ2Jvb2s6IFZlaGljbGVMb2dib29rLCB2ZWhpY2xlOiBWZWhpY2xlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS92ZWhpY2xlcy8ke3ZlaGljbGUuaWR9L2xvZ2Jvb2tzLyR7bG9nYm9vay5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdGVkVmVoaWNsZTogVmVoaWNsZSA9IHRoaXMuX3ZlaGljbGVzLmZpbmQoKHY6IFZlaGljbGUpID0+IHYuaWQgPT09IHZlaGljbGUuaWQpO1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRMb2dib29rSW5kZXg6IG51bWJlciA9IGVkaXRlZFZlaGljbGUubG9nYm9vay5maW5kSW5kZXgoKGw6IFZlaGljbGVMb2dib29rKSA9PiBsLmlkID09PSBsb2dib29rLmlkKTtcbiAgICAgICAgICBlZGl0ZWRWZWhpY2xlLmxvZ2Jvb2suc3BsaWNlKGRlbGV0ZWRMb2dib29rSW5kZXgsIDEpO1xuICAgICAgICAgIC8vIHdlIHVwZGF0ZSBuZXN0ZWQgbG9nYm9vayBvYmplY3QgaW5zaWRlIHZlaGljbGVzIGxpc3QuIFNvIGxpc3QgaXMgbm90IGNoYW5nZWQgYW5kIG5leHQgbm90IGVtaXQgc3Vic2NyaXB0aW9ucyB1cGRhdGVzLlxuICAgICAgICAgIC8vIHRoYXQgaXMgd2h5IHdlIHJlY3JlYXRlIHZlaGljbGVzIGFycmF5XG4gICAgICAgICAgdGhpcy52ZWhpY2xlc1N1YmplY3QubmV4dCh0aGlzLl92ZWhpY2xlcy5tYXAoKGl0ZW06IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKFZlaGljbGUsIGl0ZW0pKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgdmVoaWNsZVxuICAgKiBAcGFyYW0gdmVoaWNsZSB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICovXG4gIGFkZFZlaGljbGUodmVoaWNsZTogVmVoaWNsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGVzYCwge25hbWU6IHZlaGljbGUubmFtZX0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVoaWNsZXMucHVzaChwbGFpblRvQ2xhc3MoVmVoaWNsZSwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB0aGlzLnZlaGljbGVzU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHZlaGljbGVcbiAgICogQHBhcmFtIHZlaGljbGUgd2hpY2ggc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICovXG4gIHVwZGF0ZVZlaGljbGUodmVoaWNsZTogVmVoaWNsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZXMvJHt2ZWhpY2xlLmlkfWAsIHtuYW1lOiB2ZWhpY2xlLm5hbWV9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRlZFZlaGljbGVJbmRleDogbnVtYmVyID0gdGhpcy5fdmVoaWNsZXMuZmluZEluZGV4KCh2OiBWZWhpY2xlKSA9PiB2LmlkID09PSB2ZWhpY2xlLmlkKTtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlcy5zcGxpY2UoZWRpdGVkVmVoaWNsZUluZGV4LCAxLCBwbGFpblRvQ2xhc3MoVmVoaWNsZSwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB0aGlzLnZlaGljbGVzU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHZlaGljbGVcbiAgICogQHBhcmFtIHZlaGljbGUgd2hpY2ggc2hvdWxkIGJlIGRlbGV0ZWRcbiAgICovXG4gIGRlbGV0ZVZlaGljbGUodmVoaWNsZTogVmVoaWNsZSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGVzLyR7dmVoaWNsZS5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZXRlZFZlaGljbGVJbmRleDogbnVtYmVyID0gdGhpcy5fdmVoaWNsZXMuZmluZEluZGV4KCh2OiBWZWhpY2xlKSA9PiB2LmlkID09PSB2ZWhpY2xlLmlkKTtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlcy5zcGxpY2UoZGVsZXRlZFZlaGljbGVJbmRleCwgMSk7XG4gICAgICAgICAgLy8gd2UgdXBkYXRlIG5lc3RlZCBsb2dib29rIG9iamVjdCBpbnNpZGUgdmVoaWNsZXMgbGlzdC4gU28gbGlzdCBpcyBub3QgY2hhbmdlZCBhbmQgbmV4dCBub3QgZW1pdCBzdWJzY3JpcHRpb25zIHVwZGF0ZXMuXG4gICAgICAgICAgLy8gdGhhdCBpcyB3aHkgd2UgcmVjcmVhdGUgdmVoaWNsZXMgYXJyYXlcbiAgICAgICAgICB0aGlzLnZlaGljbGVzU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVzLm1hcCgoaXRlbTogb2JqZWN0KSA9PiBwbGFpblRvQ2xhc3MoVmVoaWNsZSwgaXRlbSkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import { plainToClass } from 'class-transformer';
|
|
4
|
+
import { ChartData } from '../../../models/chart/chart-data';
|
|
5
|
+
import { ChartSerie } from '../../../models/chart/chart-serie';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common/http";
|
|
8
|
+
/**
|
|
9
|
+
* Service for get property equity position half-year history chart data
|
|
10
|
+
*/
|
|
11
|
+
export class EquityPositionChartService {
|
|
12
|
+
constructor(http, environment) {
|
|
13
|
+
this.http = http;
|
|
14
|
+
this.environment = environment;
|
|
15
|
+
}
|
|
16
|
+
get() {
|
|
17
|
+
// @TODO refactor backend
|
|
18
|
+
return this.http.get(`${this.environment.apiV2}/properties/categories/equity`)
|
|
19
|
+
.pipe(map((response) => {
|
|
20
|
+
return response.map((item) => {
|
|
21
|
+
return plainToClass(ChartData, {
|
|
22
|
+
name: item.category.name,
|
|
23
|
+
data: item.equity.map((serie) => {
|
|
24
|
+
return plainToClass(ChartSerie, {
|
|
25
|
+
label: serie.date,
|
|
26
|
+
value: serie.amount
|
|
27
|
+
});
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
EquityPositionChartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EquityPositionChartService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
35
|
+
EquityPositionChartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EquityPositionChartService, providedIn: 'root' });
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EquityPositionChartService, decorators: [{
|
|
37
|
+
type: Injectable,
|
|
38
|
+
args: [{
|
|
39
|
+
providedIn: 'root'
|
|
40
|
+
}]
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
42
|
+
type: Inject,
|
|
43
|
+
args: ['environment']
|
|
44
|
+
}] }]; } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXR5LXBvc2l0aW9uLWNoYXJ0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvcHJvcGVydHkvZXF1aXR5LXBvc2l0aW9uLWNoYXJ0L2VxdWl0eS1wb3NpdGlvbi1jaGFydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBRS9EOztHQUVHO0FBSUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUNVLElBQWdCLEVBQ08sV0FBZ0I7UUFEdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNPLGdCQUFXLEdBQVgsV0FBVyxDQUFLO0lBQzdDLENBQUM7SUFFTCxHQUFHO1FBQ0QseUJBQXlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssK0JBQStCLENBQUM7YUFDM0UsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWUsRUFBZSxFQUFFO1lBQ25DLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNoQyxPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUU7b0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7b0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO3dCQUNuQyxPQUFPLFlBQVksQ0FBQyxVQUFVLEVBQUU7NEJBQzlCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTs0QkFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNO3lCQUNwQixDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDO2lCQUNILENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7O3dIQXhCVSwwQkFBMEIsNENBRzNCLGFBQWE7NEhBSFosMEJBQTBCLGNBRnpCLE1BQU07NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NoYXJ0L2NoYXJ0LWRhdGEnO1xuaW1wb3J0IHsgQ2hhcnRTZXJpZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jaGFydC9jaGFydC1zZXJpZSc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgZ2V0IHByb3BlcnR5IGVxdWl0eSBwb3NpdGlvbiBoYWxmLXllYXIgaGlzdG9yeSBjaGFydCBkYXRhXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVxdWl0eVBvc2l0aW9uQ2hhcnRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG4gICkgeyB9XG5cbiAgZ2V0KCk6IE9ic2VydmFibGU8Q2hhcnREYXRhW10+IHtcbiAgICAvLyBAVE9ETyByZWZhY3RvciBiYWNrZW5kXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vcHJvcGVydGllcy9jYXRlZ29yaWVzL2VxdWl0eWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55W10pOiBDaGFydERhdGFbXSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKENoYXJ0RGF0YSwge1xuICAgICAgICAgICAgICBuYW1lOiBpdGVtLmNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0uZXF1aXR5Lm1hcCgoc2VyaWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3MoQ2hhcnRTZXJpZSwge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlcmllLmRhdGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogc2VyaWUuYW1vdW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
|