diff --git a/assets/admin/components/SessionServiceCard.tsx b/assets/admin/components/SessionServiceCard.tsx index 6c91ca8d..41eccf8e 100644 --- a/assets/admin/components/SessionServiceCard.tsx +++ b/assets/admin/components/SessionServiceCard.tsx @@ -12,8 +12,10 @@ export interface SessionPaymentEntry { export interface SessionCardData { uuid: string; - services?: Array<{ service_name?: string; name?: string }>; + services?: Array<{ service_name?: string; name?: string; line_total_rials?: number; price_rials?: number; quantity?: number }>; visit_price_rials?: number; + services_total_rials?: number; + session_at?: number | null; doctor_name?: string | null; final_price_rials?: number; patient_debt_rials?: number; diff --git a/assets/admin/components/session/DetailsStep.tsx b/assets/admin/components/session/DetailsStep.tsx index fe18b6ea..cf278a06 100644 --- a/assets/admin/components/session/DetailsStep.tsx +++ b/assets/admin/components/session/DetailsStep.tsx @@ -1,5 +1,5 @@ import { toast } from 'sonner'; -import { formatRial } from '../../lib/utils'; +import { formatRial, formatDateTime } from '../../lib/utils'; import type { SessionCardData } from '../SessionServiceCard'; import { METHOD_LABELS } from './PaymentStep'; import { useIssueInvoice } from '../../hooks/useIssueInvoice'; @@ -34,13 +34,34 @@ export default function DetailsStep({ session, recordUuid, onBack, onFinish }: P const discountRials = session.discount_rials ?? 0; const debt = session.patient_debt_rials ?? 0; const payments = session.payments ?? []; + const visitPrice = session.visit_price_rials ?? 0; const serviceNames = (session.services ?? []).map((s) => s.service_name || s.name).filter(Boolean) as string[]; - if ((session.visit_price_rials ?? 0) > 0) serviceNames.unshift('ویزیت'); + if (visitPrice > 0) serviceNames.unshift('ویزیت'); + + // زمان مراجعه: زمان واقعی نوبت؛ در نبود آن، زمان ثبت پرونده. + const visitAt = session.session_at ?? session.created_at ?? null; + + // آیتم‌های هزینه‌ی تفکیک‌شده: ویزیت + هر سرویس، با جمع کل. + const costItems: Array<{ label: string; rials: number }> = []; + if (visitPrice > 0) costItems.push({ label: 'ویزیت', rials: visitPrice }); + (session.services ?? []).forEach((s) => { + costItems.push({ + label: (s.service_name || s.name) ?? 'سرویس', + rials: s.line_total_rials ?? (s.price_rials ?? 0) * (s.quantity ?? 1), + }); + }); return ( <> {/* گام جزییات — پورت tauri Step3Final با دیتای واقعی */}
+ {visitAt && ( +
+ تاریخ و ساعت مراجعه: + {formatDateTime(visitAt)} +
+ )} +
{serviceNames.length ? serviceNames.join(' - ') : 'ویزیت'} @@ -49,6 +70,21 @@ export default function DetailsStep({ session, recordUuid, onBack, onFinish }: P {session.doctor_name || '—'}
+ {costItems.length > 0 && ( +
+ {costItems.map((it, i) => ( +
+ {it.label} + {formatRial(it.rials)} +
+ ))} +
+ جمع کل + {formatRial(finalPrice)} +
+
+ )} +
هزینه سرویس: