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

This commit is contained in:
2026-07-09 10:45:19 +03:30
parent 77bf29cb3f
commit bda60b7550
7 changed files with 59 additions and 2 deletions
+22 -2
View File
@@ -103,6 +103,7 @@
"integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0", "@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
@@ -2497,6 +2498,7 @@
"integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==",
"devOptional": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"undici-types": "~7.12.0" "undici-types": "~7.12.0"
} }
@@ -2506,6 +2508,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz",
"integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
@@ -2516,6 +2519,7 @@
"integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==",
"devOptional": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"peer": true,
"peerDependencies": { "peerDependencies": {
"@types/react": "^19.0.0" "@types/react": "^19.0.0"
} }
@@ -2572,6 +2576,7 @@
"integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "8.41.0", "@typescript-eslint/scope-manager": "8.41.0",
"@typescript-eslint/types": "8.41.0", "@typescript-eslint/types": "8.41.0",
@@ -2824,6 +2829,7 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@@ -3008,6 +3014,7 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"caniuse-lite": "^1.0.30001737", "caniuse-lite": "^1.0.30001737",
"electron-to-chromium": "^1.5.211", "electron-to-chromium": "^1.5.211",
@@ -3554,6 +3561,7 @@
"integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1", "@eslint-community/regexpp": "^4.12.1",
@@ -4166,6 +4174,7 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.27.6" "@babel/runtime": "^7.27.6"
}, },
@@ -4989,6 +4998,7 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"nanoid": "^3.3.11", "nanoid": "^3.3.11",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@@ -5089,6 +5099,7 @@
"resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz",
"integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"fast-diff": "^1.3.0", "fast-diff": "^1.3.0",
"lodash.clonedeep": "^4.5.0", "lodash.clonedeep": "^4.5.0",
@@ -5141,6 +5152,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
"integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@@ -5156,6 +5168,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
"integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"scheduler": "^0.26.0" "scheduler": "^0.26.0"
}, },
@@ -5226,7 +5239,8 @@
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT" "license": "MIT",
"peer": true
}, },
"node_modules/react-multi-date-picker": { "node_modules/react-multi-date-picker": {
"version": "4.5.2", "version": "4.5.2",
@@ -5272,6 +5286,7 @@
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
"integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@types/use-sync-external-store": "^0.0.6", "@types/use-sync-external-store": "^0.0.6",
"use-sync-external-store": "^1.4.0" "use-sync-external-store": "^1.4.0"
@@ -5461,7 +5476,8 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
"license": "MIT" "license": "MIT",
"peer": true
}, },
"node_modules/redux-thunk": { "node_modules/redux-thunk": {
"version": "3.1.0", "version": "3.1.0",
@@ -5778,6 +5794,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
@@ -5864,6 +5881,7 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"peer": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@@ -6023,6 +6041,7 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz",
"integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"esbuild": "^0.25.0", "esbuild": "^0.25.0",
"fdir": "^6.5.0", "fdir": "^6.5.0",
@@ -6114,6 +6133,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
+1
View File
@@ -38,6 +38,7 @@ export type PaymentMethodType = {
export type PriceDetailsType = { export type PriceDetailsType = {
shipping_cost: number; shipping_cost: number;
shipping_cost_on_delivery?: number;
process_cost: number; process_cost: number;
total_retail_price: number; total_retail_price: number;
total_payable_price: number; total_payable_price: number;
+1
View File
@@ -34,6 +34,7 @@ export interface PaymentMethod {
export interface PriceDetails { export interface PriceDetails {
shipping_cost: number; shipping_cost: number;
shipping_cost_on_delivery?: number;
process_cost: number; process_cost: number;
total_retail_price: number; total_retail_price: number;
total_payable_price: number; total_payable_price: number;
+15
View File
@@ -13,6 +13,7 @@ import { TickCircle, Add, Trash } from 'iconsax-react'
import { toast } from 'react-toastify' import { toast } from 'react-toastify'
import { extractErrorMessage } from '../../helpers/utils' import { extractErrorMessage } from '../../helpers/utils'
import { Pages } from '../../config/Pages' import { Pages } from '../../config/Pages'
import SwitchComponent from '../../components/Switch'
const CreateShipment: FC = () => { const CreateShipment: FC = () => {
const navigate = useNavigate() const navigate = useNavigate()
@@ -25,6 +26,7 @@ const CreateShipment: FC = () => {
costs: [], costs: [],
deliveryTime: 0, deliveryTime: 0,
deliveryType: 'Standard', deliveryType: 'Standard',
payDeliveryFeeOnDelivery: false,
}, },
validationSchema: Yup.object({ validationSchema: Yup.object({
name: Yup.string().required('عنوان روش ارسال الزامی است'), name: Yup.string().required('عنوان روش ارسال الزامی است'),
@@ -134,6 +136,19 @@ const CreateShipment: FC = () => {
{...formik.getFieldProps('description')} {...formik.getFieldProps('description')}
error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''} error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''}
/> />
<div className='flex items-center justify-between border border-gray-200 rounded-lg p-4'>
<div>
<div className='font-medium text-gray-900'>پرداخت هزینه ارسال در زمان تحویل</div>
<div className='text-xs text-gray-500 mt-1'>
در صورت فعال بودن، هزینه ارسال در زمان تحویل پرداخت میشود و در پرداخت آنلاین لحاظ نمیگردد.
</div>
</div>
<SwitchComponent
active={formik.values.payDeliveryFeeOnDelivery ?? false}
onChange={(value) => formik.setFieldValue('payDeliveryFeeOnDelivery', value)}
/>
</div>
</div> </div>
</div> </div>
+2
View File
@@ -88,6 +88,7 @@ const ShippingList: FC = () => {
<Td text={'توضیحات'} /> <Td text={'توضیحات'} />
<Td text={'نوع ارسال'} /> <Td text={'نوع ارسال'} />
<Td text={'زمان ارسال (روز)'} /> <Td text={'زمان ارسال (روز)'} />
<Td text={'پرداخت در محل'} />
<Td text={'هزینه‌ها'} /> <Td text={'هزینه‌ها'} />
<Td text={'عملیات'} /> <Td text={'عملیات'} />
</tr> </tr>
@@ -106,6 +107,7 @@ const ShippingList: FC = () => {
<Td text={shipment.description} /> <Td text={shipment.description} />
<Td text={getDeliveryTypeText(shipment.deliveryType)} /> <Td text={getDeliveryTypeText(shipment.deliveryType)} />
<Td text={shipment.deliveryTime.toString()} /> <Td text={shipment.deliveryTime.toString()} />
<Td text={shipment.payDeliveryFeeOnDelivery ? 'بله' : 'خیر'} />
<Td text=""> <Td text="">
<div className="text-sm"> <div className="text-sm">
{shipment.costs.length > 0 ? ( {shipment.costs.length > 0 ? (
+15
View File
@@ -13,6 +13,7 @@ import { TickCircle, Add, Trash } from 'iconsax-react'
import { toast } from 'react-toastify' import { toast } from 'react-toastify'
import { extractErrorMessage } from '../../helpers/utils' import { extractErrorMessage } from '../../helpers/utils'
import { Pages } from '../../config/Pages' import { Pages } from '../../config/Pages'
import SwitchComponent from '../../components/Switch'
const UpdateShipment: FC = () => { const UpdateShipment: FC = () => {
const { id } = useParams<{ id: string }>() const { id } = useParams<{ id: string }>()
@@ -27,6 +28,7 @@ const UpdateShipment: FC = () => {
costs: shipmentDetail?.costs || [], costs: shipmentDetail?.costs || [],
deliveryTime: shipmentDetail?.deliveryTime || 0, deliveryTime: shipmentDetail?.deliveryTime || 0,
deliveryType: shipmentDetail?.deliveryType || 'Standard', deliveryType: shipmentDetail?.deliveryType || 'Standard',
payDeliveryFeeOnDelivery: shipmentDetail?.payDeliveryFeeOnDelivery ?? false,
}, },
enableReinitialize: true, enableReinitialize: true,
validationSchema: Yup.object({ validationSchema: Yup.object({
@@ -170,6 +172,19 @@ const UpdateShipment: FC = () => {
{...formik.getFieldProps('description')} {...formik.getFieldProps('description')}
error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''} error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''}
/> />
<div className='flex items-center justify-between border border-gray-200 rounded-lg p-4'>
<div>
<div className='font-medium text-gray-900'>پرداخت هزینه ارسال در زمان تحویل</div>
<div className='text-xs text-gray-500 mt-1'>
در صورت فعال بودن، هزینه ارسال در زمان تحویل پرداخت میشود و در پرداخت آنلاین لحاظ نمیگردد.
</div>
</div>
<SwitchComponent
active={formik.values.payDeliveryFeeOnDelivery ?? false}
onChange={(value) => formik.setFieldValue('payDeliveryFeeOnDelivery', value)}
/>
</div>
</div> </div>
</div> </div>
+3
View File
@@ -16,6 +16,7 @@ export interface Shipper {
costs: Cost[]; costs: Cost[];
deliveryType: "Standard" | "SameDay" | "Express"; deliveryType: "Standard" | "SameDay" | "Express";
deliveryTime: number; deliveryTime: number;
payDeliveryFeeOnDelivery: boolean;
deleted: boolean; deleted: boolean;
createdAt: string; createdAt: string;
updatedAt: string; updatedAt: string;
@@ -35,6 +36,7 @@ export interface CreateShipper {
description: string; description: string;
costs: Cost[]; costs: Cost[];
deliveryTime: number; deliveryTime: number;
payDeliveryFeeOnDelivery?: boolean;
deliveryType?: "Standard" | "SameDay" | "Express"; deliveryType?: "Standard" | "SameDay" | "Express";
} }
@@ -62,6 +64,7 @@ export interface ShipmentMethod {
costs: Cost[]; costs: Cost[];
deliveryType: string; deliveryType: string;
deliveryTime: number; deliveryTime: number;
payDeliveryFeeOnDelivery: boolean;
deleted: boolean; deleted: boolean;
createdAt: string; createdAt: string;
updatedAt: string; updatedAt: string;