// Patients list + Patient detail — wired to real API. const PAY_METHODS = [ { id: 'cash', label: "Naqd" }, { id: 'card', label: 'Karta' }, { id: 'transfer', label: "O'tkazma" }, { id: 'debt', label: 'Qarz' }, { id: 'mixed', label: 'Aralash' }, ]; function EditVisitModal({ open, visit, onClose, onSaved, toast }) { const [doctorId, setDoctorId] = useState(''); const [paymentMethod, setPaymentMethod] = useState('cash'); const [notes, setNotes] = useState(''); const [selectedSvcs, setSelectedSvcs] = useState([]); // [{service_id, quantity, name, price}] const [doctors, setDoctors] = useState([]); const [allServices, setAllServices] = useState([]); const [saving, setSaving] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { if (!open || !visit) return; setLoading(true); Promise.all([ window.API.listDoctors(), window.API.listServices(), ]).then(([docs, svcs]) => { setDoctors(docs); setAllServices(svcs); setDoctorId(visit.doctor?.id ? String(visit.doctor.id) : ''); setPaymentMethod(visit.payment_method || 'cash'); setNotes(visit.notes || ''); const items = (visit.items || []).map(it => ({ service_id: it.service_id, quantity: it.quantity, name: it.service?.name || `#${it.service_id}`, price: Number(it.service?.price || it.price_at_moment), })); setSelectedSvcs(items); setLoading(false); }).catch(err => { toast?.({ kind: 'danger', title: 'Yuklash xato', msg: err.message }); setLoading(false); }); }, [open, visit?.id]); const total = selectedSvcs.reduce((s, x) => s + Number(x.price) * x.quantity, 0); const toggleSvc = (svc) => { setSelectedSvcs(prev => { const exists = prev.find(x => x.service_id === svc.id); if (exists) return prev.filter(x => x.service_id !== svc.id); return [...prev, { service_id: svc.id, quantity: 1, name: svc.name, price: Number(svc.price) }]; }); }; const setQty = (sid, q) => { const n = Math.max(1, parseInt(q) || 1); setSelectedSvcs(prev => prev.map(x => x.service_id === sid ? { ...x, quantity: n } : x)); }; const save = async () => { if (selectedSvcs.length === 0) { toast?.({ kind: 'warning', title: "Kamida 1 ta xizmat tanlang" }); return; } setSaving(true); try { const payload = { doctor_id: doctorId ? Number(doctorId) : null, doctor_clear: !doctorId, services: selectedSvcs.map(s => ({ service_id: s.service_id, quantity: s.quantity })), payment_method: paymentMethod, notes: notes || null, }; await window.API.updateVisit(visit.id, payload); toast?.({ kind: 'success', title: 'Saqlandi' }); onSaved?.(); } catch (err) { toast?.({ kind: 'danger', title: 'Saqlash xato', msg: err.message }); } finally { setSaving(false); } }; if (!open) return null; return ( }> {loading ? (
Yuklanmoqda...
) : (
{allServices.filter(s => s.is_active).map(s => { const sel = selectedSvcs.find(x => x.service_id === s.id); return ( ); })}
Jami: {uzMoneyShort(total)} so'm
{PAY_METHODS.map(m => ( ))}