feat: Add qty column to preview pdf templates:

This commit is contained in:
Ahmed Bouhuolia
2024-10-17 15:58:19 +02:00
parent 5649657bf0
commit 279890e922
5 changed files with 122 additions and 23 deletions

View File

@@ -1,4 +1,4 @@
import React from 'react';
import { Classes, Text } from '@blueprintjs/core';
import { PaperTemplate, PaperTemplateTotalBorder } from './PaperTemplate';
import { Box, Group, Stack } from '@/components';
import {
@@ -9,6 +9,7 @@ import {
DefaultPdfTemplateAddressBilledTo,
DefaultPdfTemplateAddressBilledFrom,
} from '@/constants/PdfTemplates';
interface PapaerLine {
item?: string;
description?: string;
@@ -55,7 +56,7 @@ export interface InvoicePaperTemplateProps {
// Entries
lineItemLabel?: string;
lineDescriptionLabel?: string;
lineQuantityLabel?: string;
lineRateLabel?: string;
lineTotalLabel?: string;
@@ -129,7 +130,7 @@ export function InvoicePaperTemplate({
// Entries
lineItemLabel = 'Item',
lineDescriptionLabel = 'Description',
lineQuantityLabel = 'Qty',
lineRateLabel = 'Rate',
lineTotalLabel = 'Total',
@@ -214,7 +215,6 @@ export function InvoicePaperTemplate({
<Box dangerouslySetInnerHTML={{ __html: companyAddress }} />
</PaperTemplate.Address>
)}
{showCustomerAddress && (
<PaperTemplate.Address>
<strong>{billedToLabel}</strong>
@@ -226,8 +226,21 @@ export function InvoicePaperTemplate({
<Stack spacing={0}>
<PaperTemplate.Table
columns={[
{ label: lineItemLabel, accessor: 'item' },
{ label: lineDescriptionLabel, accessor: 'description' },
{
label: lineItemLabel,
accessor: (data) => (
<Stack spacing={2}>
<Text>{data.item}</Text>
<Text
className={Classes.TEXT_MUTED}
style={{ fontSize: 12 }}
>
{data.description}
</Text>
</Stack>
),
},
{ label: lineQuantityLabel, accessor: 'quantity' },
{ label: lineRateLabel, accessor: 'rate', align: 'right' },
{ label: lineTotalLabel, accessor: 'total', align: 'right' },
]}

View File

@@ -1,6 +1,6 @@
import React from 'react';
import clsx from 'classnames';
import { get } from 'lodash';
import { get, isFunction } from 'lodash';
import { Box, Group, GroupProps } from '@/components';
import styles from './InvoicePaperTemplate.module.scss';
@@ -26,8 +26,9 @@ export function PaperTemplate({
interface PaperTemplateTableProps {
columns: Array<{
accessor: string;
accessor: string | ((data: Record<string, any>) => JSX.Element);
label: string;
value?: JSX.Element;
align?: 'left' | 'center' | 'right';
}>;
data: Array<Record<string, any>>;
@@ -71,7 +72,9 @@ PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => {
<tr>
{columns.map((column, index) => (
<td align={column.align} key={index}>
{get(_data, column.accessor)}
{isFunction(column?.accessor)
? column?.accessor(_data)
: get(_data, column.accessor)}
</td>
))}
</tr>
@@ -115,9 +118,9 @@ PaperTemplate.TotalLine = ({
);
};
PaperTemplate.MutedText = () => {};
PaperTemplate.MutedText = () => { };
PaperTemplate.Text = () => {};
PaperTemplate.Text = () => { };
PaperTemplate.AddressesGroup = (props: GroupProps) => {
return (