add payment
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-07-19 11:33:51 +03:30
parent 366d9faff3
commit c0fa388ac3
9 changed files with 206 additions and 70 deletions
+40 -4
View File
@@ -4,6 +4,7 @@ import {
useVerifyPayment,
useChangeOrderStatus,
useRefundPayment,
useAddPayment,
useUpdateOrderFees,
useAddOrderItem,
useUpdateOrderItemQuantity,
@@ -23,6 +24,7 @@ import OrderActions from './components/OrderActions'
import UpdateOrderFeesModal from './components/UpdateOrderFeesModal'
import AddOrderItemModal from './components/AddOrderItemModal'
import RefundPaymentModal from './components/RefundPaymentModal'
import AddPaymentModal from './components/AddPaymentModal'
import { toast } from 'react-toastify'
import { extractErrorMessage } from '@/config/func'
import { printOrderReceipt } from './print/orderReceiptPrint'
@@ -34,6 +36,7 @@ const OrderDetails: FC = () => {
const { mutate: verifyPayment, isPending: isVerifyingPayment } = useVerifyPayment()
const { mutate: changeOrderStatus, isPending: isChangingStatus } = useChangeOrderStatus()
const { mutate: refundPayment, isPending: isRefunding } = useRefundPayment()
const { mutate: addPayment, isPending: isAddingPayment } = useAddPayment()
const { mutate: updateOrderFees, isPending: isUpdatingFees } = useUpdateOrderFees()
const { mutate: addOrderItem, isPending: isAddingItem } = useAddOrderItem()
const { mutate: updateOrderItemQuantity, isPending: isUpdatingItemQuantity } = useUpdateOrderItemQuantity()
@@ -41,6 +44,7 @@ const OrderDetails: FC = () => {
const [showCancelModal, setShowCancelModal] = useState(false)
const [refundModal, setRefundModal] = useState<{ defaultAmount: number; maxAmount: number } | null>(null)
const [showAddPaymentModal, setShowAddPaymentModal] = useState(false)
const [showEditFeesModal, setShowEditFeesModal] = useState(false)
const [showAddItemModal, setShowAddItemModal] = useState(false)
const [itemIdToRemove, setItemIdToRemove] = useState<string | null>(null)
@@ -87,6 +91,7 @@ const OrderDetails: FC = () => {
const isPendingPayment = order.status === OrderStatus.NEW
const canEditFees = !isCanceled && !isCompleted
const canEditItems = !isCanceled && !isCompleted
const canAddPayment = !isCanceled && Number(order.balance ?? 0) > 0
const isUpdatingItem = isAddingItem || isUpdatingItemQuantity || isRemovingItem
const canCompleteOrder = [
OrderStatus.DELIVERED_TO_WAITER,
@@ -219,6 +224,27 @@ const OrderDetails: FC = () => {
)
}
const handleAddPayment = (amount: number, description: string) => {
addPayment(
{
orderId: order.id,
params: {
amount,
...(description ? { description } : {}),
},
},
{
onSuccess: () => {
toast.success('پرداخت با موفقیت ثبت شد')
setShowAddPaymentModal(false)
},
onError: (error) => {
toast.error(extractErrorMessage(error))
},
}
)
}
const handlePrintOrder = () => {
printOrderReceipt(order)
}
@@ -281,15 +307,15 @@ const OrderDetails: FC = () => {
}
return (
<div className='mt-5'>
<div className='mt-5 pb-8'>
<div className='flex justify-between items-center'>
<h1 className='text-lg font-light'>
سفارش {formatFaNumber(order.orderNumber)}
</h1>
</div>
<div className='flex gap-7 mt-9'>
<div className='flex-1 space-y-8'>
<div className='flex flex-col lg:flex-row gap-5 lg:gap-7 mt-6 sm:mt-9'>
<div className='flex-1 min-w-0 space-y-5 sm:space-y-8 order-2 lg:order-1'>
<CustomerInfo order={order} />
<OrderItemsDetails
order={order}
@@ -305,10 +331,12 @@ const OrderDetails: FC = () => {
isVerifyingPayment={isVerifyingPayment}
verifyingPaymentId={verifyingPaymentId}
onVerifyPayment={handleVerifyPayment}
canAddPayment={canAddPayment}
onAddPayment={() => setShowAddPaymentModal(true)}
/>
</div>
<div>
<div className='w-full lg:w-[330px] shrink-0 order-1 lg:order-2'>
<PaymentInfo
order={order}
canEditFees={canEditFees}
@@ -373,6 +401,14 @@ const OrderDetails: FC = () => {
onSubmit={handleRefund}
/>
<AddPaymentModal
isOpen={showAddPaymentModal}
onClose={() => setShowAddPaymentModal(false)}
defaultAmount={Number(order.balance ?? 0)}
isLoading={isAddingPayment}
onSubmit={handleAddPayment}
/>
<ModalConfrim
isOpen={!!itemIdToRemove}
close={() => setItemIdToRemove(null)}