Para cancelar la reserva de la SCC y que permita seleccionar los sku´s restantes en la SCC hay que ejecutar el siguiente query:
DECLARE @SCC nvarchar(10) = '875401796' -- se cambia solo el valor el núm de SCC
DECLARE @SEND int = 0; -- se deja en 0 para consultar si tiene reserva, en caso de que tenga se cambia el valor a 1 y se ejecuta, se vuelve a dejar en 0
-- para consulta, una vez generado se espera 1 minuto y ya debe de estar liberada la reserva
DECLARE @ID int, @skuid int,@store int,@ReservedQty int, @Order int = 13578;
SELECT @store = Storenumber FROM Store(nolock) where StoreType = 1
SELECT agreementid,itemstatus, skuid,QuantityRequired,QuantitySold,ReservedQty
Into #SCCItems
from Store_SccItems (NOLOCK) where agreementid = @SCC and ReservedQty > 0
--Select * from #SCCItems;
Select scc.agreementid,scc.SkuId,
Avg(scc.ReservedQty)'ReservedQty',SUM(ISNULL(CASE WHEN oh.TypeOfsale != 0 THEN od.QuantityOrd ELSE 0 END,0)) 'SCCLock', row_number() over (partition by agreementid order by SkuId asc) as ID
--oh.CreateDate,oh.ordernumber,OH.sccid,Oh.OrderStatus 'OrderStatusHeader',oh.TypeOfSale, Od.OrderStatus 'OrderStatusDetail',Od.sccPriceAgreementId,OD.SKU, od.QuantityOrd
INTO #OrderSku
from #SCCItems scc
LEFT JOIN Orderdetail od (NOLOCK) ON od.SKU = scc.SkuId and od.sccPriceAgreementId = @SCC and od.OrderStatus != 'F'
LEFT JOIN OrderHeader oh (NOLOCK) ON oh.ordernumber = od.ordernumber AND oh.OrderStatus != 'F'
Where scc.skuid is not NULL and ReservedQty > 0 --and not oh.ordernumber is null
GROUP BY scc.agreementid,scc.skuid
DELETE #OrderSku Where ReservedQty-SCCLock = 0
SELECT agreementid,SkuId,ReservedQty,SCCLock FROM #OrderSku
WHILE EXISTS(SELECT TOP 1 * FROM #OrderSku)
BEGIN
DECLARE @xml nvarchar(max) = '<ProPricingAgreement Code="{SCC}" StoreCode="{STORE}" DocNumber="{DOC}"><Products><Product ProductCode="{SKU}" SoldQty="-{RESERVED}"/></Products></ProPricingAgreement>'
SELECT TOP 1 @ID = ID, @skuid = SkuId,@ReservedQty=ReservedQty-SCCLock FROM #OrderSku ORDER BY ID ASC
--SELECT ID, SkuId, ReservedQty-SCCLock FROM #OrderSku where id = @ID
SET @xml = REPLACE(@xml, '{SCC}', @SCC)
SET @xml = REPLACE(@xml, '{STORE}', @STORE)
SET @xml = REPLACE(@xml, '{DOC}', @Order)
SET @xml = REPLACE(@xml, '{SKU}', @skuid)
SET @xml = REPLACE(@xml, '{RESERVED}', @ReservedQty)
SELECT @XML
IF(@SEND = 1)
BEGIN
SELECT 'ENVIO DE CANCELACION DE RESERVA' 'Action'
Insert OutboundIntegrationTransactions Values (1,248,'ProPricingAgreementUpdateSoldQty',@XML,1,null,null,null,null,0,1,current_timestamp)
UPDATE Store_SccItems SET ReservedQty = 0 where agreementid = @SCC and ReservedQty > 0 and skuid = @skuid
END
DELETE #OrderSku WHERE ID = @ID
END
DROP TABLE #SCCItems
DROP TABLE #OrderSku
1.- El único valor que se modifica es el número de la SCC
2.- Se ejecuta así tal cual con el valor de SEND = 0 para consultar si se tiene reserva.
3.- Si se observa que se tiene reserva y se quiere liberar hay que cambiar el valor de SEND a 1 y ejecutar el query nuevamente. Esto nos va cancelar la reserva.
4.- Si se vuelve a ejecutar con SEND = 0 (a modo de consulta) ya no debería de mostrar información. Posterior a esto solo hay que esperar 1 minuto y ya se verán reflejadas las cantidades completas de la SCC.