119 lines
3.4 KiB
PHP
119 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\UI\Faktura;
|
|
|
|
use App\UI\BasePresenter;
|
|
use Nette\Database\Explorer;
|
|
|
|
class FakturaPresenter extends BasePresenter
|
|
{
|
|
/** @persistent */
|
|
public int $rok;
|
|
|
|
/** @persistent */
|
|
public string $mesic = '';
|
|
|
|
public function __construct(
|
|
private Explorer $kufrikExplorer
|
|
) {
|
|
parent::__construct();
|
|
$this->rok = (int) date('Y');
|
|
}
|
|
|
|
public function renderDefault(): void
|
|
{
|
|
$firmaId = $this->getUser()->getIdentity()->firma_id ?? null;
|
|
|
|
if (!$firmaId) {
|
|
$this->flashMessage('K účtu není přiřazena žádná aktivní firma.', 'danger');
|
|
$this->template->faktury = [];
|
|
$this->template->celkemSum = 0;
|
|
$this->template->neuhrazenoCount = 0;
|
|
return;
|
|
}
|
|
|
|
// Dynamické sestavení podmínek WHERE pro T-SQL
|
|
$where = ['F.FIRMA_ID = ?'];
|
|
$params = [$firmaId];
|
|
|
|
if ($this->rok) {
|
|
$where[] = 'YEAR(F.DATUM_VYSTAVENI) = ?';
|
|
$params[] = $this->rok;
|
|
}
|
|
|
|
if ($this->mesic !== '') {
|
|
$where[] = 'MONTH(F.DATUM_VYSTAVENI) = ?';
|
|
$params[] = (int) $this->mesic;
|
|
}
|
|
|
|
$whereSql = implode(' AND ', $where);
|
|
|
|
// Čisté T-SQL zaručující 100% kompatibilitu s MS SQL Serverem bez magických Nette relací
|
|
$sql = "
|
|
SELECT
|
|
F.*,
|
|
ISNULL((SELECT SUM(P.CENA) FROM dbo.POLOZKA P WHERE P.FAKTURA = F.ID), 0) AS CASTKA_CELKEM
|
|
FROM dbo.FAKTURA F
|
|
WHERE {$whereSql}
|
|
ORDER BY F.DATUM_VYSTAVENI DESC, F.ID DESC
|
|
";
|
|
|
|
// Provedeme dotaz přímo na Explorer connection
|
|
$faktury = $this->kufrikExplorer->query($sql, ...$params)->fetchAll();
|
|
|
|
// Součty pro karty
|
|
$celkemSum = 0;
|
|
$neuhrazenoCount = 0;
|
|
|
|
foreach ($faktury as $f) {
|
|
$suma = (float) ($f->CASTKA_CELKEM ?? 0);
|
|
$celkemSum += $suma;
|
|
if ($f->STAV !== 'PAID') {
|
|
$neuhrazenoCount++;
|
|
}
|
|
}
|
|
|
|
$this->template->faktury = $faktury;
|
|
$this->template->celkemSum = $celkemSum;
|
|
$this->template->neuhrazenoCount = $neuhrazenoCount;
|
|
$this->template->vybranyRok = $this->rok;
|
|
$this->template->vybranyMesic = $this->mesic;
|
|
}
|
|
|
|
public function handleUhradit(int $id): void
|
|
{
|
|
$firmaId = $this->getUser()->getIdentity()->firma_id;
|
|
$faktura = $this->kufrikExplorer->table('FAKTURA')
|
|
->where('ID', $id)
|
|
->where('FIRMA_ID', $firmaId)
|
|
->fetch();
|
|
|
|
if ($faktura) {
|
|
$novyStav = ($faktura->STAV === 'PAID') ? 'ISSUED' : 'PAID';
|
|
$faktura->update(['STAV' => $novyStav]);
|
|
|
|
$this->flashMessage(
|
|
$novyStav === 'PAID' ? 'Faktura byla označena jako zaplacená.' : 'Stav faktury byl změněn na neuhrazeno.',
|
|
'success'
|
|
);
|
|
}
|
|
|
|
$this->redirect('this');
|
|
}
|
|
|
|
public function handleDelete(int $id): void
|
|
{
|
|
$firmaId = $this->getUser()->getIdentity()->firma_id;
|
|
|
|
$deleted = $this->kufrikExplorer->table('FAKTURA')
|
|
->where('ID', $id)
|
|
->where('FIRMA_ID', $firmaId)
|
|
->delete();
|
|
|
|
if ($deleted) {
|
|
$this->flashMessage('Faktura byla smazána.', 'info');
|
|
}
|
|
|
|
$this->redirect('this');
|
|
}
|
|
} |