Modificada logica de syncProductos para considerar caso de faltantes (con cantidades negativas)

This commit is contained in:
Alejandro Tasistro 2025-08-27 21:10:36 -03:00
parent dcf1659042
commit 71a6e496e9

View file

@ -68,23 +68,11 @@ class SubpedidoController extends Controller
// recibe request, saca producto y cantidad, valida, y pasa a syncProducto en Subpedido // recibe request, saca producto y cantidad, valida, y pasa a syncProducto en Subpedido
public function syncProductos(Subpedido $subpedido) { public function syncProductos(Subpedido $subpedido) {
if ($subpedido->aprobado) $faltantesYSobrantes = TipoPedido::firstOrCreate(['nombre' => 'faltantes_y_sobrantes']);
abort(400, "No se puede modificar un pedido aprobado."); if ($subpedido->tipo_pedido_id == $faltantesYSobrantes->id) {
return $this->syncFaltantesYSobrantes($subpedido);
$valid = request()->validate([ }
'cantidad' => ['integer','required','min:0'], return $this->syncPedidoNormal($subpedido);
'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) { public function toggleAprobacion(Subpedido $subpedido) {
@ -107,4 +95,53 @@ class SubpedidoController extends Controller
return new SubpedidoResource($subpedido); 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);
}
} }