up
This commit is contained in:
@@ -52,9 +52,10 @@ class InventarioPrendaDistribucion extends Model
|
|||||||
$cantidad = intval($dist->cantidad ?? 0);
|
$cantidad = intval($dist->cantidad ?? 0);
|
||||||
$sumExistentes = (int) self::where('inventario_prenda_id', $parentId)->sum('cantidad');
|
$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([
|
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)
|
->where('id', '<>', $dist->id)
|
||||||
->sum('cantidad');
|
->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([
|
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);
|
$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 {
|
} else {
|
||||||
// Producto
|
// Producto
|
||||||
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
|
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
|
||||||
@@ -123,6 +132,13 @@ class InventarioPrendaDistribucion extends Model
|
|||||||
if ($prod && ! $prod->variants()->exists()) {
|
if ($prod && ! $prod->variants()->exists()) {
|
||||||
$prod->increment('stock', $cantidad);
|
$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);
|
$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 {
|
} else {
|
||||||
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
|
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
|
||||||
if ($productoId) {
|
if ($productoId) {
|
||||||
@@ -166,6 +188,12 @@ class InventarioPrendaDistribucion extends Model
|
|||||||
if ($prod && ! $prod->variants()->exists()) {
|
if ($prod && ! $prod->variants()->exists()) {
|
||||||
$prod->increment('stock', $delta);
|
$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);
|
$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 {
|
} else {
|
||||||
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
|
$productoId = $dist->inventarioPrenda->producto_id ?? ($dist->inventarioPrenda->ordenProduccion->producto_id ?? null);
|
||||||
@@ -201,6 +236,13 @@ class InventarioPrendaDistribucion extends Model
|
|||||||
if ($prod && ! $prod->variants()->exists()) {
|
if ($prod && ! $prod->variants()->exists()) {
|
||||||
$prod->decrement('stock', $cantidad);
|
$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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+2
-2
@@ -15,8 +15,8 @@ return new class extends Migration
|
|||||||
// Primero hacer la columna nullable si no lo es
|
// Primero hacer la columna nullable si no lo es
|
||||||
$table->unsignedBigInteger('producto_id')->nullable()->change();
|
$table->unsignedBigInteger('producto_id')->nullable()->change();
|
||||||
|
|
||||||
// Eliminar la clave foránea existente usando el nombre exacto
|
// Eliminar la clave foránea existente (compatible con SQLite y MySQL)
|
||||||
$table->dropForeign('detalle_ventas_producto_id_foreign');
|
$table->dropForeign(['producto_id']);
|
||||||
|
|
||||||
// Recrear la clave foránea con SET NULL
|
// Recrear la clave foránea con SET NULL
|
||||||
$table->foreign('producto_id')
|
$table->foreign('producto_id')
|
||||||
|
|||||||
Reference in New Issue
Block a user