mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 12:20:31 +00:00
171 lines
3.8 KiB
TypeScript
171 lines
3.8 KiB
TypeScript
import { Transformer } from '@/lib/Transformer/Transformer';
|
|
|
|
export class GetSubscriptionsTransformer extends Transformer {
|
|
/**
|
|
* Include these attributes to sale invoice object.
|
|
* @returns {Array}
|
|
*/
|
|
public includeAttributes = (): string[] => {
|
|
return [
|
|
'canceledAtFormatted',
|
|
'endsAtFormatted',
|
|
'trialStartsAtFormatted',
|
|
'trialEndsAtFormatted',
|
|
'statusFormatted',
|
|
'planName',
|
|
'planSlug',
|
|
'planPrice',
|
|
'planPriceCurrency',
|
|
'planPriceFormatted',
|
|
'planPeriod',
|
|
'lemonUrls',
|
|
];
|
|
};
|
|
|
|
/**
|
|
* Exclude attributes.
|
|
* @returns {string[]}
|
|
*/
|
|
public excludeAttributes = (): string[] => {
|
|
return ['id', 'plan'];
|
|
};
|
|
|
|
/**
|
|
* Retrieves the canceled at formatted.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public canceledAtFormatted = (subscription) => {
|
|
return subscription.canceledAt
|
|
? this.formatDate(subscription.canceledAt)
|
|
: null;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the ends at date formatted.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public endsAtFormatted = (subscription) => {
|
|
return subscription.cancelsAt
|
|
? this.formatDate(subscription.endsAt)
|
|
: null;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the trial starts at formatted date.
|
|
* @returns {string}
|
|
*/
|
|
public trialStartsAtFormatted = (subscription) => {
|
|
return subscription.trialStartsAt
|
|
? this.formatDate(subscription.trialStartsAt)
|
|
: null;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the trial ends at formatted date.
|
|
* @returns {string}
|
|
*/
|
|
public trialEndsAtFormatted = (subscription) => {
|
|
return subscription.trialEndsAt
|
|
? this.formatDate(subscription.trialEndsAt)
|
|
: null;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the Lemon subscription metadata.
|
|
* @param subscription
|
|
* @returns
|
|
*/
|
|
public lemonSubscription = (subscription) => {
|
|
return (
|
|
this.options.lemonSubscriptions[subscription.lemonSubscriptionId] || null
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Retrieves the formatted subscription status.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public statusFormatted = (subscription) => {
|
|
const pairs = {
|
|
canceled: 'Canceled',
|
|
active: 'Active',
|
|
inactive: 'Inactive',
|
|
expired: 'Expired',
|
|
on_trial: 'On Trial',
|
|
};
|
|
return pairs[subscription.status] || '';
|
|
};
|
|
|
|
/**
|
|
* Retrieves the subscription plan name.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public planName(subscription) {
|
|
return subscription.plan?.name;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription plan slug.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public planSlug(subscription) {
|
|
return subscription.plan?.slug;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription plan price.
|
|
* @param subscription
|
|
* @returns {number}
|
|
*/
|
|
public planPrice(subscription) {
|
|
return subscription.plan?.price;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription plan price currency.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public planPriceCurrency(subscription) {
|
|
return subscription.plan?.currency;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription plan formatted price.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public planPriceFormatted(subscription) {
|
|
return this.formatMoney(subscription.plan?.price, {
|
|
currencyCode: subscription.plan?.currency,
|
|
precision: 0
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subscription plan period.
|
|
* @param subscription
|
|
* @returns {string}
|
|
*/
|
|
public planPeriod(subscription) {
|
|
return subscription?.plan?.period;
|
|
}
|
|
|
|
/**
|
|
* Retrieve the subscription Lemon Urls.
|
|
* @param subscription
|
|
* @returns
|
|
*/
|
|
public lemonUrls = (subscription) => {
|
|
const lemonSusbcription = this.lemonSubscription(subscription);
|
|
console.log(lemonSusbcription);
|
|
|
|
return lemonSusbcription?.data?.attributes?.urls;
|
|
};
|
|
}
|