SET TERM ^ ;
CREATE PROCEDURE SP_MOV_FINANCEIRO (DATA1 DATE,DATA2 DATE)
RETURNS (TIPO VARCHAR(200),
         CD VARCHAR(20),
         DATA_MOV DATE,
         VALOR DECIMAL(15,2),
         IDENTIFICADOR VARCHAR(20),
         USUARIO VARCHAR(10))
AS BEGIN
   FOR
        SELECT CAST('Diária(s) da Hospedagem N.º ' || ID_WALK_IN || ' -> (' || FORMA_PAG || ')' AS VARCHAR(200)) AS TIPO,
               CAST('Entrada (+)' AS VARCHAR(20)) AS CD,
               DATA_SAIDA AS DATA_MOV,
               VALOR_DIARIA AS VALOR,
               CAST(ID_WALK_IN AS VARCHAR(20)) AS IDENTIFICADOR,
               USUARIO
        FROM WALK_IN
        WHERE BAIXA = 'S'
        AND DATA_SAIDA >= :DATA1
        AND DATA_SAIDA <= :DATA2
        AND FORMA_PAG <> 'Nota'
        AND EXCLUIDO = 'N'
        UNION
        SELECT CAST('Consumos da Hospedagem N.º ' || D.ID_ENTRADA || ' -> ' || PS.DESCRICAO || ' (' || D.QTD || ') (' || D.FORMA_PAG || ')' AS VARCHAR(200)) AS TIPO,
               CAST('Entrada (+)' AS VARCHAR(20)) AS CD,
               D.DATA AS DATA_MOV,
               D.VALOR_UNIT AS VALOR,
               CAST(D.ID_DESPESA_UH AS VARCHAR(20)) AS IDENTIFICADOR,
               D.USUARIO
        FROM DESPESA_UH D,PRODUTOS_SERVICOS PS
        WHERE D.PAGO = 'S'
        AND D.ID_P_S = PS.ID_P_S
        AND D.DATA >= :DATA1
        AND D.DATA <= :DATA2
        AND D.FORMA_PAG <> 'Nota'
        AND D.ID_ENTRADA NOT IN (SELECT ID_WALK_IN FROM WALK_IN WHERE EXCLUIDO = 'S')
        UNION
        SELECT CAST('Retirada de Fundo de Caixa - ' || DESCRICAO || ' - (' || TIPO || ')' AS VARCHAR(200)) AS TIPO,
               CAST('Saída (-)' AS VARCHAR(20)) AS CD,
               DATA_RET AS DATA_MOV,
               VALOR AS VALOR,
               CAST(ID_RET_CAIXA AS VARCHAR(20)) AS IDENTIFICADOR,
               USUARIO
        FROM RET_CAIXA
        WHERE DATA_RET >= :DATA1
        AND DATA_RET <= :DATA2
        UNION
        SELECT CAST('Consumo Avulso N.º ' || D.ID_DESPESA_AVULSA || ' -> ' || PS.DESCRICAO || ' (' || D.QTD || ') (' || D.FORMA_PAG || ')' AS VARCHAR(200)) AS TIPO,
               CAST('Entrada (+)' AS VARCHAR(20)) AS CD,
               D.DATA AS DATA_MOV,
               D.VALOR_UNIT AS VALOR,
               CAST(D.ID_DESPESA_AVULSA AS VARCHAR(20)) AS IDENTIFICADOR,
               D.USUARIO
        FROM DESPESA_AVULSA D,PRODUTOS_SERVICOS PS
        WHERE D.ID_P_S = PS.ID_P_S
        AND D.DATA >= :DATA1
        AND D.DATA <= :DATA2
        UNION
        SELECT CAST('Reposição de Caixa -> ' || DESCRICAO || ' (' || TIPO || ')' AS VARCHAR(200)) AS TIPO,
               CAST('Entrada (+)' AS VARCHAR(20)) AS CD,
               DATA_ADIC AS DATA_MOV,
               VALOR,
               CAST(ID_ADIC_CAIXA AS VARCHAR(20)) AS IDENTIFICADOR,
               USUARIO
        FROM ADIC_CAIXA
        WHERE DATA_ADIC >= :DATA1
        AND DATA_ADIC <= :DATA2
        UNION
        SELECT CAST('Recebimento de Nota Pendente -> Entrada N.º ' || W.ID_WALK_IN || ' (' || C.NOME || ') (' || N.FORMAPAG || ')' AS VARCHAR(200)) AS TIPO,
               CAST('Entrada (+)' AS VARCHAR(20)) AS CD,
               N.DATA_PAG AS DATA_MOV,
               N.VALOR,
               CAST(N.ID_NOTA AS VARCHAR(20)) AS IDENTIFICADOR,
               N.USUARIO
        FROM NOTA N,WALK_IN W,CLIENTE C
        WHERE N.ID_ENTRADA = W.ID_WALK_IN
        AND W.ID_CLIENTE = C.ID_CLIENTE
        AND N.DATA_PAG >= :DATA1
        AND N.DATA_PAG <= :DATA2
        AND N.PAGO = 'S'
        ORDER BY 3,2,1
        INTO :TIPO,:CD,:DATA_MOV,:VALOR,:IDENTIFICADOR,:USUARIO
   DO
SUSPEND;

END  ^
SET TERM ;^

