CREATE OR REPLACE PROCEDURE FCT_AJUSTAR_ORCAMENTODOC
AS
    V_NRORG         NUMBER;
    V_CDOPERADOR    VARCHAR2(12);
    V_CDIDIOM       IDIOMA.CDIDIOM%TYPE;
    V_DATAATUAL     DATE;
    V_EXISTEIDIOMA  NUMBER;
    V_EXISTESITU    NUMBER;
    V_NOVOCODIGO    NUMBER;
BEGIN
    V_NRORG := NVL(SYS_CONTEXT('nrorg_ctx', 'nrorg'), 1);
    V_CDOPERADOR := '1';
    V_DATAATUAL := SYSDATE;

    BEGIN
        SELECT CDIDIOM
          INTO V_CDIDIOM
          FROM IDIOMA
         WHERE IDPADRAO = 'S';
    EXCEPTION WHEN NO_DATA_FOUND THEN
        V_CDIDIOM := NULL;
    END;

    IF (V_CDIDIOM IS NOT NULL) THEN

        FOR C_DOCPROP IN (
            SELECT DOC.NRSEQORCAMENTO,
                   DOC.NRSEQMODDOCFCT,
                   DOC.NRSEQORCADOC,
                   DOC.NMARQUIVO,
                   DOC.DSCAMINHOARQ,
                   DOC.DSTIPO,
                   DOC.VRTAMANHO
              FROM FCT_ORCAMENTODOC DOC
              JOIN FCT_ORCAMENTO ORC
                ON DOC.NRSEQORCAMENTO = ORC.NRSEQORCAMENTO
             WHERE DOC.IDSITUACAOORCAMENTO IS NOT NULL
               AND DOC.IDSITUACAOORCAMENTO IN ('CONCLUIDO', 'ELABORACAO')
             ORDER BY NRSEQORCAMENTO DESC
        ) LOOP

            SELECT COUNT(*)
              INTO V_EXISTEIDIOMA
              FROM FCT_ORCAMENTODOCIDIOMA
             WHERE NRSEQORCADOC = C_DOCPROP.NRSEQORCADOC
               AND CDIDIOM      = V_CDIDIOM;

            IF (V_EXISTEIDIOMA = 0) THEN

                NOVO_CODIGO_SC('FCT_ORCAMENTODOCIDIOMA', V_NOVOCODIGO, 1, V_NRORG);
                INSERT INTO FCT_ORCAMENTODOCIDIOMA (
                    NRORCAMENTODOCIDIOMA,   NRSEQORCADOC,       CDIDIOM,
                    NMARQUIVO,              DSCAMINHOARQ,       DSTIPO,
                    VRTAMANHO,              IDATIVO,            NRORG,
                    DTINCLUSAO,             NRORGINCLUSAO,      CDOPERINCLUSAO
                )
                VALUES (
                    V_NOVOCODIGO,           C_DOCPROP.NRSEQORCADOC,     V_CDIDIOM,
                    C_DOCPROP.NMARQUIVO,    C_DOCPROP.DSCAMINHOARQ,     C_DOCPROP.DSTIPO,
                    C_DOCPROP.VRTAMANHO,    'S',                        V_NRORG,
                    V_DATAATUAL,            V_NRORG,                    V_CDOPERADOR
                );

            END IF; --V_EXISTEIDIOMA = 0

            
            SELECT COUNT(*)
              INTO V_EXISTESITU
              FROM FCT_ORCAMENTODOCSITU
             WHERE NRSEQORCADOC = C_DOCPROP.NRSEQORCADOC;

            IF (V_EXISTESITU = 0) THEN
                
                --loop de situacoes
                FOR C_SITUACOES IN (
                    SELECT IDSITUACAOORCAMENTO
                      FROM FCT_ORCAMENTODOC
                     WHERE NRSEQORCAMENTO = C_DOCPROP.NRSEQORCAMENTO
                       AND NRSEQMODDOCFCT = C_DOCPROP.NRSEQMODDOCFCT
                ) LOOP

                    NOVO_CODIGO_SC('FCT_ORCAMENTODOCSITU', V_NOVOCODIGO, 1, V_NRORG);
                    INSERT INTO FCT_ORCAMENTODOCSITU (
                        NRORCAMENTODOCSITU, NRSEQORCADOC,   IDSITUACAOORCAMENTO,
                        IDATIVO,            NRORG,          DTINCLUSAO,
                        NRORGINCLUSAO,      CDOPERINCLUSAO
                    )
                    VALUES (
                        V_NOVOCODIGO,   C_DOCPROP.NRSEQORCADOC,     C_SITUACOES.IDSITUACAOORCAMENTO,
                        'S',            V_NRORG,                    V_DATAATUAL,
                        V_NRORG,        V_CDOPERADOR
                    );

                END LOOP; --C_SITUACOES

            END IF; --V_EXISTESITU = 0

        END LOOP; --C_DOCPROP

    END IF; --V_CDIDIOM IS NOT NULL

END;
/