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