109 lines
3.0 KiB
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();
|
|
}
|
|
} |