Add coupons, newsletter, country-based shipping, sale prices, USP bar
Deploy to Production (witstore.wende.it) / deploy (push) Successful in 8s

- Gutscheincodes: DB-Verwaltung (%, €-Rabatt, Mindestbestellwert, Ablauf),
  Eingabefeld im Checkout, Admin unter Marketing → Gutscheine
- Newsletter: Double-Opt-In per E-Mail, Formular im Footer,
  Admin-Liste mit CSV-Export
- Länderzonen-Versand: DE / DACH / EU / WORLD, Versandkosten nach
  Lieferland dynamisch berechnet, Coupon-Rabatt in Bestellung gespeichert
- Sale-Preise: sale_price auf Produkten, durchgestrichener UVP auf
  Produktkarte, Sonderangebote-Sektion auf Startseite
- USP-Leiste auf Startseite: Versand, Zahlung, Rückgabe, Service

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 11:07:14 +02:00
co-authored by Claude Sonnet 4.6
parent 5dad8b9324
commit 092dae6085
27 changed files with 782 additions and 51 deletions
@@ -3,11 +3,19 @@
@section('content')
<div class="max-w-2xl">
<div class="bg-white rounded shadow p-6 mb-6">
<h3 class="font-semibold mb-4">Neue Versandzone</h3>
<h3 class="font-semibold mb-1">Neue Versandzone</h3>
<p class="text-xs text-gray-400 mb-4">Zonen: <code>DE</code> = Deutschland, <code>DACH</code> = AT/CH, <code>EU</code> = EU-Länder, <code>WORLD</code> = Welt</p>
<form method="POST" action="{{ route('admin.shipping.store') }}" class="grid grid-cols-2 gap-3">
@csrf
<div><label class="block text-xs mb-1">Name</label><input type="text" name="name" class="w-full border rounded px-3 py-2 text-sm" required></div>
<div><label class="block text-xs mb-1">Zone (z.B. DE, AT)</label><input type="text" name="zone" value="DE" class="w-full border rounded px-3 py-2 text-sm" required></div>
<div><label class="block text-xs mb-1">Zone</label>
<select name="zone" class="w-full border rounded px-3 py-2 text-sm">
<option value="DE">DE – Deutschland</option>
<option value="DACH">DACH – Österreich + Schweiz</option>
<option value="EU">EU – Europa (ohne DE/DACH)</option>
<option value="WORLD">WORLD – Weltweit</option>
</select>
</div>
<div><label class="block text-xs mb-1">Preis (€)</label><input type="number" name="price" step="0.01" class="w-full border rounded px-3 py-2 text-sm" required></div>
<div><label class="block text-xs mb-1">Kostenlos ab (€, leer = nie)</label><input type="number" name="free_from" step="0.01" class="w-full border rounded px-3 py-2 text-sm"></div>
<div class="col-span-2 flex items-center gap-3">