From d52ff4f07e2d9b591c73a84ec28155bafa91ed50 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Wed, 1 Jul 2026 12:28:51 +0330 Subject: [PATCH] discountAmount and packingFee in create order admin --- .../orders/components/CreateOrderSidebar.tsx | 80 ++++++++++++++++--- src/pages/orders/hooks/useCreateOrderForm.ts | 23 +++++- src/pages/orders/types/Types.ts | 2 + 3 files changed, 93 insertions(+), 12 deletions(-) diff --git a/src/pages/orders/components/CreateOrderSidebar.tsx b/src/pages/orders/components/CreateOrderSidebar.tsx index b3bca76..dfa9936 100644 --- a/src/pages/orders/components/CreateOrderSidebar.tsx +++ b/src/pages/orders/components/CreateOrderSidebar.tsx @@ -29,6 +29,8 @@ interface OrderSummaryData { } | null> subTotal: number deliveryFee: number + packingFee: number + discountAmount: number total: number totalItems: number } @@ -129,7 +131,7 @@ const CreateOrderSidebar: FC = ({ return ( <> -
+
@@ -143,12 +145,12 @@ const CreateOrderSidebar: FC = ({
{(customerName || formik.values.userPhone) && ( -
-
+
+
{customerName || 'مشتری'}
{formik.values.userPhone && ( -
+
{formik.values.userPhone}
)} @@ -158,7 +160,7 @@ const CreateOrderSidebar: FC = ({ -
-
سبد سفارش
+
+
سبد سفارش
{orderSummary.lineItems.length === 0 ? ( @@ -233,7 +235,7 @@ const CreateOrderSidebar: FC = ({
) : ( -
+
{orderSummary.lineItems.map((item) => { if (!item) return null return ( @@ -319,7 +321,51 @@ const CreateOrderSidebar: FC = ({ )}
-
+
+
+
+
+ هزینه بسته‌بندی + (اختیاری) +
+ + formik.setFieldValue( + 'packingFee', + Math.max(Number(e.target.value) || 0, 0) + ) + } + /> +
+
+
+ تخفیف مبلغی + (اختیاری) +
+ + formik.setFieldValue( + 'discountAmount', + Math.max(Number(e.target.value) || 0, 0) + ) + } + /> +
+
جمع آیتم‌ها {formatPrice(orderSummary.subTotal)} @@ -330,6 +376,20 @@ const CreateOrderSidebar: FC = ({ {formatPrice(orderSummary.deliveryFee)}
)} + {orderSummary.packingFee > 0 && ( +
+ هزینه بسته‌بندی + {formatPrice(orderSummary.packingFee)} +
+ )} + {orderSummary.discountAmount > 0 && ( +
+ تخفیف + + -{formatPrice(orderSummary.discountAmount)} + +
+ )}
جمع کل {formatPrice(orderSummary.total)} diff --git a/src/pages/orders/hooks/useCreateOrderForm.ts b/src/pages/orders/hooks/useCreateOrderForm.ts index c662e77..801ad4d 100644 --- a/src/pages/orders/hooks/useCreateOrderForm.ts +++ b/src/pages/orders/hooks/useCreateOrderForm.ts @@ -33,6 +33,8 @@ export interface CreateOrderFormValues { items: CreateOrderItem[] deliveryMethodId: string paymentMethodId: string + discountAmount: number + packingFee: number description: string tableNumber: string userAddress: CreateOrderUserAddress @@ -97,6 +99,8 @@ export const useCreateOrderForm = () => { items: [], deliveryMethodId: '', paymentMethodId: '', + discountAmount: 0, + packingFee: 0, description: '', tableNumber: '', userAddress: emptyUserAddress(), @@ -117,6 +121,8 @@ export const useCreateOrderForm = () => { }) ) .min(1, 'حداقل یک آیتم الزامی است'), + discountAmount: Yup.number().min(0, 'تخفیف نمی‌تواند منفی باشد'), + packingFee: Yup.number().min(0, 'هزینه بسته‌بندی نمی‌تواند منفی باشد'), }), onSubmit: async (values) => { const selectedDelivery = deliveryMethods.find( @@ -160,6 +166,8 @@ export const useCreateOrderForm = () => { items: values.items, deliveryMethodId: values.deliveryMethodId, paymentMethodId: values.paymentMethodId, + discountAmount: values.discountAmount || 0, + packingFee: values.packingFee || 0, } if (values.description.trim()) { @@ -383,16 +391,27 @@ export const useCreateOrderForm = () => { const subTotal = lineItems.reduce((sum, item) => sum + (item?.totalPrice || 0), 0) const deliveryFee = selectedDeliveryMethod?.deliveryFee || 0 + const packingFee = formik.values.packingFee || 0 + const discountAmount = formik.values.discountAmount || 0 const totalItems = lineItems.reduce((sum, item) => sum + (item?.quantity || 0), 0) + const total = Math.max(subTotal + deliveryFee + packingFee - discountAmount, 0) return { lineItems, subTotal, deliveryFee, - total: subTotal + deliveryFee, + packingFee, + discountAmount, + total, totalItems, } - }, [formik.values.items, foodsMap, selectedDeliveryMethod]) + }, [ + formik.values.items, + formik.values.packingFee, + formik.values.discountAmount, + foodsMap, + selectedDeliveryMethod, + ]) const addFoodToOrder = (foodId: string) => { const existingIndex = formik.values.items.findIndex((item) => item.foodId === foodId) diff --git a/src/pages/orders/types/Types.ts b/src/pages/orders/types/Types.ts index a5aef65..0b409bb 100644 --- a/src/pages/orders/types/Types.ts +++ b/src/pages/orders/types/Types.ts @@ -269,6 +269,8 @@ export interface CreateOrderType { items: CreateOrderItem[]; deliveryMethodId: string; paymentMethodId: string; + discountAmount: number; + packingFee: number; description?: string; tableNumber?: string; addressId?: string;