@@ -14,11 +14,6 @@ import moment from 'moment-jalaali'
|
||||
import StatusWithText from '@/components/StatusWithText'
|
||||
import { Eye } from 'iconsax-react'
|
||||
|
||||
const getConfirmStatus = (invoice: Invoice): 'confirmed' | 'not_confirmed' => {
|
||||
const allConfirmed = invoice.items.length > 0 && invoice.items.every((item) => item.confirmedAt !== null)
|
||||
return allConfirmed ? 'confirmed' : 'not_confirmed'
|
||||
}
|
||||
|
||||
const getServiceNames = (invoice: Invoice): string => {
|
||||
const names = [...new Set(invoice.items.map((item) => item.product.title))]
|
||||
return names.join('، ') || '-'
|
||||
@@ -37,9 +32,9 @@ const ProformaInvoice: FC = () => {
|
||||
|
||||
// فیلتر تب
|
||||
if (activeTab === ProformaInvoiceStatusEnum.NOT_CONFIRMED) {
|
||||
result = result.filter((inv) => getConfirmStatus(inv) === 'not_confirmed')
|
||||
result = result.filter((inv) => inv.confirmStatus === 'pending')
|
||||
} else if (activeTab === ProformaInvoiceStatusEnum.CONFIRMED) {
|
||||
result = result.filter((inv) => getConfirmStatus(inv) === 'confirmed')
|
||||
result = result.filter((inv) => inv.confirmStatus === 'confirmed')
|
||||
}
|
||||
|
||||
// فیلتر جستجو
|
||||
@@ -97,11 +92,11 @@ const ProformaInvoice: FC = () => {
|
||||
key: 'confirmStatus',
|
||||
title: 'وضعیت تایید',
|
||||
render: (item) => {
|
||||
const status = getConfirmStatus(item)
|
||||
const confirmed = item.confirmStatus === 'confirmed'
|
||||
return (
|
||||
<StatusWithText
|
||||
variant={status === 'confirmed' ? 'success' : 'warning'}
|
||||
text={status === 'confirmed' ? 'تایید شده' : 'تایید نشده'}
|
||||
variant={confirmed ? 'success' : 'warning'}
|
||||
text={confirmed ? 'تایید شده' : 'تایید نشده'}
|
||||
/>
|
||||
)
|
||||
},
|
||||
|
||||
@@ -65,6 +65,7 @@ export type Invoice = {
|
||||
total: number;
|
||||
paidAmount: number;
|
||||
balance: number;
|
||||
confirmStatus: 'pending' | 'confirmed';
|
||||
enableTax: boolean;
|
||||
approvalDeadline: string;
|
||||
attachments: unknown[];
|
||||
|
||||
@@ -8,6 +8,7 @@ import { Link, useNavigate } from 'react-router-dom'
|
||||
import { Paths } from '@/config/Paths'
|
||||
import { extractErrorMessage } from '@/config/func'
|
||||
import { ArrowRight2 } from 'iconsax-react'
|
||||
import ModalConfirm from '@/components/ModalConfirm'
|
||||
|
||||
const NewRequest: FC = () => {
|
||||
const navigate = useNavigate()
|
||||
@@ -15,6 +16,7 @@ const NewRequest: FC = () => {
|
||||
const { items, setItems } = useRequestStore()
|
||||
const [editingIndex, setEditingIndex] = useState<number | null>(null)
|
||||
const [formKey, setFormKey] = useState(0)
|
||||
const [showConfirmModal, setShowConfirmModal] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
setItems([])
|
||||
@@ -44,14 +46,18 @@ const NewRequest: FC = () => {
|
||||
setEditingIndex(index)
|
||||
}
|
||||
|
||||
const onSubmit = () => {
|
||||
const openSubmitConfirm = () => {
|
||||
if (items.length === 0) {
|
||||
toast('حداقل یک قلم باید به درخواست اضافه کنید.', 'error')
|
||||
return
|
||||
}
|
||||
setShowConfirmModal(true)
|
||||
}
|
||||
|
||||
const onSubmit = () => {
|
||||
submitRequest(items, {
|
||||
onSuccess: () => {
|
||||
setShowConfirmModal(false)
|
||||
setItems([])
|
||||
setEditingIndex(null)
|
||||
setFormKey((k) => k + 1)
|
||||
@@ -106,10 +112,20 @@ const NewRequest: FC = () => {
|
||||
editingIndex={editingIndex}
|
||||
onEdit={handleEdit}
|
||||
onRemove={handleRemove}
|
||||
onSubmit={onSubmit}
|
||||
onSubmit={openSubmitConfirm}
|
||||
isPending={isPending}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<ModalConfirm
|
||||
open={showConfirmModal}
|
||||
onClose={() => setShowConfirmModal(false)}
|
||||
onConfirm={onSubmit}
|
||||
title='ثبت نهایی درخواست'
|
||||
message={`آیا از ثبت نهایی درخواست با ${items.length} قلم اطمینان دارید؟`}
|
||||
confirmLabel='ثبت درخواست'
|
||||
isLoading={isPending}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user