get(); } /** * Guardar un nuevo registro en el almacenamiento. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $validado = $this->validateSubpedido(); if (Subpedido::where("nombre",$validado["nombre"])->where("grupo_de_compra_id",$validado["grupo_de_compra_id"])->get()->count()) { throw new HttpException(400, "Ya existe un subpedido con este nombre"); } $s = new Subpedido(); $s->nombre = $validado["nombre"]; $s->grupo_de_compra_id = $validado["grupo_de_compra_id"]; $s->save(); return $s; } /** * Agregar un producto a un subpedido. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function updateProducto(Subpedido $subpedido, Producto $producto, Request $request) { $validado = $this->validateActualizacionDeProducto(); $cantidad = $validado['cantidad']; if ($cantidad){ //si la cantidad es 1 o más se agrega el producto o actualiza la cantidad $subpedido->productos()->syncWithoutDetaching([$producto->id => ['cantidad' => $cantidad]]); } else { //si la cantidad es 0, se elimina el producto del subpedido $subpedido->productos()->detach($producto->id); } return response('Producto ' . $producto->nombre . ' actualizado en subpedido de ' . $subpedido->nombre . ' (cantidad ' . $cantidad . ')', 200); } protected function validateSubpedido(){ return request()->validate([ 'nombre' => 'required|max:255', 'grupo_de_compra_id' => [ 'required', Rule::in(GrupoDeCompra::all()->pluck('id')), ] ]); } protected function validateActualizacionDeProducto(){ return request()->validate([ 'cantidad' => 'required|min:0' ]); } }