Bestellungen - Teil 1
This commit is contained in:
parent
1d7253f903
commit
a8c1cc8948
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
return [
|
||||
'host' => '127.0.0.1',
|
||||
'dbname' => 'vwl',
|
||||
@ -7,7 +9,7 @@ return [
|
||||
'password' => '',
|
||||
'charset' => 'utf8mb4'
|
||||
];
|
||||
/*
|
||||
*/
|
||||
return [
|
||||
'host' => '148.251.96.181',
|
||||
'dbname' => 'c1vwl',
|
||||
@ -15,4 +17,3 @@ return [
|
||||
'password' => 'SommerNacht!2025',
|
||||
'charset' => 'utf8mb4'
|
||||
];
|
||||
*/
|
||||
@ -22,4 +22,19 @@ class MainController {
|
||||
require '../src/view/hotel_edit.php';
|
||||
require '../src/view/templates/footer.php';
|
||||
}
|
||||
|
||||
public function bestellungen() {
|
||||
$pageTitle = "Bestellungen";
|
||||
require '../src/view/templates/header.php';
|
||||
require '../src/view/bestellungen.php';
|
||||
require '../src/view/templates/footer.php';
|
||||
}
|
||||
|
||||
public function bestellung_edit() {
|
||||
$pageTitle = "Bestellungen";
|
||||
require '../src/view/templates/header.php';
|
||||
require '../src/view/bestellung_edit.php';
|
||||
require '../src/view/templates/footer.php';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
46
src/model/BestellungModel.php
Normal file
46
src/model/BestellungModel.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../core/Database.php';
|
||||
|
||||
class BestellungModel {
|
||||
|
||||
private PDO $db;
|
||||
private $allowedFields = [
|
||||
'ordernumber', 'bestellung_status', 'zahlung_status', 'lieferung_status', 'datum',
|
||||
'region', 'land', 'plz', 'ort', 'strasse',
|
||||
'anrede', 'vorname', 'nachname', 'email', 'telefon',
|
||||
'versandkosten', 'steuersatz', 'synckey', 'versandart', 'gutschein_status'
|
||||
];
|
||||
|
||||
public function __construct() {
|
||||
$this->db = Database::connect();
|
||||
}
|
||||
|
||||
public function getBestellungById($id) {
|
||||
$stmt = $this->db->prepare("SELECT * FROM vwl_bestellung WHERE id = ?");
|
||||
$stmt->execute([$id]);
|
||||
return $stmt->fetch();
|
||||
}
|
||||
|
||||
public function updateBestellung($data) {
|
||||
|
||||
$fieldsToUpdate = array_intersect_key($data, array_flip($this->allowedFields));
|
||||
if (empty($fieldsToUpdate)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Baue SQL-Statement
|
||||
$setParts = [];
|
||||
foreach ($fieldsToUpdate as $field => $value) {
|
||||
$setParts[] = "`$field` = :$field";
|
||||
}
|
||||
$sql = "UPDATE vwl_hotel SET " . implode(', ', $setParts) . " WHERE id = :id";
|
||||
|
||||
$stmt = $this->db->prepare($sql);
|
||||
|
||||
// Bind-Werte
|
||||
$fieldsToUpdate['id'] = $data['id'];
|
||||
return $stmt->execute($fieldsToUpdate);
|
||||
}
|
||||
|
||||
}
|
||||
66
src/view/bestellung_edit.php
Normal file
66
src/view/bestellung_edit.php
Normal file
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
require_once '../core/Request.php';
|
||||
require_once '../src/model/BestellungModel.php';
|
||||
|
||||
$bestellungId = Request::get('id');
|
||||
$message = '';
|
||||
$bestellungModel = new BestellungModel();
|
||||
|
||||
// POST-Verarbeitung
|
||||
if (Request::isPost()) {
|
||||
$data = Request::allPost();
|
||||
|
||||
$success = $bestellungModel->updateBestellung($data);
|
||||
|
||||
if ($success) {
|
||||
$message = '<div class="alert alert-success">✅ Daten erfolgreich gespeichert.</div>';
|
||||
} else {
|
||||
$message = '<div class="alert alert-danger">❌ Fehler beim Speichern der Daten.</div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Daten neu laden nach dem Speichern (oder beim ersten Aufruf)
|
||||
$bestellung = $bestellungModel->getBestellungById($bestellungId);
|
||||
?>
|
||||
<h2>Bestellung: <?= htmlspecialchars($bestellung['ordernumber']) ?></h2>
|
||||
<?= $message ?>
|
||||
<form method="POST">
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-auto">
|
||||
<label for="ordernumber" class="form-label">Bestellnummer</label>
|
||||
<input class="form-control w-auto" id="ordernumber" name="ordernumber"
|
||||
value="<?= htmlspecialchars($bestellung['ordernumber'] ?? '') ?>" required readonly>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label for="bestellung_status" class="form-label">Status</label>
|
||||
<input class="form-control w-auto" id="bestellung_status" name="bestellung_status"
|
||||
value="<?= htmlspecialchars($bestellung['bestellung_status'] ?? '') ?>" required readonly>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label for="zahlung_status" class="form-label">Zahlung</label>
|
||||
<input class="form-control w-auto" id="zahlung_status" name="zahlung_status"
|
||||
value="<?= htmlspecialchars($bestellung['zahlung_status'] ?? '') ?>" required readonly>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label for="gutschein_status" class="form-label">Gutschein</label>
|
||||
<input class="form-control w-auto" id="gutschein_status" name="gutschein_status"
|
||||
value="<?= htmlspecialchars($bestellung['gutschein_status'] ?? '') ?>" required readonly>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5>Kunde</h5>
|
||||
<div class="row mb-3">
|
||||
</div>
|
||||
|
||||
<h5>Gutschein</h5>
|
||||
<div class="row mb-3">
|
||||
|
||||
<h5>Positionen</h5>
|
||||
<div class="row mb-3">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</form>
|
||||
|
||||
73
src/view/bestellungen.php
Normal file
73
src/view/bestellungen.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
require_once '../core/Database.php';
|
||||
|
||||
$pdo = Database::connect();
|
||||
$stmt = $pdo->query("SELECT id, ordernumber, bestellung_status, zahlung_status, gutschein_status, datum FROM vwl_bestellung ORDER BY ordernumber");
|
||||
$bestellungen = $stmt->fetchAll();
|
||||
?>
|
||||
|
||||
<h4>Bestellungen</h4>
|
||||
<div class="table-responsive">
|
||||
<table id="bestellungTable" class="table table-striped table-hover align-middle">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-column="ordernumber">
|
||||
Bestellnummer
|
||||
<input type="text" id="bestellungFilter" class="form-control form-control-sm d-inline-block ms-2" placeholder="Filtern..." style="width: 200px;">
|
||||
</th>
|
||||
<th data-column="datum">Datum</th>
|
||||
<th data-column="bestellung_status">Status</th>
|
||||
<th data-column="zahlung_status">Zahlung</th>
|
||||
<th data-column="gutschein_status">Gutschein</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($bestellungen as $bestellung): ?>
|
||||
<tr ondblclick="openBestellungForm(<?= $bestellung['id'] ?>)">
|
||||
<td><?= htmlspecialchars($bestellung['ordernumber']) ?></td>
|
||||
<td><?= isset($bestellung['datum']) && ($d = DateTime::createFromFormat('Y-m-d', $bestellung['datum'])) ? $d->format('d.m.Y') : '' ?></td>
|
||||
<td><?= htmlspecialchars($bestellung['bestellung_status']) ?></td>
|
||||
<td><?= htmlspecialchars($bestellung['zahlung_status']) ?></td>
|
||||
<td><?= htmlspecialchars($bestellung['gutschein_status']) ?></td>
|
||||
<td><i class='bi bi-cloud-download' title="Bestellung aktualisieren"></i></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function openBestellungForm(id) {
|
||||
window.open('index.php?page=bestellung_edit&id=' + id, '_blank');
|
||||
}
|
||||
|
||||
// Sortierung bei Klick auf Überschriften
|
||||
document.querySelectorAll("#bestellungTable th").forEach(th => {
|
||||
th.addEventListener("click", () => {
|
||||
const table = th.closest("table");
|
||||
const column = th.cellIndex;
|
||||
const order = th.dataset.order = -(th.dataset.order || -1);
|
||||
const rows = Array.from(table.tBodies[0].rows);
|
||||
|
||||
rows.sort((a, b) => {
|
||||
const cellA = a.cells[column].innerText.trim();
|
||||
const cellB = b.cells[column].innerText.trim();
|
||||
return cellA.localeCompare(cellB, undefined, { numeric: true }) * order;
|
||||
});
|
||||
|
||||
rows.forEach(row => table.tBodies[0].appendChild(row));
|
||||
});
|
||||
});
|
||||
|
||||
// Live-Filter für Bestellnummer
|
||||
document.getElementById('bestellungFilter').addEventListener('input', function () {
|
||||
const filter = this.value.toLowerCase();
|
||||
const rows = document.querySelectorAll("#bestellungTable tbody tr");
|
||||
|
||||
rows.forEach(row => {
|
||||
const bestellnummer = row.cells[0].innerText.toLowerCase();
|
||||
row.style.display = bestellnummer.includes(filter) ? '' : 'none';
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@ -55,6 +55,7 @@ $username = $_SESSION['user'] ?? 'Gast';
|
||||
'home' => 'Home',
|
||||
'gutscheinsuche' => 'Gutscheinsuche',
|
||||
'hotels' => 'Hotels',
|
||||
'bestellungen' => 'Bestellungen',
|
||||
'rechnungen' => 'Rechnungen',
|
||||
'partner' => 'Partner',
|
||||
'auswertungen' => 'Auswertungen',
|
||||
@ -67,6 +68,7 @@ $username = $_SESSION['user'] ?? 'Gast';
|
||||
'home' => 'bi-house',
|
||||
'gutscheinsuche' => 'bi-search',
|
||||
'hotels' => 'bi-building',
|
||||
'bestellungen' => 'bi-cart4',
|
||||
'rechnungen' => 'bi-file-earmark-text',
|
||||
'partner' => 'bi-people',
|
||||
'auswertungen' => 'bi-graph-up',
|
||||
|
||||
4
web/phpinfo.php
Normal file
4
web/phpinfo.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
|
||||
phpinfo();
|
||||
?>
|
||||
Loading…
Reference in New Issue
Block a user