/* Účtovníček — Partneri (adresár odberateľov a dodávateľov) */ function PagePartners({ go }) { const [search, setSearch] = React.useState(''); const [openId, setOpenId] = React.useState(null); const [creating, setCreating] = React.useState(false); const [setToast, Toast] = useToast(); const partners = uctStore.partners.list(); const q = search.trim().toLowerCase(); const filtered = partners.filter(p => !q || p.name.toLowerCase().includes(q) || (p.ico || '').includes(q) || (p.city || '').toLowerCase().includes(q)); const invoicesOf = (id) => uctStore.invoices.all().filter(i => i.partnerId === id); return (

Partneri

{partners.length} {plural(partners.length, 'partner', 'partneri', 'partnerov')} · odberatelia aj dodávatelia na jednom mieste
setSearch(e.target.value)} />
{filtered.map(p => ( setOpenId(p.id)}> ))} {filtered.length === 0 && }
NázovIČODIČMestoE-mailFaktúry
{p.name}{p.demo && ukážka} {p.ico || '—'} {p.dic || '—'} {p.city || '—'} {p.email || '—'} {invoicesOf(p.id).length || '—'}

{q ? 'Nič sa nenašlo' : 'Žiadni partneri'}

{q ? 'Skús iné slovo.' : 'Pridaj prvého partnera - odberateľa alebo dodávateľa.'}
{(openId || creating) && ( { setOpenId(null); setCreating(false); }} setToast={setToast} go={go} /> )} {Toast}
); } function blankPartner() { return { name: '', ico: '', dic: '', icDph: '', street: '', city: '', zip: '', country: 'Slovensko', email: '', phone: '', iban: '', note: '' }; } /* Formulár partnera. onSaved(p) sa volá po uložení - používa ho aj faktúra pri rýchlom pridaní. */ function PartnerDrawer({ id, onClose, setToast, onSaved, go }) { const isNew = !id; const [p, setP] = React.useState(() => isNew ? blankPartner() : { ...uctStore.partners.get(id) }); const [error, setError] = React.useState(null); const [saving, setSaving] = React.useState(false); const [askConfirm, ConfirmUI] = useConfirm(); const set = (k) => (e) => setP({ ...p, [k]: e.target.value }); const invs = isNew ? [] : uctStore.invoices.all().filter(i => i.partnerId === id); const save = async () => { if (!p.name.trim()) { setError('Vyplň názov partnera.'); return; } setSaving(true); setError(null); try { const saved = isNew ? await uctStore.partners.create(p) : await uctStore.partners.update(p); setToast && setToast(isNew ? 'Partner pridaný.' : 'Partner uložený.'); onSaved ? onSaved(saved) : onClose(); } catch (e) { setError(e.message); } setSaving(false); }; const remove = async () => { if (!await askConfirm({ title: 'Vymazať partnera?', message: `${p.name} zmizne z adresára. Faktúry sa nemažú.`, confirmLabel: 'Vymazať', danger: true })) return; try { await uctStore.partners.remove(id); setToast && setToast('Partner vymazaný.'); onClose(); } catch (e) { setError(e.message); } }; return ( {!isNew && } }> setError(null)} />