Kufrik/app/Model/Facade/ZakaznikFacade.php

109 lines
3.0 KiB
PHP

<?php
namespace App\Model\Facade;
use Nette\Database\Explorer;
class ZakaznikFacade
{
public function __construct(
private Explorer $kufrikExplorer
) {
}
/**
* Vrátí vyfiltrovaný seznam zákazníků
*/
public function getFiltered(string $search = '', string $zobrazit = 'aktivni'): array
{
$where = [];
$params = [];
if ($zobrazit === 'aktivni') {
$where[] = 'Z.AKTIVNI = 1';
} elseif ($zobrazit === 'neaktivni') {
$where[] = 'Z.AKTIVNI = 0';
}
if ($search !== '') {
$where[] = '(Z.PRIJMENI LIKE ? OR Z.JMENO LIKE ? OR Z.IC LIKE ? OR Z.MESTO LIKE ?)';
$term = '%' . $search . '%';
$params = array_merge($params, [$term, $term, $term, $term]);
}
$whereSql = $where ? 'WHERE ' . implode(' AND ', $where) : '';
$sql = "
SELECT Z.*
FROM dbo.ZAKAZNIK Z
{$whereSql}
ORDER BY Z.PRIJMENI ASC, Z.JMENO ASC
";
return $this->kufrikExplorer->query($sql, ...$params)->fetchAll();
}
/**
* Detail zákazníka podle ID
*/
public function getById(int $id)
{
return $this->kufrikExplorer->table('ZAKAZNIK')->where('ID', $id)->fetch();
}
/**
* Uložení / Aktualizace zákazníka
*/
public function save(array $data, ?int $id = null, int $firmaId): void
{
// Sanitizace prázdných řetězců na NULL pro volitelné položky
$values = [
'FIRMA_ID' => $firmaId,
'JMENO' => $data['JMENO'] ?: null,
'PRIJMENI' => $data['PRIJMENI'],
'ULICE' => $data['ULICE'] ?: null,
'MESTO' => $data['MESTO'] ?: null,
'PSC' => $data['PSC'] ?: null,
'IC' => $data['IC'] ?: null,
'DIC' => $data['DIC'] ?: null,
'TELEFON' => $data['TELEFON'] ?: null,
'EMAIL' => $data['EMAIL'] ?: null,
'AKTIVNI' => (int) ($data['AKTIVNI'] ?? 1),
];
if ($id) {
unset($values['FIRMA_ID']); // FIRMA_ID se při úpravě nemění
$this->kufrikExplorer->table('ZAKAZNIK')->where('ID', $id)->update($values);
} else {
$this->kufrikExplorer->table('ZAKAZNIK')->insert($values);
}
}
/**
* Přepnutí stavu Aktivní / Neaktivní
*/
public function toggleAktivni(int $id): bool
{
$zakaznik = $this->getById($id);
if (!$zakaznik) {
return false;
}
$novyStav = !$zakaznik->AKTIVNI;
// OPRAVA: Provedeme update přímo přes Selection podle sloupce 'ID'
$this->kufrikExplorer->table('ZAKAZNIK')
->where('ID', $id)
->update(['AKTIVNI' => (int) $novyStav]);
return $novyStav;
}
/**
* Smazání zákazníka
*/
public function delete(int $id): void
{
$this->kufrikExplorer->table('ZAKAZNIK')->where('ID', $id)->delete();
}
}