get('category', 'packaging'); $isShipping = $category === 'shipping'; $query = PackagingItem::query() ->with(['packagingMaterial', 'supplier', 'storageRoom', 'storageShelf', 'storageSlot']) ->orderBy('name'); if ($isShipping) { $query->where('category', 'shipping'); } else { $query->where('category', 'packaging'); } return view('admin.inventory.packaging-items.index', [ 'values' => $query->get(), 'category' => $category, 'pageTitle' => $isShipping ? __('Versandverpackung') : __('Produktverpackung'), ]); } public function create(Request $request) { $category = $request->query('category', 'packaging'); if (! in_array($category, ['packaging', 'shipping'], true)) { $category = 'packaging'; } return view('admin.inventory.packaging-items.form', [ 'model' => new PackagingItem(['active' => true, 'category' => $category === 'shipping' ? 'shipping' : 'packaging', 'weight_grams' => 0]), 'packagingMaterials' => PackagingMaterial::query()->orderBy('pos')->orderBy('name')->get(), 'suppliers' => Supplier::query()->orderBy('name')->get(), 'category' => $category, ...$this->storageOptions(), ]); } /** * AP-51: Lagerplatz-Bausteine (Raum/Regal/Fach) für das Formular. * * @return array> */ private function storageOptions(): array { return [ 'storageRooms' => StorageRoom::query()->active()->orderBy('pos')->orderBy('label')->get(), 'storageShelves' => StorageShelf::query()->active()->orderBy('pos')->orderBy('label')->get(), 'storageSlots' => StorageSlot::query()->active()->orderBy('pos')->orderBy('label')->get(), ]; } public function store(StorePackagingItemRequest $request) { $validated = $request->validated(); $item = $this->packagingItemRepository->create($validated); \Session::flash('alert-save', '1'); $category = $item->category === 'shipping' ? 'shipping' : 'packaging'; return redirect()->route('admin.inventory.packaging-items.index', ['category' => $category]); } public function edit(PackagingItem $packagingItem) { $category = $packagingItem->category === 'shipping' ? 'shipping' : 'packaging'; return view('admin.inventory.packaging-items.form', [ 'model' => $packagingItem, 'packagingMaterials' => PackagingMaterial::query()->orderBy('pos')->orderBy('name')->get(), 'suppliers' => Supplier::query()->orderBy('name')->get(), 'category' => $category, ...$this->storageOptions(), ]); } public function update(UpdatePackagingItemRequest $request, PackagingItem $packagingItem) { $validated = $request->validated(); $this->packagingItemRepository->update($packagingItem, $validated); \Session::flash('alert-save', '1'); $category = $packagingItem->category === 'shipping' ? 'shipping' : 'packaging'; return redirect()->route('admin.inventory.packaging-items.index', ['category' => $category]); } public function destroy(PackagingItem $packagingItem) { $category = $packagingItem->category === 'shipping' ? 'shipping' : 'packaging'; $guard = app(DeletionGuard::class); $blockers = $guard->blockersFor($packagingItem); if ($blockers !== []) { \Session::flash('alert-error', $guard->message($blockers)); return redirect()->route('admin.inventory.packaging-items.index', ['category' => $category]); } $packagingItem->delete(); \Session::flash('alert-success', __('Eintrag gelöscht')); return redirect()->route('admin.inventory.packaging-items.index', ['category' => $category]); } }