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).
84 lines
2.3 KiB
PHP
Executable file
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'));
|
|
}
|
|
}
|