mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-17 21:30:31 +00:00
227 lines
5.2 KiB
TypeScript
227 lines
5.2 KiB
TypeScript
import { SaleInvoiceTaxEntryTransformer } from './SaleInvoiceTaxEntry.transformer';
|
|
import { SaleInvoiceTransformer } from './SaleInvoice.transformer';
|
|
import { contactAddressTextFormat } from '@/utils/address-text-format';
|
|
import { Transformer } from '@/modules/Transformer/Transformer';
|
|
import { ItemEntryTransformer } from '@/modules/TransactionItemEntry/ItemEntry.transformer';
|
|
import { GetPdfTemplateTransformer } from '@/modules/PdfTemplate/queries/GetPdfTemplate.transformer';
|
|
|
|
export class GetInvoicePaymentLinkMetaTransformer extends SaleInvoiceTransformer {
|
|
/**
|
|
* Exclude these attributes from payment link object.
|
|
* @returns {Array}
|
|
*/
|
|
public excludeAttributes = (): string[] => {
|
|
return ['*'];
|
|
};
|
|
|
|
/**
|
|
* Included attributes.
|
|
* @returns {string[]}
|
|
*/
|
|
public includeAttributes = (): string[] => {
|
|
return [
|
|
'customerName',
|
|
'dueAmount',
|
|
'dueDateFormatted',
|
|
'invoiceDateFormatted',
|
|
'total',
|
|
'totalFormatted',
|
|
'totalLocalFormatted',
|
|
'subtotal',
|
|
'subtotalFormatted',
|
|
'subtotalLocalFormatted',
|
|
'dueAmount',
|
|
'dueAmountFormatted',
|
|
'paymentAmount',
|
|
'paymentAmountFormatted',
|
|
'dueDate',
|
|
'dueDateFormatted',
|
|
'invoiceNo',
|
|
'invoiceMessage',
|
|
'termsConditions',
|
|
'entries',
|
|
'taxes',
|
|
'organization',
|
|
'isReceivable',
|
|
'hasStripePaymentMethod',
|
|
'formattedCustomerAddress',
|
|
'brandingTemplate',
|
|
];
|
|
};
|
|
|
|
public customerName(invoice) {
|
|
return invoice.customer.displayName;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the organization metadata for the payment link.
|
|
* @returns
|
|
*/
|
|
public organization(invoice) {
|
|
return this.item(
|
|
this.context.organization,
|
|
new GetPaymentLinkOrganizationMetaTransformer()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retrieves the branding template for the payment link.
|
|
* @param {} invoice
|
|
* @returns
|
|
*/
|
|
public brandingTemplate(invoice) {
|
|
return this.item(
|
|
invoice.pdfTemplate,
|
|
new GetInvoicePaymentLinkBrandingTemplate()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retrieves the entries of the sale invoice.
|
|
* @param {ISaleInvoice} invoice
|
|
* @returns {}
|
|
*/
|
|
protected entries = (invoice) => {
|
|
return this.item(
|
|
invoice.entries,
|
|
new GetInvoicePaymentLinkEntryMetaTransformer(),
|
|
{
|
|
currencyCode: invoice.currencyCode,
|
|
}
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Retrieves the sale invoice entries.
|
|
* @returns {}
|
|
*/
|
|
protected taxes = (invoice) => {
|
|
return this.item(
|
|
invoice.taxes,
|
|
new GetInvoicePaymentLinkTaxEntryTransformer(),
|
|
{
|
|
subtotal: invoice.subtotal,
|
|
isInclusiveTax: invoice.isInclusiveTax,
|
|
currencyCode: invoice.currencyCode,
|
|
}
|
|
);
|
|
};
|
|
|
|
protected isReceivable(invoice) {
|
|
return invoice.dueAmount > 0;
|
|
}
|
|
|
|
protected hasStripePaymentMethod(invoice) {
|
|
return invoice.paymentMethods.some(
|
|
(paymentMethod) => paymentMethod.paymentIntegration.service === 'Stripe'
|
|
);
|
|
}
|
|
|
|
get customerAddressFormat() {
|
|
return `{ADDRESS_1}
|
|
{ADDRESS_2}
|
|
{CITY} {STATE} {POSTAL_CODE}
|
|
{COUNTRY}
|
|
{PHONE}`;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the formatted customer address.
|
|
* @param invoice
|
|
* @returns {string}
|
|
*/
|
|
protected formattedCustomerAddress(invoice) {
|
|
return contactAddressTextFormat(
|
|
invoice.customer,
|
|
this.customerAddressFormat
|
|
);
|
|
}
|
|
}
|
|
|
|
class GetPaymentLinkOrganizationMetaTransformer extends Transformer {
|
|
/**
|
|
* Include these attributes to item entry object.
|
|
* @returns {Array}
|
|
*/
|
|
public includeAttributes = (): string[] => {
|
|
return [
|
|
'primaryColor',
|
|
'name',
|
|
'address',
|
|
'logoUri',
|
|
'addressTextFormatted',
|
|
];
|
|
};
|
|
|
|
public excludeAttributes = (): string[] => {
|
|
return ['*'];
|
|
};
|
|
|
|
/**
|
|
* Retrieves the formatted text of organization address.
|
|
* @returns {string}
|
|
*/
|
|
public addressTextFormatted() {
|
|
return this.context.organization.addressTextFormatted;
|
|
}
|
|
}
|
|
|
|
class GetInvoicePaymentLinkEntryMetaTransformer extends ItemEntryTransformer {
|
|
/**
|
|
* Include these attributes to item entry object.
|
|
* @returns {Array}
|
|
*/
|
|
public includeAttributes = (): string[] => {
|
|
return [
|
|
'quantity',
|
|
'quantityFormatted',
|
|
'rate',
|
|
'rateFormatted',
|
|
'total',
|
|
'totalFormatted',
|
|
'itemName',
|
|
'description',
|
|
];
|
|
};
|
|
|
|
public itemName(entry) {
|
|
return entry.item.name;
|
|
}
|
|
|
|
/**
|
|
* Exclude these attributes from payment link object.
|
|
* @returns {Array}
|
|
*/
|
|
public excludeAttributes = (): string[] => {
|
|
return ['*'];
|
|
};
|
|
}
|
|
|
|
class GetInvoicePaymentLinkTaxEntryTransformer extends SaleInvoiceTaxEntryTransformer {
|
|
/**
|
|
* Included attributes.
|
|
* @returns {Array}
|
|
*/
|
|
public includeAttributes = (): string[] => {
|
|
return ['name', 'taxRateCode', 'taxRateAmount', 'taxRateAmountFormatted'];
|
|
};
|
|
}
|
|
|
|
class GetInvoicePaymentLinkBrandingTemplate extends GetPdfTemplateTransformer {
|
|
public includeAttributes = (): string[] => {
|
|
return ['companyLogoUri', 'primaryColor', 'secondaryColor'];
|
|
};
|
|
|
|
public excludeAttributes = (): string[] => {
|
|
return ['*'];
|
|
};
|
|
|
|
primaryColor = (template) => {
|
|
return template.attributes?.primaryColor;
|
|
};
|
|
|
|
secondaryColor = (template) => {
|
|
return template.attributes?.secondaryColor;
|
|
};
|
|
}
|