From 71a6e496e925b0b63676b5faa229392f074c9e82 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 21:10:36 -0300 Subject: [PATCH] Modificada logica de syncProductos para considerar caso de faltantes (con cantidades negativas) --- .../Controllers/Api/SubpedidoController.php | 71 ++++++++++++++----- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/Api/SubpedidoController.php b/app/Http/Controllers/Api/SubpedidoController.php index e340e01..4513c7a 100644 --- a/app/Http/Controllers/Api/SubpedidoController.php +++ b/app/Http/Controllers/Api/SubpedidoController.php @@ -68,23 +68,11 @@ class SubpedidoController extends Controller // recibe request, saca producto y cantidad, valida, y pasa a syncProducto en Subpedido public function syncProductos(Subpedido $subpedido) { - if ($subpedido->aprobado) - abort(400, "No se puede modificar un pedido aprobado."); - - $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); + $faltantesYSobrantes = TipoPedido::firstOrCreate(['nombre' => 'faltantes_y_sobrantes']); + if ($subpedido->tipo_pedido_id == $faltantesYSobrantes->id) { + return $this->syncFaltantesYSobrantes($subpedido); + } + return $this->syncPedidoNormal($subpedido); } public function toggleAprobacion(Subpedido $subpedido) { @@ -107,4 +95,53 @@ class SubpedidoController extends Controller return new SubpedidoResource($subpedido); } + + /** + * @param Subpedido $subpedido + * @return SubpedidoResource + */ + public function syncPedidoNormal(Subpedido $subpedido): SubpedidoResource + { + if ($subpedido->aprobado) + abort(400, "No se puede modificar un pedido aprobado."); + + $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); + } + + /** + * @param Subpedido $subpedido + * @return SubpedidoResource + */ + public function syncFaltantesYSobrantes(Subpedido $subpedido): SubpedidoResource + { + $producto_id = request()->producto_id; + $producto = Producto::find($producto_id); + if (!$producto) { + throw new HttpException(400, "No se encontro el producto."); + } + + $cantidad = -1*($subpedido->productos()->find($producto_id)?->cantidad ?? 0); + + $valid = request()->validate([ + 'cantidad' => ['integer', 'required', 'min:' . $cantidad], + 'producto_id' => ['required'] + ]); + + $cantidad = $valid['cantidad']; + $subpedido->syncProducto($producto, $cantidad, null); + return new SubpedidoResource($subpedido); + } }