{ "version": 3, "sources": ["apps/partner-center-client/src/app/common/billing-period/billing-period.ts", "apps/partner-center-client/src/app/core/product-summary/product-summary.service.ts"], "sourcesContent": ["import moment from 'moment';\nimport { formatting } from '../pipes/format-date.pipe';\n\nexport class BillingPeriod {\n public id: string;\n public startDate: moment.Moment;\n public endDate: moment.Moment;\n public displayString: string;\n\n constructor(public month: number, public year: number) {\n this.id = this.month + '-' + this.year;\n\n this.startDate = moment().utc().year(year).month(month).date(1).hours(0).minutes(0).seconds(0).milliseconds(0);\n\n this.endDate = this.startDate.clone().add(1, 'M').subtract(1, 'ms');\n this.displayString = this.startDate.format(formatting.month);\n }\n\n public static getCurrentBillingPeriod(): BillingPeriod {\n const today = moment();\n return new BillingPeriod(today.month(), today.year());\n }\n\n public static getNextBillingPeriod(): BillingPeriod {\n const today = moment();\n today.add(1, 'M');\n return new BillingPeriod(today.month(), today.year());\n }\n\n public static isValidBillingPeriod(month: number, year: number): boolean {\n return month >= 0 && month <= 11 && year > 0;\n }\n}\n", "import { Injectable, OnDestroy } from '@angular/core';\nimport {\n BillingApiService,\n GeneratedFrequency,\n GetProductSummariesTotalRequestInterface,\n ProductSummaryBillingStrategy,\n ProductSummaryInterface,\n ProductType,\n} from '@galaxy/billing';\nimport { PartnerService } from '@galaxy/partner';\nimport { GalaxyDataSource, PagedListRequestInterface, PagedResponseInterface } from '@vendasta/galaxy/table';\nimport { GalaxyColumnDef } from '@vendasta/galaxy/table/src/table.interface';\nimport { Observable, of, ReplaySubject, Subscription } from 'rxjs';\nimport { catchError, map, share, skipWhile, switchMap } from 'rxjs/operators';\nimport { BillingPeriod } from '../../common/billing-period';\nimport { Discount, LoadRequestBody, Pricing, ProductSummary, Rule } from './product-summary';\n\n@Injectable({ providedIn: 'root' })\nexport class ProductSummaryService implements OnDestroy {\n constructor(\n private partnerService: PartnerService,\n private billingApiService: BillingApiService,\n ) {\n this.registerLoadRequestSubscription();\n }\n\n get paginatedApi() {\n return {\n get: (req: PagedListRequestInterface): Observable> => {\n return this.partnerService.getPartnerId().pipe(\n map((partnerId) => {\n const body: LoadRequestBody = {\n merchantId: partnerId,\n startDate: BillingPeriod.getCurrentBillingPeriod().startDate.toDate(),\n endDate: BillingPeriod.getNextBillingPeriod().endDate.toDate(),\n cursor: req.pagingOptions.cursor || '',\n pageSize: req.pagingOptions.pageSize || 10,\n };\n return body;\n }),\n switchMap((body) => this.billingApiService.listProductSummaries(body)),\n map((res) => {\n const summaries: ProductSummary[] = this.productSummaries(res.results);\n const pagedSummaries: PagedResponseInterface = {\n data: summaries,\n pagingMetadata: {\n hasMore: res.hasMore,\n nextCursor: res.nextCursor,\n },\n };\n return pagedSummaries;\n }),\n );\n },\n };\n }\n\n get dataSource(): GalaxyDataSource {\n return new GalaxyDataSource(this.paginatedApi);\n }\n\n get columns(): GalaxyColumnDef[] {\n return [{ id: 'product' }, { id: 'units' }, { id: 'gross_total' }, { id: 'discount' }, { id: 'net_total' }];\n }\n\n private loadRequest$$: ReplaySubject = new ReplaySubject(1);\n\n private productSummaries$$: ReplaySubject = new ReplaySubject(1);\n private hasMore$$: ReplaySubject = new ReplaySubject(1);\n private nextCursor$$: ReplaySubject = new ReplaySubject(1);\n private totalResults$$: ReplaySubject = new ReplaySubject(1);\n private error$$: ReplaySubject = new ReplaySubject(1);\n\n private subscriptions: Subscription[] = [];\n\n get productSummaries$(): Observable {\n return this.productSummaries$$.asObservable().pipe(share());\n }\n\n get hasMore$(): Observable {\n return this.hasMore$$.asObservable().pipe(share());\n }\n\n get nextCursor$(): Observable {\n return this.nextCursor$$.asObservable().pipe(share());\n }\n\n get totalResults$(): Observable {\n return this.totalResults$$.asObservable().pipe(share());\n }\n\n get error$(): Observable {\n return this.error$$.asObservable().pipe(\n skipWhile((err) => err === null),\n share(),\n );\n }\n\n public getProductSummariesTotal(merchantId: string, startDate: Date, endDate: Date): Observable {\n const body: GetProductSummariesTotalRequestInterface = {\n merchantId: merchantId,\n startDate: startDate,\n endDate: endDate,\n };\n return this.billingApiService.getProductSummariesTotal(body).pipe(map((response) => response.totalAmount));\n }\n\n public loadProductSummaries(\n merchantId: string,\n startDate: Date,\n endDate: Date,\n cursor?: string,\n pageSize?: number,\n skus?: string[],\n ): void {\n const body: LoadRequestBody = {\n merchantId: merchantId,\n startDate: startDate,\n endDate: endDate,\n cursor: cursor || '',\n pageSize: pageSize || 0,\n skus: skus || [],\n };\n this.loadRequest$$.next(body);\n }\n\n private registerLoadRequestSubscription(): void {\n this.subscriptions.push(\n this.loadRequest$$\n .pipe(\n switchMap((body) => this.billingApiService.listProductSummaries(body)),\n catchError((error) => {\n this.error$$.next(error);\n return of(null);\n }),\n map((response) => {\n if (response != null) {\n this.productSummaries$$.next(this.productSummaries(response.results));\n this.hasMore$$.next(response.hasMore);\n this.nextCursor$$.next(response.nextCursor);\n this.totalResults$$.next(response.totalResults);\n }\n }),\n )\n .subscribe(),\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n }\n\n private productSummaries(results: ProductSummaryInterface[]): ProductSummary[] {\n if (results == null) {\n return [];\n }\n const summaries: ProductSummary[] = results.map((s) => ({\n sku: s.sku,\n productName: s.productName,\n totalQuantity: this.parseNumber(s.totalQuantity),\n totalAmount: this.parseNumber(s.totalAmount),\n totalDiscount: this.parseNumber(s.totalDiscount),\n pricing: this.pricing(s.pricing),\n discounts: this.discounts(s.discounts),\n productType: ProductType[s.productType || ProductType.PRODUCT.toString()],\n frequency: GeneratedFrequency[s.frequency || GeneratedFrequency.INVALID.toString()],\n billingStrategy:\n ProductSummaryBillingStrategy[\n s.billingStrategy || ProductSummaryBillingStrategy.CHARGE_AT_END_OF_BILLING_PERIOD.toString()\n ],\n }));\n return summaries;\n }\n\n private pricing(pricing: any): Pricing | null {\n if (pricing == null) {\n return null;\n }\n return {\n type: this.ruleType(pricing.type),\n rules: this.rules(pricing.rules),\n };\n }\n\n private ruleType(type: string): string {\n switch (type) {\n case 'STAIRSTEP':\n return 'Stairstep';\n case 'TIERED':\n return 'Tiered';\n default:\n return 'Standard';\n }\n }\n\n private rules(rules: any[]): Rule[] {\n if (rules == null || rules.length === 0) {\n return [];\n }\n const result: Rule[] = rules.map((rule) => ({\n min: this.parseNumber(rule.min),\n max: this.parseNumber(rule.max),\n units: this.parseNumber(rule.units),\n unitPrice: this.parseNumber(rule.unitPrice),\n totalAmount: this.parseNumber(rule.totalAmount),\n }));\n return result;\n }\n\n private discounts(discounts: any[]): Discount[] {\n if (discounts == null || discounts.length === 0) {\n return [];\n }\n const result: Discount[] = [];\n discounts.forEach((discount) => {\n result.push({\n type: this.discountType(discount.type),\n value: this.parseNumber(discount.value),\n totalAmount: this.parseNumber(discount.totalAmount),\n description: discount.description,\n });\n });\n return result;\n }\n\n private discountType(type: string): string {\n switch (type) {\n case 'PERCENT_AMOUNT':\n return 'PERCENT_AMOUNT';\n case 'FIXED_NUMBER_OF_UNITS':\n return 'FIXED_NUMBER_OF_UNITS';\n case 'FIXED_AMOUNT_PER_UNIT':\n return 'FIXED_AMOUNT_PER_UNIT';\n default:\n return 'FIXED_AMOUNT';\n }\n }\n\n private parseNumber(val: any): number {\n return Number(val || 0);\n }\n}\n"], "mappings": "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", "names": ["import_moment", "BillingPeriod", "constructor", "month", "year", "id", "startDate", "moment", "utc", "date", "hours", "minutes", "seconds", "milliseconds", "endDate", "clone", "add", "subtract", "displayString", "format", "formatting", "getCurrentBillingPeriod", "today", "getNextBillingPeriod", "isValidBillingPeriod", "ProductSummaryService", "constructor", "partnerService", "billingApiService", "loadRequest$$", "ReplaySubject", "productSummaries$$", "hasMore$$", "nextCursor$$", "totalResults$$", "error$$", "subscriptions", "registerLoadRequestSubscription", "paginatedApi", "get", "req", "getPartnerId", "pipe", "map", "partnerId", "merchantId", "startDate", "BillingPeriod", "getCurrentBillingPeriod", "toDate", "endDate", "getNextBillingPeriod", "cursor", "pagingOptions", "pageSize", "switchMap", "body", "listProductSummaries", "res", "data", "productSummaries", "results", "pagingMetadata", "hasMore", "nextCursor", "dataSource", "GalaxyDataSource", "columns", "id", "productSummaries$", "asObservable", "share", "hasMore$", "nextCursor$", "totalResults$", "error$", "skipWhile", "err", "getProductSummariesTotal", "response", "totalAmount", "loadProductSummaries", "skus", "next", "push", "catchError", "error", "of", "totalResults", "subscribe", "ngOnDestroy", "forEach", "subscription", "unsubscribe", "s", "sku", "productName", "totalQuantity", "parseNumber", "totalDiscount", "pricing", "discounts", "productType", "ProductType", "PRODUCT", "toString", "frequency", "GeneratedFrequency", "INVALID", "billingStrategy", "ProductSummaryBillingStrategy", "CHARGE_AT_END_OF_BILLING_PERIOD", "type", "ruleType", "rules", "length", "rule", "min", "max", "units", "unitPrice", "result", "discount", "discountType", "value", "description", "val", "Number", "\u0275\u0275inject", "PartnerService", "BillingApiService", "factory", "\u0275fac", "providedIn", "_ProductSummaryService"] }