Faktúry

Faktúry

Funkcie na prácu s faktúrami. Umožňujú získanie zoznamu faktúr, detailu konkrétnej faktúry, vytvorenie novej faktúry s položkami a vygenerovanie jej PDF/HTML reprezentácie.

Zoznam faktúr

Rozhranie dodáva zoznam faktúr vystavených v systéme.

  • URL: GET /interface/{db}/eshop/v1/faktury/zoznam
  • Status: implementované
  • Bearer: áno

Parametre (Query string)

  • cislo=X (voliteľný) - Vyhľadá faktúru s konkrétnym číslom (presná zhoda).
  • firma_id=X (voliteľný) - Filtruje faktúry podľa ID firmy (firma_id1).
  • osoba_id=X (voliteľný) - Filtruje faktúry podľa ID osoby (osoba_id).
  • offset=X (voliteľný) - Offset pre stránkovanie (predvolené 0).
  • limit=X (voliteľný) - Limit počtu záznamov (predvolené 100).

Príklad odpovede

{
  "items": [
    {
      "faktura_id": 124,
      "datum": "2026-05-21T00:00:00.000Z",
      "datum_splatnosti": "2026-06-04T00:00:00.000Z",
      "datum_dodania": "2026-05-21T00:00:00.000Z",
      "cislo": "FV260001",
      "rok": 2026,
      "pcrok": 1,
      "typ_id": 1,
      "firma_id": 12,
      "osoba_id": null,
      "cena": 1080.0,
      "cena_zaklad": 900.0,
      "cena_dph": 180.0,
      "zrusena": false,
      "uhradena": true,
      "datum_zaplatene": "2026-05-21T00:00:00.000Z",
      "poznamka": "Faktúra za programátorské práce",
      "spis_id": 45,
      "objednavka_id": 89
    }
  ],
  "paging": {
    "offset": 0,
    "limit": 100,
    "maximum": 1
  }
}

Detail faktúry

Rozhranie dodáva detail konkrétnej faktúry vrátane jej položiek.

  • URL: GET /interface/{db}/eshop/v1/faktury/detail
  • Status: implementované
  • Bearer: áno

Parametre (Query string)

  • id=X (povinný) - ID faktúry (faktura_id).

Príklad odpovede

{
  "faktura_id": 124,
  "datum": "2026-05-21T00:00:00.000Z",
  "datum_splatnosti": "2026-06-04T00:00:00.000Z",
  "datum_dodania": "2026-05-21T00:00:00.000Z",
  "cislo": "FV260001",
  "rok": 2026,
  "pcrok": 1,
  "typ_id": 1,
  "firma_id": 12,
  "osoba_id": null,
  "cena": 1080.0,
  "cena_zaklad": 900.0,
  "cena_dph": 180.0,
  "zrusena": false,
  "uhradena": true,
  "datum_zaplatene": "2026-05-21T00:00:00.000Z",
  "poznamka": "Faktúra za programátorské práce",
  "spis_id": 45,
  "objednavka_id": 89,
  "items": [
    {
      "pc": 1,
      "karta_id": null,
      "nazov": "Analýza a návrh",
      "mj": "hod",
      "mnozstvo": 2,
      "cenamj": 50,
      "cenazlava": 50,
      "cenamjsum": 100,
      "zlava": 0,
      "dph": 20,
      "dphmj": 10,
      "dphsum": 20,
      "sumcena": 120,
      "sumcenamj": 60
    },
    {
      "pc": 2,
      "karta_id": null,
      "nazov": "Implementácia",
      "mj": "hod",
      "mnozstvo": 10,
      "cenamj": 80,
      "cenazlava": 80,
      "cenamjsum": 800,
      "zlava": 0,
      "dph": 20,
      "dphmj": 16,
      "dphsum": 160,
      "sumcena": 960,
      "sumcenamj": 96
    }
  ]
}

Vytvorenie novej faktúry

Rozhranie vytvorí novú faktúru s položkami v databáze.

Súvisiace skladové operácie

Ak položka faktúry obsahuje karta_id (id skladovej karty), systém na pozadí vykoná nasledujúce operácie:

  1. Doplnenie údajov: Parametre nazov, mj a dph sa automaticky načítajú z globálnej skladovej karty (obch_skarta).
  2. Generovanie výdajky: Automaticky sa vygeneruje skladový pohyb typu Výdajka (druh_id = 2, pohybtyp_id = 2 - Výdaj) na hlavnom sklade (sklad_id = 1).
  3. Párovanie skladovej karty: Ak pre danú kartu neexistuje priradenie na konkrétnom sklade v tabuľke obch_sklad_karta, automaticky sa vytvorí nové priradenie s počiatočným množstvom 0.
  4. Aktualizácia skladových zásob:
    • Odpočíta vydané množstvo a upraví reálny aj hypotetický stav zásob (mnozstvo, mnozstvo_hypot) v tabuľke obch_sklad_karta pre daný sklad.
    • Prepočíta a aktualizuje globálny sumárny stav zásob (mnozstvo, mnozstvo_hypot) na hlavnej skladovej karte v tabuľke obch_skarta ako sumu množstiev zo všetkých priradených skladov.
  5. Zápis väzieb: Prepojí riadky faktúry (obch_fakturap) s vygenerovaným skladovým pohybom (pohyb_id) a jeho položkou (pohybpolozka_id).
  • URL: POST /interface/{db}/eshop/v1/faktury/vytvor
  • Status: implementované
  • Bearer: áno

