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
+20
View File
@@ -25,6 +25,13 @@ Route::post('/kasse/adresse', [Shop\CheckoutController::class, 'storeAddress'])-
Route::get('/kasse/zahlung', [Shop\CheckoutController::class, 'payment'])->name('checkout.payment');
Route::match(['GET','POST'], '/kasse/bestaetigen', [Shop\CheckoutController::class, 'confirm'])->name('checkout.confirm');
Route::get('/kasse/danke/{order}', [Shop\CheckoutController::class, 'thankyou'])->name('checkout.thankyou');
Route::post('/kasse/gutschein', [Shop\CheckoutController::class, 'applyCoupon'])->name('checkout.coupon.apply');
Route::post('/kasse/gutschein/entfernen', [Shop\CheckoutController::class, 'removeCoupon'])->name('checkout.coupon.remove');
Route::get('/kasse/versandkosten', [Shop\CheckoutController::class, 'shippingCost'])->name('checkout.shipping.cost');
// Newsletter
Route::post('/newsletter', [Shop\NewsletterController::class, 'subscribe'])->name('newsletter.subscribe');
Route::get('/newsletter/bestaetigen/{token}', [Shop\NewsletterController::class, 'confirm'])->name('newsletter.confirm');
// CMS-Seiten
Route::get('/seite/{slug}', [Shop\PageController::class, 'show'])->name('page');
@@ -105,6 +112,19 @@ Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(fun
Route::put('admins/{admin}', [Admin\AdminUserController::class, 'update'])->name('admins.update');
Route::delete('admins/{admin}', [Admin\AdminUserController::class, 'destroy'])->name('admins.destroy');
// Gutscheine
Route::get('coupons', [Admin\CouponController::class, 'index'])->name('coupons.index');
Route::get('coupons/create', [Admin\CouponController::class, 'create'])->name('coupons.create');
Route::post('coupons', [Admin\CouponController::class, 'store'])->name('coupons.store');
Route::get('coupons/{coupon}/edit', [Admin\CouponController::class, 'edit'])->name('coupons.edit');
Route::put('coupons/{coupon}', [Admin\CouponController::class, 'update'])->name('coupons.update');
Route::delete('coupons/{coupon}', [Admin\CouponController::class, 'destroy'])->name('coupons.destroy');
// Newsletter
Route::get('newsletter', [Admin\NewsletterController::class, 'index'])->name('newsletter.index');
Route::get('newsletter/export', [Admin\NewsletterController::class, 'export'])->name('newsletter.export');
Route::delete('newsletter/{subscriber}', [Admin\NewsletterController::class, 'destroy'])->name('newsletter.destroy');
// E-Mail-Templates
Route::get('email-templates', [Admin\EmailTemplateController::class, 'index'])->name('email-templates.index');
Route::get('email-templates/{emailTemplate}/edit', [Admin\EmailTemplateController::class, 'edit'])->name('email-templates.edit');