Supplier::query()->with(['country', 'supplierCategories'])->orderBy('name')->get(), ]); } public function create() { $defaultCountryId = Country::where('code', 'DE')->value('id'); return view('admin.inventory.suppliers.form', [ 'model' => new Supplier(['active' => true, 'country_id' => $defaultCountryId]), 'countries' => Country::query()->orderBy('de')->get(), 'supplierCategories' => SupplierCategory::query()->orderBy('pos')->orderBy('name')->get(), 'deliveryTimes' => DeliveryTime::query()->active()->orderBy('pos')->orderBy('label')->get(), ]); } public function store(StoreSupplierRequest $request) { $this->supplierRepository->create($request->validated()); \Session::flash('alert-save', '1'); return redirect()->route('admin.inventory.suppliers.index'); } public function show(Supplier $supplier): View { return $this->renderDetails($supplier); } public function attachIngredient(Request $request, Supplier $supplier): View { $validated = $request->validate([ 'ingredient_id' => ['required', 'integer', 'exists:ingredients,id'], ]); $supplier->ingredients()->syncWithoutDetaching([$validated['ingredient_id']]); return $this->renderDetails($supplier); } public function detachIngredient(Supplier $supplier, Ingredient $ingredient): View { $supplier->ingredients()->detach($ingredient->id); return $this->renderDetails($supplier); } public function attachPackagingItem(Request $request, Supplier $supplier): View { $validated = $request->validate([ 'packaging_item_id' => ['required', 'integer', 'exists:packaging_items,id'], ]); PackagingItem::query() ->whereKey($validated['packaging_item_id']) ->update(['supplier_id' => $supplier->id]); return $this->renderDetails($supplier); } public function detachPackagingItem(Supplier $supplier, PackagingItem $packagingItem): View { if ((int) $packagingItem->supplier_id === (int) $supplier->id) { $packagingItem->update(['supplier_id' => null]); } return $this->renderDetails($supplier); } protected function renderDetails(Supplier $supplier): View { $supplier->load(['country', 'supplierCategories', 'ingredients', 'packagingItems']); $assignedIngredientIds = $supplier->ingredients->pluck('id')->all(); $assignedPackagingItemIds = $supplier->packagingItems->pluck('id')->all(); return view('admin.inventory.suppliers._details', [ 'supplier' => $supplier, 'availableIngredients' => Ingredient::query() ->whereNotIn('id', $assignedIngredientIds) ->orderBy('name') ->get(), 'availablePackagingItems' => PackagingItem::query() ->whereNotIn('id', $assignedPackagingItemIds) ->orderBy('name') ->get(), ]); } public function edit(Supplier $supplier) { $supplier->load('supplierCategories'); return view('admin.inventory.suppliers.form', [ 'model' => $supplier, 'countries' => Country::query()->orderBy('de')->get(), 'supplierCategories' => SupplierCategory::query()->orderBy('pos')->orderBy('name')->get(), 'deliveryTimes' => DeliveryTime::query()->active()->orderBy('pos')->orderBy('label')->get(), ]); } public function update(UpdateSupplierRequest $request, Supplier $supplier) { $this->supplierRepository->update($supplier, $request->validated()); \Session::flash('alert-save', '1'); return redirect()->route('admin.inventory.suppliers.index'); } public function destroy(Supplier $supplier) { $supplier->delete(); \Session::flash('alert-success', __('Eintrag gelöscht')); return redirect()->route('admin.inventory.suppliers.index'); } }