diff --git a/src/components/ui/Table.tsx b/src/components/ui/Table.tsx
index b7100b9..8cf0f8c 100644
--- a/src/components/ui/Table.tsx
+++ b/src/components/ui/Table.tsx
@@ -96,9 +96,9 @@ export const Table = ({ columns, data, loading = false }: TableProps) => {
column.align === 'center' && 'justify-center',
(!column.align || column.align === 'right') && 'justify-end'
)}>
- {column.label}
+ {column.label}
{column.sortable && (
-
-
+
شماره سفارش
-
#{order.order_number}
+
#{order?.order_number || 'نامشخص'}
تاریخ ثبت
-
{formatDate(order.created_at)}
+
{order?.created_at ? formatDate(order.created_at) : 'نامشخص'}
- {order.tracking_number && (
+
+
شناسه فاکتور
+
{order?.invoice_id || 'نامشخص'}
+
+
+
شناسه کاربر
+
{order?.user_id || 'نامشخص'}
+
+
+
تاریخ آخرین بروزرسانی
+
{order?.updated_at ? formatDate(order.updated_at) : 'نامشخص'}
+
+
+
روش حمل و نقل
+
{order?.shipping_method_id || 'تعریف نشده'}
+
+ {order?.tracking_number && (
کد رهگیری
{order.tracking_number}
)}
- {order.estimated_delivery && (
+ {order?.estimated_delivery && (
تاریخ تحویل تخمینی
{formatDate(order.estimated_delivery)}
)}
- {order.notes && (
+ {order?.notes && (
یادداشت
@@ -192,7 +209,7 @@ const OrderDetailPage = () => {
- {order.items.map((item) => (
+ {order?.items && order.items.length > 0 ? order.items.map((item) => (
{item.product_image && (
![]()
{
/>
)}
-
{item.product_name}
- {item.variant_name && (
-
نوع: {item.variant_name}
- )}
+
+ {item.product_name || `محصول شناسه: ${item.product_id}`}
+
+
+ {item.product_variant_name || `واریانت شناسه: ${item.product_variant_id}`}
+
+
+ شناسه آیتم: {item.id}
+
تعداد: {item.quantity}
- قیمت واحد: {formatCurrency(item.unit_price)}
+ قیمت واحد: {formatCurrency(item.unit_price || 0)}
+
+ وزن: {item.weight || 0} کگ
+
+ {item.final_weight && item.final_weight !== item.weight && (
+
+ وزن نهایی: {item.final_weight} کگ
+
+ )}
- {formatCurrency(item.total_price)}
+ {formatCurrency(item.total_price || 0)}
- ))}
+ )) : (
+
+ محصولی در این سفارش یافت نشد
+
+ )}
@@ -229,6 +263,51 @@ const OrderDetailPage = () => {
{/* ستون جانبی */}
+ {/* اطلاعات کاربر سفارشدهنده */}
+
+
+
+
+
+
+
کاربر سفارشدهنده
+
+
+
+ {order?.user ? (
+
+
+
نام
+
+ {(order.user.first_name || 'نامشخص') + ' ' + (order.user.last_name || '')}
+
+
+
+
+
{order.user.email || 'ایمیل نامشخص'}
+
+ {order.user.phone_number && (
+
+
+
+ {englishToPersian(order.user.phone_number)}
+
+
+ )}
+
+
+ {order.user.verified ? 'تأیید شده' : 'تأیید نشده'}
+
+
+
+ ) : (
+
اطلاعات کاربر در دسترس نیست
+ )}
+
+
{/* اطلاعات مشتری */}
@@ -240,24 +319,28 @@ const OrderDetailPage = () => {
-
-
-
نام
-
- {order.customer.first_name} {order.customer.last_name}
-
-
-
-
-
{order.customer.email}
-
- {order.customer.phone && (
-
-
-
{order.customer.phone}
+ {order?.customer ? (
+
+
+
نام
+
+ {order.customer.first_name || 'نامشخص'} {order.customer.last_name || ''}
+
- )}
-
+
+
+
{order.customer.email || 'ایمیل نامشخص'}
+
+ {order.customer.phone && (
+
+
+
{order.customer.phone}
+
+ )}
+
+ ) : (
+
اطلاعات مشتری در دسترس نیست
+ )}
@@ -275,23 +358,18 @@ const OrderDetailPage = () => {
آدرس ارسال
-
{order.shipping_address.first_name} {order.shipping_address.last_name}
-
{order.shipping_address.address_line_1}
- {order.shipping_address.address_line_2 &&
{order.shipping_address.address_line_2}
}
-
{order.shipping_address.city}, {order.shipping_address.state}
-
کد پستی: {order.shipping_address.postal_code}
- {order.shipping_address.phone &&
تلفن: {order.shipping_address.phone}
}
-
-
-
-
-
آدرس صورتحساب
-
-
{order.billing_address.first_name} {order.billing_address.last_name}
-
{order.billing_address.address_line_1}
- {order.billing_address.address_line_2 &&
{order.billing_address.address_line_2}
}
-
{order.billing_address.city}, {order.billing_address.state}
-
کد پستی: {order.billing_address.postal_code}
+
نام: {order?.shipping_address?.name || 'نام نامشخص'}
+
آدرس: {order?.shipping_address?.address || 'آدرس نامشخص'}
+
شهر: {order?.shipping_address?.city || 'شهر نامشخص'}, استان: {order?.shipping_address?.state || 'استان نامشخص'}
+
کشور: {order?.shipping_address?.country || 'کشور نامشخص'}
+
منطقه: {order?.shipping_address?.region || 'منطقه نامشخص'}
+
کد پستی: {order?.shipping_address?.postal_code || 'نامشخص'}
+ {order?.shipping_address?.plaque && (
+
پلاک: {order.shipping_address.plaque}, واحد: {order.shipping_address.unit || 'ندارد'}
+ )}
+ {order?.shipping_address?.receiving_address && (
+
آدرس تحویل: {order.shipping_address.receiving_address}
+ )}
@@ -310,48 +388,46 @@ const OrderDetailPage = () => {
جمع فرعی
- {formatCurrency(order.subtotal)}
+ {formatCurrency(order?.net_total || 0)}
مالیات
- {formatCurrency(order.tax_amount)}
+ {formatCurrency(order?.vat_total || 0)}
هزینه ارسال
- {formatCurrency(order.shipping_amount)}
+ {formatCurrency(order?.shipping_total || 0)}
- {order.discount_amount > 0 && (
+ {(order?.discount_total || 0) > 0 && (
تخفیف
- -{formatCurrency(order.discount_amount)}
+ -{formatCurrency(order.discount_total)}
)}
- مجموع
- {formatCurrency(order.total_amount)}
+ مجموع نهایی
+ {formatCurrency(order?.final_total || 0)}
-
- روش پرداخت
- {order.payment.payment_method}
-
-
- وضعیت پرداخت
-
- {order.payment.payment_status === 'paid' ? 'پرداخت شده' : 'در انتظار پرداخت'}
-
-
- {order.payment.transaction_id && (
-
-
شماره تراکنش
-
{order.payment.transaction_id}
+
+
+ وضعیت پرداخت
+
+ {order?.payment_status === 'paid' ? 'پرداخت شده' : 'در انتظار پرداخت'}
+
- )}
+ {order?.invoice_id && (
+
+ شماره فاکتور
+ {order.invoice_id}
+
+ )}
+
diff --git a/src/pages/orders/orders-list/OrdersListPage.tsx b/src/pages/orders/orders-list/OrdersListPage.tsx
index a02e32b..218d8cd 100644
--- a/src/pages/orders/orders-list/OrdersListPage.tsx
+++ b/src/pages/orders/orders-list/OrdersListPage.tsx
@@ -1,4 +1,5 @@
import React, { useMemo, useState } from 'react';
+import { englishToPersian } from '@/utils/numberUtils';
import { useNavigate } from 'react-router-dom';
import { useOrders, useOrderStats, useUpdateOrderStatus } from '../core/_hooks';
import { Order, OrderFilters, OrderStatus } from '../core/_models';
@@ -72,29 +73,39 @@ const OrdersListPage = () => {
});
const { data: ordersData, isLoading, error } = useOrders(filters);
- const { data: stats, isLoading: statsLoading } = useOrderStats(!isLoading);
+ // Temporarily disabled stats API
+ // const { data: stats, isLoading: statsLoading } = useOrderStats(!isLoading);
+ const stats = null;
+ const statsLoading = false;
const { mutate: updateStatus, isPending: isUpdating } = useUpdateOrderStatus();
+
const columns: TableColumn[] = useMemo(() => [
- { key: 'order_number', label: 'شماره سفارش', sortable: true, render: (v: string) => `#${v}` },
+ { key: 'order_number', label: 'شماره سفارش', sortable: true, align: 'right', render: (v: string) => `#${v}` },
{
key: 'customer',
label: 'مشتری',
+ align: 'right',
render: (_val, row: any) => (
-
-
{row.customer.first_name} {row.customer.last_name}
-
{row.customer.email}
+
+
+ {(row.user?.first_name || row.customer?.first_name || 'نامشخص')} {(row.user?.last_name || row.customer?.last_name || '')}
+
+
+ {row.user?.phone_number ? englishToPersian(row.user.phone_number) : '-'}
+
)
},
- { key: 'total_amount', label: 'مبلغ', sortable: true, render: (v: number) => formatCurrency(v) },
- { key: 'status', label: 'وضعیت', render: (v: OrderStatus) => (
{getStatusText(v)}) },
- { key: 'created_at', label: 'تاریخ', sortable: true, render: (v: string) => formatDate(v) },
+ { key: 'final_total', label: 'مبلغ نهایی', sortable: true, align: 'right', render: (v: number, row: any) => formatCurrency(row.final_total || row.total_amount || 0) },
+ { key: 'status', label: 'وضعیت', align: 'right', render: (v: OrderStatus) => (
{getStatusText(v)}) },
+ { key: 'created_at', label: 'تاریخ', sortable: true, align: 'right', render: (v: string) => formatDate(v) },
{
key: 'actions',
label: 'عملیات',
+ align: 'right',
render: (_val, row: any) => (
-
+
@@ -184,7 +195,7 @@ const OrdersListPage = () => {
کل فروش
- {statsLoading ? '...' : formatCurrency(stats?.total_revenue || 0)}
+ --
@@ -198,7 +209,7 @@ const OrdersListPage = () => {
در انتظار
- {statsLoading ? '...' : (stats?.orders_by_status?.pending || 0)}
+ --
@@ -212,7 +223,7 @@ const OrdersListPage = () => {
میانگین سفارش
- {statsLoading ? '...' : formatCurrency(stats?.avg_order_value || 0)}
+ --
@@ -222,14 +233,14 @@ const OrdersListPage = () => {
{/* فیلترها */}