phronCare/Story 9 - Stock Reservation.sql
leandro dc08291932
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (pull_request) Successful in 4m10s
feat(sales): scaffold EF para Delivery Notes
Closes #11
2026-03-16 19:42:56 -03:00

135 lines
3.2 KiB
Transact-SQL

/* =========================================================
VERIFICACIÓN STORY #9
Expedición -> EnTransito + reservas de stock
========================================================= */
SET NOCOUNT ON;
DECLARE @ExpeditionNumber VARCHAR(50) = 'X-00000054'; -- cambiar
DECLARE @ExpeditionId INT;
SELECT @ExpeditionId = id
FROM dbo.PhLSM_ExpeditionHeaders
WHERE expeditionnumber = @ExpeditionNumber;
IF @ExpeditionId IS NULL
BEGIN
RAISERROR('Expedición no encontrada',16,1);
RETURN;
END
PRINT 'ExpeditionId: ' + CAST(@ExpeditionId AS VARCHAR);
-------------------------------------------------------------
-- 1. CABECERA
-------------------------------------------------------------
PRINT '===== CABECERA =====';
SELECT
id,
expeditionnumber,
issuedate,
status,
observations
FROM dbo.PhLSM_ExpeditionHeaders
WHERE id = @ExpeditionId;
-------------------------------------------------------------
-- 2. DETALLES
-------------------------------------------------------------
PRINT '===== DETALLES =====';
SELECT
d.id,
d.expedition_id,
d.product_id,
d.stockitem_id,
d.quantity,
d.batch,
d.serial,
d.expiration
FROM dbo.PhLSM_ExpeditionDetails d
WHERE d.expedition_id = @ExpeditionId
ORDER BY d.id;
-------------------------------------------------------------
-- 3. RESERVAS CREADAS
-------------------------------------------------------------
PRINT '===== RESERVAS =====';
SELECT
r.id,
r.source_type,
r.source_id,
r.stockitem_id,
r.reserved_quantity,
r.status,
r.createdat
FROM dbo.PhLSM_StockReservation r
WHERE r.source_type = 1
AND r.source_id = @ExpeditionId
ORDER BY r.id;
-------------------------------------------------------------
-- 4. STOCK ITEMS AFECTADOS
-------------------------------------------------------------
PRINT '===== STOCK ITEMS =====';
SELECT
si.id,
si.product_id,
si.location_id,
si.quantity,
si.reserved_quantity,
(si.quantity - si.reserved_quantity) AS available
FROM dbo.PhLSM_StockItem si
WHERE si.id IN
(
SELECT stockitem_id
FROM dbo.PhLSM_ExpeditionDetails
WHERE expedition_id = @ExpeditionId
);
-------------------------------------------------------------
-- 5. VALIDACIÓN DETALLE VS RESERVA
-------------------------------------------------------------
PRINT '===== VALIDACION =====';
SELECT
d.id AS detail_id,
d.stockitem_id,
d.quantity AS requested,
r.reserved_quantity,
CASE
WHEN r.id IS NULL THEN 'FALTA RESERVA'
WHEN r.reserved_quantity <> d.quantity THEN 'CANTIDAD DISTINTA'
ELSE 'OK'
END AS resultado
FROM dbo.PhLSM_ExpeditionDetails d
LEFT JOIN dbo.PhLSM_StockReservation r
ON r.source_id = d.expedition_id
AND r.stockitem_id = d.stockitem_id
AND r.source_type = 1
AND r.status = 1
WHERE d.expedition_id = @ExpeditionId;
-------------------------------------------------------------
-- 6. CHEQUEO DE DUPLICADOS
-------------------------------------------------------------
PRINT '===== DUPLICADOS =====';
SELECT
stockitem_id,
COUNT(*) AS cantidad
FROM dbo.PhLSM_StockReservation
WHERE source_type = 1
AND source_id = @ExpeditionId
AND status = 1
GROUP BY stockitem_id
HAVING COUNT(*) > 1;