This commit is contained in:
lizandrogd
2026-01-19 20:44:11 -05:00
parent 3e3f4bf581
commit 273689627c
2 changed files with 48 additions and 6 deletions
+46 -4
View File
@@ -52,9 +52,10 @@ class InventarioPrendaDistribucion extends Model
$cantidad = intval($dist->cantidad ?? 0);
$sumExistentes = (int) self::where('inventario_prenda_id', $parentId)->sum('cantidad');
if (($sumExistentes + $cantidad) > (int) $parent->cantidad_terminada) {
// Validar contra la cantidad disponible actual
if (($sumExistentes + $cantidad) > (int) $parent->cantidad_disponible) {
throw \Illuminate\Validation\ValidationException::withMessages([
'cantidad' => 'La suma de las distribuciones excede la cantidad terminada disponible (' . $parent->cantidad_terminada . ').',
'cantidad' => 'La suma de las distribuciones excede la cantidad disponible (' . $parent->cantidad_disponible . ').',
]);
}
});
@@ -71,9 +72,10 @@ class InventarioPrendaDistribucion extends Model
->where('id', '<>', $dist->id)
->sum('cantidad');
if (($othersSum + $newCantidad) > (int) $parent->cantidad_terminada) {
// Validar contra la cantidad disponible actual (considerando otras distribuciones)
if (($othersSum + $newCantidad) > (int) $parent->cantidad_disponible) {
throw \Illuminate\Validation\ValidationException::withMessages([
'cantidad' => 'La suma de las distribuciones excede la cantidad terminada disponible (' . $parent->cantidad_terminada . ').',
'cantidad' => 'La suma de las distribuciones excede la cantidad disponible (' . $parent->cantidad_disponible . ').',
]);
}
});
@@ -108,6 +110,13 @@ class InventarioPrendaDistribucion extends Model
}
$variant->increment('stock', $cantidad);
// Reducir disponibilidad en inventario_prenda
$parent = $dist->inventarioPrenda;
if ($parent) {
$parent->cantidad_disponible = max(0, $parent->cantidad_disponible - $cantidad);
$parent->save();
}
} else {
// Producto
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
@@ -123,6 +132,13 @@ class InventarioPrendaDistribucion extends Model
if ($prod && ! $prod->variants()->exists()) {
$prod->increment('stock', $cantidad);
}
// Reducir disponibilidad en inventario_prenda
$parent = $dist->inventarioPrenda;
if ($parent) {
$parent->cantidad_disponible = max(0, $parent->cantidad_disponible - $cantidad);
$parent->save();
}
}
}
});
@@ -152,6 +168,12 @@ class InventarioPrendaDistribucion extends Model
}
$variant->increment('stock', $delta);
$parent = $dist->inventarioPrenda;
if ($parent) {
$parent->cantidad_disponible = max(0, min($parent->cantidad_terminada, $parent->cantidad_disponible - $delta));
$parent->save();
}
} else {
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
if ($productoId) {
@@ -166,6 +188,12 @@ class InventarioPrendaDistribucion extends Model
if ($prod && ! $prod->variants()->exists()) {
$prod->increment('stock', $delta);
}
$parent = $dist->inventarioPrenda;
if ($parent) {
$parent->cantidad_disponible = max(0, min($parent->cantidad_terminada, $parent->cantidad_disponible - $delta));
$parent->save();
}
}
}
});
@@ -187,6 +215,13 @@ class InventarioPrendaDistribucion extends Model
}
$variant->decrement('stock', $cantidad);
// Restaurar disponibilidad en inventario_prenda
$parent = $dist->inventarioPrenda;
if ($parent) {
$parent->cantidad_disponible = min($parent->cantidad_terminada, $parent->cantidad_disponible + $cantidad);
$parent->save();
}
}
} else {
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
@@ -201,6 +236,13 @@ class InventarioPrendaDistribucion extends Model
if ($prod && ! $prod->variants()->exists()) {
$prod->decrement('stock', $cantidad);
}
// Restaurar disponibilidad en inventario_prenda
$parent = $dist->inventarioPrenda;
if ($parent) {
$parent->cantidad_disponible = min($parent->cantidad_terminada, $parent->cantidad_disponible + $cantidad);
$parent->save();
}
}
}
});
@@ -15,8 +15,8 @@ return new class extends Migration
// Primero hacer la columna nullable si no lo es
$table->unsignedBigInteger('producto_id')->nullable()->change();
// Eliminar la clave foránea existente usando el nombre exacto
$table->dropForeign('detalle_ventas_producto_id_foreign');
// Eliminar la clave foránea existente (compatible con SQLite y MySQL)
$table->dropForeign(['producto_id']);
// Recrear la clave foránea con SET NULL
$table->foreign('producto_id')