get(); } public function indexResources(FiltroDeSubpedido $filtros, Request $request) { return SubpedidoResource::collection(Subpedido::filtrar($filtros)->get()); } /** * Store a newly created resource in storage. * * @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; } protected function validateSubpedido(){ return request()->validate([ 'nombre' => 'required|max:255', 'grupo_de_compra_id' => [ 'required', Rule::in(GrupoDeCompra::all()->pluck('id')), ] ]); } /** * Display the specified resource. * * @param \App\Subpedido $subpedido * @return \Illuminate\Http\Response */ public function show(Subpedido $subpedido) { return new SubpedidoResource($subpedido); } // recibe request, saca producto y cantidad, valida, y pasa a syncProducto en Subpedido public function syncProductos(Subpedido $subpedido) { if ($subpedido->aprobado) return new SubpedidoResource($subpedido); $valid = request()->validate([ 'cantidad' => ['integer','required','min:0'], 'notas' => 'nullable', 'producto_id' => [ 'required', Rule::in(Producto::all()->pluck('id')), ] ]); $producto = Producto::find($valid['producto_id']); $notas = $valid['notas']; $cantidad = $valid['cantidad']; $subpedido->syncProducto($producto, $cantidad, $notas ?? ""); return new SubpedidoResource($subpedido); } public function toggleAprobacion(Subpedido $subpedido) { $valid = request()->validate([ 'aprobacion' => 'required | boolean' ]); $subpedido->toggleAprobacion($valid['aprobacion']); return new SubpedidoResource($subpedido); } public function syncDevoluciones(Subpedido $subpedido) { if ($subpedido->aprobado) return new SubpedidoResource($subpedido); $valid = request()->validate([ 'total' => 'required|min:0', 'notas' => 'min:0' ]); $subpedido->syncDevoluciones($valid['total'], $valid['notas'] ?? ""); return new SubpedidoResource($subpedido); } }