gruene-seele/app/Http/Controllers/IngredientController.php
Kevin Adametz 78679e0c55 Warenwirtschaft: AP-00 bis AP-08 + aktualisierter Entwicklungsplan
Umsetzung der Warenwirtschafts-/Produktmanagement-Erweiterung gemaess
Entwicklungsplan V4.0:

- AP-00: Regressionsbasis fuer 5.1-Features (ProductPhase51Test)
- AP-01: URL-Bugfixes B1/B2 (suppliers/packaging-items, breitere url-Spalten)
- AP-04/04.1: iPad-taugliche, vereinheitlichte Tabellen-Aktionen
- AP-05: Einstellungen "Allgemein" mit UST-Saetzen (tax_rates) und
  Lieferzeit-Vorlagen (delivery_times, inkl. Tage-Feld)
- AP-06: Lieferanten um Bestellweg, Bestell-Mail/-URL und Lieferzeit erweitert
- AP-07/07.1: INCI um Lieferanten-Mehrfachwahl, UST und Lieferzeit erweitert;
  Lieferanten-Detailansicht im Modal mit pflegbaren INCI-/Verpackungslisten
- AP-08: Einkauf um UST-Snapshot, Netto/Brutto-Automatik und Duplizieren erweitert

Entwicklungsplan aktualisiert: alle Klaerungspunkte (§5) vom Kunden beantwortet
und in die jeweiligen APs eingearbeitet (AP-02/03/09/13/15), neues AP-18
(Hinweise-Doku unter Einstellungen) ergaenzt. Naechster Schritt eindeutig
markiert: AP-09 (Produktion auf Hersteller-Rezeptur, kein Fallback, Warnung).
2026-06-02 16:30:42 +00:00

84 lines
2.3 KiB
PHP
Executable file

<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreIngredientRequest;
use App\Models\DeliveryTime;
use App\Models\Ingredient;
use App\Models\ProductIngredient;
use App\Models\Supplier;
use App\Models\TaxRate;
class IngredientController extends Controller
{
public function __construct()
{
$this->middleware('copyreader');
}
public function index()
{
$data = [
'values' => Ingredient::all(),
];
return view('admin.ingredient.index', $data);
}
public function edit($id)
{
if ($id === 'new') {
$model = new Ingredient;
$model->active = true;
} else {
$model = Ingredient::with('suppliers')->findOrFail($id);
}
$data = [
'model' => $model,
'taxRates' => TaxRate::query()->active()->orderBy('pos')->orderBy('name')->get(),
'deliveryTimes' => DeliveryTime::query()->active()->orderBy('pos')->orderBy('label')->get(),
'suppliers' => Supplier::query()->where('active', true)->orderBy('name')->get(),
];
return view('admin.ingredient.edit', $data);
}
public function store(StoreIngredientRequest $request)
{
$data = $request->validated();
$data['default_factor'] = $data['default_factor'] ?? 1.10;
$supplierIds = $request->input('supplier_ids', []);
unset($data['supplier_ids']);
if ($request->input('id') === 'new') {
$model = Ingredient::create($data);
} else {
$model = Ingredient::findOrFail($request->input('id'));
$model->fill($data)->save();
}
$model->suppliers()->sync($supplierIds);
\Session()->flash('alert-save', '1');
return redirect(route('admin_product_ingredients'));
}
public function delete($id)
{
if (ProductIngredient::where('ingredient_id', $id)->count()) {
\Session()->flash('alert-error', 'Eintrag wird als Produkt-Inhaltsstoff verwendet');
return redirect(route('admin_product_ingredients'));
}
$model = Ingredient::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect(route('admin_product_ingredients'));
}
}