update invoice detail

This commit is contained in:
2026-05-29 17:51:57 +03:30
parent d10034cc21
commit 073cc1b169
3 changed files with 32 additions and 10 deletions
+17 -8
View File
@@ -13,6 +13,7 @@ import type { InvoiceItem as ApiInvoiceItem } from './types/InvoiceTypes'
import { Paths } from '@/config/Paths'
import { useGetPaymentInvoice } from '../payment/hooks/usePaymentData'
import InvoicePaymentList from './InvoicePaymentList'
import { formatItemDiscountDisplay } from './utils/invoiceItem'
interface TableInvoiceItem extends RowDataType {
id: string
@@ -20,7 +21,8 @@ interface TableInvoiceItem extends RowDataType {
title: string
quantity: string
unitPrice: string
discount: string
discountValue: string
discountPercent: string
totalPrice: string
confirmed: boolean
confirmedAt: string | null
@@ -57,17 +59,20 @@ const InvoiceDetail: FC = () => {
: null
const items: TableInvoiceItem[] =
invoice?.items?.map((item: ApiInvoiceItem) => ({
invoice?.items?.map((item: ApiInvoiceItem) => {
const discounts = formatItemDiscountDisplay(item)
return {
id: item.id,
image: item.product?.images?.[0] ?? null,
title: item.product?.title || '-',
quantity: String(item.quantity),
unitPrice: formatPrice(item.unitPrice),
discount: item.discount ? `${NumberFormat(item.discount)}٪` : '۰',
discountValue: discounts.value,
discountPercent: discounts.percent,
totalPrice: formatPrice(item.total ?? 0),
confirmed: !!item.confirmedAt,
confirmedAt: item.confirmedAt,
})) ?? []
}}) ?? []
const handlePrint = () => {
window.print()
@@ -97,8 +102,12 @@ const InvoiceDetail: FC = () => {
title: 'مبلغ واحد',
},
{
key: 'discount',
title: 'تخفیف',
key: 'discountValue',
title: 'تخفیف (مبلغ)',
},
{
key: 'discountPercent',
title: 'تخفیف (درصد)',
},
{
key: 'totalPrice',
@@ -253,10 +262,10 @@ const InvoiceDetail: FC = () => {
<span className='text-[#8C90A3]'>جمع کل:</span>
<span className='text-black font-medium'>{formatPrice(invoice.subTotal)}</span>
</div>
{invoice.discount > 0 && (
{(invoice.discount ?? 0) > 0 && (
<div className='flex justify-between text-xs'>
<span className='text-[#8C90A3]'>تخفیف:</span>
<span className='text-black'>{formatPrice(invoice.discount)}</span>
<span className='text-black'>{formatPrice(invoice.discount ?? 0)}</span>
</div>
)}
{invoice.enableTax && invoice.taxAmount > 0 && (
+3 -2
View File
@@ -45,7 +45,8 @@ export type InvoiceItem = {
quantity: number;
unitPrice: number;
subTotal: number | null;
discount: number;
discount: number | null;
discountPercent: number | null;
total: number | null;
description: string | null;
confirmedAt: string | null;
@@ -58,7 +59,7 @@ export type Invoice = {
user: InvoiceUser;
request: InvoiceRequest;
invoiceNumber: number;
discount: number;
discount: number | null;
subTotal: number;
taxAmount: number;
total: number;
+12
View File
@@ -0,0 +1,12 @@
import { NumberFormat } from '@/config/func';
import type { InvoiceItem } from '../types/InvoiceTypes';
export function formatItemDiscountDisplay(item: Pick<InvoiceItem, 'discount' | 'discountPercent'>): {
value: string;
percent: string;
} {
return {
value: item.discount != null && item.discount > 0 ? `${NumberFormat(item.discount)} ریال` : '-',
percent: item.discountPercent != null && item.discountPercent > 0 ? `${item.discountPercent}٪` : '-',
};
}