type) { case Product\Broadband::class: return Product\Broadband::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(fn($item)=>['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier->name,$item->supplied->name)]) ->sortBy('name') ->values(); case Product\Domain::class: return Product\Domain::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(fn($item)=>['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier->name,$item->supplied->name)]) ->sortBy('name') ->values(); case Product\Email::class: return Product\Email::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(fn($item)=>['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier->name,$item->supplied->name)]) ->sortBy('name') ->values(); case Product\Generic::class: return Product\Generic::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(fn($item)=>['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier->name,$item->supplied->name)]) ->sortBy('name') ->values(); case Product\Host::class: return Product\Host::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(fn($item)=>['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier->name,$item->supplied->name)]) ->sortBy('name') ->values(); case Product\Phone::class: return Product\Phone::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(fn($item)=>['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier->name,$item->supplied->name)]) ->sortBy('name') ->values(); default: throw new \Exception('Unknown type: '.$request->type); } } public function addedit(ProductAddEdit $request,Product $o) { foreach (Arr::except($request->validated(),['translate','accounting','pricing','active']) as $key => $item) $o->{$key} = $item; $o->active = (bool)$request->active; // Trim down the pricing array, remove null values $o->pricing = collect($request->validated('pricing')) ->map(function($item) { foreach ($item as $k=>$v) { if (is_array($v)) { $v = array_filter($v); $item[$k] = $v; } } return $item; }); try { $o->save(); } catch (\Exception $e) { return redirect() ->back() ->withErrors($e->getMessage()) ->withInput(); } $o->load(['translate']); $oo = $o->translate ?: new ProductTranslate; foreach ($request->validated('translate',[]) as $key => $item) $oo->{$key} = $item; $o->translate()->save($oo); foreach ($request->validated('accounting',[]) as $k=>$v) { $o->providers()->syncWithoutDetaching([ $k => [ 'ref' => $v, 'site_id'=>$o->site_id, ], ]); } return redirect() ->back() ->with('success','Product saved'); } }