Steuerkram/src/Models/Supplier.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);
}
}