Parametre (Request Body JSON)

  • firma_id (int, nepovinný*) - ID odberateľskej firmy.
  • osoba_id (int, nepovinný*) - ID odberateľskej osoby.
    • * Poznámka: Musí byť zadané aspoň jedno z polí firma_id alebo osoba_id s hodnotou väčšou ako 0.
  • objednavka_id (int, nepovinný) - ID súvisiacej objednávky.
  • datum (string YYYY-MM-DD, nepovinný) - Dátum vystavenia faktúry.
  • datum_splatnosti (string YYYY-MM-DD, nepovinný) - Dátum splatnosti faktúry.
  • datum_dodania (string YYYY-MM-DD, nepovinný) - Dátum dodania (datum_dph).
  • spis_id (int, nepovinný) - ID spisu v systéme.
  • popis alebo poznamka (string, nepovinný) - Popis/poznámka k faktúre. Ak sú zadané obe, uprednostní sa popis.
  • uhradene (boolean, nepovinný, predvolené false) - Ak je true, faktúra sa automaticky označí ako uhradená a nastaví sa jej dátum zaplatenia.
  • items (array, nepovinný) - Zoznam položiek faktúry. Každá položka môže obsahovať:
    • karta_id (int, nepovinný) - ID skladovej karty. Ak je zadaná, automaticky doplní chýbajúce parametre (nazov, mj, dph) zo skladovej karty. Karta nesmie byť vymazaná (zrusena).
    • nazov (string, povinný ak nie je zadané karta_id) - Názov položky.
    • mj (string, povinný ak nie je zadané karta_id) - Merná jednotka (napr. "ks", "hod").
    • mnozstvo (float, povinný, predvolené 1 pri výpočte) - Množstvo.
    • cena (float, povinný) - Jednotková cena bez DPH.
    • zlava (float, nepovinný, predvolené 0) - Zľava v percentách (0 - 100).
    • dph (float, povinný ak nie je zadané karta_id) - Sadzba DPH v % (napr. 23).

Príklady požiadaviek (Request payloads)

1. Čisto textová faktúra (bez väzby na sklad)

Pri tejto faktúre nie je definované karta_id. Pre každú položku je nutné zaslať textový nazov, mernú jednotku mj a sadzbu dph.

{
  "firma_id": 12,
  "popis": "Faktúra za programátorské práce",
  "uhradene": true,
  "items": [
    {
      "nazov": "Analýza a návrh",
      "mnozstvo": 2,
      "cena": 50,
      "mj": "hod",
      "dph": 23
    },
    {
      "nazov": "Implementácia",
      "mnozstvo": 10,
      "cena": 80,
      "mj": "hod",
      "dph": 23
    }
  ]
}

2. Faktúra so skladovou kartou (predvolený sklad)

Ak je definované karta_id, hodnoty nazov, mj a dph sa automaticky doplnia zo skladovej karty. Systém automaticky vygeneruje výdajku a odpočíta tovar z hlavného skladu (sklad_id = 1).

{
  "firma_id": 12,
  "popis": "Faktúra s odpisom tovaru z hlavného skladu",
  "items": [
    {
      "karta_id": 15,
      "mnozstvo": 5,
      "cena": 12.50
    }
  ]
}

3. Faktúra so skladovými kartami z rôznych skladov (multi-warehouse)

Každá položka môže definovať parameter sklad_id, z ktorého sa má tovar odobrať. Systém automaticky zoskupí položky a pre každý unikátny sklad vygeneruje samostatný skladový pohyb (výdajku).

{
  "firma_id": 12,
  "popis": "Faktúra s odpisom tovaru z viacerých skladov",
  "items": [
    {
      "karta_id": 15,
      "sklad_id": 1,
      "mnozstvo": 3,
      "cena": 12.50
    },
    {
      "karta_id": 16,
      "sklad_id": 2,
      "mnozstvo": 2,
      "cena": 24.00
    }
  ]
}

Príklad odpovede

{
  "id": 124
}

Generovanie PDF faktúry

Rozhranie vygeneruje vizuálnu reprezentáciu faktúry (HTML alebo PDF) na základe preddefinovanej šablóny v systéme a vyplnených dát faktúry.

  • URL: POST /interface/{db}/eshop/v1/faktury/pdf
  • Status: implementované
  • Bearer: áno

Parametre (Request Body JSON)

  • id alebo id_faktura (int, povinný) - ID faktúry, pre ktorú sa má dokument generovať.
  • format (string, nepovinný) - Požadovaný formát odpovede:
    • pdf (alebo ak parameter chýba) - Vráti priamo binárne PDF (Content-Type: application/pdf).
    • json - Vráti JSON objekt s base64 zakódovaným PDF v parametri pdf.
    • html - Vráti vygenerovaný HTML dokument s Content-Type: text/html (vhodné pre náhľady).
  • template (string, nepovinný) - Názov šablóny v systéme (globálne reporty). Ak nie je uvedené, tak sa použije predvolená šablóna faktura_optivus.

Príklad požiadavky (JSON formát)

{
  "id": 124,
  "format": "json"
}

Príklad odpovede pre JSON formát

{
  "pdf": "JVBERi0xLjQKJdPr6gok..."
}

Príklad požiadavky (PDF formát)

{
  "id": 124,
  "format": "pdf"
}

Odpoveďou je priamo binárny tok dát PDF dokumentu s hlavičkou: Content-Type: application/pdf