taxtank-core 0.2.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/taxtank-core.umd.js +1015 -469
- package/bundles/taxtank-core.umd.js.map +1 -1
- package/esm2015/lib/collections/bank-account.collection.js +3 -3
- package/esm2015/lib/collections/bank-transaction.collection.js +3 -3
- package/esm2015/lib/collections/client-movement.collection.js +3 -3
- package/esm2015/lib/collections/client-portfolio-report.collection.js +3 -3
- package/esm2015/lib/collections/client.collection.js +3 -3
- package/esm2015/lib/collections/collection-dictionary.js +1 -1
- package/esm2015/lib/collections/collection.js +75 -0
- package/esm2015/lib/collections/depreciation-forecast.collection.js +5 -5
- package/esm2015/lib/collections/depreciation.collection.js +3 -3
- package/esm2015/lib/collections/employee.collection.js +3 -3
- package/esm2015/lib/collections/income-source.collection.js +3 -3
- package/esm2015/lib/collections/loan.collection.js +3 -3
- package/esm2015/lib/collections/message-document.collection.js +3 -3
- package/esm2015/lib/collections/message.collection.js +3 -3
- package/esm2015/lib/collections/property.collection.js +10 -3
- package/esm2015/lib/collections/service-price.collection.js +3 -3
- package/esm2015/lib/collections/service-subscription.collection.js +3 -3
- package/esm2015/lib/collections/tax-return-category-item.collection.js +3 -3
- package/esm2015/lib/collections/tax-review.collection.js +3 -3
- package/esm2015/lib/collections/transaction-allocation.collection.js +3 -3
- package/esm2015/lib/collections/transaction.collection.js +3 -3
- package/esm2015/lib/collections/user-event-setting.collection.js +3 -3
- package/esm2015/lib/db/Enums/chart-accounts-metadata-list.enum.js +2 -1
- package/esm2015/lib/interceptors/corelogic-interceptor.js +44 -0
- package/esm2015/lib/interceptors/financial-year-interceptor.js +30 -0
- package/esm2015/lib/interceptors/interceptors.module.js +74 -0
- package/esm2015/lib/interceptors/jwt-interceptor.js +137 -0
- package/esm2015/lib/interceptors/preloader.interceptor.js +32 -0
- package/esm2015/lib/interceptors/user-switcher-interceptor.js +42 -0
- package/esm2015/lib/models/color/alphabet-colors.enum.js +30 -0
- package/esm2015/lib/models/data-table/data-table.js +6 -4
- package/esm2015/lib/models/event/app-event-type.enum.js +17 -14
- package/esm2015/lib/models/logbook/vehicle-claim.js +7 -1
- package/esm2015/lib/models/transaction/transaction.js +11 -2
- package/esm2015/lib/services/pdf/pdf.service.js +39 -6
- package/esm2015/lib/services/property/equity-position-chart.service.js +45 -0
- package/esm2015/lib/services/property/property-category-movement.service.js +47 -0
- package/esm2015/lib/services/property/property.service.js +12 -1
- package/esm2015/lib/services/xlsx/xlsx.service.js +1 -1
- package/esm2015/lib/tt-core.module.js +8 -4
- package/esm2015/public-api.js +9 -2
- package/fesm2015/taxtank-core.js +932 -428
- package/fesm2015/taxtank-core.js.map +1 -1
- package/lib/collections/bank-account.collection.d.ts +2 -2
- package/lib/collections/bank-transaction.collection.d.ts +2 -2
- package/lib/collections/client-movement.collection.d.ts +2 -2
- package/lib/collections/client-portfolio-report.collection.d.ts +2 -2
- package/lib/collections/client.collection.d.ts +2 -2
- package/lib/collections/collection-dictionary.d.ts +2 -2
- package/lib/collections/{abstract.collection.d.ts → collection.d.ts} +3 -9
- package/lib/collections/depreciation-forecast.collection.d.ts +2 -2
- package/lib/collections/depreciation.collection.d.ts +2 -2
- package/lib/collections/employee.collection.d.ts +2 -2
- package/lib/collections/income-source.collection.d.ts +2 -2
- package/lib/collections/loan.collection.d.ts +2 -2
- package/lib/collections/message-document.collection.d.ts +2 -2
- package/lib/collections/message.collection.d.ts +2 -2
- package/lib/collections/property.collection.d.ts +7 -2
- package/lib/collections/service-price.collection.d.ts +2 -2
- package/lib/collections/service-subscription.collection.d.ts +2 -2
- package/lib/collections/tax-return-category-item.collection.d.ts +2 -2
- package/lib/collections/tax-review.collection.d.ts +2 -2
- package/lib/collections/transaction-allocation.collection.d.ts +2 -2
- package/lib/collections/transaction.collection.d.ts +2 -2
- package/lib/collections/user-event-setting.collection.d.ts +2 -2
- package/lib/db/Enums/chart-accounts-metadata-list.enum.d.ts +1 -0
- package/lib/interceptors/corelogic-interceptor.d.ts +20 -0
- package/lib/interceptors/financial-year-interceptor.d.ts +12 -0
- package/lib/interceptors/interceptors.module.d.ts +6 -0
- package/lib/interceptors/jwt-interceptor.d.ts +42 -0
- package/lib/interceptors/preloader.interceptor.d.ts +15 -0
- package/lib/interceptors/user-switcher-interceptor.d.ts +19 -0
- package/lib/models/color/alphabet-colors.enum.d.ts +28 -0
- package/lib/models/data-table/data-table.d.ts +2 -2
- package/lib/models/event/app-event-type.enum.d.ts +16 -13
- package/lib/models/logbook/vehicle-claim.d.ts +4 -0
- package/lib/models/transaction/transaction.d.ts +3 -0
- package/lib/services/pdf/pdf.service.d.ts +10 -1
- package/lib/services/property/equity-position-chart.service.d.ts +15 -0
- package/lib/services/property/property-category-movement.service.d.ts +15 -0
- package/lib/services/property/property.service.d.ts +4 -0
- package/lib/services/xlsx/xlsx.service.d.ts +1 -1
- package/lib/tt-core.module.d.ts +2 -1
- package/package.json +1 -1
- package/public-api.d.ts +8 -1
- package/esm2015/lib/collections/abstract.collection.js +0 -83
package/fesm2015/taxtank-core.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { Injectable, Inject, NgModule, EventEmitter } from '@angular/core';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i1 from '@angular/common/http';
|
|
5
|
+
import { HttpParams, HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
6
|
+
import { ReplaySubject, BehaviorSubject, throwError, Subject, Observable, combineLatest, forkJoin } from 'rxjs';
|
|
7
|
+
import { map, catchError, filter, take, switchMap, finalize, mergeMap } from 'rxjs/operators';
|
|
8
|
+
import { plainToClass, Type, Exclude, Transform, Expose, classToPlain } from 'class-transformer';
|
|
9
|
+
import { JwtHelperService } from '@auth0/angular-jwt';
|
|
4
10
|
import has from 'lodash/has';
|
|
5
11
|
import get from 'lodash/get';
|
|
6
12
|
import flatten from 'lodash/flatten';
|
|
@@ -10,15 +16,10 @@ import uniqBy from 'lodash/uniqBy';
|
|
|
10
16
|
import concat from 'lodash/concat';
|
|
11
17
|
import compact from 'lodash/compact';
|
|
12
18
|
import { __decorate, __awaiter } from 'tslib';
|
|
13
|
-
import { Type, plainToClass, Exclude, Transform, Expose, classToPlain } from 'class-transformer';
|
|
14
19
|
import * as moment from 'moment';
|
|
15
20
|
import { DateRange } from 'moment-range';
|
|
16
21
|
import cloneDeep$1 from 'lodash/cloneDeep';
|
|
17
22
|
import { Validators } from '@angular/forms';
|
|
18
|
-
import { ReplaySubject, BehaviorSubject, Subject, Observable, combineLatest, forkJoin } from 'rxjs';
|
|
19
|
-
import { map, filter, mergeMap } from 'rxjs/operators';
|
|
20
|
-
import * as i1 from '@angular/common/http';
|
|
21
|
-
import { JwtHelperService } from '@auth0/angular-jwt';
|
|
22
23
|
import _ from 'lodash';
|
|
23
24
|
import { EventSourcePolyfill } from 'event-source-polyfill/src/eventsource.min.js';
|
|
24
25
|
import * as i1$1 from '@angular/router';
|
|
@@ -30,6 +31,682 @@ import { loadStripe } from '@stripe/stripe-js';
|
|
|
30
31
|
import * as xlsx from 'xlsx';
|
|
31
32
|
import * as FileSaver from 'file-saver';
|
|
32
33
|
|
|
34
|
+
/**
|
|
35
|
+
* https://api-uat.corelogic.asia/property/au/v2/suggest.json
|
|
36
|
+
* address suggestion from corelogic service
|
|
37
|
+
*/
|
|
38
|
+
class CorelogicSuggestion {
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class CorelogicService {
|
|
42
|
+
constructor(http, environment) {
|
|
43
|
+
this.http = http;
|
|
44
|
+
this.environment = environment;
|
|
45
|
+
this.accessTokenSubject = new ReplaySubject(1);
|
|
46
|
+
}
|
|
47
|
+
getAccessToken(force = false) {
|
|
48
|
+
if (!this._accessToken || force) {
|
|
49
|
+
this.http.get(`${this.environment.coreLogicUrl}/access/oauth/token?grant_type=client_credentials&client_id=${this.environment.coreLogicId}&client_secret=${this.environment.coreLogicSecret}`)
|
|
50
|
+
.pipe(map((response) => {
|
|
51
|
+
return response.access_token;
|
|
52
|
+
}))
|
|
53
|
+
.subscribe((token) => {
|
|
54
|
+
this._accessToken = token;
|
|
55
|
+
this.accessTokenSubject.next(this._accessToken);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return this.accessTokenSubject.asObservable();
|
|
59
|
+
}
|
|
60
|
+
getSuggestions(query, country = 'au') {
|
|
61
|
+
// @TODO handle different countries in future
|
|
62
|
+
return this.http.get(`${this.environment.coreLogicUrl}/property/${country}/v2/suggest.json?q=${query}`)
|
|
63
|
+
.pipe(map((response) => {
|
|
64
|
+
return response.suggestions.map((item) => plainToClass(CorelogicSuggestion, item));
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
CorelogicService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CorelogicService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
69
|
+
CorelogicService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CorelogicService, providedIn: 'root' });
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CorelogicService, decorators: [{
|
|
71
|
+
type: Injectable,
|
|
72
|
+
args: [{
|
|
73
|
+
providedIn: 'root'
|
|
74
|
+
}]
|
|
75
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
76
|
+
type: Inject,
|
|
77
|
+
args: ['environment']
|
|
78
|
+
}] }]; } });
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Corelogic interceptor add Core Logic access token for each search requests related with Core Logic API
|
|
82
|
+
*/
|
|
83
|
+
class CorelogicInterceptor {
|
|
84
|
+
constructor(corelogicService, environment) {
|
|
85
|
+
this.corelogicService = corelogicService;
|
|
86
|
+
this.environment = environment;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if requested url requested core logic, but not core logic auth api
|
|
90
|
+
* @param req
|
|
91
|
+
*/
|
|
92
|
+
addToken(req) {
|
|
93
|
+
// don't need token for this endpoint
|
|
94
|
+
if (req.url.includes(`${this.environment.coreLogicUrl}/access/oauth/token`)) {
|
|
95
|
+
return req;
|
|
96
|
+
}
|
|
97
|
+
// add core logic token to request headers
|
|
98
|
+
if (req.url.includes(this.environment.coreLogicUrl)) {
|
|
99
|
+
return req.clone({
|
|
100
|
+
setHeaders: {
|
|
101
|
+
Authorization: 'Bearer ' + this.corelogicService._accessToken
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// return request without changes if url not related with core logic
|
|
106
|
+
return req;
|
|
107
|
+
}
|
|
108
|
+
intercept(request, next) {
|
|
109
|
+
return next.handle(this.addToken(request));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
CorelogicInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CorelogicInterceptor, deps: [{ token: CorelogicService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
113
|
+
CorelogicInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CorelogicInterceptor });
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CorelogicInterceptor, decorators: [{
|
|
115
|
+
type: Injectable
|
|
116
|
+
}], ctorParameters: function () { return [{ type: CorelogicService }, { type: undefined, decorators: [{
|
|
117
|
+
type: Inject,
|
|
118
|
+
args: ['environment']
|
|
119
|
+
}] }]; } });
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Financial Year interceptor add financialYear parameter to requests because a lot of POST and GET requests require this parameter
|
|
123
|
+
* @TODO now we can get current fin year from user on backend. So we can remove this interceptor
|
|
124
|
+
*/
|
|
125
|
+
class FinancialYearInterceptor {
|
|
126
|
+
intercept(request, next) {
|
|
127
|
+
// Set financial year parameter to requests
|
|
128
|
+
let params = new HttpParams({
|
|
129
|
+
fromString: request.params.toString()
|
|
130
|
+
});
|
|
131
|
+
// clone request to add new parameters
|
|
132
|
+
let clonedReq = request.clone();
|
|
133
|
+
if (!params.get('financialYear')) {
|
|
134
|
+
params = params.set('financialYear', localStorage.getItem('financialYear'));
|
|
135
|
+
clonedReq = request.clone({
|
|
136
|
+
params: params
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return next.handle(clonedReq);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
FinancialYearInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FinancialYearInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
143
|
+
FinancialYearInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FinancialYearInterceptor });
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FinancialYearInterceptor, decorators: [{
|
|
145
|
+
type: Injectable
|
|
146
|
+
}] });
|
|
147
|
+
|
|
148
|
+
const NAME_TOKEN = 'token';
|
|
149
|
+
const NAME_REFRESH_TOKEN = 'refreshToken';
|
|
150
|
+
class JwtService extends JwtHelperService {
|
|
151
|
+
getToken() {
|
|
152
|
+
return localStorage[NAME_TOKEN];
|
|
153
|
+
}
|
|
154
|
+
getRefreshToken() {
|
|
155
|
+
return localStorage[NAME_REFRESH_TOKEN];
|
|
156
|
+
}
|
|
157
|
+
saveTokens(tokens) {
|
|
158
|
+
localStorage[NAME_TOKEN] = tokens.token;
|
|
159
|
+
localStorage[NAME_REFRESH_TOKEN] = tokens.refreshToken;
|
|
160
|
+
}
|
|
161
|
+
destroyTokens() {
|
|
162
|
+
localStorage.removeItem(NAME_TOKEN);
|
|
163
|
+
localStorage.removeItem(NAME_REFRESH_TOKEN);
|
|
164
|
+
}
|
|
165
|
+
getUser() {
|
|
166
|
+
return this.decodeToken();
|
|
167
|
+
}
|
|
168
|
+
isMe(userId) {
|
|
169
|
+
return this.getUser().id === userId;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
JwtService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
173
|
+
JwtService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, providedIn: 'root' });
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, decorators: [{
|
|
175
|
+
type: Injectable,
|
|
176
|
+
args: [{
|
|
177
|
+
providedIn: 'root'
|
|
178
|
+
}]
|
|
179
|
+
}] });
|
|
180
|
+
|
|
181
|
+
class AuthService {
|
|
182
|
+
constructor(http, jwtService, environment) {
|
|
183
|
+
this.http = http;
|
|
184
|
+
this.jwtService = jwtService;
|
|
185
|
+
this.environment = environment;
|
|
186
|
+
this.isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());
|
|
187
|
+
}
|
|
188
|
+
setAuth(response) {
|
|
189
|
+
this.jwtService.saveTokens(response);
|
|
190
|
+
this.isLoggedInSubject.next(true);
|
|
191
|
+
}
|
|
192
|
+
login(username, password) {
|
|
193
|
+
return this.http.post(`${this.environment.apiV2}/login_check`, { username, password }).pipe(map((response) => {
|
|
194
|
+
this.setAuth(response);
|
|
195
|
+
return response;
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
refresh(refreshToken) {
|
|
199
|
+
return this.http.post(`${this.environment.apiV2}/token/refresh`, { refreshToken }).pipe(map((response) => {
|
|
200
|
+
this.setAuth(response);
|
|
201
|
+
return response;
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
logoutFront(url = '/login') {
|
|
205
|
+
localStorage.clear();
|
|
206
|
+
location.replace(url);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, deps: [{ token: i1.HttpClient }, { token: JwtService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
210
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, decorators: [{
|
|
212
|
+
type: Injectable,
|
|
213
|
+
args: [{
|
|
214
|
+
providedIn: 'root'
|
|
215
|
+
}]
|
|
216
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: JwtService }, { type: undefined, decorators: [{
|
|
217
|
+
type: Inject,
|
|
218
|
+
args: ['environment']
|
|
219
|
+
}] }]; } });
|
|
220
|
+
|
|
221
|
+
const MESSAGE_DEFAULT_500_ERROR = 'Unexpected error! Please try again later. You can send us via chat your questions.';
|
|
222
|
+
/**
|
|
223
|
+
* JWT Interceptor add jwt token to each request related with TaxTank API
|
|
224
|
+
*/
|
|
225
|
+
class JwtInterceptor {
|
|
226
|
+
constructor(jwtService, authService, environment) {
|
|
227
|
+
this.jwtService = jwtService;
|
|
228
|
+
this.authService = authService;
|
|
229
|
+
this.environment = environment;
|
|
230
|
+
this.isRefreshingToken = false;
|
|
231
|
+
this.tokenSubject = new BehaviorSubject(null);
|
|
232
|
+
}
|
|
233
|
+
addToken(req) {
|
|
234
|
+
return req.clone({
|
|
235
|
+
setHeaders: { Authorization: 'Bearer ' + this.jwtService.getToken() },
|
|
236
|
+
withCredentials: true
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
intercept(request, next) {
|
|
240
|
+
// skip third party requests
|
|
241
|
+
if (!request.url.includes(this.environment.api_uri)) {
|
|
242
|
+
return next.handle(request);
|
|
243
|
+
}
|
|
244
|
+
// add token to every api request
|
|
245
|
+
return next.handle(this.addToken(request)).pipe(
|
|
246
|
+
// handle errors
|
|
247
|
+
catchError((err) => {
|
|
248
|
+
if (err instanceof HttpErrorResponse) {
|
|
249
|
+
switch (err.status) {
|
|
250
|
+
// unexpected errors
|
|
251
|
+
case 405:
|
|
252
|
+
case 500:
|
|
253
|
+
this.handle500Error();
|
|
254
|
+
break;
|
|
255
|
+
// expected errors
|
|
256
|
+
case 401:
|
|
257
|
+
return this.handle401Error(request, next, err);
|
|
258
|
+
case 400:
|
|
259
|
+
case 403:
|
|
260
|
+
// @TODO in most cases 404 is not an error, handle in components
|
|
261
|
+
// case 404:
|
|
262
|
+
this.showErrorMessages(err);
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return throwError(err);
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* @TODO log
|
|
271
|
+
* @TODO waiting for backend to handle errors in a better way
|
|
272
|
+
*/
|
|
273
|
+
handle400Error(err) {
|
|
274
|
+
// this.snackBar.open(err.error['hydra:description'], '', {
|
|
275
|
+
// panelClass: 'error'
|
|
276
|
+
// });
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* @TODO log
|
|
280
|
+
* @TODO waiting for backend to handle errors in a better way
|
|
281
|
+
*/
|
|
282
|
+
handle403Error(err) {
|
|
283
|
+
// this.snackBar.open(err.error['hydra:description'], '', {
|
|
284
|
+
// panelClass: 'error'
|
|
285
|
+
// });
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* @TODO log
|
|
289
|
+
*/
|
|
290
|
+
handle500Error() {
|
|
291
|
+
// this.snackBar.open(MESSAGE_DEFAULT_500_ERROR, '', {
|
|
292
|
+
// panelClass: 'error'
|
|
293
|
+
// });
|
|
294
|
+
}
|
|
295
|
+
handle401Error(req, next, err) {
|
|
296
|
+
if (req.url.includes('token/refresh') || req.url.includes('login')) {
|
|
297
|
+
if (req.url.includes('token/refresh')) {
|
|
298
|
+
this.authService.logoutFront();
|
|
299
|
+
}
|
|
300
|
+
return throwError(err);
|
|
301
|
+
}
|
|
302
|
+
// refreshing token, wait until it's done and retry the request
|
|
303
|
+
if (this.isRefreshingToken) {
|
|
304
|
+
return this.tokenSubject.pipe(filter(token => token != null), take(1), switchMap(token => next.handle(this.addToken(req))));
|
|
305
|
+
// refresh token
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
// subsequent requests should wait until refresh token is ready
|
|
309
|
+
this.isRefreshingToken = true;
|
|
310
|
+
this.tokenSubject.next(null);
|
|
311
|
+
return this.authService.refresh(this.jwtService.getRefreshToken()).pipe(switchMap((tokens) => {
|
|
312
|
+
this.tokenSubject.next(tokens.token);
|
|
313
|
+
return next.handle(this.addToken(req));
|
|
314
|
+
}), catchError(() => {
|
|
315
|
+
this.authService.logoutFront();
|
|
316
|
+
return throwError(err);
|
|
317
|
+
}), finalize(() => {
|
|
318
|
+
this.isRefreshingToken = false;
|
|
319
|
+
}));
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Handle error messages
|
|
324
|
+
* @param errorResponse from which messages should be taken
|
|
325
|
+
*
|
|
326
|
+
* @TODO move to separated interceptor
|
|
327
|
+
*/
|
|
328
|
+
showErrorMessages(errorResponse) {
|
|
329
|
+
if (!errorResponse.error.violations) {
|
|
330
|
+
// this.snackBar.open('Something went wrong', '', {
|
|
331
|
+
// panelClass: 'error'
|
|
332
|
+
// });
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
errorResponse.error.violations.forEach((violation) => {
|
|
336
|
+
// this.snackBar.open(violation['message'], '', {
|
|
337
|
+
// panelClass: 'error'
|
|
338
|
+
// });
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtInterceptor, deps: [{ token: JwtService }, { token: AuthService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
343
|
+
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtInterceptor });
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
345
|
+
type: Injectable
|
|
346
|
+
}], ctorParameters: function () { return [{ type: JwtService }, { type: AuthService }, { type: undefined, decorators: [{
|
|
347
|
+
type: Inject,
|
|
348
|
+
args: ['environment']
|
|
349
|
+
}] }]; } });
|
|
350
|
+
|
|
351
|
+
const KEY = '_switch_user';
|
|
352
|
+
/**
|
|
353
|
+
* provides user management to managers (users with ROLE_ACCOUNTANT for now, more in future)
|
|
354
|
+
*/
|
|
355
|
+
class UserSwitcherService {
|
|
356
|
+
/**
|
|
357
|
+
* get switched username
|
|
358
|
+
*/
|
|
359
|
+
get() {
|
|
360
|
+
return localStorage[KEY];
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* switch to user (username should be used for correct work of backend)
|
|
364
|
+
*/
|
|
365
|
+
set(username) {
|
|
366
|
+
localStorage[KEY] = username;
|
|
367
|
+
window.location.replace('/client/dashboard');
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* go back to original user
|
|
371
|
+
*/
|
|
372
|
+
reset() {
|
|
373
|
+
localStorage.removeItem(KEY);
|
|
374
|
+
window.location.replace('/firm/dashboard');
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
UserSwitcherService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
378
|
+
UserSwitcherService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherService, providedIn: 'root' });
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherService, decorators: [{
|
|
380
|
+
type: Injectable,
|
|
381
|
+
args: [{
|
|
382
|
+
providedIn: 'root'
|
|
383
|
+
}]
|
|
384
|
+
}] });
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Impersonate current's user (manager) to client experience with help of special header
|
|
388
|
+
*/
|
|
389
|
+
class UserSwitcherInterceptor {
|
|
390
|
+
constructor(userSwitcherService, environment) {
|
|
391
|
+
this.userSwitcherService = userSwitcherService;
|
|
392
|
+
this.environment = environment;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* add token header if request url contain TaxTank API URL
|
|
396
|
+
*/
|
|
397
|
+
switch(req, username) {
|
|
398
|
+
// skip third party api requests
|
|
399
|
+
if (!req.url.includes(this.environment.api_uri) || !username) {
|
|
400
|
+
return req;
|
|
401
|
+
}
|
|
402
|
+
const params = new HttpParams({ fromString: req.params.toString() }).set('_switch_user', username);
|
|
403
|
+
return req.clone({ params });
|
|
404
|
+
// @TODO move to header solution when backend can support it
|
|
405
|
+
// return req.clone({
|
|
406
|
+
// setHeaders: {
|
|
407
|
+
// HTTP_X_SWITCH_USER: username
|
|
408
|
+
// }
|
|
409
|
+
// });
|
|
410
|
+
}
|
|
411
|
+
intercept(request, next) {
|
|
412
|
+
return next.handle(this.switch(request, this.userSwitcherService.get()));
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
UserSwitcherInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherInterceptor, deps: [{ token: UserSwitcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
416
|
+
UserSwitcherInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherInterceptor });
|
|
417
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherInterceptor, decorators: [{
|
|
418
|
+
type: Injectable
|
|
419
|
+
}], ctorParameters: function () { return [{ type: UserSwitcherService }, { type: undefined, decorators: [{
|
|
420
|
+
type: Inject,
|
|
421
|
+
args: ['environment']
|
|
422
|
+
}] }]; } });
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Backend endpoint class
|
|
426
|
+
*/
|
|
427
|
+
class Endpoint {
|
|
428
|
+
constructor(method, pattern) {
|
|
429
|
+
this.method = method;
|
|
430
|
+
this.pattern = pattern;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* check url with regexp
|
|
434
|
+
* @param url
|
|
435
|
+
*/
|
|
436
|
+
test(url) {
|
|
437
|
+
return this.regexp.test(url);
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Get regexp for endpoint
|
|
441
|
+
*/
|
|
442
|
+
get regexp() {
|
|
443
|
+
return new RegExp(`^${this.method} \.\*${this.pattern}$`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* List of all app endpoints
|
|
449
|
+
*/
|
|
450
|
+
const ENDPOINTS = {
|
|
451
|
+
ASSETS_GET: new Endpoint('GET', '\\/assets\\/\.\*\\/\\d+'),
|
|
452
|
+
BANK_ACCOUNTS_GET: new Endpoint('GET', '\\/bank-accounts'),
|
|
453
|
+
BANK_ACCOUNTS_POST: new Endpoint('POST', '\\/bank-accounts'),
|
|
454
|
+
BANK_ACCOUNTS_PUT: new Endpoint('PUT', '\\/bank-accounts\\/\\d+'),
|
|
455
|
+
BANK_CONNECTION_POST: new Endpoint('POST', '\\/bank-connections'),
|
|
456
|
+
BANK_TRANSACTIONS_GET: new Endpoint('GET', '\\/bank-transactions'),
|
|
457
|
+
BANK_TRANSACTIONS_DELETE: new Endpoint('DELETE', '\\/bank-transactions\\/\\d+'),
|
|
458
|
+
BANK_TRANSACTIONS_IMPORT_POST: new Endpoint('POST', '\\/bank-transactions\\/\\d+\\/import'),
|
|
459
|
+
BASIQ_ACCOUNTS_GET: new Endpoint('GET', '\\/basiq\\/\\accounts'),
|
|
460
|
+
CAPITAL_COSTS_GET: new Endpoint('GET', '\\/capital-costs'),
|
|
461
|
+
CHARTS_INCOME_GET: new Endpoint('GET', '\\/charts\\/\\incomes'),
|
|
462
|
+
CHARTS_EXPENSES_GET: new Endpoint('GET', '\\/charts\\/\\expenses'),
|
|
463
|
+
CHART_ACCOUNTS_GET: new Endpoint('GET', '\\/chart-accounts'),
|
|
464
|
+
CLIENTS_GET: new Endpoint('GET', '\\/clients'),
|
|
465
|
+
CLIENTS_PUT: new Endpoint('PUT', '\\/clients'),
|
|
466
|
+
CLIENTS_EXCLUDE_PUT: new Endpoint('PUT', '\\/clients\\/\\d+\\/exclude'),
|
|
467
|
+
CLIENTS_INVITES_GET: new Endpoint('GET', '\\/clients\\/\\invites'),
|
|
468
|
+
CLIENTS_INVITES_POST: new Endpoint('POST', '\\/clients\\/\\invites'),
|
|
469
|
+
CLIENTS_INVITES_DELETE: new Endpoint('DELETE', '\\/clients\\/\\invites\\/\\d+'),
|
|
470
|
+
CLIENTS_INVITES_ACCEPT_POST: new Endpoint('POST', '\\/clients\\/\\invites\\/\\d+\\/accept'),
|
|
471
|
+
CLIENTS_INVITES_REJECT_POST: new Endpoint('POST', '\\/clients\\/\\invites\\/\\d+\\/reject'),
|
|
472
|
+
CLIENTS_INVITES_RESEND_POST: new Endpoint('POST', '\\/clients\\/\\invites\\/\\d+\\/resend'),
|
|
473
|
+
CLIENT_MOVEMENTS_GET: new Endpoint('GET', '\\/client-movements'),
|
|
474
|
+
CLIENT_MOVEMENTS_POST: new Endpoint('POST', '\\/client-movements'),
|
|
475
|
+
COUNTRIES_GET: new Endpoint('GET', '\\/countries'),
|
|
476
|
+
DEPRECIATIONS_CLOSING_GET: new Endpoint('GET', '\\/depreciations\\/\\closing-balance\.\*'),
|
|
477
|
+
DEPRECIATIONS_GET: new Endpoint('GET', '\\/depreciations'),
|
|
478
|
+
DEPRECIATIONS_POST: new Endpoint('POST', '\\/depreciations'),
|
|
479
|
+
DEPRECIATIONS_PUT: new Endpoint('PUT', '\\/depreciations\\/\\d+'),
|
|
480
|
+
EMPLOYEES_GET: new Endpoint('GET', '\\/employees'),
|
|
481
|
+
EMPLOYEES_INVITES_GET: new Endpoint('GET', '\\/employees\\/\\invites'),
|
|
482
|
+
EMPLOYEES_INVITES_DELETE: new Endpoint('DELETE', '\\/employees\\/\\invites\\/\\d+'),
|
|
483
|
+
EMPLOYEES_INVITE_POST: new Endpoint('POST', '\\/employees\\/\\invites'),
|
|
484
|
+
EMPLOYEES_INVITES_REJECT_POST: new Endpoint('POST', '\\/employees\\/\\invites\\/\\d+\\/\\reject'),
|
|
485
|
+
EMPLOYEES_INVITES_RESEND_POST: new Endpoint('POST', '\\/employees\\/\\invites\\/\\d+\\/\\resend'),
|
|
486
|
+
FIRM_GET: new Endpoint('GET', '\\/firms'),
|
|
487
|
+
FIRM_CURRENT_GET: new Endpoint('GET', '\\/firms\\/current'),
|
|
488
|
+
FIRM_CURRENT_PUT: new Endpoint('PUT', '\\/firms\\/current\.\*'),
|
|
489
|
+
FIRM_INVITE_POST: new Endpoint('POST', '\\/firms\\/invite'),
|
|
490
|
+
FIRM_REGISTRATION_POST: new Endpoint('POST', '\\/firms\\/registration'),
|
|
491
|
+
FIRM_UPDATE_PHOTO_POST: new Endpoint('POST', '\\/firms\\/photo\.\*'),
|
|
492
|
+
FOLDERS_GET: new Endpoint('GET', '\\/folders'),
|
|
493
|
+
FOLDERS_POST: new Endpoint('POST', '\\/folders'),
|
|
494
|
+
FOLDERS_PUT: new Endpoint('PUT', '\\/folders\\/\\d+'),
|
|
495
|
+
FOLDERS_DOCUMENTS_POST: new Endpoint('POST', '\\/folders\\/\\d+\\/documents'),
|
|
496
|
+
FOLDERS_DOCUMENTS_PUT: new Endpoint('PUT', '\\/folders\\/\\d+\\/documents\\/\\d+'),
|
|
497
|
+
INCOME_SOURCES_GET: new Endpoint('GET', '\\/income-sources'),
|
|
498
|
+
INCOME_SOURCES_POST: new Endpoint('POST', '\\/income-sources'),
|
|
499
|
+
INCOME_SOURCES_PUT: new Endpoint('PUT', '\\/income-sources'),
|
|
500
|
+
INCOME_SOURCES_DELETE: new Endpoint('DELETE', '\\/income-sources\\/\\d+'),
|
|
501
|
+
INCOME_SOURCE_FORECAST_GET: new Endpoint('GET', '\\/income-source-forecasts'),
|
|
502
|
+
INCOME_SOURCE_FORECAST_POST: new Endpoint('POST', '\\/income-source-forecasts'),
|
|
503
|
+
INCOME_SOURCE_FORECAST_PUT: new Endpoint('PUT', '\\/income-source-forecasts'),
|
|
504
|
+
INCOME_SOURCE_FORECAST_DELETE: new Endpoint('DELETE', '\\/income-source-forecasts\\/\\d+'),
|
|
505
|
+
INCOME_SOURCE_TYPES_GET: new Endpoint('GET', '\\/income-source-types'),
|
|
506
|
+
LOANS_GET: new Endpoint('GET', '\\/bank-accounts\\/loans'),
|
|
507
|
+
LOANS_POST: new Endpoint('POST', '\\/bank-accounts\\/loans'),
|
|
508
|
+
LOANS_PUT: new Endpoint('PUT', '\\/bank-accounts\\/loans/\\d+'),
|
|
509
|
+
LOANS_PAYOUT_POST: new Endpoint('POST', '\\/loans\\/\\d+\\/payout'),
|
|
510
|
+
LOANS_PAYOUT_PUT: new Endpoint('PUT', '\\/loans\\/\\d+\\/payout\\/\\d+'),
|
|
511
|
+
LOANS_PAYOUT_DELETE: new Endpoint('DELETE', '\\/loans\\/\\d+\\/payout\\/\\d+'),
|
|
512
|
+
LOANS_CALCULATION_POST: new Endpoint('POST', '\\/bank-accounts\\/loans\\/calculation'),
|
|
513
|
+
LOGIN_CHECK_POST: new Endpoint('POST', '\\/login_check'),
|
|
514
|
+
NOTIFICATIONS_GET: new Endpoint('GET', '\\/service-notifications'),
|
|
515
|
+
OCCUPATIONS_GET: new Endpoint('GET', '\\/occupations'),
|
|
516
|
+
PROPERTIES_GET: new Endpoint('GET', '\\/properties'),
|
|
517
|
+
PROPERTIES_POST: new Endpoint('POST', '\\/properties'),
|
|
518
|
+
PROPERTY_PUT: new Endpoint('PUT', '\\/properties/\\d+'),
|
|
519
|
+
PROPERTIES_PUT: new Endpoint('PUT', '\\/properties'),
|
|
520
|
+
PROPERTIES_CATEGORIES_EQUITY_GET: new Endpoint('GET', '\\/properties\\/categories\\/equity'),
|
|
521
|
+
PROPERTIES_CATEGORIES_GET: new Endpoint('GET', '\\/properties\\/categories'),
|
|
522
|
+
PROPERTIES_CATEGORIES_PUT: new Endpoint('PUT', '\\/properties\\/categories\\/\\d+'),
|
|
523
|
+
PROPERTIES_CATEGORIES_POST: new Endpoint('POST', '\\/properties\\/categories'),
|
|
524
|
+
PROPERTIES_CATEGORY_MOVEMENTS_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/category-movements'),
|
|
525
|
+
PROPERTIES_CATEGORY_MOVEMENTS_PUT: new Endpoint('PUT', '\\/properties\\/\\d+\\/category-movements\\/\\d+'),
|
|
526
|
+
PROPERTIES_CO_OWNERS_PUT: new Endpoint('PUT', '\\/properties\\/co-owners\\/\\d+'),
|
|
527
|
+
PROPERTIES_CO_OWNERS_GET: new Endpoint('GET', '\\/properties\\/co-owners'),
|
|
528
|
+
PROPERTIES_CO_OWNERS_POST: new Endpoint('POST', '\\/properties\\/co-owners'),
|
|
529
|
+
PROPERTIES_DEACTIVATE_PUT: new Endpoint('PUT', '\\/properties\\/\\d+\\/deactivate'),
|
|
530
|
+
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_GET: new Endpoint('GET', '\\/properties\\/\\d+\\/depreciation-capital-projects'),
|
|
531
|
+
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/depreciation-capital-projects'),
|
|
532
|
+
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_PUT: new Endpoint('PUT', '\\/properties\\/\\d+\\/depreciation-capital-projects\\/\\d+'),
|
|
533
|
+
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_DELETE: new Endpoint('DELETE', '\\/properties\\/\\d+\\/depreciation-capital-projects\\/\\d+'),
|
|
534
|
+
PROPERTIES_DOCUMENTS_GET: new Endpoint('GET', '\\/properties\\/documents'),
|
|
535
|
+
PROPERTIES_DOCUMENTS_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/documents'),
|
|
536
|
+
PROPERTIES_DOCUMENTS_PUT: new Endpoint('PUT', '\\/properties\\/documents\\/\\d+'),
|
|
537
|
+
PROPERTIES_DOCUMENTS_DELETE: new Endpoint('DELETE', '\\/properties\\/documents\\/\\d+'),
|
|
538
|
+
PROPERTIES_PHOTO_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/photo\.\*'),
|
|
539
|
+
PROPERTIES_SUGGESTIONS_GET: new Endpoint('GET', '/property\\/\\w+\\/v2\\/.*$'),
|
|
540
|
+
PROPERTIES_VALUATIONS_DOCUMENTS_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/valuations\\/\\d+\\/documents'),
|
|
541
|
+
PRORATION_COST_POST: new Endpoint('POST', '\\/subscriptions\\/proration-cost'),
|
|
542
|
+
SALARY_FORECAST_GET: new Endpoint('GET', '\\/salary-forecasts'),
|
|
543
|
+
SALARY_FORECAST_POST: new Endpoint('POST', '\\/salary-forecasts'),
|
|
544
|
+
SALARY_FORECAST_PUT: new Endpoint('PUT', '\\/salary-forecasts'),
|
|
545
|
+
SERVICE_PRICES_GET: new Endpoint('GET', '\\/service-prices'),
|
|
546
|
+
SERVICE_PAYMENTS_GET: new Endpoint('GET', '\\/service-payments'),
|
|
547
|
+
STRIPE_BILLING_PORTAL_GET: new Endpoint('GET', '\\/stripe\\/billing-portal-session'),
|
|
548
|
+
STRIPE_CHECKOUT_SESSION_POST: new Endpoint('POST', '\\/stripe\\/checkout-session'),
|
|
549
|
+
SUBSCRIPTION_LAST_GET: new Endpoint('GET', '\\/subscriptions\\/last'),
|
|
550
|
+
SUBSCRIPTION_ITEMS_PUT: new Endpoint('PUT', '\\/subscriptions\\/items'),
|
|
551
|
+
TAX_CALCULATION_POST: new Endpoint('POST', '\\/tax-calculation'),
|
|
552
|
+
TAX_REVIEWS_GET: new Endpoint('GET', '\\/tax-reviews'),
|
|
553
|
+
TAX_REVIEWS_DELETE: new Endpoint('DELETE', '\\/tax-reviews\\/\\d+'),
|
|
554
|
+
TAX_REVIEWS_POST: new Endpoint('POST', '\\/tax-reviews'),
|
|
555
|
+
TAX_REVIEWS_PUT: new Endpoint('PUT', '\\/tax-reviews\\/\\d+'),
|
|
556
|
+
TAX_SUMMARY_ACTUAL_GET: new Endpoint('GET', '\\/tax-summary\\/actuals'),
|
|
557
|
+
TAX_SUMMARY_FORECAST_GET: new Endpoint('GET', '\\/tax-summary\\/forecasts'),
|
|
558
|
+
TRANSACTION_DELETE: new Endpoint('DELETE', '\\/transactions\\/\\d+'),
|
|
559
|
+
TRANSACTION_PUT: new Endpoint('PUT', '\\/transactions\\/\\d+'),
|
|
560
|
+
TRANSACTIONS_GET: new Endpoint('GET', '\\/transactions'),
|
|
561
|
+
TRANSACTIONS_POST: new Endpoint('POST', '\\/transactions'),
|
|
562
|
+
TRANSACTIONS_PUT: new Endpoint('PUT', '\\/transactions'),
|
|
563
|
+
TRANSACTIONS_ALLOCATIONS_GET: new Endpoint('GET', '\\/transactions-allocations'),
|
|
564
|
+
TRANSACTIONS_ALLOCATIONS_POST: new Endpoint('POST', '\\/transactions-allocations'),
|
|
565
|
+
TRANSACTIONS_ALLOCATIONS_DELETE: new Endpoint('DELETE', '\\/transactions-allocations\\/\\d+'),
|
|
566
|
+
USER_CONFIRMATION_POST: new Endpoint('POST', '\\/users\\/confirmation'),
|
|
567
|
+
USER_CURRENT_GET: new Endpoint('GET', '\\/users\\/current'),
|
|
568
|
+
USER_CURRENT_PASSWORD_PUT: new Endpoint('PUT', '\\/users\\/current\\/password\.\*'),
|
|
569
|
+
USER_EVENT_SETTINGS_GET: new Endpoint('GET', '\\/user-event-settings'),
|
|
570
|
+
USER_EVENT_TYPES_GET: new Endpoint('GET', '\\/user-event-types'),
|
|
571
|
+
USER_INVITE_DELETE: new Endpoint('DELETE', '\\/users\\/invite\\/\\d+'),
|
|
572
|
+
USER_INVITE_POST: new Endpoint('POST', '\\/users\\/invite'),
|
|
573
|
+
USER_INVITE_RESEND_POST: new Endpoint('POST', '\\/users\\/invite/\\d+\\/resend'),
|
|
574
|
+
USER_PUT: new Endpoint('PUT', '\\/users\\/\\d+'),
|
|
575
|
+
USER_REGISTRATION_POST: new Endpoint('POST', '\\/users\\/registration'),
|
|
576
|
+
USER_RESET_PASSWORD_PUT: new Endpoint('PUT', '\\/users\\/reset-password'),
|
|
577
|
+
USER_SEARCH_GET: new Endpoint('GET', '\\/users\\/search\.\*'),
|
|
578
|
+
USER_UPDATE_PHOTO_POST: new Endpoint('POST', '\\/users\\/photo\.\*'),
|
|
579
|
+
USER_STATUS_PUT: new Endpoint('PUT', '\\/users\\/status'),
|
|
580
|
+
VEHICLES_GET: new Endpoint('GET', '\\/vehicles'),
|
|
581
|
+
VEHICLES_POST: new Endpoint('POST', '\\/vehicles'),
|
|
582
|
+
VEHICLES_PUT: new Endpoint('PUT', '\\/vehicles\\/\\d+'),
|
|
583
|
+
VEHICLE_CLAIMS_GET: new Endpoint('GET', '\\/vehicle-claims'),
|
|
584
|
+
VEHICLE_CLAIMS_POST: new Endpoint('POST', '\\/vehicle-claims'),
|
|
585
|
+
VEHICLE_LOGBOOK_POST: new Endpoint('POST', '\\/vehicles\\/\\d+\\/logbooks'),
|
|
586
|
+
VEHICLE_LOGBOOK_PUT: new Endpoint('PUT', '\\/vehicles\\/\\d+\\/logbooks\\/\\d+'),
|
|
587
|
+
VEHICLE_CLAIMS_PUT: new Endpoint('PUT', '\\/vehicle-claims\\/\\d+')
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
class PreloaderService {
|
|
591
|
+
constructor() {
|
|
592
|
+
this.activePreloaders = new BehaviorSubject([]);
|
|
593
|
+
}
|
|
594
|
+
get() {
|
|
595
|
+
return this.activePreloaders.asObservable();
|
|
596
|
+
}
|
|
597
|
+
add(endpoint) {
|
|
598
|
+
const activePreloaders = this.activePreloaders.getValue();
|
|
599
|
+
activePreloaders.push(endpoint);
|
|
600
|
+
this.activePreloaders.next(activePreloaders);
|
|
601
|
+
}
|
|
602
|
+
delete(endpoint) {
|
|
603
|
+
let activePreloaders = this.activePreloaders.getValue();
|
|
604
|
+
activePreloaders = activePreloaders.filter((preloader) => preloader !== endpoint);
|
|
605
|
+
this.activePreloaders.next(activePreloaders);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
PreloaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
609
|
+
PreloaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderService, providedIn: 'root' });
|
|
610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderService, decorators: [{
|
|
611
|
+
type: Injectable,
|
|
612
|
+
args: [{
|
|
613
|
+
providedIn: 'root'
|
|
614
|
+
}]
|
|
615
|
+
}], ctorParameters: function () { return []; } });
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* interceptor for preloader handling
|
|
619
|
+
*/
|
|
620
|
+
class PreloaderInterceptor {
|
|
621
|
+
constructor(preloaderService) {
|
|
622
|
+
this.preloaderService = preloaderService;
|
|
623
|
+
}
|
|
624
|
+
intercept(request, next) {
|
|
625
|
+
const endpoint = this.findEndpoint(`${request.method} ${request.url}`);
|
|
626
|
+
if (!!endpoint) {
|
|
627
|
+
this.preloaderService.add(endpoint);
|
|
628
|
+
return next.handle(request).pipe(finalize(() => {
|
|
629
|
+
this.preloaderService.delete(endpoint);
|
|
630
|
+
}));
|
|
631
|
+
}
|
|
632
|
+
return next.handle(request);
|
|
633
|
+
}
|
|
634
|
+
findEndpoint(requestPath) {
|
|
635
|
+
return Object.values(ENDPOINTS).find((endpoint) => endpoint.test(requestPath));
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
PreloaderInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderInterceptor, deps: [{ token: PreloaderService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
639
|
+
PreloaderInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderInterceptor });
|
|
640
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderInterceptor, decorators: [{
|
|
641
|
+
type: Injectable
|
|
642
|
+
}], ctorParameters: function () { return [{ type: PreloaderService }]; } });
|
|
643
|
+
|
|
644
|
+
class InterceptorsModule {
|
|
645
|
+
}
|
|
646
|
+
InterceptorsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: InterceptorsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
647
|
+
InterceptorsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: InterceptorsModule });
|
|
648
|
+
InterceptorsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: InterceptorsModule, providers: [
|
|
649
|
+
{
|
|
650
|
+
provide: HTTP_INTERCEPTORS,
|
|
651
|
+
useClass: CorelogicInterceptor,
|
|
652
|
+
multi: true
|
|
653
|
+
},
|
|
654
|
+
// @TODO move to user module
|
|
655
|
+
{
|
|
656
|
+
provide: HTTP_INTERCEPTORS,
|
|
657
|
+
useClass: FinancialYearInterceptor,
|
|
658
|
+
multi: true
|
|
659
|
+
},
|
|
660
|
+
{
|
|
661
|
+
provide: HTTP_INTERCEPTORS,
|
|
662
|
+
useClass: JwtInterceptor,
|
|
663
|
+
multi: true
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
provide: HTTP_INTERCEPTORS,
|
|
667
|
+
useClass: UserSwitcherInterceptor,
|
|
668
|
+
multi: true
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
provide: HTTP_INTERCEPTORS,
|
|
672
|
+
useClass: PreloaderInterceptor,
|
|
673
|
+
multi: true
|
|
674
|
+
}
|
|
675
|
+
] });
|
|
676
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: InterceptorsModule, decorators: [{
|
|
677
|
+
type: NgModule,
|
|
678
|
+
args: [{
|
|
679
|
+
providers: [
|
|
680
|
+
{
|
|
681
|
+
provide: HTTP_INTERCEPTORS,
|
|
682
|
+
useClass: CorelogicInterceptor,
|
|
683
|
+
multi: true
|
|
684
|
+
},
|
|
685
|
+
// @TODO move to user module
|
|
686
|
+
{
|
|
687
|
+
provide: HTTP_INTERCEPTORS,
|
|
688
|
+
useClass: FinancialYearInterceptor,
|
|
689
|
+
multi: true
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
provide: HTTP_INTERCEPTORS,
|
|
693
|
+
useClass: JwtInterceptor,
|
|
694
|
+
multi: true
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
provide: HTTP_INTERCEPTORS,
|
|
698
|
+
useClass: UserSwitcherInterceptor,
|
|
699
|
+
multi: true
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
provide: HTTP_INTERCEPTORS,
|
|
703
|
+
useClass: PreloaderInterceptor,
|
|
704
|
+
multi: true
|
|
705
|
+
}
|
|
706
|
+
]
|
|
707
|
+
}]
|
|
708
|
+
}] });
|
|
709
|
+
|
|
33
710
|
class TtCoreModule {
|
|
34
711
|
static forRoot(environment) {
|
|
35
712
|
localStorage.setItem('api_uri', environment['api_uri']);
|
|
@@ -45,16 +722,19 @@ class TtCoreModule {
|
|
|
45
722
|
}
|
|
46
723
|
}
|
|
47
724
|
TtCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TtCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
48
|
-
TtCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TtCoreModule, imports: [CommonModule
|
|
725
|
+
TtCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TtCoreModule, imports: [CommonModule,
|
|
726
|
+
InterceptorsModule] });
|
|
49
727
|
TtCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TtCoreModule, imports: [[
|
|
50
|
-
CommonModule
|
|
728
|
+
CommonModule,
|
|
729
|
+
InterceptorsModule
|
|
51
730
|
]] });
|
|
52
731
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TtCoreModule, decorators: [{
|
|
53
732
|
type: NgModule,
|
|
54
733
|
args: [{
|
|
55
734
|
declarations: [],
|
|
56
735
|
imports: [
|
|
57
|
-
CommonModule
|
|
736
|
+
CommonModule,
|
|
737
|
+
InterceptorsModule
|
|
58
738
|
]
|
|
59
739
|
}]
|
|
60
740
|
}] });
|
|
@@ -144,9 +824,9 @@ class CollectionDictionary {
|
|
|
144
824
|
|
|
145
825
|
const DEFAULT_INDEX = 'other';
|
|
146
826
|
/**
|
|
147
|
-
* collection
|
|
827
|
+
* Base collection class. Contains common properties and methods for all collections
|
|
148
828
|
*/
|
|
149
|
-
class
|
|
829
|
+
class Collection {
|
|
150
830
|
constructor(items = []) {
|
|
151
831
|
this.items = items;
|
|
152
832
|
}
|
|
@@ -180,14 +860,6 @@ class AbstractCollection {
|
|
|
180
860
|
get length() {
|
|
181
861
|
return this.items.length;
|
|
182
862
|
}
|
|
183
|
-
/**
|
|
184
|
-
* method returns amount of fields from passed items
|
|
185
|
-
* @param field Name of field for calculation
|
|
186
|
-
* @param items (optional) Array of items need to be calculated. All collection's items by default
|
|
187
|
-
*/
|
|
188
|
-
getSummary(field, items = this.toArray()) {
|
|
189
|
-
return items.reduce((sum, item) => sum += item[field], 0);
|
|
190
|
-
}
|
|
191
863
|
/**
|
|
192
864
|
* Get list of items ids
|
|
193
865
|
*/
|
|
@@ -242,7 +914,7 @@ const TYPE_LOAN = [
|
|
|
242
914
|
/**
|
|
243
915
|
* Collection of bank accounts.
|
|
244
916
|
*/
|
|
245
|
-
class BankAccountCollection extends
|
|
917
|
+
class BankAccountCollection extends Collection {
|
|
246
918
|
/**
|
|
247
919
|
* get list of bank accounts with passed types
|
|
248
920
|
*/
|
|
@@ -386,7 +1058,7 @@ const TRANSACTION_TRANSFER_DELAY = 96 * 3600 * 1000;
|
|
|
386
1058
|
* @TODO find way to accept interface with allocation instead of bankTransaction to prevent wrong usage
|
|
387
1059
|
* because all amounts calculates with allocated amounts but not from bank transactions amounts.
|
|
388
1060
|
*/
|
|
389
|
-
class BankTransactionCollection extends
|
|
1061
|
+
class BankTransactionCollection extends Collection {
|
|
390
1062
|
getAmount() {
|
|
391
1063
|
return this.sumBy('amount');
|
|
392
1064
|
}
|
|
@@ -492,7 +1164,7 @@ class BankTransactionCollection extends AbstractCollection {
|
|
|
492
1164
|
}
|
|
493
1165
|
}
|
|
494
1166
|
|
|
495
|
-
class ClientCollection extends
|
|
1167
|
+
class ClientCollection extends Collection {
|
|
496
1168
|
}
|
|
497
1169
|
|
|
498
1170
|
var FirmTypeEnum;
|
|
@@ -501,7 +1173,7 @@ var FirmTypeEnum;
|
|
|
501
1173
|
FirmTypeEnum[FirmTypeEnum["ADVISOR"] = 2] = "ADVISOR";
|
|
502
1174
|
})(FirmTypeEnum || (FirmTypeEnum = {}));
|
|
503
1175
|
|
|
504
|
-
class EmployeeCollection extends
|
|
1176
|
+
class EmployeeCollection extends Collection {
|
|
505
1177
|
get accountant() {
|
|
506
1178
|
var _a;
|
|
507
1179
|
return (_a = this.items.filter((user) => user.employeeDetails.firm.type === FirmTypeEnum.ACCOUNTANT)[0]) !== null && _a !== void 0 ? _a : null;
|
|
@@ -514,7 +1186,7 @@ class EmployeeCollection extends AbstractCollection {
|
|
|
514
1186
|
/**
|
|
515
1187
|
* Collection of tax review
|
|
516
1188
|
*/
|
|
517
|
-
class ClientMovementCollection extends
|
|
1189
|
+
class ClientMovementCollection extends Collection {
|
|
518
1190
|
get active() {
|
|
519
1191
|
return new ClientMovementCollection(this.items.filter((clientMovement) => !clientMovement.dateTo));
|
|
520
1192
|
}
|
|
@@ -542,7 +1214,7 @@ class ClientMovementCollection extends AbstractCollection {
|
|
|
542
1214
|
/**
|
|
543
1215
|
* Collection of employee clients tax summary information
|
|
544
1216
|
*/
|
|
545
|
-
class ClientPortfolioReportCollection extends
|
|
1217
|
+
class ClientPortfolioReportCollection extends Collection {
|
|
546
1218
|
get marketValue() {
|
|
547
1219
|
return this.sumBy('marketValue');
|
|
548
1220
|
}
|
|
@@ -585,7 +1257,7 @@ var TankTypeEnum;
|
|
|
585
1257
|
TankTypeEnum[TankTypeEnum["OTHER"] = 3] = "OTHER";
|
|
586
1258
|
})(TankTypeEnum || (TankTypeEnum = {}));
|
|
587
1259
|
|
|
588
|
-
class DepreciationCollection extends
|
|
1260
|
+
class DepreciationCollection extends Collection {
|
|
589
1261
|
/**
|
|
590
1262
|
* Get total amount of all depreciations in the collection
|
|
591
1263
|
*/
|
|
@@ -651,7 +1323,7 @@ class DepreciationCollection extends AbstractCollection {
|
|
|
651
1323
|
/**
|
|
652
1324
|
* Collection of depreciations
|
|
653
1325
|
*/
|
|
654
|
-
class DepreciationForecastCollection extends
|
|
1326
|
+
class DepreciationForecastCollection extends Collection {
|
|
655
1327
|
filterByYear(financialYear) {
|
|
656
1328
|
return new DepreciationForecastCollection(this.items.filter((forecast) => forecast.financialYear === financialYear));
|
|
657
1329
|
}
|
|
@@ -659,17 +1331,17 @@ class DepreciationForecastCollection extends AbstractCollection {
|
|
|
659
1331
|
return this.items.reduce((sum, item) => sum + item.getClaimAmountByMonth(month), 0);
|
|
660
1332
|
}
|
|
661
1333
|
get amount() {
|
|
662
|
-
return this.
|
|
1334
|
+
return this.sumBy('amount');
|
|
663
1335
|
}
|
|
664
1336
|
get claimAmount() {
|
|
665
|
-
return this.
|
|
1337
|
+
return this.sumBy('claimAmount');
|
|
666
1338
|
}
|
|
667
1339
|
}
|
|
668
1340
|
|
|
669
1341
|
/**
|
|
670
1342
|
* Collection of income sources
|
|
671
1343
|
*/
|
|
672
|
-
class IncomeSourceCollection extends
|
|
1344
|
+
class IncomeSourceCollection extends Collection {
|
|
673
1345
|
filterByTank(tank) {
|
|
674
1346
|
return this.items.filter((incomeSource) => {
|
|
675
1347
|
switch (tank) {
|
|
@@ -702,7 +1374,7 @@ class IncomeSourceCollection extends AbstractCollection {
|
|
|
702
1374
|
}
|
|
703
1375
|
}
|
|
704
1376
|
|
|
705
|
-
class LoanCollection extends
|
|
1377
|
+
class LoanCollection extends Collection {
|
|
706
1378
|
/**
|
|
707
1379
|
* Get new collection of loans filtered by bank accounts ids
|
|
708
1380
|
* @param ids list of bank accounts ids for filter
|
|
@@ -866,7 +1538,7 @@ class LogbookCollection {
|
|
|
866
1538
|
}
|
|
867
1539
|
}
|
|
868
1540
|
|
|
869
|
-
class MessageCollection extends
|
|
1541
|
+
class MessageCollection extends Collection {
|
|
870
1542
|
getFirstUnreadMessage(user) {
|
|
871
1543
|
return this.items.find((message) => {
|
|
872
1544
|
return !message.isRead() && message.isFromEmployee() !== user.isEmployee();
|
|
@@ -889,7 +1561,7 @@ class MessageCollection extends AbstractCollection {
|
|
|
889
1561
|
/**
|
|
890
1562
|
* Collection of MessageDocument instances
|
|
891
1563
|
*/
|
|
892
|
-
class MessageDocumentCollection extends
|
|
1564
|
+
class MessageDocumentCollection extends Collection {
|
|
893
1565
|
/**
|
|
894
1566
|
* get list of documents which are not attached to any message
|
|
895
1567
|
*/
|
|
@@ -898,7 +1570,7 @@ class MessageDocumentCollection extends AbstractCollection {
|
|
|
898
1570
|
}
|
|
899
1571
|
}
|
|
900
1572
|
|
|
901
|
-
class PropertyCollection extends
|
|
1573
|
+
class PropertyCollection extends Collection {
|
|
902
1574
|
/**
|
|
903
1575
|
* Get new property collection filtered by category id
|
|
904
1576
|
* @param id id of category for filter
|
|
@@ -959,9 +1631,15 @@ class PropertyCollection extends AbstractCollection {
|
|
|
959
1631
|
return min < property.purchaseDate ? min : property.purchaseDate;
|
|
960
1632
|
}, new FinancialYear(new Date()).startDate);
|
|
961
1633
|
}
|
|
1634
|
+
/**
|
|
1635
|
+
* Get list of unique property categories from collection
|
|
1636
|
+
*/
|
|
1637
|
+
getCategories() {
|
|
1638
|
+
return uniqBy(this.items.map((property) => property.category), 'id');
|
|
1639
|
+
}
|
|
962
1640
|
}
|
|
963
1641
|
|
|
964
|
-
class ServicePriceCollection extends
|
|
1642
|
+
class ServicePriceCollection extends Collection {
|
|
965
1643
|
get work() {
|
|
966
1644
|
return this.items.filter((price) => price.product.isWork())[0];
|
|
967
1645
|
}
|
|
@@ -970,7 +1648,7 @@ class ServicePriceCollection extends AbstractCollection {
|
|
|
970
1648
|
}
|
|
971
1649
|
}
|
|
972
1650
|
|
|
973
|
-
class ServiceSubscriptionCollection extends
|
|
1651
|
+
class ServiceSubscriptionCollection extends Collection {
|
|
974
1652
|
get individual() {
|
|
975
1653
|
return this.items.filter((subscription) => subscription.isIndividual())[0];
|
|
976
1654
|
}
|
|
@@ -1025,7 +1703,7 @@ var TaxReturnCategorySectionEnum;
|
|
|
1025
1703
|
/**
|
|
1026
1704
|
* collection for tax return category items
|
|
1027
1705
|
*/
|
|
1028
|
-
class TaxReturnCategoryItemCollection extends
|
|
1706
|
+
class TaxReturnCategoryItemCollection extends Collection {
|
|
1029
1707
|
/**
|
|
1030
1708
|
* Work income
|
|
1031
1709
|
*/
|
|
@@ -1163,7 +1841,7 @@ class TaxReturnCategoryItemCollection extends AbstractCollection {
|
|
|
1163
1841
|
/**
|
|
1164
1842
|
* Collection of tax review
|
|
1165
1843
|
*/
|
|
1166
|
-
class TaxReviewCollection extends
|
|
1844
|
+
class TaxReviewCollection extends Collection {
|
|
1167
1845
|
/**
|
|
1168
1846
|
* Get tax reviews items with SENT & COMPLETED statuses
|
|
1169
1847
|
*/
|
|
@@ -1213,7 +1891,7 @@ class TaxReviewCollection extends AbstractCollection {
|
|
|
1213
1891
|
}
|
|
1214
1892
|
}
|
|
1215
1893
|
|
|
1216
|
-
class TransactionAllocationCollection extends
|
|
1894
|
+
class TransactionAllocationCollection extends Collection {
|
|
1217
1895
|
get amount() {
|
|
1218
1896
|
return this.sumBy('amount');
|
|
1219
1897
|
}
|
|
@@ -1254,7 +1932,7 @@ class TransactionAllocationCollection extends AbstractCollection {
|
|
|
1254
1932
|
/**
|
|
1255
1933
|
* Collection of transactions
|
|
1256
1934
|
*/
|
|
1257
|
-
class TransactionCollection extends
|
|
1935
|
+
class TransactionCollection extends Collection {
|
|
1258
1936
|
/**
|
|
1259
1937
|
* Get total amount of all transactions in the collection
|
|
1260
1938
|
*/
|
|
@@ -1373,7 +2051,7 @@ class TransactionCollection extends AbstractCollection {
|
|
|
1373
2051
|
/**
|
|
1374
2052
|
* Collection of user event settings
|
|
1375
2053
|
*/
|
|
1376
|
-
class UserEventSettingCollection extends
|
|
2054
|
+
class UserEventSettingCollection extends Collection {
|
|
1377
2055
|
getConfigurableBy(field) {
|
|
1378
2056
|
return new UserEventSettingCollection(this.items.filter((setting) => setting[field] !== null));
|
|
1379
2057
|
}
|
|
@@ -1577,6 +2255,7 @@ var ChartAccountsMetadataListEnum;
|
|
|
1577
2255
|
(function (ChartAccountsMetadataListEnum) {
|
|
1578
2256
|
ChartAccountsMetadataListEnum[ChartAccountsMetadataListEnum["TAX_INSTALMENTS"] = 4] = "TAX_INSTALMENTS";
|
|
1579
2257
|
ChartAccountsMetadataListEnum[ChartAccountsMetadataListEnum["FRANKING_CREDIT"] = 5] = "FRANKING_CREDIT";
|
|
2258
|
+
ChartAccountsMetadataListEnum[ChartAccountsMetadataListEnum["ELIGIBLE_FOR_REDUCTION"] = 6] = "ELIGIBLE_FOR_REDUCTION";
|
|
1580
2259
|
ChartAccountsMetadataListEnum[ChartAccountsMetadataListEnum["SHARE_PERCENTAGE"] = 7] = "SHARE_PERCENTAGE";
|
|
1581
2260
|
ChartAccountsMetadataListEnum[ChartAccountsMetadataListEnum["TAX_OFFSETS"] = 8] = "TAX_OFFSETS";
|
|
1582
2261
|
ChartAccountsMetadataListEnum[ChartAccountsMetadataListEnum["HOURS"] = 11] = "HOURS";
|
|
@@ -3617,6 +4296,9 @@ class Transaction extends Transaction$1 {
|
|
|
3617
4296
|
get frankingCredit() {
|
|
3618
4297
|
return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.FRANKING_CREDIT);
|
|
3619
4298
|
}
|
|
4299
|
+
get eligibleForReduction() {
|
|
4300
|
+
return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.ELIGIBLE_FOR_REDUCTION);
|
|
4301
|
+
}
|
|
3620
4302
|
get untaxedElement() {
|
|
3621
4303
|
return this.getMetadataFieldValue(ChartAccountsMetadataListEnum.UNTAXED_ELEMENT);
|
|
3622
4304
|
}
|
|
@@ -3627,6 +4309,12 @@ class Transaction extends Transaction$1 {
|
|
|
3627
4309
|
get isTransfer() {
|
|
3628
4310
|
return this.operation === TransactionOperationEnum.TRANSFER;
|
|
3629
4311
|
}
|
|
4312
|
+
get debit() {
|
|
4313
|
+
return this.isDebit() ? Math.abs(this.amount) : null;
|
|
4314
|
+
}
|
|
4315
|
+
get credit() {
|
|
4316
|
+
return this.isCredit() ? Math.abs(this.amount) : null;
|
|
4317
|
+
}
|
|
3630
4318
|
/**
|
|
3631
4319
|
* Get value of transaction metadata field
|
|
3632
4320
|
* @param field for which value should be returned
|
|
@@ -3650,7 +4338,7 @@ class Transaction extends Transaction$1 {
|
|
|
3650
4338
|
(this.transactions
|
|
3651
4339
|
.reduce((sum, transaction) => sum + Math.abs(transaction.amount), 0) * modifier);
|
|
3652
4340
|
case this.isWorkTank():
|
|
3653
|
-
return this.amount + ((this.tax + this.frankingCredit - this.taxFreeComponent) * modifier);
|
|
4341
|
+
return this.amount + ((this.tax + this.frankingCredit - this.taxFreeComponent - this.eligibleForReduction) * modifier);
|
|
3654
4342
|
default:
|
|
3655
4343
|
return this.amount || 0;
|
|
3656
4344
|
}
|
|
@@ -4245,6 +4933,36 @@ class ClientPortfolioChartData {
|
|
|
4245
4933
|
class ClientPortfolioReport {
|
|
4246
4934
|
}
|
|
4247
4935
|
|
|
4936
|
+
var AlphabetColorsEnum;
|
|
4937
|
+
(function (AlphabetColorsEnum) {
|
|
4938
|
+
AlphabetColorsEnum["A"] = "#9CC3D5";
|
|
4939
|
+
AlphabetColorsEnum["B"] = "#E69A8D";
|
|
4940
|
+
AlphabetColorsEnum["C"] = "#ED2B33";
|
|
4941
|
+
AlphabetColorsEnum["D"] = "#E3CD81";
|
|
4942
|
+
AlphabetColorsEnum["E"] = "#343148";
|
|
4943
|
+
AlphabetColorsEnum["F"] = "#2C5F2D";
|
|
4944
|
+
AlphabetColorsEnum["G"] = "#FFA177";
|
|
4945
|
+
AlphabetColorsEnum["H"] = "#435E55";
|
|
4946
|
+
AlphabetColorsEnum["I"] = "#2BAE66";
|
|
4947
|
+
AlphabetColorsEnum["J"] = "#3C1053";
|
|
4948
|
+
AlphabetColorsEnum["K"] = "#DD4132";
|
|
4949
|
+
AlphabetColorsEnum["L"] = "#FC766A";
|
|
4950
|
+
AlphabetColorsEnum["M"] = "#ADEFD1";
|
|
4951
|
+
AlphabetColorsEnum["N"] = "#79C000";
|
|
4952
|
+
AlphabetColorsEnum["O"] = "#D198C5";
|
|
4953
|
+
AlphabetColorsEnum["P"] = "#5B84B1";
|
|
4954
|
+
AlphabetColorsEnum["Q"] = "#A13941";
|
|
4955
|
+
AlphabetColorsEnum["R"] = "#D85A7F";
|
|
4956
|
+
AlphabetColorsEnum["S"] = "#00203F";
|
|
4957
|
+
AlphabetColorsEnum["T"] = "#42EADD";
|
|
4958
|
+
AlphabetColorsEnum["U"] = "#5F4B8B";
|
|
4959
|
+
AlphabetColorsEnum["V"] = "#FDDB27";
|
|
4960
|
+
AlphabetColorsEnum["W"] = "#CDB599";
|
|
4961
|
+
AlphabetColorsEnum["X"] = "#4B878B";
|
|
4962
|
+
AlphabetColorsEnum["Y"] = "#B0B8B4";
|
|
4963
|
+
AlphabetColorsEnum["Z"] = "#E3C9CE";
|
|
4964
|
+
})(AlphabetColorsEnum || (AlphabetColorsEnum = {}));
|
|
4965
|
+
|
|
4248
4966
|
/**
|
|
4249
4967
|
* Class to generate data-table structure based on provided collection.
|
|
4250
4968
|
* Use to work with HTML/PDF/XLSX tables
|
|
@@ -4278,9 +4996,11 @@ class DataTable {
|
|
|
4278
4996
|
if (!column.total) {
|
|
4279
4997
|
return '';
|
|
4280
4998
|
}
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
.
|
|
4999
|
+
const totalValue = collection.items.reduce((sum, item) => {
|
|
5000
|
+
// check if current collection item has value. If not - don't add it to the sum
|
|
5001
|
+
return item[column.key] !== null ? sum + Number(item[column.key]) : sum;
|
|
5002
|
+
}, null);
|
|
5003
|
+
return (totalValue !== null && totalValue !== void 0 ? totalValue : '-').toString();
|
|
4284
5004
|
});
|
|
4285
5005
|
}
|
|
4286
5006
|
}
|
|
@@ -4413,209 +5133,43 @@ const DOCUMENT_FILE_TYPES = {
|
|
|
4413
5133
|
'image/jpeg',
|
|
4414
5134
|
'image/tiff',
|
|
4415
5135
|
'image/bmp'
|
|
4416
|
-
],
|
|
4417
|
-
all: [
|
|
4418
|
-
'image/png',
|
|
4419
|
-
'image/jpg',
|
|
4420
|
-
'image/jpeg',
|
|
4421
|
-
'image/tiff',
|
|
4422
|
-
'image/bmp',
|
|
4423
|
-
'application/msword',
|
|
4424
|
-
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
4425
|
-
'application/pdf',
|
|
4426
|
-
'application/vnd.ms-excel',
|
|
4427
|
-
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
4428
|
-
'text/csv'
|
|
4429
|
-
]
|
|
4430
|
-
};
|
|
4431
|
-
|
|
4432
|
-
class DocumentFolder$1 {
|
|
4433
|
-
}
|
|
4434
|
-
|
|
4435
|
-
class DocumentFolder extends DocumentFolder$1 {
|
|
4436
|
-
}
|
|
4437
|
-
__decorate([
|
|
4438
|
-
Type(() => Document)
|
|
4439
|
-
], DocumentFolder.prototype, "documents", void 0);
|
|
4440
|
-
|
|
4441
|
-
class EmployeeInvite$1 {
|
|
4442
|
-
}
|
|
4443
|
-
|
|
4444
|
-
class EmployeeInvite extends EmployeeInvite$1 {
|
|
4445
|
-
}
|
|
4446
|
-
__decorate([
|
|
4447
|
-
Type(() => RegistrationInvite)
|
|
4448
|
-
], EmployeeInvite.prototype, "registrationInvite", void 0);
|
|
4449
|
-
__decorate([
|
|
4450
|
-
Type(() => User)
|
|
4451
|
-
], EmployeeInvite.prototype, "employee", void 0);
|
|
4452
|
-
|
|
4453
|
-
/**
|
|
4454
|
-
* Backend endpoint class
|
|
4455
|
-
*/
|
|
4456
|
-
class Endpoint {
|
|
4457
|
-
constructor(method, pattern) {
|
|
4458
|
-
this.method = method;
|
|
4459
|
-
this.pattern = pattern;
|
|
4460
|
-
}
|
|
4461
|
-
/**
|
|
4462
|
-
* check url with regexp
|
|
4463
|
-
* @param url
|
|
4464
|
-
*/
|
|
4465
|
-
test(url) {
|
|
4466
|
-
return this.regexp.test(url);
|
|
4467
|
-
}
|
|
4468
|
-
/**
|
|
4469
|
-
* Get regexp for endpoint
|
|
4470
|
-
*/
|
|
4471
|
-
get regexp() {
|
|
4472
|
-
return new RegExp(`^${this.method} \.\*${this.pattern}$`);
|
|
4473
|
-
}
|
|
4474
|
-
}
|
|
4475
|
-
|
|
4476
|
-
/**
|
|
4477
|
-
* List of all app endpoints
|
|
4478
|
-
*/
|
|
4479
|
-
const ENDPOINTS = {
|
|
4480
|
-
ASSETS_GET: new Endpoint('GET', '\\/assets\\/\.\*\\/\\d+'),
|
|
4481
|
-
BANK_ACCOUNTS_GET: new Endpoint('GET', '\\/bank-accounts'),
|
|
4482
|
-
BANK_ACCOUNTS_POST: new Endpoint('POST', '\\/bank-accounts'),
|
|
4483
|
-
BANK_ACCOUNTS_PUT: new Endpoint('PUT', '\\/bank-accounts\\/\\d+'),
|
|
4484
|
-
BANK_CONNECTION_POST: new Endpoint('POST', '\\/bank-connections'),
|
|
4485
|
-
BANK_TRANSACTIONS_GET: new Endpoint('GET', '\\/bank-transactions'),
|
|
4486
|
-
BANK_TRANSACTIONS_DELETE: new Endpoint('DELETE', '\\/bank-transactions\\/\\d+'),
|
|
4487
|
-
BANK_TRANSACTIONS_IMPORT_POST: new Endpoint('POST', '\\/bank-transactions\\/\\d+\\/import'),
|
|
4488
|
-
BASIQ_ACCOUNTS_GET: new Endpoint('GET', '\\/basiq\\/\\accounts'),
|
|
4489
|
-
CAPITAL_COSTS_GET: new Endpoint('GET', '\\/capital-costs'),
|
|
4490
|
-
CHARTS_INCOME_GET: new Endpoint('GET', '\\/charts\\/\\incomes'),
|
|
4491
|
-
CHARTS_EXPENSES_GET: new Endpoint('GET', '\\/charts\\/\\expenses'),
|
|
4492
|
-
CHART_ACCOUNTS_GET: new Endpoint('GET', '\\/chart-accounts'),
|
|
4493
|
-
CLIENTS_GET: new Endpoint('GET', '\\/clients'),
|
|
4494
|
-
CLIENTS_PUT: new Endpoint('PUT', '\\/clients'),
|
|
4495
|
-
CLIENTS_EXCLUDE_PUT: new Endpoint('PUT', '\\/clients\\/\\d+\\/exclude'),
|
|
4496
|
-
CLIENTS_INVITES_GET: new Endpoint('GET', '\\/clients\\/\\invites'),
|
|
4497
|
-
CLIENTS_INVITES_POST: new Endpoint('POST', '\\/clients\\/\\invites'),
|
|
4498
|
-
CLIENTS_INVITES_DELETE: new Endpoint('DELETE', '\\/clients\\/\\invites\\/\\d+'),
|
|
4499
|
-
CLIENTS_INVITES_ACCEPT_POST: new Endpoint('POST', '\\/clients\\/\\invites\\/\\d+\\/accept'),
|
|
4500
|
-
CLIENTS_INVITES_REJECT_POST: new Endpoint('POST', '\\/clients\\/\\invites\\/\\d+\\/reject'),
|
|
4501
|
-
CLIENTS_INVITES_RESEND_POST: new Endpoint('POST', '\\/clients\\/\\invites\\/\\d+\\/resend'),
|
|
4502
|
-
CLIENT_MOVEMENTS_GET: new Endpoint('GET', '\\/client-movements'),
|
|
4503
|
-
CLIENT_MOVEMENTS_POST: new Endpoint('POST', '\\/client-movements'),
|
|
4504
|
-
COUNTRIES_GET: new Endpoint('GET', '\\/countries'),
|
|
4505
|
-
DEPRECIATIONS_CLOSING_GET: new Endpoint('GET', '\\/depreciations\\/\\closing-balance\.\*'),
|
|
4506
|
-
DEPRECIATIONS_GET: new Endpoint('GET', '\\/depreciations'),
|
|
4507
|
-
DEPRECIATIONS_POST: new Endpoint('POST', '\\/depreciations'),
|
|
4508
|
-
DEPRECIATIONS_PUT: new Endpoint('PUT', '\\/depreciations\\/\\d+'),
|
|
4509
|
-
EMPLOYEES_GET: new Endpoint('GET', '\\/employees'),
|
|
4510
|
-
EMPLOYEES_INVITES_GET: new Endpoint('GET', '\\/employees\\/\\invites'),
|
|
4511
|
-
EMPLOYEES_INVITES_DELETE: new Endpoint('DELETE', '\\/employees\\/\\invites\\/\\d+'),
|
|
4512
|
-
EMPLOYEES_INVITE_POST: new Endpoint('POST', '\\/employees\\/\\invites'),
|
|
4513
|
-
EMPLOYEES_INVITES_REJECT_POST: new Endpoint('POST', '\\/employees\\/\\invites\\/\\d+\\/\\reject'),
|
|
4514
|
-
EMPLOYEES_INVITES_RESEND_POST: new Endpoint('POST', '\\/employees\\/\\invites\\/\\d+\\/\\resend'),
|
|
4515
|
-
FIRM_GET: new Endpoint('GET', '\\/firms'),
|
|
4516
|
-
FIRM_CURRENT_GET: new Endpoint('GET', '\\/firms\\/current'),
|
|
4517
|
-
FIRM_CURRENT_PUT: new Endpoint('PUT', '\\/firms\\/current\.\*'),
|
|
4518
|
-
FIRM_INVITE_POST: new Endpoint('POST', '\\/firms\\/invite'),
|
|
4519
|
-
FIRM_REGISTRATION_POST: new Endpoint('POST', '\\/firms\\/registration'),
|
|
4520
|
-
FIRM_UPDATE_PHOTO_POST: new Endpoint('POST', '\\/firms\\/photo\.\*'),
|
|
4521
|
-
FOLDERS_GET: new Endpoint('GET', '\\/folders'),
|
|
4522
|
-
FOLDERS_POST: new Endpoint('POST', '\\/folders'),
|
|
4523
|
-
FOLDERS_PUT: new Endpoint('PUT', '\\/folders\\/\\d+'),
|
|
4524
|
-
FOLDERS_DOCUMENTS_POST: new Endpoint('POST', '\\/folders\\/\\d+\\/documents'),
|
|
4525
|
-
FOLDERS_DOCUMENTS_PUT: new Endpoint('PUT', '\\/folders\\/\\d+\\/documents\\/\\d+'),
|
|
4526
|
-
INCOME_SOURCES_GET: new Endpoint('GET', '\\/income-sources'),
|
|
4527
|
-
INCOME_SOURCES_POST: new Endpoint('POST', '\\/income-sources'),
|
|
4528
|
-
INCOME_SOURCES_PUT: new Endpoint('PUT', '\\/income-sources'),
|
|
4529
|
-
INCOME_SOURCES_DELETE: new Endpoint('DELETE', '\\/income-sources\\/\\d+'),
|
|
4530
|
-
INCOME_SOURCE_FORECAST_GET: new Endpoint('GET', '\\/income-source-forecasts'),
|
|
4531
|
-
INCOME_SOURCE_FORECAST_POST: new Endpoint('POST', '\\/income-source-forecasts'),
|
|
4532
|
-
INCOME_SOURCE_FORECAST_PUT: new Endpoint('PUT', '\\/income-source-forecasts'),
|
|
4533
|
-
INCOME_SOURCE_FORECAST_DELETE: new Endpoint('DELETE', '\\/income-source-forecasts\\/\\d+'),
|
|
4534
|
-
INCOME_SOURCE_TYPES_GET: new Endpoint('GET', '\\/income-source-types'),
|
|
4535
|
-
LOANS_GET: new Endpoint('GET', '\\/bank-accounts\\/loans'),
|
|
4536
|
-
LOANS_POST: new Endpoint('POST', '\\/bank-accounts\\/loans'),
|
|
4537
|
-
LOANS_PUT: new Endpoint('PUT', '\\/bank-accounts\\/loans/\\d+'),
|
|
4538
|
-
LOANS_PAYOUT_POST: new Endpoint('POST', '\\/loans\\/\\d+\\/payout'),
|
|
4539
|
-
LOANS_PAYOUT_PUT: new Endpoint('PUT', '\\/loans\\/\\d+\\/payout\\/\\d+'),
|
|
4540
|
-
LOANS_PAYOUT_DELETE: new Endpoint('DELETE', '\\/loans\\/\\d+\\/payout\\/\\d+'),
|
|
4541
|
-
LOANS_CALCULATION_POST: new Endpoint('POST', '\\/bank-accounts\\/loans\\/calculation'),
|
|
4542
|
-
LOGIN_CHECK_POST: new Endpoint('POST', '\\/login_check'),
|
|
4543
|
-
NOTIFICATIONS_GET: new Endpoint('GET', '\\/service-notifications'),
|
|
4544
|
-
OCCUPATIONS_GET: new Endpoint('GET', '\\/occupations'),
|
|
4545
|
-
PROPERTIES_GET: new Endpoint('GET', '\\/properties'),
|
|
4546
|
-
PROPERTIES_POST: new Endpoint('POST', '\\/properties'),
|
|
4547
|
-
PROPERTY_PUT: new Endpoint('PUT', '\\/properties/\\d+'),
|
|
4548
|
-
PROPERTIES_PUT: new Endpoint('PUT', '\\/properties'),
|
|
4549
|
-
PROPERTIES_CATEGORIES_EQUITY_GET: new Endpoint('GET', '\\/properties\\/categories\\/equity'),
|
|
4550
|
-
PROPERTIES_CATEGORIES_GET: new Endpoint('GET', '\\/properties\\/categories'),
|
|
4551
|
-
PROPERTIES_CATEGORIES_PUT: new Endpoint('PUT', '\\/properties\\/categories\\/\\d+'),
|
|
4552
|
-
PROPERTIES_CATEGORIES_POST: new Endpoint('POST', '\\/properties\\/categories'),
|
|
4553
|
-
PROPERTIES_CATEGORY_MOVEMENTS_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/category-movements'),
|
|
4554
|
-
PROPERTIES_CATEGORY_MOVEMENTS_PUT: new Endpoint('PUT', '\\/properties\\/\\d+\\/category-movements\\/\\d+'),
|
|
4555
|
-
PROPERTIES_CO_OWNERS_PUT: new Endpoint('PUT', '\\/properties\\/co-owners\\/\\d+'),
|
|
4556
|
-
PROPERTIES_CO_OWNERS_GET: new Endpoint('GET', '\\/properties\\/co-owners'),
|
|
4557
|
-
PROPERTIES_CO_OWNERS_POST: new Endpoint('POST', '\\/properties\\/co-owners'),
|
|
4558
|
-
PROPERTIES_DEACTIVATE_PUT: new Endpoint('PUT', '\\/properties\\/\\d+\\/deactivate'),
|
|
4559
|
-
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_GET: new Endpoint('GET', '\\/properties\\/\\d+\\/depreciation-capital-projects'),
|
|
4560
|
-
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/depreciation-capital-projects'),
|
|
4561
|
-
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_PUT: new Endpoint('PUT', '\\/properties\\/\\d+\\/depreciation-capital-projects\\/\\d+'),
|
|
4562
|
-
PROPERTIES_DEPRECIATION_CAPITAL_PROJECT_DELETE: new Endpoint('DELETE', '\\/properties\\/\\d+\\/depreciation-capital-projects\\/\\d+'),
|
|
4563
|
-
PROPERTIES_DOCUMENTS_GET: new Endpoint('GET', '\\/properties\\/documents'),
|
|
4564
|
-
PROPERTIES_DOCUMENTS_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/documents'),
|
|
4565
|
-
PROPERTIES_DOCUMENTS_PUT: new Endpoint('PUT', '\\/properties\\/documents\\/\\d+'),
|
|
4566
|
-
PROPERTIES_DOCUMENTS_DELETE: new Endpoint('DELETE', '\\/properties\\/documents\\/\\d+'),
|
|
4567
|
-
PROPERTIES_PHOTO_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/photo\.\*'),
|
|
4568
|
-
PROPERTIES_SUGGESTIONS_GET: new Endpoint('GET', '/property\\/\\w+\\/v2\\/.*$'),
|
|
4569
|
-
PROPERTIES_VALUATIONS_DOCUMENTS_POST: new Endpoint('POST', '\\/properties\\/\\d+\\/valuations\\/\\d+\\/documents'),
|
|
4570
|
-
PRORATION_COST_POST: new Endpoint('POST', '\\/subscriptions\\/proration-cost'),
|
|
4571
|
-
SALARY_FORECAST_GET: new Endpoint('GET', '\\/salary-forecasts'),
|
|
4572
|
-
SALARY_FORECAST_POST: new Endpoint('POST', '\\/salary-forecasts'),
|
|
4573
|
-
SALARY_FORECAST_PUT: new Endpoint('PUT', '\\/salary-forecasts'),
|
|
4574
|
-
SERVICE_PRICES_GET: new Endpoint('GET', '\\/service-prices'),
|
|
4575
|
-
SERVICE_PAYMENTS_GET: new Endpoint('GET', '\\/service-payments'),
|
|
4576
|
-
STRIPE_BILLING_PORTAL_GET: new Endpoint('GET', '\\/stripe\\/billing-portal-session'),
|
|
4577
|
-
STRIPE_CHECKOUT_SESSION_POST: new Endpoint('POST', '\\/stripe\\/checkout-session'),
|
|
4578
|
-
SUBSCRIPTION_LAST_GET: new Endpoint('GET', '\\/subscriptions\\/last'),
|
|
4579
|
-
SUBSCRIPTION_ITEMS_PUT: new Endpoint('PUT', '\\/subscriptions\\/items'),
|
|
4580
|
-
TAX_CALCULATION_POST: new Endpoint('POST', '\\/tax-calculation'),
|
|
4581
|
-
TAX_REVIEWS_GET: new Endpoint('GET', '\\/tax-reviews'),
|
|
4582
|
-
TAX_REVIEWS_DELETE: new Endpoint('DELETE', '\\/tax-reviews\\/\\d+'),
|
|
4583
|
-
TAX_REVIEWS_POST: new Endpoint('POST', '\\/tax-reviews'),
|
|
4584
|
-
TAX_REVIEWS_PUT: new Endpoint('PUT', '\\/tax-reviews\\/\\d+'),
|
|
4585
|
-
TAX_SUMMARY_ACTUAL_GET: new Endpoint('GET', '\\/tax-summary\\/actuals'),
|
|
4586
|
-
TAX_SUMMARY_FORECAST_GET: new Endpoint('GET', '\\/tax-summary\\/forecasts'),
|
|
4587
|
-
TRANSACTION_DELETE: new Endpoint('DELETE', '\\/transactions\\/\\d+'),
|
|
4588
|
-
TRANSACTION_PUT: new Endpoint('PUT', '\\/transactions\\/\\d+'),
|
|
4589
|
-
TRANSACTIONS_GET: new Endpoint('GET', '\\/transactions'),
|
|
4590
|
-
TRANSACTIONS_POST: new Endpoint('POST', '\\/transactions'),
|
|
4591
|
-
TRANSACTIONS_PUT: new Endpoint('PUT', '\\/transactions'),
|
|
4592
|
-
TRANSACTIONS_ALLOCATIONS_GET: new Endpoint('GET', '\\/transactions-allocations'),
|
|
4593
|
-
TRANSACTIONS_ALLOCATIONS_POST: new Endpoint('POST', '\\/transactions-allocations'),
|
|
4594
|
-
TRANSACTIONS_ALLOCATIONS_DELETE: new Endpoint('DELETE', '\\/transactions-allocations\\/\\d+'),
|
|
4595
|
-
USER_CONFIRMATION_POST: new Endpoint('POST', '\\/users\\/confirmation'),
|
|
4596
|
-
USER_CURRENT_GET: new Endpoint('GET', '\\/users\\/current'),
|
|
4597
|
-
USER_CURRENT_PASSWORD_PUT: new Endpoint('PUT', '\\/users\\/current\\/password\.\*'),
|
|
4598
|
-
USER_EVENT_SETTINGS_GET: new Endpoint('GET', '\\/user-event-settings'),
|
|
4599
|
-
USER_EVENT_TYPES_GET: new Endpoint('GET', '\\/user-event-types'),
|
|
4600
|
-
USER_INVITE_DELETE: new Endpoint('DELETE', '\\/users\\/invite\\/\\d+'),
|
|
4601
|
-
USER_INVITE_POST: new Endpoint('POST', '\\/users\\/invite'),
|
|
4602
|
-
USER_INVITE_RESEND_POST: new Endpoint('POST', '\\/users\\/invite/\\d+\\/resend'),
|
|
4603
|
-
USER_PUT: new Endpoint('PUT', '\\/users\\/\\d+'),
|
|
4604
|
-
USER_REGISTRATION_POST: new Endpoint('POST', '\\/users\\/registration'),
|
|
4605
|
-
USER_RESET_PASSWORD_PUT: new Endpoint('PUT', '\\/users\\/reset-password'),
|
|
4606
|
-
USER_SEARCH_GET: new Endpoint('GET', '\\/users\\/search\.\*'),
|
|
4607
|
-
USER_UPDATE_PHOTO_POST: new Endpoint('POST', '\\/users\\/photo\.\*'),
|
|
4608
|
-
USER_STATUS_PUT: new Endpoint('PUT', '\\/users\\/status'),
|
|
4609
|
-
VEHICLES_GET: new Endpoint('GET', '\\/vehicles'),
|
|
4610
|
-
VEHICLES_POST: new Endpoint('POST', '\\/vehicles'),
|
|
4611
|
-
VEHICLES_PUT: new Endpoint('PUT', '\\/vehicles\\/\\d+'),
|
|
4612
|
-
VEHICLE_CLAIMS_GET: new Endpoint('GET', '\\/vehicle-claims'),
|
|
4613
|
-
VEHICLE_CLAIMS_POST: new Endpoint('POST', '\\/vehicle-claims'),
|
|
4614
|
-
VEHICLE_LOGBOOK_POST: new Endpoint('POST', '\\/vehicles\\/\\d+\\/logbooks'),
|
|
4615
|
-
VEHICLE_LOGBOOK_PUT: new Endpoint('PUT', '\\/vehicles\\/\\d+\\/logbooks\\/\\d+'),
|
|
4616
|
-
VEHICLE_CLAIMS_PUT: new Endpoint('PUT', '\\/vehicle-claims\\/\\d+')
|
|
5136
|
+
],
|
|
5137
|
+
all: [
|
|
5138
|
+
'image/png',
|
|
5139
|
+
'image/jpg',
|
|
5140
|
+
'image/jpeg',
|
|
5141
|
+
'image/tiff',
|
|
5142
|
+
'image/bmp',
|
|
5143
|
+
'application/msword',
|
|
5144
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
5145
|
+
'application/pdf',
|
|
5146
|
+
'application/vnd.ms-excel',
|
|
5147
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
5148
|
+
'text/csv'
|
|
5149
|
+
]
|
|
4617
5150
|
};
|
|
4618
5151
|
|
|
5152
|
+
class DocumentFolder$1 {
|
|
5153
|
+
}
|
|
5154
|
+
|
|
5155
|
+
class DocumentFolder extends DocumentFolder$1 {
|
|
5156
|
+
}
|
|
5157
|
+
__decorate([
|
|
5158
|
+
Type(() => Document)
|
|
5159
|
+
], DocumentFolder.prototype, "documents", void 0);
|
|
5160
|
+
|
|
5161
|
+
class EmployeeInvite$1 {
|
|
5162
|
+
}
|
|
5163
|
+
|
|
5164
|
+
class EmployeeInvite extends EmployeeInvite$1 {
|
|
5165
|
+
}
|
|
5166
|
+
__decorate([
|
|
5167
|
+
Type(() => RegistrationInvite)
|
|
5168
|
+
], EmployeeInvite.prototype, "registrationInvite", void 0);
|
|
5169
|
+
__decorate([
|
|
5170
|
+
Type(() => User)
|
|
5171
|
+
], EmployeeInvite.prototype, "employee", void 0);
|
|
5172
|
+
|
|
4619
5173
|
/**
|
|
4620
5174
|
* any event happened in the app, which needs to be handled somehow (distributed to other part of the app)
|
|
4621
5175
|
*/
|
|
@@ -4650,19 +5204,22 @@ var AppEventTypeEnum;
|
|
|
4650
5204
|
AppEventTypeEnum[AppEventTypeEnum["NOTIFICATION_ADDED"] = 19] = "NOTIFICATION_ADDED";
|
|
4651
5205
|
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_UPDATED_WITH_DOCUMENT"] = 20] = "PROPERTY_UPDATED_WITH_DOCUMENT";
|
|
4652
5206
|
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_DOCUMENT_ADDED"] = 21] = "PROPERTY_DOCUMENT_ADDED";
|
|
4653
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4654
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4655
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4656
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4657
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4658
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4659
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4660
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4661
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4662
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4663
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4664
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
4665
|
-
AppEventTypeEnum[AppEventTypeEnum["
|
|
5207
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_MOVEMENT_CREATED"] = 22] = "PROPERTY_MOVEMENT_CREATED";
|
|
5208
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_MOVEMENT_UPDATED"] = 23] = "PROPERTY_MOVEMENT_UPDATED";
|
|
5209
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_MOVEMENT_DELETED"] = 24] = "PROPERTY_MOVEMENT_DELETED";
|
|
5210
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_OWNER_UPDATED"] = 25] = "PROPERTY_OWNER_UPDATED";
|
|
5211
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_SUBSCRIPTION_ADDED"] = 26] = "PROPERTY_SUBSCRIPTION_ADDED";
|
|
5212
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_SUBSCRIPTION_DELETED"] = 27] = "PROPERTY_SUBSCRIPTION_DELETED";
|
|
5213
|
+
AppEventTypeEnum[AppEventTypeEnum["PROPERTY_VALUATION_DOCUMENT_CREATED"] = 28] = "PROPERTY_VALUATION_DOCUMENT_CREATED";
|
|
5214
|
+
AppEventTypeEnum[AppEventTypeEnum["SERVICE_SUBSCRIPTION_UPDATED"] = 29] = "SERVICE_SUBSCRIPTION_UPDATED";
|
|
5215
|
+
AppEventTypeEnum[AppEventTypeEnum["TAX_REVIEW_UPDATED"] = 30] = "TAX_REVIEW_UPDATED";
|
|
5216
|
+
AppEventTypeEnum[AppEventTypeEnum["TRANSACTION_CREATED"] = 31] = "TRANSACTION_CREATED";
|
|
5217
|
+
AppEventTypeEnum[AppEventTypeEnum["TRANSACTION_DELETED"] = 32] = "TRANSACTION_DELETED";
|
|
5218
|
+
AppEventTypeEnum[AppEventTypeEnum["TRANSACTION_UPDATED"] = 33] = "TRANSACTION_UPDATED";
|
|
5219
|
+
AppEventTypeEnum[AppEventTypeEnum["TRANSACTIONS_CREATED"] = 34] = "TRANSACTIONS_CREATED";
|
|
5220
|
+
AppEventTypeEnum[AppEventTypeEnum["USER_UPDATED"] = 35] = "USER_UPDATED";
|
|
5221
|
+
AppEventTypeEnum[AppEventTypeEnum["VEHICLE_CLAIM_UPDATED"] = 36] = "VEHICLE_CLAIM_UPDATED";
|
|
5222
|
+
AppEventTypeEnum[AppEventTypeEnum["VEHICLE_CLAIM_CREATED"] = 37] = "VEHICLE_CLAIM_CREATED";
|
|
4666
5223
|
})(AppEventTypeEnum || (AppEventTypeEnum = {}));
|
|
4667
5224
|
|
|
4668
5225
|
var IconsFileEnum;
|
|
@@ -4829,6 +5386,12 @@ class VehicleClaim extends VehicleClaim$1 {
|
|
|
4829
5386
|
get isLogbookMethod() {
|
|
4830
5387
|
return this.method === VehicleClaimMethodEnum.LOGBOOK;
|
|
4831
5388
|
}
|
|
5389
|
+
/**
|
|
5390
|
+
* Claim amount for Kms method
|
|
5391
|
+
*/
|
|
5392
|
+
getKmsClaimAmount(vehicleClaimRate) {
|
|
5393
|
+
return +(this.kilometers * vehicleClaimRate).toFixed(2);
|
|
5394
|
+
}
|
|
4832
5395
|
}
|
|
4833
5396
|
|
|
4834
5397
|
class ServiceNotification {
|
|
@@ -4945,13 +5508,6 @@ const CAPITAL_COSTS_ITEMS = [
|
|
|
4945
5508
|
}),
|
|
4946
5509
|
];
|
|
4947
5510
|
|
|
4948
|
-
/**
|
|
4949
|
-
* https://api-uat.corelogic.asia/property/au/v2/suggest.json
|
|
4950
|
-
* address suggestion from corelogic service
|
|
4951
|
-
*/
|
|
4952
|
-
class CorelogicSuggestion {
|
|
4953
|
-
}
|
|
4954
|
-
|
|
4955
5511
|
/**
|
|
4956
5512
|
* Enum with properties ownership filter options
|
|
4957
5513
|
*/
|
|
@@ -5563,41 +6119,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
|
5563
6119
|
args: ['environment']
|
|
5564
6120
|
}] }]; } });
|
|
5565
6121
|
|
|
5566
|
-
const KEY = '_switch_user';
|
|
5567
|
-
/**
|
|
5568
|
-
* provides user management to managers (users with ROLE_ACCOUNTANT for now, more in future)
|
|
5569
|
-
*/
|
|
5570
|
-
class UserSwitcherService {
|
|
5571
|
-
/**
|
|
5572
|
-
* get switched username
|
|
5573
|
-
*/
|
|
5574
|
-
get() {
|
|
5575
|
-
return localStorage[KEY];
|
|
5576
|
-
}
|
|
5577
|
-
/**
|
|
5578
|
-
* switch to user (username should be used for correct work of backend)
|
|
5579
|
-
*/
|
|
5580
|
-
set(username) {
|
|
5581
|
-
localStorage[KEY] = username;
|
|
5582
|
-
window.location.replace('/client/dashboard');
|
|
5583
|
-
}
|
|
5584
|
-
/**
|
|
5585
|
-
* go back to original user
|
|
5586
|
-
*/
|
|
5587
|
-
reset() {
|
|
5588
|
-
localStorage.removeItem(KEY);
|
|
5589
|
-
window.location.replace('/firm/dashboard');
|
|
5590
|
-
}
|
|
5591
|
-
}
|
|
5592
|
-
UserSwitcherService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5593
|
-
UserSwitcherService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherService, providedIn: 'root' });
|
|
5594
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: UserSwitcherService, decorators: [{
|
|
5595
|
-
type: Injectable,
|
|
5596
|
-
args: [{
|
|
5597
|
-
providedIn: 'root'
|
|
5598
|
-
}]
|
|
5599
|
-
}] });
|
|
5600
|
-
|
|
5601
6122
|
/**
|
|
5602
6123
|
* Service to work with assets (documents, receipts, e.t.c.)
|
|
5603
6124
|
*/
|
|
@@ -5645,79 +6166,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
|
5645
6166
|
args: ['environment']
|
|
5646
6167
|
}] }]; } });
|
|
5647
6168
|
|
|
5648
|
-
const NAME_TOKEN = 'token';
|
|
5649
|
-
const NAME_REFRESH_TOKEN = 'refreshToken';
|
|
5650
|
-
class JwtService extends JwtHelperService {
|
|
5651
|
-
getToken() {
|
|
5652
|
-
return localStorage[NAME_TOKEN];
|
|
5653
|
-
}
|
|
5654
|
-
getRefreshToken() {
|
|
5655
|
-
return localStorage[NAME_REFRESH_TOKEN];
|
|
5656
|
-
}
|
|
5657
|
-
saveTokens(tokens) {
|
|
5658
|
-
localStorage[NAME_TOKEN] = tokens.token;
|
|
5659
|
-
localStorage[NAME_REFRESH_TOKEN] = tokens.refreshToken;
|
|
5660
|
-
}
|
|
5661
|
-
destroyTokens() {
|
|
5662
|
-
localStorage.removeItem(NAME_TOKEN);
|
|
5663
|
-
localStorage.removeItem(NAME_REFRESH_TOKEN);
|
|
5664
|
-
}
|
|
5665
|
-
getUser() {
|
|
5666
|
-
return this.decodeToken();
|
|
5667
|
-
}
|
|
5668
|
-
isMe(userId) {
|
|
5669
|
-
return this.getUser().id === userId;
|
|
5670
|
-
}
|
|
5671
|
-
}
|
|
5672
|
-
JwtService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
5673
|
-
JwtService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, providedIn: 'root' });
|
|
5674
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, decorators: [{
|
|
5675
|
-
type: Injectable,
|
|
5676
|
-
args: [{
|
|
5677
|
-
providedIn: 'root'
|
|
5678
|
-
}]
|
|
5679
|
-
}] });
|
|
5680
|
-
|
|
5681
|
-
class AuthService {
|
|
5682
|
-
constructor(http, jwtService, environment) {
|
|
5683
|
-
this.http = http;
|
|
5684
|
-
this.jwtService = jwtService;
|
|
5685
|
-
this.environment = environment;
|
|
5686
|
-
this.isLoggedInSubject = new BehaviorSubject(!this.jwtService.isTokenExpired());
|
|
5687
|
-
}
|
|
5688
|
-
setAuth(response) {
|
|
5689
|
-
this.jwtService.saveTokens(response);
|
|
5690
|
-
this.isLoggedInSubject.next(true);
|
|
5691
|
-
}
|
|
5692
|
-
login(username, password) {
|
|
5693
|
-
return this.http.post(`${this.environment.apiV2}/login_check`, { username, password }).pipe(map((response) => {
|
|
5694
|
-
this.setAuth(response);
|
|
5695
|
-
return response;
|
|
5696
|
-
}));
|
|
5697
|
-
}
|
|
5698
|
-
refresh(refreshToken) {
|
|
5699
|
-
return this.http.post(`${this.environment.apiV2}/token/refresh`, { refreshToken }).pipe(map((response) => {
|
|
5700
|
-
this.setAuth(response);
|
|
5701
|
-
return response;
|
|
5702
|
-
}));
|
|
5703
|
-
}
|
|
5704
|
-
logoutFront(url = '/login') {
|
|
5705
|
-
localStorage.clear();
|
|
5706
|
-
location.replace(url);
|
|
5707
|
-
}
|
|
5708
|
-
}
|
|
5709
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, deps: [{ token: i1.HttpClient }, { token: JwtService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5710
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
5711
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, decorators: [{
|
|
5712
|
-
type: Injectable,
|
|
5713
|
-
args: [{
|
|
5714
|
-
providedIn: 'root'
|
|
5715
|
-
}]
|
|
5716
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: JwtService }, { type: undefined, decorators: [{
|
|
5717
|
-
type: Inject,
|
|
5718
|
-
args: ['environment']
|
|
5719
|
-
}] }]; } });
|
|
5720
|
-
|
|
5721
6169
|
// replace array element with the new one (only arrays of objects)
|
|
5722
6170
|
function replace(array, item, matchField = 'id') {
|
|
5723
6171
|
const index = array.findIndex((i) => i[matchField] === item[matchField]);
|
|
@@ -7985,14 +8433,47 @@ class PdfService {
|
|
|
7985
8433
|
document.save(`${fileName}.pdf`);
|
|
7986
8434
|
}
|
|
7987
8435
|
/**
|
|
8436
|
+
* @Todo rename when all DataTable dependent methods will be cleared-up
|
|
8437
|
+
*/
|
|
8438
|
+
exportTables(tables, title, fileName) {
|
|
8439
|
+
const document = this.generateFromTables(tables, title);
|
|
8440
|
+
document.save(`${fileName}.pdf`);
|
|
8441
|
+
}
|
|
8442
|
+
/**
|
|
8443
|
+
* @Todo rename when all DataTable dependent methods will be cleared-up
|
|
8444
|
+
*/
|
|
8445
|
+
generateFromTables(tables, title) {
|
|
8446
|
+
const pdf = new jsPDF();
|
|
8447
|
+
// set document title
|
|
8448
|
+
pdf.setFontSize(PDF_CONFIG.text.fontSize)
|
|
8449
|
+
.setFont(PDF_CONFIG.text.fontName, PDF_CONFIG.text.fontStyle, PDF_CONFIG.text.fontWeight)
|
|
8450
|
+
.text(title, PDF_CONFIG.text.positionX, PDF_CONFIG.text.positionY);
|
|
8451
|
+
tables.forEach((table) => {
|
|
8452
|
+
// coords of last table
|
|
8453
|
+
const lastTableCoords = pdf['lastAutoTable'].finalY || PDF_CONFIG.contentCoords.marginTop;
|
|
8454
|
+
// table options
|
|
8455
|
+
const options = {
|
|
8456
|
+
html: table,
|
|
8457
|
+
startY: lastTableCoords + PDF_CONFIG.contentTitleCoords.marginTop,
|
|
8458
|
+
footStyles: {
|
|
8459
|
+
fillColor: PDF_CONFIG.text.fillColor,
|
|
8460
|
+
textColor: PDF_CONFIG.text.textColor
|
|
8461
|
+
}
|
|
8462
|
+
};
|
|
8463
|
+
autoTable(pdf, options);
|
|
8464
|
+
});
|
|
8465
|
+
return pdf;
|
|
8466
|
+
}
|
|
8467
|
+
/**
|
|
8468
|
+
* @Todo remove/refactor when all DataTable dependent methods will be cleared-up
|
|
7988
8469
|
* Generate PDF file from provided data
|
|
7989
8470
|
*/
|
|
7990
8471
|
generatePdfFile(tables, title) {
|
|
7991
8472
|
const pdf = new jsPDF();
|
|
7992
|
-
// set document
|
|
7993
|
-
pdf.setFontSize(PDF_CONFIG.text.fontSize)
|
|
7994
|
-
|
|
7995
|
-
|
|
8473
|
+
// set document font params
|
|
8474
|
+
pdf.setFontSize(PDF_CONFIG.text.fontSize)
|
|
8475
|
+
.setFont(PDF_CONFIG.text.fontName, PDF_CONFIG.text.fontStyle, PDF_CONFIG.text.fontWeight)
|
|
8476
|
+
.text(title, PDF_CONFIG.text.positionX, PDF_CONFIG.text.positionY);
|
|
7996
8477
|
tables.forEach((table) => {
|
|
7997
8478
|
// coords of last table
|
|
7998
8479
|
const lastTableCoords = pdf['lastAutoTable'].finalY || PDF_CONFIG.contentCoords.marginTop;
|
|
@@ -8022,63 +8503,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
|
8022
8503
|
}]
|
|
8023
8504
|
}] });
|
|
8024
8505
|
|
|
8025
|
-
|
|
8026
|
-
|
|
8027
|
-
|
|
8028
|
-
|
|
8029
|
-
get() {
|
|
8030
|
-
return this.activePreloaders.asObservable();
|
|
8031
|
-
}
|
|
8032
|
-
add(endpoint) {
|
|
8033
|
-
const activePreloaders = this.activePreloaders.getValue();
|
|
8034
|
-
activePreloaders.push(endpoint);
|
|
8035
|
-
this.activePreloaders.next(activePreloaders);
|
|
8036
|
-
}
|
|
8037
|
-
delete(endpoint) {
|
|
8038
|
-
let activePreloaders = this.activePreloaders.getValue();
|
|
8039
|
-
activePreloaders = activePreloaders.filter((preloader) => preloader !== endpoint);
|
|
8040
|
-
this.activePreloaders.next(activePreloaders);
|
|
8041
|
-
}
|
|
8042
|
-
}
|
|
8043
|
-
PreloaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8044
|
-
PreloaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderService, providedIn: 'root' });
|
|
8045
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PreloaderService, decorators: [{
|
|
8046
|
-
type: Injectable,
|
|
8047
|
-
args: [{
|
|
8048
|
-
providedIn: 'root'
|
|
8049
|
-
}]
|
|
8050
|
-
}], ctorParameters: function () { return []; } });
|
|
8051
|
-
|
|
8052
|
-
class CorelogicService {
|
|
8506
|
+
/**
|
|
8507
|
+
* Service for get property equity position half-year history chart data
|
|
8508
|
+
*/
|
|
8509
|
+
class EquityPositionChartService {
|
|
8053
8510
|
constructor(http, environment) {
|
|
8054
8511
|
this.http = http;
|
|
8055
8512
|
this.environment = environment;
|
|
8056
|
-
this.accessTokenSubject = new ReplaySubject(1);
|
|
8057
8513
|
}
|
|
8058
|
-
|
|
8059
|
-
|
|
8060
|
-
|
|
8061
|
-
.pipe(map((response) => {
|
|
8062
|
-
return response.access_token;
|
|
8063
|
-
}))
|
|
8064
|
-
.subscribe((token) => {
|
|
8065
|
-
this._accessToken = token;
|
|
8066
|
-
this.accessTokenSubject.next(this._accessToken);
|
|
8067
|
-
});
|
|
8068
|
-
}
|
|
8069
|
-
return this.accessTokenSubject.asObservable();
|
|
8070
|
-
}
|
|
8071
|
-
getSuggestions(query, country = 'au') {
|
|
8072
|
-
// @TODO handle different countries in future
|
|
8073
|
-
return this.http.get(`${this.environment.coreLogicUrl}/property/${country}/v2/suggest.json?q=${query}`)
|
|
8514
|
+
get() {
|
|
8515
|
+
// @TODO refactor backend
|
|
8516
|
+
return this.http.get(`${this.environment.apiV2}/properties/categories/equity`)
|
|
8074
8517
|
.pipe(map((response) => {
|
|
8075
|
-
return response.
|
|
8518
|
+
return response.map((item) => {
|
|
8519
|
+
return plainToClass(ChartData, {
|
|
8520
|
+
name: item.category.name,
|
|
8521
|
+
data: item.equity.map((serie) => {
|
|
8522
|
+
return plainToClass(ChartSerie, {
|
|
8523
|
+
label: serie.date,
|
|
8524
|
+
value: serie.amount
|
|
8525
|
+
});
|
|
8526
|
+
})
|
|
8527
|
+
});
|
|
8528
|
+
});
|
|
8076
8529
|
}));
|
|
8077
8530
|
}
|
|
8078
8531
|
}
|
|
8079
|
-
|
|
8080
|
-
|
|
8081
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type:
|
|
8532
|
+
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 });
|
|
8533
|
+
EquityPositionChartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EquityPositionChartService, providedIn: 'root' });
|
|
8534
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EquityPositionChartService, decorators: [{
|
|
8082
8535
|
type: Injectable,
|
|
8083
8536
|
args: [{
|
|
8084
8537
|
providedIn: 'root'
|
|
@@ -8104,6 +8557,8 @@ class PropertyService extends BaseRestService {
|
|
|
8104
8557
|
listenEvents() {
|
|
8105
8558
|
this.listenCoOwnerInviteAccepted();
|
|
8106
8559
|
this.listenServiceSubscriptionUpdated();
|
|
8560
|
+
// @TODO Alex: consider to refactor property movements logic similar to client-movements
|
|
8561
|
+
this.listenMovementsChanged();
|
|
8107
8562
|
}
|
|
8108
8563
|
/**
|
|
8109
8564
|
* Update cache when owner invitation accepted
|
|
@@ -8117,6 +8572,15 @@ class PropertyService extends BaseRestService {
|
|
|
8117
8572
|
listenServiceSubscriptionUpdated() {
|
|
8118
8573
|
this.eventDispatcherService.on(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED).subscribe(() => this.resetCache());
|
|
8119
8574
|
}
|
|
8575
|
+
/**
|
|
8576
|
+
* Update cache when property category changed
|
|
8577
|
+
*/
|
|
8578
|
+
listenMovementsChanged() {
|
|
8579
|
+
// @TODO change dispatcher logic to work with multiple events
|
|
8580
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED).subscribe(() => this.resetCache());
|
|
8581
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_UPDATED).subscribe(() => this.resetCache());
|
|
8582
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_DELETED).subscribe(() => this.resetCache());
|
|
8583
|
+
}
|
|
8120
8584
|
update(property) {
|
|
8121
8585
|
return super.update(property).pipe(map((updatedProperty) => {
|
|
8122
8586
|
if (property.documentFile) {
|
|
@@ -8367,6 +8831,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
|
8367
8831
|
}]
|
|
8368
8832
|
}] });
|
|
8369
8833
|
|
|
8834
|
+
class PropertyCategoryMovementService extends BaseRestService {
|
|
8835
|
+
constructor() {
|
|
8836
|
+
super(...arguments);
|
|
8837
|
+
this.modelClass = PropertyCategoryMovement;
|
|
8838
|
+
this.url = 'properties/category-movements';
|
|
8839
|
+
}
|
|
8840
|
+
add(model) {
|
|
8841
|
+
return super.add(model).pipe(map((newMovement) => {
|
|
8842
|
+
// @TODO Alex: we need to teach restService to dispatch events + limit list of methods (not all services have all 4 or even more considering batch requests) + collections
|
|
8843
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));
|
|
8844
|
+
return newMovement;
|
|
8845
|
+
}));
|
|
8846
|
+
}
|
|
8847
|
+
update(model) {
|
|
8848
|
+
return super.update(model).pipe(map((updatedMovement) => {
|
|
8849
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));
|
|
8850
|
+
return updatedMovement;
|
|
8851
|
+
}));
|
|
8852
|
+
}
|
|
8853
|
+
delete(model) {
|
|
8854
|
+
return super.delete(model).pipe(map(() => {
|
|
8855
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED, null));
|
|
8856
|
+
}));
|
|
8857
|
+
}
|
|
8858
|
+
// @TODO Alex: Move to collection
|
|
8859
|
+
getByPropertyId(id) {
|
|
8860
|
+
return this.get().pipe(map((movements) => {
|
|
8861
|
+
return movements.filter((movement) => movement.property.id === id);
|
|
8862
|
+
}));
|
|
8863
|
+
}
|
|
8864
|
+
}
|
|
8865
|
+
PropertyCategoryMovementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyCategoryMovementService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
8866
|
+
PropertyCategoryMovementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyCategoryMovementService, providedIn: 'root' });
|
|
8867
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyCategoryMovementService, decorators: [{
|
|
8868
|
+
type: Injectable,
|
|
8869
|
+
args: [{
|
|
8870
|
+
providedIn: 'root'
|
|
8871
|
+
}]
|
|
8872
|
+
}] });
|
|
8873
|
+
|
|
8370
8874
|
/**
|
|
8371
8875
|
* Class for work with Property Documents
|
|
8372
8876
|
*/
|
|
@@ -9865,5 +10369,5 @@ function taxReviewFilterPredicate(data, filter) {
|
|
|
9865
10369
|
* Generated bundle index. Do not edit.
|
|
9866
10370
|
*/
|
|
9867
10371
|
|
|
9868
|
-
export {
|
|
10372
|
+
export { Address, AddressService, AddressTypeEnum, AlphabetColorsEnum, AppEvent, AppEventTypeEnum, AssetEntityTypeEnum, AssetTypeEnum, AssetsService, AuthService, BANK_ACCOUNT_TYPES, Bank, BankAccount, BankAccountCalculationService, BankAccountChartData, BankAccountCollection, BankAccountProperty, BankAccountService, BankAccountStatusEnum, BankAccountTypeEnum, BankConnection, BankConnectionService, BankConnectionStatusEnum, BankService, BankTransaction, BankTransactionCalculationService, BankTransactionChartData, BankTransactionCollection, BankTransactionService, BankTransactionSummaryFieldsEnum, BankTransactionTypeEnum, BasiqJob, BasiqService, BasiqToken, BorrowingExpense, BorrowingExpenseLoan, BorrowingExpenseService, CAPITAL_COSTS_ITEMS, CHART_ACCOUNTS_CATEGORIES, CalculationFormItem, CalculationFormTypeEnum, CapitalProjectService, ChartAccounts, ChartAccountsCategoryEnum, ChartAccountsDepreciation, ChartAccountsDepreciationService, ChartAccountsEtpEnum, ChartAccountsHeading, ChartAccountsHeadingTaxDeductibleEnum, ChartAccountsHeadingTaxableEnum, ChartAccountsHeadingVehicleListEnum, ChartAccountsListEnum, ChartAccountsMetadata, ChartAccountsMetadataListEnum, ChartAccountsMetadataTypeEnum, ChartAccountsService, ChartAccountsTaxLabelsEnum, ChartAccountsTypeEnum, ChartData, ChartSerie, Chat, ChatService, ChatStatusEnum, ChatViewTypeEnum, ClientCollection, ClientDetails, ClientDetailsMedicareExemptionEnum, ClientDetailsWorkDepreciationCalculationEnum, ClientDetailsWorkingHolidayMakerEnum, ClientInvite, ClientInviteService, ClientInviteStatusEnum, ClientInviteTypeEnum, ClientMovement, ClientMovementCollection, ClientMovementService, ClientPortfolioChartData, ClientPortfolioReport, ClientPortfolioReportCollection, ClientPortfolioReportService, Collection, CollectionDictionary, CorelogicService, CorelogicSuggestion, Country, DEFAULT_VEHICLE_EXPENSE, DEPRECIATION_GROUPS, DOCUMENT_FILE_TYPES, DataTable, DataTableColumn, Depreciation, DepreciationCalculationEnum, DepreciationCalculationPercentEnum, DepreciationCapitalProject, DepreciationCollection, DepreciationForecast, DepreciationForecastCollection, DepreciationGroup, DepreciationGroupEnum, DepreciationGroupItem, DepreciationReceipt, DepreciationService, DepreciationTypeEnum, DepreciationWriteOffAmountEnum, Document, DocumentApiUrlPrefixEnum, DocumentFolder, DocumentFolderService, ENDPOINTS, EmployeeCollection, EmployeeDetails, EmployeeInvite, EmployeeInviteService, EmployeeService, Endpoint, EquityPositionChartService, EventDispatcherService, FinancialYear, Firm, FirmService, FirmTypeEnum, HeaderTitleService, IconsFileEnum, IncomeAmountTypeEnum, IncomePosition, IncomeSource, IncomeSourceChartData, IncomeSourceCollection, IncomeSourceForecast, IncomeSourceForecastService, IncomeSourceService, IncomeSourceType, IncomeSourceTypeEnum, IncomeSourceTypeListOtherEnum, IncomeSourceTypeListSalaryEnum, IncomeSourceTypeListWorkEnum, InterceptorsModule, IntercomService, InviteStatusEnum, JwtService, Loan, LoanBankTypeEnum, LoanCollection, LoanFrequencyEnum, LoanInterestTypeEnum, LoanMaxNumberOfPaymentsEnum, LoanPayment, LoanPayout, LoanPayoutTypeEnum, LoanRepaymentFrequencyEnum, LoanRepaymentTypeEnum, LoanService, LoanTypeEnum, LoanVehicleTypeEnum, LogbookCollection, LogbookPeriod, MODULE_URL_LIST, MONTHS, Message, MessageCollection, MessageDocument, MessageDocumentCollection, MessageDocumentService, MessageService, MonthNameShortEnum, MonthNumberEnum, MyAccountHistory, MyAccountHistoryInitiatedByEnum, MyAccountHistoryStatusEnum, MyAccountHistoryTypeEnum, Notification, NotificationService, Occupation, OccupationService, OwnershipFilterOptionsEnum, PdfService, Phone, PhoneTypeEnum, PreloaderService, Property, PropertyCalculationService, PropertyCapitalCost, PropertyCapitalCostService, PropertyCategory, PropertyCategoryMovement, PropertyCategoryMovementService, PropertyCategoryService, PropertyCollection, PropertyDepreciationCalculationEnum, PropertyDocument, PropertyDocumentService, PropertyEquityChartData, PropertyEquityChartItem, PropertyForecast, PropertyOwner, PropertyOwnerAccessEnum, PropertyOwnerService, PropertyOwnerStatusEnum, PropertyService, PropertySold, PropertySoldService, PropertySubscription, PropertyValuation, RegistrationInvite, RegistrationInviteStatusEnum, SUBSCRIPTION_DESCRIPTION, SUBSCRIPTION_TITLE, SalaryForecast, SalaryForecastFrequencyEnum, SalaryForecastService, ServiceNotificationStatusEnum, ServiceNotificationTypeEnum, ServicePayment, ServicePaymentStatusEnum, ServicePrice, ServicePriceCollection, ServicePriceRecurringIntervalEnum, ServicePriceTypeEnum, ServiceProduct, ServiceSubscription, ServiceSubscriptionCollection, ServiceSubscriptionItem, ServiceSubscriptionStatusEnum, SpareDocumentSpareTypeEnum, SseService, SubscriptionService, SubscriptionTypeEnum, TYPE_LOAN, TankTypeEnum, TaxCalculationMedicareExemptionEnum, TaxCalculationTypeEnum, TaxReturnCategoryItem, TaxReturnCategoryItemCollection, TaxReturnCategoryItemDetails, TaxReturnCategoryListEnum, TaxReturnCategorySectionEnum, TaxReview, TaxReviewCollection, TaxReviewHistoryService, TaxReviewService, TaxReviewStatusEnum, TaxSummary, TaxSummaryListEnum, TaxSummarySection, TaxSummarySectionEnum, TaxSummaryService, TaxSummaryTaxSummaryEnum, TaxSummaryTypeEnum, TicketFeedbackEnum, TicketStatusEnum, TicketTypesEnum, Transaction, TransactionAllocation, TransactionAllocationCollection, TransactionAllocationService, TransactionBase, TransactionCalculationService, TransactionCollection, TransactionMetadata, TransactionOperationEnum, TransactionReceipt, TransactionService, TransactionSourceEnum, TransactionTypeEnum, TtCoreModule, USER_ROLES, USER_WORK_POSITION, User, UserEventSetting, UserEventSettingCollection, UserEventSettingFieldEnum, UserEventSettingService, UserEventStatusEnum, UserEventType, UserEventTypeCategory, UserEventTypeClientTypeEnum, UserEventTypeEmployeeTypeEnum, UserEventTypeFrequencyEnum, UserEventTypeService, UserEventTypeUserTypeEnum, UserMedicareExemptionEnum, UserRolesEnum, UserService, UserStatusEnum, UserSwitcherService, UserTitleEnum, UserToRegister, UserWorkDepreciationCalculationEnum, UserWorkingHolidayMakerEnum, Vehicle, VehicleClaim, VehicleClaimMethodEnum, VehicleLogbook, VehicleLogbookPurposeEnum, WORK_TANK_LOGBOOK_PURPOSE_OPTIONS, WorkTankService, XlsxService, cloneDeep, compare, compareMatOptions, createDate, displayMatOptions, enumToList, getDocIcon, replace, roundTo, sort, sortDeep, taxReviewFilterPredicate };
|
|
9869
10373
|
//# sourceMappingURL=taxtank-core.js.map
|