type) { case 'App\Models\Product\Broadband': return Product\Broadband::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(function($item) { return ['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier_detail->supplier->name,$item->supplied->name)]; }) ->sortBy('name') ->values(); case 'App\Models\Product\Email': return Product\Email::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(function($item) { return ['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier_detail->supplier->name,$item->supplied->name)]; }) ->sortBy('name') ->values(); case 'App\Models\Product\Host': return Product\Host::select(['id','supplier_item_id']) ->with(['supplied.supplier_detail.supplier']) ->get() ->map(function($item) { return ['id'=>$item->id,'name'=>sprintf('%s: %s',$item->supplied->supplier_detail->supplier->name,$item->supplied->name)]; }) ->sortBy('name') ->values(); default: throw new \Exception('Unknown type: '.$request->type); } } /** * Update a suppliers details * * @param Request $request * @param Product $o * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse */ public function details(Request $request,Product $o) { if ($request->post()) { $validation = $request->validate([ 'description.name' => 'required|string|min:2|max:255', 'active' => 'sometimes|accepted', 'model' => 'sometimes|string', // @todo Check that it is a valid model type 'model_id' => 'sometimes|int', // @todo Check that it is a valid model type ]); foreach (collect($validation)->except('description') as $key => $item) $o->{$key} = $item; $o->active = (bool)$request->active; try { $o->save(); } catch (\Exception $e) { return redirect()->back()->withErrors($e->getMessage())->withInput(); } $o->load(['description']); $oo = $o->description ?: new ProductTranslate; foreach (collect($validation)->get('description',[]) as $key => $item) $oo->{$key} = $item; $o->description()->save($oo); return redirect()->back() ->with('success','Product saved'); } if (! $o->exists && $request->name) $o = Product::where('name',$request->name)->firstOrNew(); return view('a.product.details') ->with('o',$o); } /** * Manage products for a site * * @note This method is protected by the routes * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function home() { return view('a.product.home'); } }