taxtank-core 0.29.13 → 0.29.15
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 +6890 -6849
- package/bundles/taxtank-core.umd.js.map +1 -1
- package/esm2015/lib/collections/subscription/service-subscription.collection.js +24 -1
- package/esm2015/lib/collections/subscription/subscription-item.collection.js +10 -0
- package/esm2015/lib/db/Models/subscription/service-subscription.js +3 -3
- package/esm2015/lib/forms/client/client-income-types.form.js +4 -2
- package/esm2015/lib/forms/transaction/work-income.form.js +9 -2
- package/esm2015/lib/models/client/client-income-types.js +9 -1
- package/esm2015/lib/models/service-subscription/service-subscription.js +1 -7
- package/esm2015/lib/models/user/user.js +5 -1
- package/esm2015/lib/services/account-setup/account-setup.service.js +2 -2
- package/esm2015/lib/services/auth/jwt.service.js +8 -2
- package/esm2015/lib/services/http/firm/client-income/client-income-types.service.js +14 -42
- package/esm2015/lib/services/http/rest/rest.service.js +14 -5
- package/esm2015/lib/services/http/subscription/index.js +4 -3
- package/esm2015/lib/services/http/subscription/service-payment/service-payment.service.js +34 -0
- package/esm2015/lib/services/http/subscription/service-price/service-price.service.js +24 -0
- package/esm2015/lib/services/http/subscription/service-subscription/subscription.service.js +112 -0
- package/fesm2015/taxtank-core.js +5303 -5267
- package/fesm2015/taxtank-core.js.map +1 -1
- package/lib/collections/subscription/service-subscription.collection.d.ts +8 -0
- package/lib/collections/subscription/subscription-item.collection.d.ts +6 -0
- package/lib/db/Models/subscription/service-subscription.d.ts +2 -2
- package/lib/forms/client/client-income-types.form.d.ts +1 -1
- package/lib/forms/transaction/work-income.form.d.ts +1 -0
- package/lib/models/client/client-income-types.d.ts +5 -0
- package/lib/models/service-subscription/service-subscription.d.ts +0 -2
- package/lib/models/user/user.d.ts +2 -1
- package/lib/services/auth/jwt.service.d.ts +1 -1
- package/lib/services/http/firm/client-income/client-income-types.service.d.ts +9 -13
- package/lib/services/http/rest/rest.service.d.ts +8 -5
- package/lib/services/http/subscription/index.d.ts +3 -2
- package/lib/services/http/subscription/service-payment/service-payment.service.d.ts +19 -0
- package/lib/services/http/subscription/{service-price.service.d.ts → service-price/service-price.service.d.ts} +3 -3
- package/lib/services/http/subscription/service-subscription/subscription.service.d.ts +48 -0
- package/package.json +1 -1
- package/esm2015/lib/services/http/subscription/service-price.service.js +0 -24
- package/esm2015/lib/services/http/subscription/subscription.service.js +0 -134
- package/lib/services/http/subscription/subscription.service.d.ts +0 -50
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { Collection } from '../collection';
|
|
2
2
|
import { ServiceSubscription } from '../../models/service-subscription/service-subscription';
|
|
3
|
+
import { SubscriptionItemCollection } from './subscription-item.collection';
|
|
3
4
|
export declare class ServiceSubscriptionCollection extends Collection<ServiceSubscription> {
|
|
5
|
+
getActive(): this;
|
|
6
|
+
getTrials(): this;
|
|
7
|
+
getActiveTrials(): this;
|
|
8
|
+
getExpiringTrials(): this;
|
|
9
|
+
getPaid(): this;
|
|
10
|
+
getActivePaid(): ServiceSubscription;
|
|
11
|
+
getItems(): SubscriptionItemCollection;
|
|
4
12
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Collection } from '../collection';
|
|
2
|
+
import { ServiceSubscriptionItem } from '../../models/service-subscription/service-subscription-item';
|
|
3
|
+
export declare class SubscriptionItemCollection extends Collection<ServiceSubscriptionItem> {
|
|
4
|
+
get propertiesItem(): ServiceSubscriptionItem;
|
|
5
|
+
get propertyQuantity(): number;
|
|
6
|
+
}
|
|
@@ -2,8 +2,8 @@ import { ServiceSubscriptionStatusEnum } from '../../Enums/subscription/service-
|
|
|
2
2
|
import { User } from '../user/user';
|
|
3
3
|
import { ServiceSubscriptionItem } from './service-subscription-item';
|
|
4
4
|
import { ServicePayment } from './service-payment';
|
|
5
|
-
import {
|
|
6
|
-
export declare class ServiceSubscription extends
|
|
5
|
+
import { ObservableModel } from '../observable-model';
|
|
6
|
+
export declare class ServiceSubscription extends ObservableModel {
|
|
7
7
|
id?: number;
|
|
8
8
|
stripeId?: string;
|
|
9
9
|
startDate?: Date;
|
|
@@ -2,5 +2,5 @@ import { AbstractForm } from '../abstract.form';
|
|
|
2
2
|
import { ClientIncomeTypes } from '../../models/client/client-income-types';
|
|
3
3
|
export declare class ClientIncomeTypesForm extends AbstractForm<ClientIncomeTypes> {
|
|
4
4
|
private clientIncomeTypes;
|
|
5
|
-
constructor(clientIncomeTypes
|
|
5
|
+
constructor(clientIncomeTypes?: ClientIncomeTypes);
|
|
6
6
|
}
|
|
@@ -5,6 +5,7 @@ export declare class WorkIncomeForm extends TransactionForm implements IEventLis
|
|
|
5
5
|
constructor(transaction: Transaction, registeredForGst: boolean, allocations: TransactionAllocation[]);
|
|
6
6
|
listenEvents(): void;
|
|
7
7
|
private watchIncomeSource;
|
|
8
|
+
private updateTaxValue;
|
|
8
9
|
watchChartAccounts(): void;
|
|
9
10
|
/**
|
|
10
11
|
* depends on chartAccounts the form could include different extra fields
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../db/Models/user/client-income-types';
|
|
2
2
|
export declare class ClientIncomeTypes extends ClientIncomeTypesBase {
|
|
3
|
+
salary: boolean;
|
|
4
|
+
property: boolean;
|
|
5
|
+
sole: boolean;
|
|
6
|
+
dividends: boolean;
|
|
7
|
+
other: boolean;
|
|
3
8
|
/**
|
|
4
9
|
* Get count of selected income types
|
|
5
10
|
*/
|
|
@@ -7,7 +7,6 @@ export declare class ServiceSubscription extends ServiceSubscriptionBase {
|
|
|
7
7
|
lastTrialDays: number;
|
|
8
8
|
get isTrial(): boolean;
|
|
9
9
|
get price(): number;
|
|
10
|
-
get propertyQuantity(): number;
|
|
11
10
|
/**
|
|
12
11
|
* get title of subscription
|
|
13
12
|
*/
|
|
@@ -28,7 +27,6 @@ export declare class ServiceSubscription extends ServiceSubscriptionBase {
|
|
|
28
27
|
*/
|
|
29
28
|
get workTankItem(): ServiceSubscriptionItem;
|
|
30
29
|
get soleTankItem(): ServiceSubscriptionItem;
|
|
31
|
-
get propertiesItem(): ServiceSubscriptionItem;
|
|
32
30
|
hasPropertyTank(): boolean;
|
|
33
31
|
hasWorkTank(): boolean;
|
|
34
32
|
/**
|
|
@@ -6,7 +6,7 @@ import { EmployeeDetails } from '../employee/employee-details';
|
|
|
6
6
|
import { Phone } from '../phone/phone';
|
|
7
7
|
import { ServiceSubscription } from '../service-subscription/service-subscription';
|
|
8
8
|
import { ServiceSubscriptionItem } from '../service-subscription/service-subscription-item';
|
|
9
|
-
import { Photoable } from '../../interfaces
|
|
9
|
+
import { Photoable } from '../../interfaces';
|
|
10
10
|
import { SoleDetails } from '../sole';
|
|
11
11
|
export declare class User extends BaseUser implements Photoable {
|
|
12
12
|
subscriptions: ServiceSubscription[];
|
|
@@ -66,4 +66,5 @@ export declare class User extends BaseUser implements Photoable {
|
|
|
66
66
|
* get user's initials
|
|
67
67
|
*/
|
|
68
68
|
getPhotoPlaceholder(): string;
|
|
69
|
+
isCurrentFinancialYear(): boolean;
|
|
69
70
|
}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Observable, ReplaySubject } from 'rxjs';
|
|
3
1
|
import { ClientIncomeTypes } from '../../../../models/client/client-income-types';
|
|
2
|
+
import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../../../db/Models/user/client-income-types';
|
|
3
|
+
import { RestMethod, RestService } from '../../rest';
|
|
4
|
+
import { Collection } from '../../../../collections';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
cache: ClientIncomeTypes;
|
|
12
|
-
cacheSubject: ReplaySubject<ClientIncomeTypes>;
|
|
13
|
-
constructor(http: HttpClient, environment: any);
|
|
14
|
-
get(): Observable<ClientIncomeTypes>;
|
|
15
|
-
update(incomeTypes: ClientIncomeTypes): Observable<ClientIncomeTypes>;
|
|
6
|
+
export declare class ClientIncomeTypesService extends RestService<ClientIncomeTypesBase, ClientIncomeTypes, Collection<ClientIncomeTypes>> {
|
|
7
|
+
modelClass: typeof ClientIncomeTypes;
|
|
8
|
+
collectionClass: typeof Collection;
|
|
9
|
+
endpointUri: string;
|
|
10
|
+
isApiPlatform: boolean;
|
|
11
|
+
disabledMethods: RestMethod[];
|
|
16
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClientIncomeTypesService, never>;
|
|
17
13
|
static ɵprov: i0.ɵɵInjectableDeclaration<ClientIncomeTypesService>;
|
|
18
14
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Observable, ReplaySubject } from 'rxjs';
|
|
2
2
|
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { EventDispatcherService } from '../../event
|
|
4
|
-
import { IEventListener } from '../../../interfaces
|
|
5
|
-
import { Collection } from '../../../collections
|
|
6
|
-
import { AbstractModel } from '../../../db/Models
|
|
7
|
-
import { ObservableModel } from '../../../db/Models/observable-model';
|
|
3
|
+
import { EventDispatcherService } from '../../event';
|
|
4
|
+
import { IEventListener } from '../../../interfaces';
|
|
5
|
+
import { Collection } from '../../../collections';
|
|
6
|
+
import { AbstractModel, ObservableModel } from '../../../db/Models';
|
|
8
7
|
import { RestMethod } from './rest-method.type';
|
|
9
8
|
import { HttpMethod } from './http-method.type';
|
|
10
9
|
import * as i0 from "@angular/core";
|
|
@@ -51,6 +50,10 @@ export declare abstract class RestService<BaseModel extends AbstractModel, Model
|
|
|
51
50
|
constructor(http: HttpClient, eventDispatcherService: EventDispatcherService, environment: any);
|
|
52
51
|
protected get apiUrl(): string;
|
|
53
52
|
get(): Observable<CollectionModel>;
|
|
53
|
+
/**
|
|
54
|
+
* never return cache directly to prevent update
|
|
55
|
+
*/
|
|
56
|
+
getCache(): Model;
|
|
54
57
|
getSingle(): Observable<Model>;
|
|
55
58
|
getArray(): Observable<Model[]>;
|
|
56
59
|
/**
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export * from './service-price.service';
|
|
2
|
-
export * from './
|
|
1
|
+
export * from './service-price/service-price.service';
|
|
2
|
+
export * from './service-payment/service-payment.service';
|
|
3
|
+
export * from './service-subscription/subscription.service';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Collection } from '../../../../collections';
|
|
2
|
+
import { RestMethod, RestService } from '../../rest';
|
|
3
|
+
import { ServicePayment } from '../../../../models/service-subscription/service-payment';
|
|
4
|
+
import { ServicePayment as ServicePaymentBase } from '../../../../db/Models';
|
|
5
|
+
import { Observable } from 'rxjs';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class ServicePaymentService extends RestService<ServicePaymentBase, ServicePayment, Collection<ServicePayment>> {
|
|
8
|
+
isApiPlatform: boolean;
|
|
9
|
+
endpointUri: string;
|
|
10
|
+
modelClass: typeof ServicePayment;
|
|
11
|
+
collectionClass: typeof Collection;
|
|
12
|
+
disabledMethods: RestMethod[];
|
|
13
|
+
/**
|
|
14
|
+
* Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link
|
|
15
|
+
*/
|
|
16
|
+
getInvoiceUrl(payment: ServicePayment): Observable<string>;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ServicePaymentService, never>;
|
|
18
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ServicePaymentService>;
|
|
19
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ServicePrice as ServicePriceBase } from '
|
|
2
|
-
import { ServicePrice } from '
|
|
3
|
-
import { RestService } from '
|
|
1
|
+
import { ServicePrice as ServicePriceBase } from '../../../../db/Models/subscription/service-price';
|
|
2
|
+
import { ServicePrice } from '../../../../models/service-subscription/service-price';
|
|
3
|
+
import { RestService } from '../../rest/rest-old.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/**
|
|
6
6
|
* Service that handling banks logic
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { ServiceSubscription } from '../../../../models/service-subscription/service-subscription';
|
|
4
|
+
import { EventDispatcherService, SseService } from '../../../event';
|
|
5
|
+
import { ServiceSubscriptionItem } from '../../../../models/service-subscription/service-subscription-item';
|
|
6
|
+
import { ToastService } from '../../../toast';
|
|
7
|
+
import { RestMethod, RestService } from '../../rest';
|
|
8
|
+
import { ServiceSubscription as ServiceSubscriptionBase } from '../../../../db/Models';
|
|
9
|
+
import { ServiceSubscriptionCollection } from '../../../../collections';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
/**
|
|
12
|
+
* @TODO Alex refactor
|
|
13
|
+
*/
|
|
14
|
+
export declare class SubscriptionService extends RestService<ServiceSubscriptionBase, ServiceSubscription, ServiceSubscriptionCollection> {
|
|
15
|
+
protected http: HttpClient;
|
|
16
|
+
protected eventDispatcherService: EventDispatcherService;
|
|
17
|
+
private sseService;
|
|
18
|
+
private toastService;
|
|
19
|
+
protected environment: any;
|
|
20
|
+
isApiPlatform: boolean;
|
|
21
|
+
endpointUri: string;
|
|
22
|
+
modelClass: typeof ServiceSubscription;
|
|
23
|
+
collectionClass: typeof ServiceSubscriptionCollection;
|
|
24
|
+
disabledMethods: RestMethod[];
|
|
25
|
+
constructor(http: HttpClient, eventDispatcherService: EventDispatcherService, sseService: SseService, toastService: ToastService, environment: any);
|
|
26
|
+
getActive(): Observable<ServiceSubscriptionCollection>;
|
|
27
|
+
getTrials(): Observable<ServiceSubscriptionCollection>;
|
|
28
|
+
getActiveTrials(): Observable<ServiceSubscriptionCollection>;
|
|
29
|
+
/**
|
|
30
|
+
* redirect to stripe payment page
|
|
31
|
+
*/
|
|
32
|
+
checkoutRedirect(subscription: ServiceSubscription): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* redirect to stripe billing page
|
|
35
|
+
*/
|
|
36
|
+
billingRedirect(returnUrl: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get difference between current subscription and selected new subscription
|
|
39
|
+
*/
|
|
40
|
+
getProrationCost(items: ServiceSubscriptionItem[]): Observable<number>;
|
|
41
|
+
/**
|
|
42
|
+
* Change subscription plan
|
|
43
|
+
*/
|
|
44
|
+
changeSubscription(items: ServiceSubscriptionItem[]): Observable<object>;
|
|
45
|
+
private listenSubscriptions;
|
|
46
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionService, never>;
|
|
47
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SubscriptionService>;
|
|
48
|
+
}
|
package/package.json
CHANGED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { ServicePrice } from '../../../models/service-subscription/service-price';
|
|
3
|
-
import { RestService } from '../rest/rest-old.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/**
|
|
6
|
-
* Service that handling banks logic
|
|
7
|
-
*/
|
|
8
|
-
export class ServicePriceService extends RestService {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.modelClass = ServicePrice;
|
|
12
|
-
this.url = 'service-prices';
|
|
13
|
-
this.isHydra = true;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
ServicePriceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServicePriceService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
17
|
-
ServicePriceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServicePriceService, providedIn: 'root' });
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServicePriceService, decorators: [{
|
|
19
|
-
type: Injectable,
|
|
20
|
-
args: [{
|
|
21
|
-
providedIn: 'root'
|
|
22
|
-
}]
|
|
23
|
-
}] });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wcmljZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvc3Vic2NyaXB0aW9uL3NlcnZpY2UtcHJpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRXZEOztHQUVHO0FBSUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQTJDO0lBSHBGOztRQUlFLGVBQVUsR0FBd0IsWUFBWSxDQUFDO1FBQy9DLFFBQUcsR0FBVyxnQkFBZ0IsQ0FBQztRQUMvQixZQUFPLEdBQVksSUFBSSxDQUFDO0tBQ3pCOztpSEFKWSxtQkFBbUI7cUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpY2UgYXMgU2VydmljZVByaWNlQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9zdWJzY3JpcHRpb24vc2VydmljZS1wcmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpY2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1zdWJzY3JpcHRpb24vc2VydmljZS1wcmljZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QvcmVzdC1vbGQuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGhhbmRsaW5nIGJhbmtzIGxvZ2ljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlcnZpY2VQcmljZVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxTZXJ2aWNlUHJpY2VCYXNlLCBTZXJ2aWNlUHJpY2U+IHtcbiAgbW9kZWxDbGFzczogdHlwZW9mIFNlcnZpY2VQcmljZSA9IFNlcnZpY2VQcmljZTtcbiAgdXJsOiBzdHJpbmcgPSAnc2VydmljZS1wcmljZXMnO1xuICBpc0h5ZHJhOiBib29sZWFuID0gdHJ1ZTtcbn1cbiJdfQ==
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { of, ReplaySubject } from 'rxjs';
|
|
4
|
-
import { map } from 'rxjs/operators';
|
|
5
|
-
import { loadStripe } from '@stripe/stripe-js';
|
|
6
|
-
import { plainToClass } from 'class-transformer';
|
|
7
|
-
import { ServiceSubscription } from '../../../models/service-subscription/service-subscription';
|
|
8
|
-
import { ServicePayment } from '../../../models/service-subscription/service-payment';
|
|
9
|
-
import { AppEvent } from '../../../models/event/app-event';
|
|
10
|
-
import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/common/http";
|
|
13
|
-
import * as i2 from "../../event/event-dispatcher.service";
|
|
14
|
-
import * as i3 from "../../event/sse.service";
|
|
15
|
-
import * as i4 from "../../toast/toast.service";
|
|
16
|
-
/**
|
|
17
|
-
* @TODO Alex refactor
|
|
18
|
-
*/
|
|
19
|
-
export class SubscriptionService {
|
|
20
|
-
constructor(http, eventDispatcherService, sseService, toastService, environment) {
|
|
21
|
-
this.http = http;
|
|
22
|
-
this.eventDispatcherService = eventDispatcherService;
|
|
23
|
-
this.sseService = sseService;
|
|
24
|
-
this.toastService = toastService;
|
|
25
|
-
this.environment = environment;
|
|
26
|
-
this.serviceSubscriptionSubject = new ReplaySubject(1);
|
|
27
|
-
this.servicePaymentsSubject = new ReplaySubject(1);
|
|
28
|
-
this.listenSubscriptions();
|
|
29
|
-
}
|
|
30
|
-
getSubscription(force = false) {
|
|
31
|
-
if (this._serviceSubscription === undefined || force) {
|
|
32
|
-
this._serviceSubscription = null;
|
|
33
|
-
this.http.get(`${this.environment.apiV2}/subscriptions/last`)
|
|
34
|
-
.pipe(map((response) => {
|
|
35
|
-
return plainToClass(ServiceSubscription, response);
|
|
36
|
-
}))
|
|
37
|
-
.subscribe((subsciption) => {
|
|
38
|
-
this._serviceSubscription = subsciption;
|
|
39
|
-
this.serviceSubscriptionSubject.next(this._serviceSubscription);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return this.serviceSubscriptionSubject.asObservable();
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* redirect to stripe payment page
|
|
46
|
-
*/
|
|
47
|
-
checkoutRedirect(subscription) {
|
|
48
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
-
const stripe = yield loadStripe(this.environment.stripePk);
|
|
50
|
-
this.http.post(`${this.environment.apiV2}/stripe/checkout-session`, {
|
|
51
|
-
items: subscription.items,
|
|
52
|
-
successUrl: window.location.href,
|
|
53
|
-
cancelUrl: window.location.href
|
|
54
|
-
})
|
|
55
|
-
.subscribe((session) => {
|
|
56
|
-
// @Todo remove user TRIAL status
|
|
57
|
-
stripe.redirectToCheckout({ sessionId: session });
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* redirect to stripe billing page
|
|
63
|
-
*/
|
|
64
|
-
billingRedirect(returnUrl) {
|
|
65
|
-
this.http.get(`${this.environment.apiV2}/stripe/billing-portal-session`, {
|
|
66
|
-
params: { returnUrl }
|
|
67
|
-
}).subscribe((response) => {
|
|
68
|
-
window.location.replace(response.url);
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
getPayments() {
|
|
72
|
-
if (!this._servicePayments) {
|
|
73
|
-
this.http.get(`${this.environment.apiV2}/service-payments`).subscribe((response) => {
|
|
74
|
-
this._servicePayments = response['hydra:member'].map((item) => plainToClass(ServicePayment, item));
|
|
75
|
-
this.servicePaymentsSubject.next(this._servicePayments);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return this.servicePaymentsSubject.asObservable();
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Get difference between current subscription and selected new subscription
|
|
82
|
-
*/
|
|
83
|
-
getProrationCost(items) {
|
|
84
|
-
return this.http.post(`${this.environment.apiV2}/subscriptions/proration-cost`, items).pipe(map((prorationCost) => {
|
|
85
|
-
return prorationCost;
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Change subscription plan
|
|
90
|
-
*/
|
|
91
|
-
changeSubscription(items) {
|
|
92
|
-
return this.http.put(`${this.environment.apiV2}/subscriptions/items`, items);
|
|
93
|
-
}
|
|
94
|
-
listenSubscriptions() {
|
|
95
|
-
this.sseService.on(`serviceSubscriptions`)
|
|
96
|
-
.pipe(map((event) => {
|
|
97
|
-
// @TODO for some reason mercure return object when there is only one item
|
|
98
|
-
if (event['items'] instanceof Object) {
|
|
99
|
-
event['items'] = Object.values(event['items']);
|
|
100
|
-
}
|
|
101
|
-
return plainToClass(ServiceSubscription, event);
|
|
102
|
-
}))
|
|
103
|
-
.subscribe((subscription) => {
|
|
104
|
-
this._serviceSubscription = subscription;
|
|
105
|
-
this.serviceSubscriptionSubject.next(this._serviceSubscription);
|
|
106
|
-
// @TODO vik remove timeout when user api moved to api platform
|
|
107
|
-
setTimeout(() => {
|
|
108
|
-
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED, null));
|
|
109
|
-
this.toastService.success('Subscription successfully updated');
|
|
110
|
-
}, 2000);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link
|
|
115
|
-
*/
|
|
116
|
-
getPaymentInvoiceUrl(payment) {
|
|
117
|
-
if (!payment.isInvoiceLinkExpired()) {
|
|
118
|
-
return of(payment.receipt);
|
|
119
|
-
}
|
|
120
|
-
return this.http.get(`${this.environment.apiV2}/service-payments/${payment.id}/invoice-url`);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
SubscriptionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: i3.SseService }, { token: i4.ToastService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
124
|
-
SubscriptionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, providedIn: 'root' });
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, decorators: [{
|
|
126
|
-
type: Injectable,
|
|
127
|
-
args: [{
|
|
128
|
-
providedIn: 'root'
|
|
129
|
-
}]
|
|
130
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: i3.SseService }, { type: i4.ToastService }, { type: undefined, decorators: [{
|
|
131
|
-
type: Inject,
|
|
132
|
-
args: ['environment']
|
|
133
|
-
}] }]; } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9zdWJzY3JpcHRpb24vc3Vic2NyaXB0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUdwRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7Ozs7OztBQUkzRTs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFDVSxJQUFnQixFQUNoQixzQkFBOEMsRUFDOUMsVUFBc0IsRUFDdEIsWUFBMEIsRUFDSCxXQUFnQjtRQUp2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNILGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBVmpELCtCQUEwQixHQUF1QyxJQUFJLGFBQWEsQ0FBc0IsQ0FBQyxDQUFDLENBQUM7UUFFM0cs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c0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLE9BQXVCO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLHFCQUFxQixPQUFPLENBQUMsRUFBRSxjQUFjLENBQXVCLENBQUM7SUFDckgsQ0FBQzs7aUhBNUhVLG1CQUFtQix3SUFZcEIsYUFBYTtxSEFaWixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFhSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtsb2FkU3RyaXBlfSBmcm9tICdAc3RyaXBlL3N0cmlwZS1qcyc7XG5pbXBvcnQge3BsYWluVG9DbGFzc30gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtTZXJ2aWNlU3Vic2NyaXB0aW9ufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1zdWJzY3JpcHRpb24vc2VydmljZS1zdWJzY3JpcHRpb24nO1xuaW1wb3J0IHtTZXJ2aWNlUGF5bWVudH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NlcnZpY2Utc3Vic2NyaXB0aW9uL3NlcnZpY2UtcGF5bWVudCc7XG5pbXBvcnQge0V2ZW50RGlzcGF0Y2hlclNlcnZpY2V9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQge1NlcnZpY2VTdWJzY3JpcHRpb25JdGVtfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1zdWJzY3JpcHRpb24vc2VydmljZS1zdWJzY3JpcHRpb24taXRlbSc7XG5pbXBvcnQge0FwcEV2ZW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7QXBwRXZlbnRUeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHtTc2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zc2Uuc2VydmljZSc7XG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSAnLi4vLi4vdG9hc3QvdG9hc3Quc2VydmljZSc7XG5cbi8qKlxuICogQFRPRE8gQWxleCByZWZhY3RvclxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25TZXJ2aWNlIHtcbiAgX3NlcnZpY2VTdWJzY3JpcHRpb246IFNlcnZpY2VTdWJzY3JpcHRpb247XG4gIHNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFNlcnZpY2VTdWJzY3JpcHRpb24+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2VydmljZVN1YnNjcmlwdGlvbj4oMSk7XG4gIHN0cmlwZTogYW55O1xuICBzZXJ2aWNlUGF5bWVudHNTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFNlcnZpY2VQYXltZW50W10+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2VydmljZVBheW1lbnRbXT4oMSk7XG4gIF9zZXJ2aWNlUGF5bWVudHM6IFNlcnZpY2VQYXltZW50W107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBwcml2YXRlIHNzZVNlcnZpY2U6IFNzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLmxpc3RlblN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIGdldFN1YnNjcmlwdGlvbihmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxTZXJ2aWNlU3Vic2NyaXB0aW9uPiB7XG4gICAgaWYgKHRoaXMuX3NlcnZpY2VTdWJzY3JpcHRpb24gPT09IHVuZGVmaW5lZCB8fCBmb3JjZSkge1xuICAgICAgdGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3N1YnNjcmlwdGlvbnMvbGFzdGApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uLCByZXNwb25zZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY2lwdGlvbjogU2VydmljZVN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlcnZpY2VTdWJzY3JpcHRpb24gPSBzdWJzY2lwdGlvbjtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0Lm5leHQodGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZGlyZWN0IHRvIHN0cmlwZSBwYXltZW50IHBhZ2VcbiAgICovXG4gIGFzeW5jIGNoZWNrb3V0UmVkaXJlY3Qoc3Vic2NyaXB0aW9uOiBTZXJ2aWNlU3Vic2NyaXB0aW9uKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzdHJpcGU6IGFueSA9IGF3YWl0IGxvYWRTdHJpcGUodGhpcy5lbnZpcm9ubWVudC5zdHJpcGVQayk7XG5cbiAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zdHJpcGUvY2hlY2tvdXQtc2Vzc2lvbmAsIHtcbiAgICAgIGl0ZW1zOiBzdWJzY3JpcHRpb24uaXRlbXMsXG4gICAgICBzdWNjZXNzVXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIGNhbmNlbFVybDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoc2Vzc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIEBUb2RvIHJlbW92ZSB1c2VyIFRSSUFMIHN0YXR1c1xuICAgICAgICBzdHJpcGUucmVkaXJlY3RUb0NoZWNrb3V0KHtzZXNzaW9uSWQ6IHNlc3Npb259KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZGlyZWN0IHRvIHN0cmlwZSBiaWxsaW5nIHBhZ2VcbiAgICovXG4gIGJpbGxpbmdSZWRpcmVjdChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc3RyaXBlL2JpbGxpbmctcG9ydGFsLXNlc3Npb25gLCB7XG4gICAgICBwYXJhbXM6IHtyZXR1cm5Vcmx9XG4gICAgfSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShyZXNwb25zZS51cmwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGF5bWVudHMoKTogT2JzZXJ2YWJsZTxTZXJ2aWNlUGF5bWVudFtdPiB7XG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlUGF5bWVudHMpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc2VydmljZS1wYXltZW50c2ApLnN1YnNjcmliZSgocmVzcG9uc2U6IG9iamVjdFtdKSA9PiB7XG4gICAgICAgIHRoaXMuX3NlcnZpY2VQYXltZW50cyA9IHJlc3BvbnNlWydoeWRyYTptZW1iZXInXS5tYXAoKGl0ZW06IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKFNlcnZpY2VQYXltZW50LCBpdGVtKSk7XG4gICAgICAgIHRoaXMuc2VydmljZVBheW1lbnRzU3ViamVjdC5uZXh0KHRoaXMuX3NlcnZpY2VQYXltZW50cyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUGF5bWVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBzdWJzY3JpcHRpb24gYW5kIHNlbGVjdGVkIG5ldyBzdWJzY3JpcHRpb25cbiAgICovXG4gIGdldFByb3JhdGlvbkNvc3QoaXRlbXM6IFNlcnZpY2VTdWJzY3JpcHRpb25JdGVtW10pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zdWJzY3JpcHRpb25zL3Byb3JhdGlvbi1jb3N0YCwgaXRlbXMpLnBpcGUoXG4gICAgICBtYXAoKHByb3JhdGlvbkNvc3Q6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gcHJvcmF0aW9uQ29zdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugc3Vic2NyaXB0aW9uIHBsYW5cbiAgICovXG4gIGNoYW5nZVN1YnNjcmlwdGlvbihpdGVtczogU2VydmljZVN1YnNjcmlwdGlvbkl0ZW1bXSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc3Vic2NyaXB0aW9ucy9pdGVtc2AsIGl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnNzZVNlcnZpY2Uub24oYHNlcnZpY2VTdWJzY3JpcHRpb25zYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50OiBvYmplY3QpOiBTZXJ2aWNlU3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgICAvLyBAVE9ETyBmb3Igc29tZSByZWFzb24gbWVyY3VyZSByZXR1cm4gb2JqZWN0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgaXRlbVxuICAgICAgICAgIGlmIChldmVudFsnaXRlbXMnXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZXZlbnRbJ2l0ZW1zJ10gPSBPYmplY3QudmFsdWVzKGV2ZW50WydpdGVtcyddKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKFNlcnZpY2VTdWJzY3JpcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHN1YnNjcmlwdGlvbjogU2VydmljZVN1YnNjcmlwdGlvbik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLl9zZXJ2aWNlU3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0Lm5leHQodGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbik7XG4gICAgICAgIC8vIEBUT0RPIHZpayByZW1vdmUgdGltZW91dCB3aGVuIHVzZXIgYXBpIG1vdmVkIHRvIGFwaSBwbGF0Zm9ybVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uU0VSVklDRV9TVUJTQ1JJUFRJT05fVVBEQVRFRCwgbnVsbCkpO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ1N1YnNjcmlwdGlvbiBzdWNjZXNzZnVsbHkgdXBkYXRlZCcpO1xuICAgICAgICB9LCAyMDAwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmlwZSBzdG9yZXMgYWN0dWFsIGxpbmtzIHRvIHBheW1lbnQgaW52b2ljZXMgZm9yIDMwIGRheXMuIEFmdGVyIHRoYXQsIHdlIG5lZWQgdG8gcmVxdWVzdCBhbiBhY3R1YWwgbGlua1xuICAgKi9cbiAgZ2V0UGF5bWVudEludm9pY2VVcmwocGF5bWVudDogU2VydmljZVBheW1lbnQpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghcGF5bWVudC5pc0ludm9pY2VMaW5rRXhwaXJlZCgpKSB7XG4gICAgICByZXR1cm4gb2YocGF5bWVudC5yZWNlaXB0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zZXJ2aWNlLXBheW1lbnRzLyR7cGF5bWVudC5pZH0vaW52b2ljZS11cmxgKSBhcyBPYnNlcnZhYmxlPHN0cmluZz47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Observable, ReplaySubject } from 'rxjs';
|
|
3
|
-
import { ServiceSubscription } from '../../../models/service-subscription/service-subscription';
|
|
4
|
-
import { ServicePayment } from '../../../models/service-subscription/service-payment';
|
|
5
|
-
import { EventDispatcherService } from '../../event/event-dispatcher.service';
|
|
6
|
-
import { ServiceSubscriptionItem } from '../../../models/service-subscription/service-subscription-item';
|
|
7
|
-
import { SseService } from '../../event/sse.service';
|
|
8
|
-
import { ToastService } from '../../toast/toast.service';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
/**
|
|
11
|
-
* @TODO Alex refactor
|
|
12
|
-
*/
|
|
13
|
-
export declare class SubscriptionService {
|
|
14
|
-
private http;
|
|
15
|
-
private eventDispatcherService;
|
|
16
|
-
private sseService;
|
|
17
|
-
private toastService;
|
|
18
|
-
private environment;
|
|
19
|
-
_serviceSubscription: ServiceSubscription;
|
|
20
|
-
serviceSubscriptionSubject: ReplaySubject<ServiceSubscription>;
|
|
21
|
-
stripe: any;
|
|
22
|
-
servicePaymentsSubject: ReplaySubject<ServicePayment[]>;
|
|
23
|
-
_servicePayments: ServicePayment[];
|
|
24
|
-
constructor(http: HttpClient, eventDispatcherService: EventDispatcherService, sseService: SseService, toastService: ToastService, environment: any);
|
|
25
|
-
getSubscription(force?: boolean): Observable<ServiceSubscription>;
|
|
26
|
-
/**
|
|
27
|
-
* redirect to stripe payment page
|
|
28
|
-
*/
|
|
29
|
-
checkoutRedirect(subscription: ServiceSubscription): Promise<any>;
|
|
30
|
-
/**
|
|
31
|
-
* redirect to stripe billing page
|
|
32
|
-
*/
|
|
33
|
-
billingRedirect(returnUrl: string): void;
|
|
34
|
-
getPayments(): Observable<ServicePayment[]>;
|
|
35
|
-
/**
|
|
36
|
-
* Get difference between current subscription and selected new subscription
|
|
37
|
-
*/
|
|
38
|
-
getProrationCost(items: ServiceSubscriptionItem[]): Observable<number>;
|
|
39
|
-
/**
|
|
40
|
-
* Change subscription plan
|
|
41
|
-
*/
|
|
42
|
-
changeSubscription(items: ServiceSubscriptionItem[]): Observable<object>;
|
|
43
|
-
private listenSubscriptions;
|
|
44
|
-
/**
|
|
45
|
-
* Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link
|
|
46
|
-
*/
|
|
47
|
-
getPaymentInvoiceUrl(payment: ServicePayment): Observable<string>;
|
|
48
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionService, never>;
|
|
49
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<SubscriptionService>;
|
|
50
|
-
}
|