From d049e42ddcf7b6facb8326ba55f1d4fa5c4203f5 Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Tue, 23 Jun 2026 20:32:34 +0330 Subject: [PATCH] feat(insurance): edit tenant insurance contracts Co-Authored-By: Claude Opus 4.8 --- .../components/TenantInsuranceContracts.tsx | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/assets/admin/components/TenantInsuranceContracts.tsx b/assets/admin/components/TenantInsuranceContracts.tsx index 1410c8fa..6c269725 100644 --- a/assets/admin/components/TenantInsuranceContracts.tsx +++ b/assets/admin/components/TenantInsuranceContracts.tsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -import { TrashIcon, PlusIcon } from '@heroicons/react/24/outline'; +import { TrashIcon, PlusIcon, PencilIcon } from '@heroicons/react/24/outline'; import { toast } from 'sonner'; import { api } from '../lib/api'; import { formatRial } from '../lib/utils'; @@ -30,6 +30,7 @@ const KIND_LABEL: Record = { export default function TenantInsuranceContracts() { const qc = useQueryClient(); const [addOpen, setAddOpen] = useState(false); + const [editUuid, setEditUuid] = useState(null); const [insuranceId, setInsuranceId] = useState(''); const [coverage, setCoverage] = useState(''); const [franchise, setFranchise] = useState(''); @@ -56,8 +57,33 @@ export default function TenantInsuranceContracts() { setFranchise(''); setCeiling(''); setAddOpen(false); + setEditUuid(null); }; + const openEdit = (c: Contract) => { + setEditUuid(c.uuid); + setAddOpen(false); + setInsuranceId(String(c.insurance_id)); + setCoverage(String(c.coverage_percent ?? '')); + setFranchise(String(c.franchise_rials ?? '')); + setCeiling(c.annual_ceiling_rials != null ? String(c.annual_ceiling_rials) : ''); + }; + + const editMut = useMutation({ + mutationFn: () => + api.patch(`/api/v1/billing/tenant-insurances/${editUuid}`, { + coverage_percent: Number(coverage) || 0, + franchise_rials: Number(franchise) || 0, + annual_ceiling_rials: ceiling === '' ? null : Number(ceiling), + }), + onSuccess: () => { + toast.success('قرارداد بیمه ویرایش شد'); + resetForm(); + qc.invalidateQueries({ queryKey: ['tenant-insurances'] }); + }, + onError: (e: Error) => toast.error(e.message), + }); + const addMut = useMutation({ mutationFn: () => api.post('/api/v1/billing/tenant-insurances', { @@ -99,13 +125,13 @@ export default function TenantInsuranceContracts() { )} - {addOpen && ( + {(addOpen || editUuid) && (
- setInsuranceId(e.target.value)}> - {available.map((i) => ( + {(editUuid ? allInsurances : available).map((i) => ( ))} @@ -123,8 +149,12 @@ export default function TenantInsuranceContracts() { setCeiling(e.target.value)} />
-
@@ -152,6 +182,9 @@ export default function TenantInsuranceContracts() { {c.annual_ceiling_rials != null && ` · سقف ${formatRial(c.annual_ceiling_rials)}`}
+