SQL Server - Disponibilidad de Inventario

 
Vista:
sin imagen de perfil

Disponibilidad de Inventario

Publicado por Luis (1 intervención) el 14/09/2023 00:43:50
Necesito saber la disponibilidad de Inventario para una fecha postfechada es decir. Tengo mi tabla de Reservaciones donde realizo las reservaciones una x cantidad mobiliario. Y tengo una tabla llamada Tempory_Reserva en donde registro las Reservaciones Postfechadas.
Tengo en Inventario registrado 1690 sillas. Vengo y realizo una reservacion para la fecha 2023-09-16 de 90 sillas, logicamente me resta las 90 sillas porque esta dentro de los 6 dias habiles que se pueden restar de Inventario.
Luego vengo y realizo otra reservacion solo que para la fecha 2023-10-15 (Reservacion posfechada) al buscar en inventario la logica que tengo es que me aparecen las 1690 sillas disponibles porque asumo que ya las 90 sillas reservadas anteriormente retornaron en un lapso de 24 horas. Luego escogo la misma fecha postfecha 2023-10-15 y efectivamente para esa fecha me resta las sillas que tengo reservadas en mi tabla Tempory_Reserva las 90 sillas. Pero vengo y escogo la fecha del 2023-10-20 deberian de estar disponibles nuevamente las 1690 sillas lo cual no lo hace y me sigue restando las 90 sillas.


Estas es mi consulta en sql server


DECLARE @FechaDeseada DATE = '2023-10-08';
WITH Reservas AS (
SELECT Cod_Invent, SUM(Cantidad) AS CantidadReservada
FROM (
SELECT Cod_Invent, Cantidad
FROM Reservaciones
WHERE Fecha <= @FechaDeseada AND Estado = 'RESERVADO'
UNION ALL
SELECT Cod_Invent, -Cantidad
FROM Reservaciones
WHERE Fecha > @FechaDeseada AND Estado = 'RESERVADO'
) AS subquery
GROUP BY Cod_Invent
), Tempory AS (
SELECT Cod_Invent, SUM(Cantidad) AS CantidadTempReserva
FROM (
SELECT Cod_Invent, CASE WHEN Fecha <= @FechaDeseada THEN Cantidad ELSE 0 END AS Cantidad
FROM Tempory_Reserva
WHERE Estado = 'RESERVADO' AND Fecha <= @FechaDeseada
UNION ALL
SELECT Cod_Invent, -Cantidad
FROM Tempory_Reserva
WHERE Fecha > @FechaDeseada AND Estado = 'RESERVADO'
) AS subquery
GROUP BY Cod_Invent
)
SELECT i.Cod_Invent, i.Descrip,
i.Existencia - ISNULL(Reservas.CantidadReservada, 0) - ISNULL(Tempory.CantidadTempReserva, 0) AS DisponibilidadTotal,
i.Precio,
i.Color
FROM Inventario AS i
LEFT JOIN Reservas ON i.Cod_Invent = Reservas.Cod_Invent
LEFT JOIN Tempory ON i.Cod_Invent = Tempory.Cod_Invent
WHERE i.Descrip LIKE '%Dato de sillas%'
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder