- Vorlagenbuchung verknüpft jetzt korrekt die Bankbuchung (bank_tx_id) - Buchungs-Redirect bleibt nach Vorlagenbuchung auf dem Beleg - Zahldatum (Wertstellung der Bankbuchung) im Vorlagendialog neben Belegdatum - USt-Felder im Vorlagendialog als Text (nicht mehr als editierbare Inputs) - Standard-Lieferant pro Vorlage speicherbar; wird im Buchungsdialog vorbelegt - Migration 081: spalte standard_lieferant in buchungsvorlagen
132 lines
4.3 KiB
PHP
132 lines
4.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Steuerkram\Models;
|
|
|
|
use Steuerkram\Database;
|
|
|
|
class Buchungsvorlage
|
|
{
|
|
public static function findAll(): array
|
|
{
|
|
return Database::fetchAll(
|
|
'SELECT * FROM buchungsvorlagen WHERE aktiv = 1 ORDER BY sort_order, name'
|
|
);
|
|
}
|
|
|
|
public static function findAllIncludingInactive(): array
|
|
{
|
|
return Database::fetchAll(
|
|
'SELECT * FROM buchungsvorlagen ORDER BY sort_order, name'
|
|
);
|
|
}
|
|
|
|
public static function find(int $id): array|false
|
|
{
|
|
return Database::fetchOne('SELECT * FROM buchungsvorlagen WHERE id = ?', [$id]);
|
|
}
|
|
|
|
public static function getFelder(int $vorlageId): array
|
|
{
|
|
return Database::fetchAll(
|
|
'SELECT * FROM buchungsvorlage_felder
|
|
WHERE vorlage_id = ?
|
|
ORDER BY gruppe_nr, sort_order',
|
|
[$vorlageId]
|
|
);
|
|
}
|
|
|
|
public static function getRegeln(int $vorlageId): array
|
|
{
|
|
$rows = Database::fetchAll(
|
|
'SELECT * FROM buchungsvorlage_regeln
|
|
WHERE vorlage_id = ?
|
|
ORDER BY sort_order',
|
|
[$vorlageId]
|
|
);
|
|
foreach ($rows as &$row) {
|
|
$row['buchungen'] = json_decode($row['buchungen'], true) ?? [];
|
|
}
|
|
return $rows;
|
|
}
|
|
|
|
public static function create(array $data): int
|
|
{
|
|
Database::execute(
|
|
'INSERT INTO buchungsvorlagen (name, beschreibung, standard_lieferant, aktiv, sort_order)
|
|
VALUES (?, ?, ?, ?, ?)',
|
|
[
|
|
trim($data['name']),
|
|
$data['beschreibung'] ?? null,
|
|
$data['standard_lieferant'] !== '' ? trim($data['standard_lieferant'] ?? '') : null,
|
|
isset($data['aktiv']) ? (int)$data['aktiv'] : 1,
|
|
(int)($data['sort_order'] ?? 0),
|
|
]
|
|
);
|
|
return (int)Database::lastInsertId();
|
|
}
|
|
|
|
public static function update(int $id, array $data): void
|
|
{
|
|
Database::execute(
|
|
'UPDATE buchungsvorlagen
|
|
SET name = ?, beschreibung = ?, standard_lieferant = ?, aktiv = ?, sort_order = ?
|
|
WHERE id = ?',
|
|
[
|
|
trim($data['name']),
|
|
$data['beschreibung'] ?? null,
|
|
$data['standard_lieferant'] !== '' ? trim($data['standard_lieferant'] ?? '') : null,
|
|
isset($data['aktiv']) ? (int)$data['aktiv'] : 1,
|
|
(int)($data['sort_order'] ?? 0),
|
|
$id,
|
|
]
|
|
);
|
|
}
|
|
|
|
public static function delete(int $id): void
|
|
{
|
|
Database::execute('DELETE FROM buchungsvorlagen WHERE id = ?', [$id]);
|
|
}
|
|
|
|
public static function saveFelderForVorlage(int $vorlageId, array $felder): void
|
|
{
|
|
Database::execute('DELETE FROM buchungsvorlage_felder WHERE vorlage_id = ?', [$vorlageId]);
|
|
foreach ($felder as $i => $f) {
|
|
Database::execute(
|
|
'INSERT INTO buchungsvorlage_felder
|
|
(vorlage_id, gruppe_nr, sort_order, feldname, label, typ, ust_satz, meta_key)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[
|
|
$vorlageId,
|
|
(int)($f['gruppe_nr'] ?? 1),
|
|
(int)($f['sort_order'] ?? ($i * 10)),
|
|
trim($f['feldname']),
|
|
trim($f['label']),
|
|
$f['typ'],
|
|
isset($f['ust_satz']) && $f['ust_satz'] !== '' ? (float)$f['ust_satz'] : null,
|
|
$f['meta_key'] !== '' ? $f['meta_key'] : null,
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
public static function saveRegelnForVorlage(int $vorlageId, array $regeln): void
|
|
{
|
|
Database::execute('DELETE FROM buchungsvorlage_regeln WHERE vorlage_id = ?', [$vorlageId]);
|
|
foreach ($regeln as $i => $r) {
|
|
Database::execute(
|
|
'INSERT INTO buchungsvorlage_regeln
|
|
(vorlage_id, sort_order, bedingung_feld, bedingung_op, buchungen)
|
|
VALUES (?, ?, ?, ?, ?)',
|
|
[
|
|
$vorlageId,
|
|
(int)($r['sort_order'] ?? ($i * 10)),
|
|
trim($r['bedingung_feld']),
|
|
$r['bedingung_op'] ?? 'neq_zero',
|
|
json_encode($r['buchungen'] ?? []),
|
|
]
|
|
);
|
|
}
|
|
}
|
|
}
|