/** * iDoklad: nacteni vydane faktury podle ID. * * Sluzba: https://services.csbot.cz/apps/idoklad * Endpoint: GET /issued-invoices/{id} * * Nejjednodussi tvar skriptu: jedno volani a prevod odpovedi na vystupy. * * iDoklad vraci pole s velkym pocatecnim pismenem a nekdy obaluje odpoved * do `Data`. Proto `unwrap` a `pick` - nespoléhá se na presny tvar odpovedi, * protoze ten se u cizich sluzeb meni bez ohlaseni. */ export const manifest = { id: 'idoklad.get-issued-invoice', name: 'Získat vydanou fakturu', description: 'Načte vydanou fakturu z iDokladu podle jejího ID. Používá se před rozhodnutím, ' + 'co s ní dál, například jestli je už uhrazená.', inputs: [ { id: 'invoiceId', label: 'ID faktury v iDokladu', type: 'number', required: true, hint: 'Interní ID, ne číslo dokladu. Číslo dokladu umí dohledat akce Najít vydanou fakturu.', }, ], outputs: [ { id: 'invoiceId', label: 'ID faktury', type: 'number', required: true }, { id: 'documentNumber', label: 'Číslo dokladu', type: 'string', required: true }, { id: 'variableSymbol', label: 'Variabilní symbol', type: 'string', required: false }, { id: 'partnerId', label: 'ID odběratele', type: 'number', required: false }, { id: 'partnerName', label: 'Odběratel', type: 'string', required: false }, { id: 'totalWithVat', label: 'Celkem s DPH', type: 'number', required: true }, { id: 'currencyId', label: 'ID měny', type: 'number', required: false }, { id: 'dateOfIssue', label: 'Datum vystavení', type: 'date', required: true }, { id: 'dateOfMaturity', label: 'Datum splatnosti', type: 'date', required: true }, { id: 'isPaid', label: 'Je uhrazená', type: 'boolean', required: true }, ], }; export async function run(inputs, ctx) { const { unwrap, pick, text, num, bool, date, need } = ctx.util; const { body } = await ctx.http.get(`/issued-invoices/${inputs.invoiceId}`); const invoice = unwrap(body); if (!invoice || typeof invoice !== 'object') { ctx.fail(`Faktura ${inputs.invoiceId} v iDokladu neexistuje.`); } // Odberatel muze byt jak plocha hodnota, tak vnoreny objekt partnera. const partner = pick(invoice, 'partner', 'customer'); const partnerName = text(pick(invoice, 'partnerName', 'customerName')) ?? text(pick(partner, 'companyName', 'name')); return { invoiceId: need(num(pick(invoice, 'id')), 'ID faktury'), documentNumber: need(text(pick(invoice, 'documentNumber', 'number')), 'číslo dokladu'), variableSymbol: text(pick(invoice, 'variableSymbol')), partnerId: num(pick(invoice, 'partnerId')) ?? num(pick(partner, 'id')), partnerName, totalWithVat: need( num(pick(invoice, 'totalWithVat', 'totalWithVatHc', 'total')), 'celkovou částku', ), currencyId: num(pick(invoice, 'currencyId')), dateOfIssue: need(date(pick(invoice, 'dateOfIssue')), 'datum vystavení'), dateOfMaturity: need(date(pick(invoice, 'dateOfMaturity')), 'datum splatnosti'), isPaid: bool(pick(invoice, 'isPaid')), }; }