{ "version": 3, "sources": ["apps/partner-center-client/src/app/core/contract-details/contract-details-api-response.ts", "apps/partner-center-client/src/app/core/contract-details/contract-details-summary.ts", "apps/partner-center-client/src/app/core/contract-details.service.ts"], "sourcesContent": ["export class VerifyContractApiResponse {\n verified_datetime: Date;\n\n constructor(data: any) {\n this.verified_datetime = data.verified_datetime || null;\n }\n}\n", "import { Dimension } from '@galaxy/billing';\nimport { Discount } from '../discount';\n\nexport class ContractDetailsSummary {\n constructor(\n public subscriptionId: string,\n public accountStatus: string,\n public dimension: Dimension,\n public subscriptionPrice: number,\n public subscriptionFrequency: string,\n public subscriptionCurrency: string,\n public contractNetD: number,\n public creditLimit: number,\n public contractSigned?: Date,\n public contractEnd?: Date,\n public contractActivated?: Date,\n public contractModified?: Date,\n public contractVerified?: Date,\n public onboardingFee?: number,\n public billingStrategy?: string,\n public discounts?: Discount[],\n ) {}\n}\n", "import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n BillingHostService,\n BillingService,\n Contract,\n ListBillableItemsRequestFilters,\n ProductPrices,\n WholesalePricingService,\n} from '@galaxy/billing';\nimport { DateUtilities } from '@vendasta/uikit';\nimport { BehaviorSubject, Observable, combineLatest, of } from 'rxjs';\nimport {\n catchError,\n distinctUntilChanged,\n filter,\n map,\n share,\n shareReplay,\n skipWhile,\n switchMap,\n tap,\n} from 'rxjs/operators';\nimport { VerifyContractApiResponse } from './contract-details/contract-details-api-response';\nimport { ContractDetailsSummary } from './contract-details/contract-details-summary';\nimport { PartnerService } from './partner.service';\n\nconst ONBOARDING_FEE_SKU = 'onboarding_fee';\n\n@Injectable({ providedIn: 'root' })\nexport class ContractDetailsService {\n public summary$: Observable;\n\n private reloadSummary$$: BehaviorSubject = new BehaviorSubject(0);\n\n private isLoading$$: BehaviorSubject = new BehaviorSubject(true);\n private isFailed$$: BehaviorSubject = new BehaviorSubject(false);\n private isMissing$$: BehaviorSubject = new BehaviorSubject(false);\n\n private currency$$: BehaviorSubject = new BehaviorSubject('');\n\n constructor(\n private http: HttpClient,\n private billingHostService: BillingHostService,\n private billingService: BillingService,\n private pricingService: WholesalePricingService,\n @Inject('PARTNER_ID') partnerId$: Observable,\n private readonly partnerService: PartnerService,\n ) {\n this.summary$ = combineLatest([partnerId$, this.reloadSummary$$]).pipe(\n skipWhile(([partnerId, _]) => partnerId === null),\n switchMap(([partnerId, _]) => this.updateSummaryFromApi(partnerId)),\n tap((summary) => this.currency$$.next(summary.subscriptionCurrency)),\n tap(() => this.isLoading$$.next(false)),\n shareReplay(1), // Cut down on triggering upstream api calls due to multiple subscribers\n );\n }\n\n get currency(): string {\n return this.currency$$.getValue();\n }\n\n get failed(): Observable {\n return this.isFailed$$.asObservable();\n }\n\n get missing(): Observable {\n return this.isMissing$$.asObservable();\n }\n\n reloadSummary(): void {\n this.reloadSummary$$.next(this.reloadSummary$$.getValue() + 1);\n }\n\n get loading(): Observable {\n return this.isLoading$$.asObservable();\n }\n\n get contractVerified(): Observable {\n return this.summary$.pipe(\n map(\n (contractSummary: ContractDetailsSummary) =>\n !(contractSummary.contractVerified === undefined || contractSummary.contractVerified === null),\n ),\n );\n }\n\n updateSummaryFromApi(partnerId: string): Observable {\n this.isFailed$$.next(false);\n this.isLoading$$.next(true);\n this.isMissing$$.next(false);\n\n const contract$ = this.billingService.getMultiContract([partnerId]).pipe(\n map((contractsMap) => {\n return contractsMap ? contractsMap[partnerId] : null;\n }),\n catchError((err) => {\n this.isFailed$$.next(true);\n err.code === 404 ? this.isMissing$$.next(true) : this.isFailed$$.next(true);\n return of(null);\n }),\n filter((contract) => !!contract),\n shareReplay(1), // Filter out null values thrown from catchError\n );\n\n const contractSubscription$ = contract$.pipe(\n filter((contract) => !!contract?.subscriptionId),\n switchMap((contract: Contract) => {\n const filters = new ListBillableItemsRequestFilters({\n skus: [contract?.subscriptionId],\n merchantId: partnerId,\n });\n return this.billingService.listBillableItems('', filters, null, 1);\n }),\n map((r) => (r?.results ? r?.results[0] : null)),\n );\n\n const subscriptionPricings$ = contract$.pipe(\n filter((contract) => !!contract?.subscriptionId),\n switchMap((contract) =>\n this.pricingService.getMultiWholesalePrices(partnerId, [contract.subscriptionId, ONBOARDING_FEE_SKU]),\n ),\n );\n\n const contractPricing$ = combineLatest([contractSubscription$, subscriptionPricings$]).pipe(\n map(([sub, pricing]) => {\n pricing.forEach((price) => {\n const priceIndex = price?.prices?.findIndex((p) => p.frequency === sub?.frequency);\n if (priceIndex !== -1) {\n price.prices = [price.prices[priceIndex]];\n }\n });\n return pricing;\n }),\n distinctUntilChanged((p1, p2) => {\n // If empty, this is emitting an empty object then an empty array?\n return (\n typeof p1 === typeof p2 &&\n typeof p1 !== 'undefined' &&\n Object.keys(p1 || {}).length === 0 &&\n Object.keys(p2 || {}).length === 0\n );\n }),\n shareReplay(1),\n );\n\n return combineLatest([contract$, contractPricing$]).pipe(\n map(([contract, pricing]) => this.makeContractDetailsSummary(contract, pricing)),\n );\n }\n // Combine contract details from multiple sources\n private makeContractDetailsSummary(contract: Contract, pricing: ProductPrices[]): ContractDetailsSummary {\n // Contract\n const signedDate = contract && contract.signed ? DateUtilities.stripTimeAndTimeZoneInfo(contract.signed) : null;\n const endDate = contract && contract.end ? DateUtilities.stripTimeAndTimeZoneInfo(contract.end) : null;\n const activatedDate =\n contract && contract.activated ? DateUtilities.stripTimeAndTimeZoneInfo(contract.activated) : null;\n const modifiedDate =\n contract && contract.modified ? DateUtilities.stripTimeAndTimeZoneInfo(contract.modified) : null;\n const verifiedDate =\n contract && contract.verified ? DateUtilities.stripTimeAndTimeZoneInfo(contract.verified) : null;\n const dimension = contract ? contract.dimension : null;\n const status = contract ? contract.status : null;\n const currency = contract ? contract.currency.toString() : '';\n const netD = contract ? contract.netD : 0;\n const creditLimit = contract && contract.creditLimit ? contract.creditLimit : 0;\n // Pricing\n const subscriptionIndex = pricing?.findIndex((p) => p.sku === contract.subscriptionId);\n const subscriptionPricing = pricing[subscriptionIndex]?.prices;\n const onBoardingFeeIndex = pricing?.findIndex((p) => p.sku === ONBOARDING_FEE_SKU);\n const onBoardingFeePricing = pricing[onBoardingFeeIndex]?.prices;\n const subscriptionPrice = subscriptionPricing ? subscriptionPricing[0].pricingRules[0].price : 0;\n const subscriptionFrequency = subscriptionPricing ? subscriptionPricing[0].frequency.toString().toLowerCase() : '';\n const billingStrategy = subscriptionPricing ? subscriptionPricing[0].strategy.toString().toLowerCase() : null;\n const onBoardingFeePrice = onBoardingFeePricing ? onBoardingFeePricing[0].pricingRules[0].price : 0;\n\n return new ContractDetailsSummary(\n contract ? contract.subscriptionId : null,\n status,\n dimension,\n subscriptionPrice,\n subscriptionFrequency,\n currency,\n netD,\n creditLimit,\n signedDate,\n endDate,\n activatedDate,\n modifiedDate,\n verifiedDate,\n onBoardingFeePrice,\n billingStrategy,\n );\n }\n\n private updateVerifyState(url: string, clientId: string, userEmail: string): Observable {\n const data = {\n clientId: clientId,\n userId: userEmail,\n };\n\n const post: Observable = this.http.post(url, data, { withCredentials: true }).pipe(\n map((resp) => new VerifyContractApiResponse(resp)),\n share(),\n );\n post.subscribe(() => this.reloadSummary());\n\n return post;\n }\n\n public verify(clientId: string, userEmail: string): Observable {\n const url: string = this.billingHostService.appEngineHost + '/internalApi/v1/contract/verify/';\n return this.updateVerifyState(url, clientId, userEmail);\n }\n\n public unverify(clientId: string, userEmail: string): Observable {\n const url: string = this.billingHostService.appEngineHost + '/internalApi/v1/contract/unverify/';\n return this.updateVerifyState(url, clientId, userEmail);\n }\n\n public resetContract(partnerId: string): Observable {\n const url: string = this.billingHostService.appEngineHost + '/internalApi/v2/contract/reset/';\n const data = { clientId: partnerId };\n return this.http.post(url, data, { withCredentials: true }).pipe(map(() => null));\n }\n}\n"], "mappings": "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", "names": ["VerifyContractApiResponse", "constructor", "data", "verified_datetime", "ContractDetailsSummary", "constructor", "subscriptionId", "accountStatus", "dimension", "subscriptionPrice", "subscriptionFrequency", "subscriptionCurrency", "contractNetD", "creditLimit", "contractSigned", "contractEnd", "contractActivated", "contractModified", "contractVerified", "onboardingFee", "billingStrategy", "discounts", "ONBOARDING_FEE_SKU", "ContractDetailsService", "constructor", "http", "billingHostService", "billingService", "pricingService", "partnerId$", "partnerService", "reloadSummary$$", "BehaviorSubject", "isLoading$$", "isFailed$$", "isMissing$$", "currency$$", "summary$", "combineLatest", "pipe", "skipWhile", "partnerId", "_", "switchMap", "updateSummaryFromApi", "tap", "summary", "next", "subscriptionCurrency", "shareReplay", "currency", "getValue", "failed", "asObservable", "missing", "reloadSummary", "loading", "contractVerified", "map", "contractSummary", "undefined", "contract$", "getMultiContract", "contractsMap", "catchError", "err", "code", "of", "filter", "contract", "contractSubscription$", "subscriptionId", "filters", "ListBillableItemsRequestFilters", "skus", "merchantId", "listBillableItems", "r", "results", "subscriptionPricings$", "getMultiWholesalePrices", "contractPricing$", "sub", "pricing", "forEach", "price", "priceIndex", "prices", "findIndex", "p", "frequency", "distinctUntilChanged", "p1", "p2", "Object", "keys", "length", "makeContractDetailsSummary", "signedDate", "signed", "DateUtilities", "stripTimeAndTimeZoneInfo", "endDate", "end", "activatedDate", "activated", "modifiedDate", "modified", "verifiedDate", "verified", "dimension", "status", "toString", "netD", "creditLimit", "subscriptionIndex", "sku", "subscriptionPricing", "onBoardingFeeIndex", "onBoardingFeePricing", "subscriptionPrice", "pricingRules", "subscriptionFrequency", "toLowerCase", "billingStrategy", "strategy", "onBoardingFeePrice", "ContractDetailsSummary", "updateVerifyState", "url", "clientId", "userEmail", "data", "userId", "post", "withCredentials", "resp", "VerifyContractApiResponse", "share", "subscribe", "verify", "appEngineHost", "unverify", "resetContract", "\u0275\u0275inject", "HttpClient", "BillingHostService", "BillingService", "WholesalePricingService", "PartnerService", "factory", "\u0275fac", "providedIn", "_ContractDetailsService"] }