feat(invoice): synchronize invoice totals with patient session updates and add resync command

This commit is contained in:
hamed
2026-08-04 13:12:24 +03:30
parent 4653cd0e4a
commit 0dca245246
8 changed files with 411 additions and 23 deletions
+12 -1
View File
@@ -1,5 +1,5 @@
import { useEffect, useMemo, useState } from 'react';
import { useQuery, useMutation } from '@tanstack/react-query';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { toast } from 'sonner';
import { PlusIcon, MinusIcon } from '@heroicons/react/24/outline';
import { api } from '../../lib/api';
@@ -57,6 +57,7 @@ interface Props {
* موجودِ NewSessionPage (نمایش شرطی: سرویسِ تحت پوشش بیمه یا بیمه در پروفایل بیمار).
*/
export default function CreateStep({ recordUuid, profile, onCreated, onCancel, editSession }: Props) {
const qc = useQueryClient();
const userName = useAuthStore((s) => s.userName);
const isEdit = !!editSession;
@@ -307,6 +308,16 @@ export default function CreateStep({ recordUuid, profile, onCreated, onCancel, e
? api.patch(`/api/v1/session/${editSession!.uuid}`, body)
: api.post(`/api/v1/patient/${recordUuid}/session`, body),
onSuccess: (res: any) => {
// بدون این، صفحهٔ پرونده و فهرست پرداخت‌ها نسخهٔ کش‌شده را نشان می‌دادند و
// وضعیت مراجعه تا رفرشِ دستی عوض نمی‌شد. صورتحساب هم سمت سرور با همین ویرایش
// هم‌تراز می‌شود، پس آمار پرداخت‌ها هم کهنه می‌ماند.
qc.invalidateQueries({ queryKey: ['patient-sessions', recordUuid] });
qc.invalidateQueries({ queryKey: ['patient-detail', recordUuid] });
qc.invalidateQueries({ queryKey: ['patient', recordUuid] });
qc.invalidateQueries({ queryKey: ['patient-invoices', recordUuid] });
qc.invalidateQueries({ queryKey: ['payments'] });
qc.invalidateQueries({ queryKey: ['payments-summary'] });
toast.success(isEdit ? 'مراجعه ویرایش شد' : 'مراجعه ثبت شد');
onCreated((isEdit ? editSession!.uuid : res?.data?.uuid) as string);
},