diff --git a/app/Model/Facade/FakturaFacade.php b/app/Model/Facade/FakturaFacade.php index 1fb7421..72155e4 100644 --- a/app/Model/Facade/FakturaFacade.php +++ b/app/Model/Facade/FakturaFacade.php @@ -124,6 +124,49 @@ class FakturaFacade ", $fakturaId)->fetchAll(); } + /** + * Názvy položek pro našeptávač. Jednotka a cena jsou z posledního použití, + * pořadí je podle počtu výskytů na fakturách za poslední rok. + * + * @return list + */ + public function getKatalogPolozek(): array + { + $od = (new \DateTimeImmutable('today'))->modify('-1 year')->format('Y-m-d'); + $rows = $this->kufrikExplorer->query(" + SELECT katalog.NAZEV, katalog.JEDNOTKA, katalog.CENA_JEDNOTKA + FROM ( + SELECT + P.NAZEV, + P.JEDNOTKA, + P.CENA_JEDNOTKA, + ROW_NUMBER() OVER (PARTITION BY P.NAZEV ORDER BY P.ID DESC) AS rn + FROM dbo.POLOZKA P + WHERE P.NAZEV IS NOT NULL AND LTRIM(RTRIM(P.NAZEV)) <> '' + ) AS katalog + LEFT JOIN ( + SELECT P.NAZEV, COUNT(*) AS POCET + FROM dbo.POLOZKA P + INNER JOIN dbo.FAKTURA F ON F.ID = P.FAKTURA + WHERE F.DATUM_VYSTAVENI >= ? + GROUP BY P.NAZEV + ) AS pouziti ON pouziti.NAZEV = katalog.NAZEV + WHERE katalog.rn = 1 + ORDER BY ISNULL(pouziti.POCET, 0) DESC, katalog.NAZEV ASC + ", $od)->fetchAll(); + + $katalog = []; + foreach ($rows as $row) { + $katalog[] = [ + 'nazev' => (string) $row->NAZEV, + 'jednotka' => trim((string) ($row->JEDNOTKA ?? '')), + 'cena' => round((float) $row->CENA_JEDNOTKA, 2), + ]; + } + + return $katalog; + } + /** * Maska, období číslování a výchozí splatnost uložené u firmy. * diff --git a/app/UI/@layout.latte b/app/UI/@layout.latte index f6f7b7c..7ef271d 100644 --- a/app/UI/@layout.latte +++ b/app/UI/@layout.latte @@ -25,7 +25,7 @@ {* naše vlastní styly *} - + diff --git a/app/UI/FakturaEdit/FakturaEditPresenter.php b/app/UI/FakturaEdit/FakturaEditPresenter.php index bdbbc2c..5000914 100644 --- a/app/UI/FakturaEdit/FakturaEditPresenter.php +++ b/app/UI/FakturaEdit/FakturaEditPresenter.php @@ -109,6 +109,10 @@ class FakturaEditPresenter extends BasePresenter } } + $this->template->katalogPolozekJson = json_encode( + $this->fakturaFacade->getKatalogPolozek(), + JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_THROW_ON_ERROR + ); $this->template->polozky = $polozky; $this->template->platby = $platby; $this->template->celkemFaktury = $celkem; @@ -135,16 +139,28 @@ class FakturaEditPresenter extends BasePresenter { $form = new Form; - // 1. Načteme všechny zákazníky (parametr 'vse' projde bez filtru AKTIVNI) - $zakaznici = $this->zakaznikFacade->getFiltered('', 'vse'); + $zakaznici = $this->zakaznikFacade->getFiltered('', 'aktivni'); + if ($this->id) { + $faktura = $this->fakturaFacade->getById($this->id); + $zakaznikId = $faktura ? (int) $faktura->ZAKAZNIK : 0; + $uzJeVSeznamu = false; + foreach ($zakaznici as $z) { + if ((int) $z->ID === $zakaznikId) { + $uzJeVSeznamu = true; + break; + } + } + if ($zakaznikId && !$uzJeVSeznamu) { + $stavajici = $this->zakaznikFacade->getById($zakaznikId); + if ($stavajici) { + $zakaznici[] = $stavajici; + } + } + } + $zakazniciPairs = []; foreach ($zakaznici as $z) { - $nazev = trim(($z->PRIJMENI ?? '') . ' ' . ($z->JMENO ?? '')); - if (!empty($z->IC)) { - $nazev .= " (IČ: {$z->IC})"; - } - // Kličem musí být int - $zakazniciPairs[(int) $z->ID] = $nazev; + $zakazniciPairs[(int) $z->ID] = $this->nazevZakaznika($z); } $form->addSelect('ZAKAZNIK_ID', 'Odběratel:', $zakazniciPairs) @@ -184,6 +200,23 @@ class FakturaEditPresenter extends BasePresenter return $form; } + private function nazevZakaznika(object $zakaznik): string + { + $nazev = trim(($zakaznik->PRIJMENI ?? '') . ' ' . ($zakaznik->JMENO ?? '')); + $doplnek = []; + if (!empty($zakaznik->MESTO)) { + $doplnek[] = (string) $zakaznik->MESTO; + } + if (!empty($zakaznik->IC)) { + $doplnek[] = 'IČ: ' . $zakaznik->IC; + } + if ($doplnek) { + $nazev .= ' (' . implode(', ', $doplnek) . ')'; + } + + return $nazev; + } + public function fakturaFormSucceeded(Form $form, \stdClass $data): void { $firmaId = $this->getUser()->getIdentity()->firma_id; diff --git a/app/UI/FakturaEdit/edit.latte b/app/UI/FakturaEdit/edit.latte index 7f9a676..4cf6229 100644 --- a/app/UI/FakturaEdit/edit.latte +++ b/app/UI/FakturaEdit/edit.latte @@ -27,7 +27,7 @@
- +
@@ -79,7 +79,7 @@ - + @@ -209,6 +209,8 @@ document.getElementById('edit-platba-splatnost').addEventListener('click', funct }); + + {syntax off}