Newwebshop/templates/admin/orders/edit.html.twig

353 lines
20 KiB
Twig
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $title ?></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<style>
.sidebar {
min-height: 100vh;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.sidebar .nav-link {
color: rgba(255,255,255,0.8);
padding: 0.75rem 1rem;
border-radius: 0.375rem;
margin: 0.25rem 0;
}
.sidebar .nav-link:hover,
.sidebar .nav-link.active {
color: white;
background: rgba(255,255,255,0.1);
}
.main-content {
background-color: #f8f9fa;
min-height: 100vh;
}
.card {
border: none;
box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);
}
.form-control:focus {
border-color: #667eea;
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
}
.product-image {
width: 60px;
height: 60px;
object-fit: cover;
border-radius: 0.375rem;
}
.status-badge {
font-size: 0.875rem;
padding: 0.5rem 1rem;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row">
<!-- Sidebar -->
<div class="col-md-3 col-lg-2 px-0">
<div class="sidebar p-3">
<div class="d-flex align-items-center mb-4">
<i class="fas fa-shopping-cart text-white me-2"></i>
<h5 class="text-white mb-0">Webshop Admin</h5>
</div>
<nav class="nav flex-column">
<a class="nav-link" href="/admin/dashboard">
<i class="fas fa-tachometer-alt me-2"></i> Dashboard
</a>
<a class="nav-link" href="/admin/products">
<i class="fas fa-box me-2"></i> Produkte
</a>
<a class="nav-link" href="/admin/customers">
<i class="fas fa-users me-2"></i> Kunden
</a>
<a class="nav-link active" href="/admin/orders">
<i class="fas fa-shopping-bag me-2"></i> Bestellungen
</a>
<a class="nav-link" href="/admin/categories">
<i class="fas fa-tags me-2"></i> Kategorien
</a>
<a class="nav-link" href="/admin/settings">
<i class="fas fa-cog me-2"></i> Einstellungen
</a>
<hr class="text-white-50">
<a class="nav-link" href="/admin/logout">
<i class="fas fa-sign-out-alt me-2"></i> Abmelden
</a>
</nav>
</div>
</div>
<!-- Main Content -->
<div class="col-md-9 col-lg-10">
<div class="main-content p-4">
<!-- Header -->
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="/admin/orders">Bestellungen</a></li>
<li class="breadcrumb-item">
<a href="/admin/orders/show/<?= $order['id'] ?>">
Bestellung #<?= $order['id'] ?>
</a>
</li>
<li class="breadcrumb-item active">Bearbeiten</li>
</ol>
</nav>
<h1 class="h3 mb-0">Bestellung bearbeiten</h1>
</div>
<div class="d-flex align-items-center">
<span class="text-muted me-3">Willkommen, <?= htmlspecialchars($user_name) ?></span>
<a href="/admin/orders/show/<?= $order['id'] ?>" class="btn btn-secondary">
<i class="fas fa-arrow-left me-2"></i>Zurück
</a>
</div>
</div>
<!-- Alerts -->
<?php if (isset($_GET['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="fas fa-exclamation-circle me-2"></i><?= htmlspecialchars($_GET['error']) ?>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<?php endif; ?>
<!-- Edit Order Form -->
<div class="row">
<div class="col-lg-8">
<div class="card">
<div class="card-header bg-white">
<h5 class="mb-0">
<i class="fas fa-edit me-2"></i>
Bestellungsinformationen
</h5>
</div>
<div class="card-body">
<form method="POST" action="/admin/orders/edit/<?= $order['id'] ?>">
<div class="row">
<div class="col-md-6 mb-3">
<label for="status" class="form-label">
Status <span class="text-danger">*</span>
</label>
<select class="form-select" name="status" id="status" required>
<option value="pending" <?= $order['status'] === 'pending' ? 'selected' : '' ?>>Ausstehend</option>
<option value="processing" <?= $order['status'] === 'processing' ? 'selected' : '' ?>>In Bearbeitung</option>
<option value="shipped" <?= $order['status'] === 'shipped' ? 'selected' : '' ?>>Versendet</option>
<option value="delivered" <?= $order['status'] === 'delivered' ? 'selected' : '' ?>>Geliefert</option>
<option value="cancelled" <?= $order['status'] === 'cancelled' ? 'selected' : '' ?>>Storniert</option>
</select>
<div class="form-text">Der aktuelle Status der Bestellung</div>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Bestellungsnummer</label>
<input type="text" class="form-control" value="#<?= $order['id'] ?>" readonly>
<div class="form-text">Bestellungsnummer kann nicht geändert werden</div>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="shipping_address" class="form-label">Lieferadresse</label>
<textarea class="form-control"
id="shipping_address"
name="shipping_address"
rows="4"><?= htmlspecialchars($_POST['shipping_address'] ?? $order['shipping_address'] ?? '') ?></textarea>
<div class="form-text">Die Lieferadresse für diese Bestellung</div>
</div>
<div class="col-md-6 mb-3">
<label for="billing_address" class="form-label">Rechnungsadresse</label>
<textarea class="form-control"
id="billing_address"
name="billing_address"
rows="4"><?= htmlspecialchars($_POST['billing_address'] ?? $order['billing_address'] ?? '') ?></textarea>
<div class="form-text">Die Rechnungsadresse für diese Bestellung</div>
</div>
</div>
<div class="mb-3">
<label for="notes" class="form-label">Notizen</label>
<textarea class="form-control"
id="notes"
name="notes"
rows="3"><?= htmlspecialchars($_POST['notes'] ?? $order['notes'] ?? '') ?></textarea>
<div class="form-text">Interne Notizen zur Bestellung</div>
</div>
<hr class="my-4">
<div class="alert alert-info">
<i class="fas fa-info-circle me-2"></i>
<strong>Hinweis:</strong> Produkte können nicht über dieses Formular geändert werden.
Die Bestellungsprodukte sind fest mit der Bestellung verknüpft.
</div>
<div class="d-flex justify-content-between">
<a href="/admin/orders/show/<?= $order['id'] ?>" class="btn btn-secondary">
<i class="fas fa-times me-2"></i>Abbrechen
</a>
<button type="submit" class="btn btn-primary">
<i class="fas fa-save me-2"></i>Änderungen speichern
</button>
</div>
</form>
</div>
</div>
</div>
<div class="col-lg-4">
<!-- Order Summary -->
<div class="card mb-4">
<div class="card-header bg-white">
<h6 class="mb-0">
<i class="fas fa-info-circle me-2"></i>
Bestellungsübersicht
</h6>
</div>
<div class="card-body">
<div class="row mb-2">
<div class="col-6">Bestellungsnummer:</div>
<div class="col-6"><strong>#<?= $order['id'] ?></strong></div>
</div>
<div class="row mb-2">
<div class="col-6">Kunde:</div>
<div class="col-6">
<strong><?= htmlspecialchars($order['firstname'] . ' ' . $order['lastname']) ?></strong>
</div>
</div>
<div class="row mb-2">
<div class="col-6">E-Mail:</div>
<div class="col-6">
<a href="mailto:<?= htmlspecialchars($order['email']) ?>">
<?= htmlspecialchars($order['email']) ?>
</a>
</div>
</div>
<div class="row mb-2">
<div class="col-6">Datum:</div>
<div class="col-6">
<?= date('d.m.Y H:i', strtotime($order['created_at'])) ?>
</div>
</div>
<div class="row mb-2">
<div class="col-6">Artikel:</div>
<div class="col-6">
<strong><?= count($products) ?></strong>
</div>
</div>
<div class="row mb-2">
<div class="col-6">Gesamt:</div>
<div class="col-6">
<strong class="text-success">€<?= number_format($order['total'], 2, ',', '.') ?></strong>
</div>
</div>
<hr>
<div class="row">
<div class="col-6">Status:</div>
<div class="col-6">
<?php
$statusClass = 'bg-secondary';
$statusText = 'Unbekannt';
switch ($order['status']) {
case 'pending':
$statusClass = 'bg-warning';
$statusText = 'Ausstehend';
break;
case 'processing':
$statusClass = 'bg-info';
$statusText = 'In Bearbeitung';
break;
case 'shipped':
$statusClass = 'bg-primary';
$statusText = 'Versendet';
break;
case 'delivered':
$statusClass = 'bg-success';
$statusText = 'Geliefert';
break;
case 'cancelled':
$statusClass = 'bg-danger';
$statusText = 'Storniert';
break;
}
?>
<span class="badge <?= $statusClass ?> status-badge"><?= $statusText ?></span>
</div>
</div>
</div>
</div>
<!-- Order Products -->
<div class="card">
<div class="card-header bg-white">
<h6 class="mb-0">
<i class="fas fa-box me-2"></i>
Bestellte Produkte
</h6>
</div>
<div class="card-body p-0">
<?php if (empty($products)): ?>
<div class="text-center py-3">
<p class="text-muted mb-0">Keine Produkte</p>
</div>
<?php else: ?>
<div class="list-group list-group-flush">
<?php foreach ($products as $product): ?>
<div class="list-group-item d-flex align-items-center">
<?php if (!empty($product['image'])): ?>
<img src="<?= htmlspecialchars($product['image']) ?>"
alt="<?= htmlspecialchars($product['name']) ?>"
class="product-image me-3">
<?php else: ?>
<div class="product-image me-3 bg-light d-flex align-items-center justify-content-center">
<i class="fas fa-image text-muted"></i>
</div>
<?php endif; ?>
<div class="flex-grow-1">
<strong><?= htmlspecialchars($product['name']) ?></strong>
<br>
<small class="text-muted">
€<?= number_format($product['price'], 2, ',', '.') ?> × <?= $product['quantity'] ?>
</small>
</div>
<div class="text-end">
<strong class="text-success">
€<?= number_format($product['price'] * $product['quantity'], 2, ',', '.') ?>
</strong>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Form validation
document.querySelector('form').addEventListener('submit', function(e) {
const status = document.getElementById('status').value;
if (!status) {
e.preventDefault();
alert('Bitte wählen Sie einen Status aus.');
return false;
}
});
</script>
</body>
</html>