From bda60b7550c770743eb6d43f3fb77e0888435a3e Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 9 Jul 2026 10:45:19 +0330 Subject: [PATCH] payment on delivery --- package-lock.json | 24 ++++++++++++++++++++++-- src/pages/orders/types/Types.ts | 1 + src/pages/payment/types/Types.ts | 1 + src/pages/shipment/Create.tsx | 15 +++++++++++++++ src/pages/shipment/List.tsx | 2 ++ src/pages/shipment/Update.tsx | 15 +++++++++++++++ src/pages/shipment/types/Types.ts | 3 +++ 7 files changed, 59 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33d1153..2e90f18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -103,6 +103,7 @@ "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -2497,6 +2498,7 @@ "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.12.0" } @@ -2506,6 +2508,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -2516,6 +2519,7 @@ "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.0.0" } @@ -2572,6 +2576,7 @@ "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.41.0", "@typescript-eslint/types": "8.41.0", @@ -2824,6 +2829,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3008,6 +3014,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -3554,6 +3561,7 @@ "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -4166,6 +4174,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.27.6" }, @@ -4989,6 +4998,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -5089,6 +5099,7 @@ "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", "license": "MIT", + "peer": true, "dependencies": { "fast-diff": "^1.3.0", "lodash.clonedeep": "^4.5.0", @@ -5141,6 +5152,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5156,6 +5168,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.26.0" }, @@ -5226,7 +5239,8 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-multi-date-picker": { "version": "4.5.2", @@ -5272,6 +5286,7 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -5461,7 +5476,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -5778,6 +5794,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5864,6 +5881,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6023,6 +6041,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -6114,6 +6133,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, diff --git a/src/pages/orders/types/Types.ts b/src/pages/orders/types/Types.ts index 4216a02..9c796d0 100644 --- a/src/pages/orders/types/Types.ts +++ b/src/pages/orders/types/Types.ts @@ -38,6 +38,7 @@ export type PaymentMethodType = { export type PriceDetailsType = { shipping_cost: number; + shipping_cost_on_delivery?: number; process_cost: number; total_retail_price: number; total_payable_price: number; diff --git a/src/pages/payment/types/Types.ts b/src/pages/payment/types/Types.ts index 2623b48..7b25971 100644 --- a/src/pages/payment/types/Types.ts +++ b/src/pages/payment/types/Types.ts @@ -34,6 +34,7 @@ export interface PaymentMethod { export interface PriceDetails { shipping_cost: number; + shipping_cost_on_delivery?: number; process_cost: number; total_retail_price: number; total_payable_price: number; diff --git a/src/pages/shipment/Create.tsx b/src/pages/shipment/Create.tsx index 01cf024..8975474 100644 --- a/src/pages/shipment/Create.tsx +++ b/src/pages/shipment/Create.tsx @@ -13,6 +13,7 @@ import { TickCircle, Add, Trash } from 'iconsax-react' import { toast } from 'react-toastify' import { extractErrorMessage } from '../../helpers/utils' import { Pages } from '../../config/Pages' +import SwitchComponent from '../../components/Switch' const CreateShipment: FC = () => { const navigate = useNavigate() @@ -25,6 +26,7 @@ const CreateShipment: FC = () => { costs: [], deliveryTime: 0, deliveryType: 'Standard', + payDeliveryFeeOnDelivery: false, }, validationSchema: Yup.object({ name: Yup.string().required('عنوان روش ارسال الزامی است'), @@ -134,6 +136,19 @@ const CreateShipment: FC = () => { {...formik.getFieldProps('description')} error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''} /> + +
+
+
پرداخت هزینه ارسال در زمان تحویل
+
+ در صورت فعال بودن، هزینه ارسال در زمان تحویل پرداخت می‌شود و در پرداخت آنلاین لحاظ نمی‌گردد. +
+
+ formik.setFieldValue('payDeliveryFeeOnDelivery', value)} + /> +
diff --git a/src/pages/shipment/List.tsx b/src/pages/shipment/List.tsx index 0c73583..4613439 100644 --- a/src/pages/shipment/List.tsx +++ b/src/pages/shipment/List.tsx @@ -88,6 +88,7 @@ const ShippingList: FC = () => { + @@ -106,6 +107,7 @@ const ShippingList: FC = () => { +
{shipment.costs.length > 0 ? ( diff --git a/src/pages/shipment/Update.tsx b/src/pages/shipment/Update.tsx index fa10398..c8db0a0 100644 --- a/src/pages/shipment/Update.tsx +++ b/src/pages/shipment/Update.tsx @@ -13,6 +13,7 @@ import { TickCircle, Add, Trash } from 'iconsax-react' import { toast } from 'react-toastify' import { extractErrorMessage } from '../../helpers/utils' import { Pages } from '../../config/Pages' +import SwitchComponent from '../../components/Switch' const UpdateShipment: FC = () => { const { id } = useParams<{ id: string }>() @@ -27,6 +28,7 @@ const UpdateShipment: FC = () => { costs: shipmentDetail?.costs || [], deliveryTime: shipmentDetail?.deliveryTime || 0, deliveryType: shipmentDetail?.deliveryType || 'Standard', + payDeliveryFeeOnDelivery: shipmentDetail?.payDeliveryFeeOnDelivery ?? false, }, enableReinitialize: true, validationSchema: Yup.object({ @@ -170,6 +172,19 @@ const UpdateShipment: FC = () => { {...formik.getFieldProps('description')} error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''} /> + +
+
+
پرداخت هزینه ارسال در زمان تحویل
+
+ در صورت فعال بودن، هزینه ارسال در زمان تحویل پرداخت می‌شود و در پرداخت آنلاین لحاظ نمی‌گردد. +
+
+ formik.setFieldValue('payDeliveryFeeOnDelivery', value)} + /> +
diff --git a/src/pages/shipment/types/Types.ts b/src/pages/shipment/types/Types.ts index 3bd0dbd..afc86a0 100644 --- a/src/pages/shipment/types/Types.ts +++ b/src/pages/shipment/types/Types.ts @@ -16,6 +16,7 @@ export interface Shipper { costs: Cost[]; deliveryType: "Standard" | "SameDay" | "Express"; deliveryTime: number; + payDeliveryFeeOnDelivery: boolean; deleted: boolean; createdAt: string; updatedAt: string; @@ -35,6 +36,7 @@ export interface CreateShipper { description: string; costs: Cost[]; deliveryTime: number; + payDeliveryFeeOnDelivery?: boolean; deliveryType?: "Standard" | "SameDay" | "Express"; } @@ -62,6 +64,7 @@ export interface ShipmentMethod { costs: Cost[]; deliveryType: string; deliveryTime: number; + payDeliveryFeeOnDelivery: boolean; deleted: boolean; createdAt: string; updatedAt: string;