Si hicimos un downgrade anteriormente, y podemos cerrar mesa y pagarla, pero al querer cancelar el cheque, nos aparece lo siguiente:
Debemos correr el siguiente query:
ALTER PROCEDURE [dbo].[sp_CancelaCheque]
@NumCheque int = 0,
@Autoriza int = 0 AS
BEGIN
DECLARE @@ViejoIdMesa as int, @@NuevoIdMesa as int
SET NOCOUNT ON
SELECT @@ViejoIdMesa = IdMesa FROM Mesas WHERE NumCheque = @NumCheque AND StatusMesa = 1
INSERT Mesas(NumCheque, FechaDelDia, Mesa, FechaHora, Personas, IdEmpleado, Total, Descuento, IVA, Propina, StatusMesa, Numfactura, VieneDel, IdCaja, IdCajero, IdDescuento, IdCliente,
CambioAMesa, QuienAutoriza, IdPrecioEspecial)
SELECT 0,FechaDelDia, Mesa, FechaHora, Personas, IdEmpleado, Total, Descuento, IVA, Propina, 0, NumFactura, @NumCheque, IdCaja, IdCajero, IdDescuento, IdCliente,
CambioAMesa, QuienAutoriza, IdPrecioEspecial FROM Mesas
WHERE NumCheque = @NumCheque AND StatusMesa = 1
SELECT @@NuevoIdMesa = IdMesa FROM Mesas WHERE VieneDel = @NumCheque
UPDATE Mesas SET StatusMesa = 3, FechaHora = GETDATE(), QuienAutoriza = @Autoriza WHERE IdMesa = @@ViejoIdMesa
--- Mete los que NO son Paquetes:
INSERT Comandas(IdMesa, NumComanda, IdProducto, Cantidad, Precio, Descuento, Monto, IVA, IdEmpleado,
QueHizo, AQueHora, Modificadores, Tiempo, Enviada, Servida, CodigosModificadores,
Persona, IEPS, EsPaquete, IdComandaPaquete)
SELECT @@NuevoIdMesa, NumComanda, IdProducto, Cantidad, Precio, Descuento, Monto, IVA, IdEmpleado,
6, AQueHora, Modificadores, Tiempo, Enviada, Servida, CodigosModificadores,
Persona, IEPS, EsPaquete, IdComandaPaquete FROM Comandas
WHERE IdMesa = @@ViejoIdMesa AND (EsPaquete <> 1 OR EsPaquete IS NULL)
--- Mete los que son Paquetes:
DECLARE @strSQL nvarchar(max), @EsteIdComanda int, @IdPrincipal int, @EsPaquete bit
DECLARE PaquetesMesaVieja CURSOR STATIC FOR
SELECT IdComanda, EsPaquete
FROM Comandas
WHERE IdMesa = @@ViejoIdMesa AND (EsPaquete = 1 AND EsPaquete IS NOT NULL) AND (IdComandaPaquete = 0 OR IdComandaPaquete IS NULL)
ORDER BY IdComanda
OPEN PaquetesMesaVieja
FETCH NEXT FROM PaquetesMesaVieja INTO @EsteIdComanda, @EsPaquete
WHILE @@FETCH_STATUS = 0
BEGIN
SET @IdPrincipal = 0
INSERT Comandas(IdMesa, NumComanda, IdProducto, Cantidad, Precio, Descuento, Monto, IVA, IdEmpleado,
QueHizo, AQueHora, Modificadores, Tiempo, Enviada, Servida, CodigosModificadores,
Persona, IEPS, EsPaquete, IdComandaPaquete)
SELECT @@NuevoIdMesa, NumComanda, IdProducto, Cantidad, Precio, Descuento, Monto, IVA, IdEmpleado,
6, AQueHora, Modificadores, Tiempo, Enviada, Servida, CodigosModificadores,
Persona, IEPS, EsPaquete, 0
FROM Comandas WHERE IdComanda = @EsteIdComanda
SELECT @IdPrincipal = SCOPE_IDENTITY();
INSERT Comandas(IdMesa, NumComanda, IdProducto, Cantidad, Precio, Descuento, Monto, IVA, IdEmpleado,
QueHizo, AQueHora, Modificadores, Tiempo, Enviada, Servida, CodigosModificadores,
Persona, IEPS, EsPaquete, IdComandaPaquete)
SELECT @@NuevoIdMesa, NumComanda, IdProducto, Cantidad, Precio, Descuento, Monto, IVA, IdEmpleado,
6, AQueHora, Modificadores, Tiempo, Enviada, Servida, CodigosModificadores,
Persona, IEPS, EsPaquete, @IdPrincipal
FROM Comandas WHERE IdComandaPaquete = @EsteIdComanda
FETCH NEXT FROM PaquetesMesaVieja INTO @EsteIdComanda, @EsPaquete
END
CLOSE PaquetesMesaVieja
DEALLOCATE PaquetesMesaVieja
UPDATE Comandas SET QueHizo = 3, NumComanda = 0, AQueHora = GETDATE() WHERE IdMesa = @@ViejoIdMesa
IF ((SELECT COUNT(*)
FROM sysobjects WHERE name = 'PI_RelacionPedidosMesas') <> 0)
UPDATE PI_RelacionPedidosMesas SET IdMesa = @@NuevoIdMesa WHERE IdMesa = @@ViejoIdMesa
DELETE Pagos WHERE IdMesa = @@ViejoIdMesa
DELETE CancelacionComandas WHERE QueHizo = 10 AND IdMesa = @@ViejoIdMesa
UPDATE Facturas SET Cancelada = 1 WHERE IdMesa = @@ViejoIdMesa
SELECT @@NuevoIdMesa
END