Polozky dokladu se najdou pod obema jmeny

iDoklad ceka v tele `IssuedInvoiceItems`, ale prevod je casto pojmenuje
`items` podle toho, jak se jmenuji ve zdrojove objednavce. Kontrola trvala
na `items`, telo se ale posilalo tak, jak prislo - prevod s PascalCase
jmeny by tedy neprosel kontrolou, a prevod s malymi pismeny by prosel
a doklad by v iDokladu vznikl bez radku.

Ted se polozky hledaji pod obema jmeny a do tela se doplni pod tim, ktere
ceka iDoklad.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-08-20 08:53:24 +02:00
co-authored by Claude Opus 5
parent 13c0c03ed4
commit c62902bfb6
+14 -2
View File
@@ -56,7 +56,14 @@ export async function run(inputs, ctx) {
const { unwrap, pick, text, num, need } = ctx.util;
const payload = inputs.payload;
const items = Array.isArray(payload.items) ? payload.items : [];
/*
* Polozky se hledaji pod obema jmeny. iDoklad je v tele ceka jako
* `IssuedInvoiceItems`, ale prevod je casto pojmenuje `items` podle toho,
* jak se jmenuji ve zdrojove objednavce. Trvat na jednom z nich by znamenalo,
* ze prevod projde kontrolou a doklad prijde do iDokladu bez radku.
*/
const rawItems = pick(payload, 'IssuedInvoiceItems', 'items');
const items = Array.isArray(rawItems) ? rawItems : [];
if ((inputs.requireItems ?? true) && items.length === 0) {
ctx.fail('Tělo dokladu neobsahuje žádné položky. Zkontrolujte pravidla transformace.');
}
@@ -70,7 +77,12 @@ export async function run(inputs, ctx) {
ctx.retry('iDoklad nevrátil předvyplněný vzor faktury.');
}
const body = { ...defaults, ...payload };
/*
* Vzor nese povinna pole, prevod prepise ta, kterym rozumime. Polozky se
* doplni pod jmenem, ktere ceka iDoklad, at uz prisly pojmenovane jakkoliv.
*/
const body = { ...defaults, ...payload, IssuedInvoiceItems: items };
delete body.items;
const response = await ctx.http.post('/issued-invoices', body);
const invoice = unwrap(response.body);