mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 14:50:32 +00:00
feat: mail receipt preview
This commit is contained in:
@@ -1,3 +1,149 @@
|
|||||||
import { Transformer } from '@/lib/Transformer/Transformer';
|
import { Transformer } from '@/lib/Transformer/Transformer';
|
||||||
|
|
||||||
export class GetEstimateMailTemplateAttributesTransformer extends Transformer {}
|
export class GetEstimateMailTemplateAttributesTransformer extends Transformer {
|
||||||
|
public includeAttributes = (): string[] => {
|
||||||
|
return [
|
||||||
|
'companyLogoUri',
|
||||||
|
'companyName',
|
||||||
|
|
||||||
|
'estimateAmount',
|
||||||
|
|
||||||
|
'primaryColor',
|
||||||
|
|
||||||
|
'estimateAmount',
|
||||||
|
'estimateMessage',
|
||||||
|
|
||||||
|
'dueDate',
|
||||||
|
'dueDateLabel',
|
||||||
|
|
||||||
|
'estimateNumber',
|
||||||
|
'estimateNumberLabel',
|
||||||
|
|
||||||
|
'total',
|
||||||
|
'totalLabel',
|
||||||
|
|
||||||
|
'dueAmount',
|
||||||
|
'dueAmountLabel',
|
||||||
|
|
||||||
|
'viewEstimateButtonLabel',
|
||||||
|
'viewEstimateButtonUrl',
|
||||||
|
|
||||||
|
'items',
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclude all attributes.
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
public excludeAttributes = (): string[] => {
|
||||||
|
return ['*'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company logo uri.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public companyLogoUri(): string {
|
||||||
|
return this.options.brandingTemplate?.companyLogoUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company name.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public companyName(): string {
|
||||||
|
return this.context.organization.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary color
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public primaryColor(): string {
|
||||||
|
return this.options?.brandingTemplate?.attributes?.primaryColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Estimate number.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public estimateNumber(): string {
|
||||||
|
return this.options.estimate.number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Estimate number label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public estimateNumberLabel(): string {
|
||||||
|
return 'Estimate Number';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expiration date.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public expirationDate(): string {
|
||||||
|
return this.options.estimate.expirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expiration date label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public expirationDateLabel(): string {
|
||||||
|
return 'Expiration Date';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Estimate total.
|
||||||
|
*/
|
||||||
|
public total(): string {
|
||||||
|
return this.options.estimate.totalFormatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Estimate total label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public totalLabel(): string {
|
||||||
|
return 'Total';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Estimate mail items attributes.
|
||||||
|
*/
|
||||||
|
public items(): any[] {
|
||||||
|
return this.item(
|
||||||
|
this.options.estimate.entries,
|
||||||
|
new GetEstimateMailTemplateEntryAttributesTransformer()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetEstimateMailTemplateEntryAttributesTransformer extends Transformer {
|
||||||
|
public includeAttributes = (): string[] => {
|
||||||
|
return ['label', 'quantity', 'rate', 'total'];
|
||||||
|
};
|
||||||
|
|
||||||
|
public excludeAttributes = (): string[] => {
|
||||||
|
return ['*'];
|
||||||
|
};
|
||||||
|
|
||||||
|
public label(entry): string {
|
||||||
|
return entry?.item?.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public quantity(entry): string {
|
||||||
|
return entry?.quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public rate(entry): string {
|
||||||
|
return entry?.rateFormatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public total(entry): string {
|
||||||
|
return entry?.totalFormatted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ export class GetPaymentReceivedMailStateTransformer extends PaymentReceiveTransf
|
|||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
protected totalFormatted = (payment) => {
|
protected totalFormatted = (payment) => {
|
||||||
return this.formatMoney(payment.total);
|
return this.formatMoney(payment.amount);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,7 +125,7 @@ export class GetPaymentReceivedMailStateTransformer extends PaymentReceiveTransf
|
|||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
protected subtotalFormatted = (payment) => {
|
protected subtotalFormatted = (payment) => {
|
||||||
return this.formatMoney(payment.total);
|
return this.formatMoney(payment.amount);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,7 +163,7 @@ export class GetPaymentReceivedEntryMailState extends PaymentReceivedEntryTransf
|
|||||||
* @returns {Array}
|
* @returns {Array}
|
||||||
*/
|
*/
|
||||||
public includeAttributes = (): string[] => {
|
public includeAttributes = (): string[] => {
|
||||||
return ['paymentAmountFormatted'];
|
return ['paidAmount', 'invoiceNumber'];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -173,4 +173,22 @@ export class GetPaymentReceivedEntryMailState extends PaymentReceivedEntryTransf
|
|||||||
public excludeAttributes = (): string[] => {
|
public excludeAttributes = (): string[] => {
|
||||||
return ['*'];
|
return ['*'];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param entry
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public paidAmount = (entry) => {
|
||||||
|
return this.paymentAmountFormatted(entry);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param entry
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public invoiceNumber = (entry) => {
|
||||||
|
return entry.invoice.invoiceNo;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,83 @@
|
|||||||
import { Transformer } from '@/lib/Transformer/Transformer';
|
import { Transformer } from '@/lib/Transformer/Transformer';
|
||||||
|
|
||||||
export class GetPaymentReceivedMailTemplateAttrsTransformer extends Transformer {}
|
export class GetPaymentReceivedMailTemplateAttrsTransformer extends Transformer {
|
||||||
|
/**
|
||||||
|
* Included attributes.
|
||||||
|
* @returns {Array}
|
||||||
|
*/
|
||||||
|
public includeAttributes = (): string[] => {
|
||||||
|
return [
|
||||||
|
'companyLogoUri',
|
||||||
|
'companyName',
|
||||||
|
'primaryColor',
|
||||||
|
'total',
|
||||||
|
'totalLabel',
|
||||||
|
'paymentNumberLabel',
|
||||||
|
'paymentNumber',
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclude all attributes.
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
public excludeAttributes = (): string[] => {
|
||||||
|
return ['*'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company logo uri.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public companyLogoUri(): string {
|
||||||
|
return this.options.brandingTemplate?.companyLogoUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company name.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public companyName(): string {
|
||||||
|
return this.context.organization.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary color
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public primaryColor(): string {
|
||||||
|
return this.options?.brandingTemplate?.attributes?.primaryColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public total(): string {
|
||||||
|
return this.options.paymentReceived.formattedAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public totalLabel(): string {
|
||||||
|
return 'Total';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Payment number label.
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
public paymentNumberLabel(): string {
|
||||||
|
return 'Payment # {paymentNumber}';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Payment number.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public paymentNumber(): string {
|
||||||
|
return this.options.paymentReceived.paymentReceiveNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,144 @@
|
|||||||
import { Transformer } from '@/lib/Transformer/Transformer';
|
import { Transformer } from '@/lib/Transformer/Transformer';
|
||||||
|
|
||||||
export class GetSaleReceiptMailTemplateAttributesTransformer extends Transformer {}
|
export class GetSaleReceiptMailTemplateAttributesTransformer extends Transformer {
|
||||||
|
public includeAttributes = (): string[] => {
|
||||||
|
return [
|
||||||
|
'companyLogoUri',
|
||||||
|
'companyName',
|
||||||
|
|
||||||
|
'primaryColor',
|
||||||
|
|
||||||
|
'receiptAmount',
|
||||||
|
'receiptMessage',
|
||||||
|
|
||||||
|
'date',
|
||||||
|
'dateLabel',
|
||||||
|
|
||||||
|
'receiptNumber',
|
||||||
|
'receiptNumberLabel',
|
||||||
|
|
||||||
|
'total',
|
||||||
|
'totalLabel',
|
||||||
|
|
||||||
|
'paidAmount',
|
||||||
|
'paidAmountLabel',
|
||||||
|
|
||||||
|
'items',
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclude all attributes.
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
public excludeAttributes = (): string[] => {
|
||||||
|
return ['*'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company logo uri.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public companyLogoUri(): string {
|
||||||
|
return this.options.brandingTemplate?.companyLogoUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company name.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public companyName(): string {
|
||||||
|
return this.context.organization.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary color
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public primaryColor(): string {
|
||||||
|
return this.options?.brandingTemplate?.attributes?.primaryColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receipt number.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public receiptNumber(): string {
|
||||||
|
return this.options.receipt.number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receipt number label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public receiptNumberLabel(): string {
|
||||||
|
return 'Receipt Number';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public date(): string {
|
||||||
|
return this.options.receipt.date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public dateLabel(): string {
|
||||||
|
return 'Date';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receipt total.
|
||||||
|
*/
|
||||||
|
public total(): string {
|
||||||
|
return this.options.receipt.totalFormatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receipt total label.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
public totalLabel(): string {
|
||||||
|
return 'Total';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receipt mail items attributes.
|
||||||
|
*/
|
||||||
|
public items(): any[] {
|
||||||
|
return this.item(
|
||||||
|
this.options.receipt.entries,
|
||||||
|
new GetSaleReceiptMailTemplateEntryAttributesTransformer()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetSaleReceiptMailTemplateEntryAttributesTransformer extends Transformer {
|
||||||
|
public includeAttributes = (): string[] => {
|
||||||
|
return ['label', 'quantity', 'rate', 'total'];
|
||||||
|
};
|
||||||
|
|
||||||
|
public excludeAttributes = (): string[] => {
|
||||||
|
return ['*'];
|
||||||
|
};
|
||||||
|
|
||||||
|
public label(entry): string {
|
||||||
|
return entry?.item?.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public quantity(entry): string {
|
||||||
|
return entry?.quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public rate(entry): string {
|
||||||
|
return entry?.rateFormatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public total(entry): string {
|
||||||
|
return entry?.totalFormatted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -45,9 +45,8 @@ const withPaymentReceivedMailReceiptPreviewProps = <
|
|||||||
const items = useMemo(
|
const items = useMemo(
|
||||||
() =>
|
() =>
|
||||||
paymentReceivedMailState?.entries?.map((entry: any) => ({
|
paymentReceivedMailState?.entries?.map((entry: any) => ({
|
||||||
quantity: entry.quantity,
|
total: entry.paidAmount,
|
||||||
total: entry.totalFormatted,
|
label: entry.invoiceNumber,
|
||||||
label: entry.name,
|
|
||||||
})),
|
})),
|
||||||
[paymentReceivedMailState?.entries],
|
[paymentReceivedMailState?.entries],
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user