mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
181 lines
3.7 KiB
TypeScript
181 lines
3.7 KiB
TypeScript
import { ItemEntryTransformer } from '@/modules/TransactionItemEntry/ItemEntry.transformer';
|
|
import { SaleEstimateTransfromer } from './SaleEstimate.transformer';
|
|
|
|
export class GetSaleEstimateMailStateTransformer extends SaleEstimateTransfromer {
|
|
public excludeAttributes = (): string[] => {
|
|
return ['*'];
|
|
};
|
|
|
|
public includeAttributes = (): string[] => {
|
|
return [
|
|
'estimateDate',
|
|
'estimateDateFormatted',
|
|
|
|
'expirationDate',
|
|
'expirationDateFormatted',
|
|
|
|
'total',
|
|
'totalFormatted',
|
|
|
|
'subtotal',
|
|
'subtotalFormatted',
|
|
|
|
'discountAmount',
|
|
'discountAmountFormatted',
|
|
'discountPercentage',
|
|
'discountPercentageFormatted',
|
|
'discountLabel',
|
|
|
|
'adjustment',
|
|
'adjustmentFormatted',
|
|
'adjustmentLabel',
|
|
|
|
'estimateNumber',
|
|
'entries',
|
|
|
|
'companyName',
|
|
'companyLogoUri',
|
|
|
|
'primaryColor',
|
|
'customerName',
|
|
];
|
|
};
|
|
|
|
/**
|
|
* Retrieves the customer name of the invoice.
|
|
* @returns {string}
|
|
*/
|
|
protected customerName = (invoice) => {
|
|
return invoice.customer.displayName;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the company name.
|
|
* @returns {string}
|
|
*/
|
|
protected companyName = () => {
|
|
return this.context.organization.name;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the company logo uri.
|
|
* @returns {string | null}
|
|
*/
|
|
protected companyLogoUri = (invoice) => {
|
|
return invoice.pdfTemplate?.companyLogoUri || null;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the primary color.
|
|
* @returns {string}
|
|
*/
|
|
protected primaryColor = (invoice) => {
|
|
return invoice.pdfTemplate?.attributes?.primaryColor || null;
|
|
};
|
|
|
|
/**
|
|
* Retrieves the estimate number.
|
|
*/
|
|
protected estimateDateFormatted = (estimate) => {
|
|
return this.formattedEstimateDate(estimate);
|
|
};
|
|
|
|
/**
|
|
* Retrieves the expiration date of the estimate.
|
|
* @param estimate
|
|
* @returns {string}
|
|
*/
|
|
protected expirationDateFormatted = (estimate) => {
|
|
return this.formattedExpirationDate(estimate);
|
|
};
|
|
|
|
/**
|
|
* Retrieves the total amount of the estimate.
|
|
* @param estimate
|
|
* @returns
|
|
*/
|
|
protected total(estimate) {
|
|
return estimate.amount;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the subtotal amount of the estimate.
|
|
* @param estimate
|
|
* @returns {number}
|
|
*/
|
|
protected subtotal(estimate) {
|
|
return estimate.amount;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the discount label of the estimate.
|
|
* @param estimate
|
|
* @returns {string}
|
|
*/
|
|
protected discountLabel(estimate) {
|
|
return estimate.discountType === 'percentage'
|
|
? `Discount [${estimate.discountPercentageFormatted}]`
|
|
: 'Discount';
|
|
}
|
|
|
|
/**
|
|
* Retrieves the formatted subtotal of the estimate.
|
|
* @param estimate
|
|
* @returns {string}
|
|
*/
|
|
protected subtotalFormatted = (estimate) => {
|
|
return this.formattedSubtotal(estimate);
|
|
};
|
|
|
|
/**
|
|
* Retrieves the estimate entries.
|
|
* @param invoice
|
|
* @returns {Array}
|
|
*/
|
|
protected entries = (invoice) => {
|
|
return this.item(
|
|
invoice.entries,
|
|
new GetSaleEstimateMailStateEntryTransformer(),
|
|
{
|
|
currencyCode: invoice.currencyCode,
|
|
},
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Merges the mail options with the invoice object.
|
|
*/
|
|
public transform = (object: any) => {
|
|
return {
|
|
...this.options.mailOptions,
|
|
...object,
|
|
};
|
|
};
|
|
}
|
|
|
|
class GetSaleEstimateMailStateEntryTransformer extends ItemEntryTransformer {
|
|
public excludeAttributes = (): string[] => {
|
|
return ['*'];
|
|
};
|
|
|
|
/**
|
|
* Item name.
|
|
* @param entry
|
|
* @returns
|
|
*/
|
|
public name = (entry) => {
|
|
return entry.item.name;
|
|
};
|
|
|
|
public includeAttributes = (): string[] => {
|
|
return [
|
|
'name',
|
|
'quantity',
|
|
'unitPrice',
|
|
'unitPriceFormatted',
|
|
'total',
|
|
'totalFormatted',
|
|
];
|
|
};
|
|
}
|