Rechnungsdaten - 2. Teil

This commit is contained in:
kknobloch 2025-04-22 21:51:25 +02:00
parent b294ceeec8
commit 1d7253f903
4 changed files with 85 additions and 45 deletions

View File

@ -8,7 +8,6 @@ class HotelModel {
private PDO $db;
private AnschriftModel $mdlAnschr;
private $allowedFields = [
'hotelname', 'hotelnummer', 'provsatz', 'rg_hotelname', 'rg_interval',
'rg_vondatum', 'rg_bisdatum', 'rg_laufdatum', 'rg_ustid', 'rg_ustfrei',
@ -42,6 +41,16 @@ class HotelModel {
public function updateHotel($data) {
$status = $data['status'] ?? 'inaktiv';
$data['status'] = $status;
$intern = $data['intern'] ?? 0;
$data['intern'] = $intern;
$nichtanzeigen = $data['nichtanzeigen'] ?? 0;
$data['nichtanzeigen'] = $nichtanzeigen;
$fieldsToUpdate = array_intersect_key($data, array_flip($this->allowedFields));
if (empty($fieldsToUpdate)) {
return false;
@ -97,12 +106,12 @@ class HotelModel {
// 1. Anschrift aktualisieren
$subid = $this->mdlAnschr->update($data['anschriftid'], $data, false);
if(empty($subid) == false) {
if (empty($subid) == false) {
$data['anschriftid'] = $subid;
}
// 1.1 Rechungsanschrift aktualisieren
$subidRg = $this->mdlAnschr->update($data['rg_anschriftid'], $data, true);
if(empty($subidRg) == false) {
if (empty($subidRg) == false) {
$data['rg_anschriftid'] = $subidRg;
}
@ -110,13 +119,11 @@ class HotelModel {
BankverbindungModel::update($data['bankid'], $data);
// 3. Hotel aktualisieren
$fieldsToUpdate = array_intersect_key($data, array_flip($this->allowedFields));
if (empty($fieldsToUpdate)) {
if ($this->updateHotel($data) == false) {
$this->db->rollBack();
return false;
}
$this->updateHotel($data);
$this->db->commit();
return true;
} catch (Exception $e) {
@ -124,8 +131,4 @@ class HotelModel {
return false;
}
}
}

View File

@ -1,6 +1,6 @@
<div class="container">
<div class="row mb-3">
<div class="col-md-2">
<div class="col-md-1">
<label for="hotelnummer" class="form-label">Hotelnummer</label>
<input type="number" class="form-control" id="hotelnummer" name="hotelnummer" min="101"
value="<?= htmlspecialchars($hotel['hotelnummer'] ?? '') ?>" required>
@ -10,23 +10,31 @@
<input type="text" class="form-control" id="hotelname" name="hotelname"
value="<?= htmlspecialchars($hotel['hotelname'] ?? '') ?>" required>
</div>
<div class="col-md-2">
<div class="col-md-1">
<label for="intern" class="form-label">Intern</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="intern" name="intern"
<?= ($hotel['intern'] ?? '') === '1' ? 'checked' : '' ?>>
<label class="form-check-label" for="intern">Eigenes Hotel</label>
<input class="form-check-input" type="checkbox" id="intern" name="intern" value="1"
<?= ($hotel['intern'] ?? '') === 1 ? 'checked' : '' ?>>
<label class="form-check-label" for="intern">Ja</label>
</div>
</div>
<div class="col-md-2">
<div class="col-md-1">
<label for="status" class="form-label">Status</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="status" name="status"
<input class="form-check-input" type="checkbox" id="status" name="status" value="aktiv"
<?= ($hotel['status'] ?? '') === 'aktiv' ? 'checked' : '' ?>>
<label class="form-check-label" for="status">Aktiv</label>
</div>
</div>
<div class="col-md-2">
<label for="status" class="form-label">Rechnungen</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="nichtanzeigen" name="nichtanzeigen" value="1"
<?= ($hotel['nichtanzeigen'] ?? '') === 1 ? 'checked' : '' ?>>
<label class="form-check-label" for="nichtanzeigen">herunterladen</label>
</div>
</div>
<div class="col-md-3">
<label for="betreuer" class="form-label">Betreuer</label>
<select class="form-select" name="betreuer" id="betreuer">
<?php

View File

@ -1,6 +1,6 @@
<div class="container">
<h5>Rechnungsanschrift</h5>
<div class="row">
<div class="row mb-3">
<div class="col">
<label for="land" class="form-label">Abweichender Hotelname</label>
<input type="text" class="form-control" name="rg_hotelname" value="<?= htmlspecialchars($hotel['rg_hotelname'] ?? '') ?>">
@ -28,15 +28,15 @@
<div class="row mb-3">
<div class="col-md-4">
<label for="ansprechpartner" class="form-label">Ansprechpartner</label>
<input type="text" class="form-control" name="rgansprechpartner" value="<?= htmlspecialchars($rganschrift['ansprechpartner'] ?? '') ?>">
<input type="text" class="form-control" name="rg_ansprechpartner" value="<?= htmlspecialchars($rganschrift['ansprechpartner'] ?? '') ?>">
</div>
<div class="col-md-4">
<label for="telefon" class="form-label">Telefon</label>
<input type="text" class="form-control" name="rgtelefon" value="<?= htmlspecialchars($rganschrift['telefon'] ?? '') ?>">
<input type="text" class="form-control" name="rg_telefon" value="<?= htmlspecialchars($rganschrift['telefon'] ?? '') ?>">
</div>
<div class="col-md-4">
<label for="email" class="form-label">E-Mail</label>
<input type="email" class="form-control" name="rgemail" value="<?= htmlspecialchars($rganschrift['email'] ?? '') ?>">
<input type="email" class="form-control" name="rg_email" value="<?= htmlspecialchars($rganschrift['email'] ?? '') ?>">
</div>
</div>
<h5>Umsatzsteuer</h5>
@ -84,26 +84,35 @@
</div>
<h5>Rechnungslauf</h5>
<div class="row align-items-end mb-3">
<!-- Rechnungsintervall -->
<div class="col-md-6">
<label class="form-label d-block">Rechnungsintervall</label>
<div class="btn-group w-100" role="group" aria-label="Rechnungsintervall">
<input type="radio" class="btn-check" name="rg_interval" id="interval0" value="monatlich" autocomplete="off" <?= ($hotel['rg_interval'] ?? '') == 'monatlich' ? 'checked' : '' ?>>
<label class="btn btn-outline-primary" for="interval0">monatlich</label>
<!--
<h5>Bankverbindung für Rechnung</h5>
<div class="row mb-3">
<div class="col-md-3">
<label for="bank" class="form-label">Bank</label>
<input type="text" class="form-control" name="bank" value="<?= htmlspecialchars($rgbankverbindung['bank'] ?? '') ?>">
<input type="radio" class="btn-check" name="rg_interval" id="interval1" value="quartal" autocomplete="off" <?= ($hotel['rg_interval'] ?? '') == 'quartal' ? 'checked' : '' ?>>
<label class="btn btn-outline-primary" for="interval1">pro Quartal</label>
<input type="radio" class="btn-check" name="rg_interval" id="interval2" value="taegig14" autocomplete="off" <?= ($hotel['rg_interval'] ?? '') == 'taegig14' ? 'checked' : '' ?>>
<label class="btn btn-outline-primary" for="interval2">14 t&auml;gig</label>
<input type="radio" class="btn-check" name="rg_interval" id="interval3" value="adhoc" autocomplete="off" <?= ($hotel['rg_interval'] ?? '') == 'adhoc' ? 'checked' : '' ?>>
<label class="btn btn-outline-primary" for="interval3">Ad hoc</label>
</div>
</div>
<div class="col-md-3">
<label for="iban" class="form-label">IBAN</label>
<input type="text" class="form-control" name="iban" value="<?= htmlspecialchars($rgbankverbindung['iban'] ?? '') ?>">
<div class="col-md-1">
<label for="vorzeitig" class="form-label">Rechnungstellung</label>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="status" name="status" value="aktiv"
<?= ($hotel['status'] ?? '') === 'aktiv' ? 'checked' : '' ?>>
<label class="form-check-label" for="status">vorzeitig</label>
</div>
</div>
<div class="col-md-3">
<label for="bic" class="form-label">BIC</label>
<input type="text" class="form-control" name="bic" value="<?= htmlspecialchars($rgbankverbindung['bic'] ?? '') ?>">
</div>
<div class="col-md-3">
<label for="inhaber" class="form-label">Kontoinhaber</label>
<input type="text" class="form-control" name="inhaber" value="<?= htmlspecialchars($rgbankverbindung['inhaber'] ?? '') ?>">
</div>
</div>
-->
</div>
</div>

View File

@ -30,9 +30,11 @@ $username = $_SESSION['user'] ?? 'Gast';
<html lang="de">
<head>
<meta charset="UTF-8">
<title><?= $pageTitle ?? "Seite" ?> | Meine Anwendung</title>
<title><?= $pageTitle ?? "Seite" ?> | VWL Support-Tool</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
<!-- Bootstrap JS (für Tabs) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<link href="/assets/css/vwl.css" rel="stylesheet">
@ -40,7 +42,7 @@ $username = $_SESSION['user'] ?? 'Gast';
<body>
<div class="bg-primary text-white py-2 px-4 d-flex justify-content-between align-items-center">
<div><strong>Meine Anwendung</strong></div>
<div><strong>VWL Support-Tool</strong></div>
<div class="text-center flex-grow-1"><?= htmlspecialchars($pageTitle) ?? '' ?></div>
<div>Angemeldet als: <?= htmlspecialchars($username) ?></div>
</div>
@ -61,13 +63,31 @@ $username = $_SESSION['user'] ?? 'Gast';
'einstellungen' => 'Einstellungen',
'direct:/logout.php' => 'Logout'
];
$icons = [
'home' => 'bi-house',
'gutscheinsuche' => 'bi-search',
'hotels' => 'bi-building',
'rechnungen' => 'bi-file-earmark-text',
'partner' => 'bi-people',
'auswertungen' => 'bi-graph-up',
'postversand' => 'bi-envelope',
'einzahlungen' => 'bi-cash-coin',
'einstellungen' => 'bi-gear',
'direct:/logout.php' => 'bi-box-arrow-right'
];
foreach ($menu as $key => $value) {
if (str_starts_with($key, 'direct:')) {
$link = substr($key, 7);
$iconKey = $key;
} else {
$link = "?page=$key";
$iconKey = $key;
}
echo "<li class='nav-item'><a class='nav-link' href='$link'>$value</a></li>";
$iconClass = $icons[$iconKey] ?? 'bi-circle'; // fallback icon
echo "<li class='nav-item'>
<a class='nav-link' href='$link'><i class='bi $iconClass me-1'></i>$value</a>
</li>";
}
?>
</ul>