Torna al Thread
CREATE
PROCEDURE [dbo].[ControlDate]
(
@codicealbergo Int=null,
@Codicecomalb Int=Null
)
AS
BEGIN
DECLARE @prog_schedina Int
DECLARE @numRow int
DECLARE @numRowA int
DECLARE @numRowP int
DECLARE @codalbergo Int
DECLARE @codcomalb Int
DECLARE @ncomp Int
DECLARE @annogestionale Int
DECLARE @data_elaborazione SmallDateTime
DECLARE @stato Varchar
DECLARE @codstato Int
DECLARE @codcomune Int
DECLARE @Comune Varchar(100)
DECLARE @prov Varchar(2)
SET @numRow = 0
--non è necessaria ma è sempre meglio averla in vista
CREATE TABLE #tblTemp
(
numRow INT,
prog_schedina INT,
codalbergo INT ,
codcomalb INT ,
annogestionale Int,
data_elaborazione SmallDateTime,
data_Arrivo SmallDateTime ,
prog_schedina1 INT,
data_Partenza SmallDateTime ,
codstato int ,
codcom int,
comune Varchar(100),
prov varchar(2)
)
DECLARE ShiftCursorValue CURSOR FOR
SELECT
prog_schedina,
codalbergo,
codcomalb,
annogestionale,
data_elaborazione,
stato,
ncomp,
codstato,
codcomune,
comune,
prov
FROM
Archivio_mov
WHERE
CodAlbergo=@codicealbergo AND
codcomalb=@codicecomalb
order by stato,data_elaborazione
OPEN ShiftCursorValue
FETCH NEXT FROM ShiftCursorValue INTO
@prog_schedina,@codalbergo,@codcomalb,@annogestionale,@data_elaborazione,@stato,@ncomp,@codstato,@codcomune,@comune,@prov
WHILE @@FETCH_STATUS = 0
BEGIN
IF (LTRIM(@stato) = 'A')
BEGIN
SET @numRowA = @ncomp
WHILE @numRowA <> 0
BEGIN
SET @numRow = @numRow + 1
INSERT INTO #tblTemp
(numRow,
prog_schedina,
codalbergo,
codcomalb,
annogestionale,
data_elaborazione,
data_Arrivo,
data_Partenza,
codstato,
codcom,
comune,
prov)
VALUES
(@numRow,
@prog_schedina,
@codalbergo,
@codcomalb,
@annogestionale,
@data_elaborazione,
@data_elaborazione,
null,
@codstato,
@codcomune,
@comune,
@prov)
SET @numRowA = @numRowA -1
END
END
IF (LTRIM(@stato) = 'P')
BEGIN
WHILE @ncomp <> 0
BEGIN
SELECT
@numRowP = MIN(numRow)
FROM
#tblTemp
WHERE
codalbergo = @codalbergo AND
codcomalb = @codcomalb AND
data_Partenza is null AND
codstato = @codstato AND
comune = @comune AND
codcom = @codcomune
UPDATE
#tblTemp
SET
prog_schedina1=@prog_schedina,
data_Partenza = @data_elaborazione
WHERE
(data_Partenza is null AND
codalbergo = @codalbergo AND
codcomalb = @codcomalb AND
codstato = @codstato AND
comune = @comune AND
codcom = @codcomune AND
numRow = @numRowP)
SET @ncomp = @ncomp - 1
END
END
FETCH NEXT FROM ShiftCursorValue INTO
@prog_schedina,@codalbergo,@codcomalb,@annogestionale,@data_elaborazione,@stato,@ncomp,@codstato,@codcomune,@comune,@prov
END
CLOSE ShiftCursorValue
DEALLOCATE ShiftCursorValue
SELECT DISTINCT
prog_schedina,
Albergo.descrizione,
codalbergo,
codcomalb,
annogestionale,
Data_Arrivo,
prog_schedina1,
Data_Partenza,
Codstato,
Nazioni.Nazione,
CodCom,
comune,
prov,
CASE WHEN Data_arrivo > Data_Partenza THEN 'ERRATO' ELSE 'CORRETTO' END as controllo
FROM (
SELECT
prog_schedina,
codalbergo,
codcomalb,
annogestionale,
Data_elaborazione AS Data ,
Data_Arrivo,
prog_schedina1,
Data_Partenza,
CodStato,
CodCom,
comune,
prov
FROM
#tblTemp
UNION ALL
SELECT
prog_schedina,
codalbergo,
codcomalb,
annogestionale,
Data_Partenza AS Data ,
Data_Arrivo,
prog_schedina1,
Data_Partenza,
CodStato,
CodCom,
comune,
prov
FROM
#tblTemp
WHERE
Data_Partenza is not null
) as MOV JOIN Albergo ON Albergo.codalb=MOV.codalbergo AND Albergo.CodComune =MOV.codcomalb
JOIN Nazioni ON Nazioni.codicepgrstatistica=Mov.codstato
WHERE
MOV.CodAlbergo=@codicealbergo AND MOV.codcomalb=@codicecomalb
GROUP BY
prog_schedina,
Albergo.descrizione,
codalbergo,
codcomalb,
annogestionale,
Data_Arrivo,
prog_schedina1,
Data_Partenza,
Codstato,
Nazioni.Nazione,
CodCom,
comune,
prov
ORDER BY codalbergo
Return
END