63 lines
1.8 KiB
PHP
63 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Steuerkram\Models;
|
|
|
|
use Steuerkram\Database;
|
|
|
|
class Supplier
|
|
{
|
|
public static function all(): array
|
|
{
|
|
return Database::fetchAll('SELECT * FROM suppliers ORDER BY name');
|
|
}
|
|
|
|
public static function find(int $id): array|false
|
|
{
|
|
return Database::fetchOne('SELECT * FROM suppliers WHERE id = ?', [$id]);
|
|
}
|
|
|
|
public static function findByName(string $name): array|false
|
|
{
|
|
return Database::fetchOne('SELECT * FROM suppliers WHERE name = ?', [trim($name)]);
|
|
}
|
|
|
|
public static function create(string $name): int
|
|
{
|
|
Database::execute('INSERT INTO suppliers (name) VALUES (?)', [trim($name)]);
|
|
return (int)Database::lastInsertId();
|
|
}
|
|
|
|
public static function update(int $id, string $name): void
|
|
{
|
|
Database::execute('UPDATE suppliers SET name = ?, updated_at = NOW() WHERE id = ?', [trim($name), $id]);
|
|
}
|
|
|
|
public static function delete(int $id): bool
|
|
{
|
|
// Prüfen ob Lieferant noch in Belegen verwendet wird
|
|
$cnt = Database::fetchOne('SELECT COUNT(*) as cnt FROM belege WHERE supplier_id = ?', [$id]);
|
|
if ($cnt && $cnt['cnt'] > 0) {
|
|
return false;
|
|
}
|
|
Database::execute('DELETE FROM suppliers WHERE id = ?', [$id]);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gibt ID eines vorhandenen Lieferanten zurück oder legt ihn neu an.
|
|
*/
|
|
public static function findOrCreate(string $name): int
|
|
{
|
|
$name = trim($name);
|
|
if ($name === '') {
|
|
throw new \InvalidArgumentException('Lieferantenname darf nicht leer sein.');
|
|
}
|
|
$existing = self::findByName($name);
|
|
if ($existing) {
|
|
return (int)$existing['id'];
|
|
}
|
|
return self::create($name);
|
|
}
|
|
}
|