invoice list

This commit is contained in:
hamid zarghami
2026-02-21 12:45:34 +03:30
parent 1cf254de13
commit 002e45de0b
4 changed files with 124 additions and 24 deletions
+23 -21
View File
@@ -6,23 +6,22 @@ import Table from '@/components/Table'
import { Eye, Add } from 'iconsax-react'
import { Link } from 'react-router-dom'
import { Paths } from '@/config/Paths'
import { useGetOrdersInvoiced } from '../order/hooks/useOrderData'
import moment from 'moment-jalaali'
import type { OrderType } from '../order/types/Types'
import type { FilterValues } from '@/components/Filters'
import { OrderStatusEnum } from '../order/enum/OrderEnum'
import { useGetInvoice } from './hooks/useInvoiceData'
import type { InvoiceType } from './types/Types'
const isInvoiceConfirmed = (status: OrderStatusEnum) =>
status !== OrderStatusEnum.WAITING_to_CONFIRM_INVOICE &&
status !== OrderStatusEnum.CREATED &&
status !== OrderStatusEnum.CANCELED
const isInvoiceConfirmed = (item: InvoiceType) => {
const items = item.items ?? []
return items.length > 0 && items.every((i) => !!i.confirmedAt)
}
const ProformaInvoice: FC = () => {
const [activeTab, setActiveTab] = useState<ProformaInvoiceStatusEnum>(ProformaInvoiceStatusEnum.ALL)
const [page, setPage] = useState(1)
const [filters, setFilters] = useState<FilterValues>({})
const { data, isLoading } = useGetOrdersInvoiced(page)
const { data, isLoading } = useGetInvoice(page)
const meta = data?.meta
@@ -30,10 +29,10 @@ const ProformaInvoice: FC = () => {
const list = data?.data ?? []
if (activeTab === ProformaInvoiceStatusEnum.CONFIRMED) {
return list.filter((o) => isInvoiceConfirmed(o.status))
return list.filter((o) => isInvoiceConfirmed(o))
}
if (activeTab === ProformaInvoiceStatusEnum.NOT_CONFIRMED) {
return list.filter((o) => o.status === OrderStatusEnum.WAITING_to_CONFIRM_INVOICE)
return list.filter((o) => !isInvoiceConfirmed(o))
}
let result = list
@@ -43,7 +42,7 @@ const ProformaInvoice: FC = () => {
const lower = search.toLowerCase()
result = result.filter(
(o) =>
String(o.orderNumber).includes(search) ||
String(o.invoiceNumber).includes(search) ||
o.user?.firstName?.toLowerCase().includes(lower) ||
o.user?.lastName?.toLowerCase().includes(lower) ||
o.user?.phone?.includes(search)
@@ -54,7 +53,7 @@ const ProformaInvoice: FC = () => {
if (dateFilter) {
const filterDate = moment(dateFilter, 'jYYYY/jMM/jDD').format('YYYY-MM-DD')
result = result.filter((o) => {
const d = o.invoicedAt || o.createdAt
const d = o.createdAt
return d && moment(d).format('YYYY-MM-DD') === filterDate
})
}
@@ -62,7 +61,7 @@ const ProformaInvoice: FC = () => {
return result
}, [data?.data, activeTab, filters.search, filters.date])
const getPaymentStatus = (item: OrderType) => {
const getPaymentStatus = (item: InvoiceType) => {
const total = Number(item.total) || 0
const paid = Number(item.paidAmount) || 0
if (total <= 0) return '-'
@@ -71,7 +70,7 @@ const ProformaInvoice: FC = () => {
return 'پرداخت نشده'
}
const getServiceLabel = (item: OrderType) => {
const getServiceLabel = (item: InvoiceType) => {
if (!item.items?.length) return '-'
if (item.items.length === 1) return item.items[0].product?.title ?? '-'
return `${item.items.length} خدمت`
@@ -123,9 +122,9 @@ const ProformaInvoice: FC = () => {
<Table
columns={[
{
key: 'orderNumber',
key: 'invoiceNumber',
title: 'شماره',
render: (item) => item.orderNumber,
render: (item) => item.invoiceNumber,
},
{
key: 'service',
@@ -136,14 +135,17 @@ const ProformaInvoice: FC = () => {
key: 'issueDate',
title: 'تاریخ صدور',
render: (item) =>
item.invoicedAt
? moment(item.invoicedAt).format('jYYYY/jMM/jDD')
: moment(item.createdAt).format('jYYYY/jMM/jDD'),
item.createdAt
? moment(item.createdAt).format('jYYYY/jMM/jDD')
: '-',
},
{
key: 'lastConfirmDate',
title: 'آخرین مهلت تایید',
render: () => '-',
render: (item) =>
item.approvalDeadline
? moment(item.approvalDeadline).format('jYYYY/jMM/jDD')
: '-',
},
{
key: 'total',
@@ -157,7 +159,7 @@ const ProformaInvoice: FC = () => {
key: 'confirmStatus',
title: 'وضعیت تایید',
render: (item) => {
const confirmed = isInvoiceConfirmed(item.status)
const confirmed = isInvoiceConfirmed(item)
return (
<span
className={`inline-flex h-6 items-center rounded-full px-2.5 text-xs ${confirmed ? 'bg-green-100 text-green-800' : 'bg-amber-100 text-amber-800'