/* Úč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
| Názov | IČO | DIČ | Mesto | E-mail | Faktúry | |
{filtered.map(p => (
setOpenId(p.id)}>
| {p.name}{p.demo && ukážka} |
{p.ico || '—'} |
{p.dic || '—'} |
{p.city || '—'} |
{p.email || '—'} |
{invoicesOf(p.id).length || '—'} |
|
))}
{filtered.length === 0 && {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)} />
{ConfirmUI}
);
}