CREATE OR REPLACE PROCEDURE FCT_ADD_IDIOMA_PADRAO
AS
    V_NEWCODE    NUMBER;
    V_CDIDIOM    VARCHAR2(10);
    V_MAXCDIDIOM VARCHAR2(10);
    V_NEWCDIDIOM NUMBER;
    V_NRORG      NUMBER;
    V_CDOPERADOR VARCHAR2(12);
    V_DATAATUAL  DATE;
    V_EXISTE     NUMBER;
BEGIN
    V_DATAATUAL := SYSDATE;
    V_NRORG := NVL(SYS_CONTEXT('nrorg_ctx', 'nrorg'), 1);
    V_CDOPERADOR := '1';
    
    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 NULL) THEN

        BEGIN
            SELECT CDIDIOM
              INTO V_CDIDIOM
              FROM (
                SELECT CDIDIOM
                  FROM IDIOMA
                 WHERE UPPER(NMIDIOMA) IN ('PORTUGUES', 'PORTUGUES')
            )
            WHERE ROWNUM = 1;
        EXCEPTION WHEN NO_DATA_FOUND THEN
            V_CDIDIOM := NULL;
        END;

        IF (V_CDIDIOM IS NOT NULL) THEN

            UPDATE IDIOMA
               SET IDPADRAO = 'S'
             WHERE CDIDIOM = V_CDIDIOM;

        ELSE

            BEGIN
                SELECT NVL(MAX(TO_NUMBER(CDIDIOM)), 0)
                  INTO V_MAXCDIDIOM
                  FROM IDIOMA;
            EXCEPTION WHEN NO_DATA_FOUND THEN
                V_MAXCDIDIOM := '0';
            END;

            V_NEWCDIDIOM := TO_NUMBER(V_MAXCDIDIOM) + 1;

            INSERT INTO IDIOMA (
                CDIDIOM,        NMIDIOMA,       NRORG,
                DTINCLUSAO,     NRORGINCLUSAO,  CDOPERINCLUSAO,
                IDATIVO,        IDPADRAO
            )
            VALUES (
                V_NEWCDIDIOM,   'Portugues',    V_NRORG,
                V_DATAATUAL,    V_NRORG,        V_CDOPERADOR,
                'S',            'S'
            );

            V_CDIDIOM := TO_CHAR(V_NEWCDIDIOM);

        END IF; --V_CDIDIOM IS NOT NULL

    END IF; --V_CDIDIOM IS NULL


    IF (V_CDIDIOM IS NOT NULL) THEN

        --Atualiza o idioma da proposta e do contrato
        UPDATE FCT_ORCAMENTO
           SET CDIDIOM = V_CDIDIOM
         WHERE CDIDIOM IS NULL;
        
        UPDATE FCT_CONTRATO
           SET CDIDIOM = V_CDIDIOM
         WHERE CDIDIOM IS NULL;

        --Insere anexo pro idioma padrao para os modelos de documento existentes
        FOR C_DOCUMENTOS IN (
            SELECT NRSEQMODDOCFCT,
                   NMARQUIVO,
                   DSCAMINHOARQ,
                   DSTIPO,
                   VRTAMANHO, 
                   IDATIVO,
                   NRORG,
                   DTINCLUSAO,
                   NRORGINCLUSAO,
                   CDOPERINCLUSAO
              FROM FCT_MODELODOC
             WHERE IDATIVO = 'S'
        ) LOOP

            SELECT COUNT(*)
              INTO V_EXISTE
              FROM FCT_MODELODOCIDIOMA
             WHERE NRSEQMODDOCFCT = C_DOCUMENTOS.NRSEQMODDOCFCT
               AND CDIDIOM        = V_CDIDIOM;

            IF (V_EXISTE = 0) THEN

                NOVO_CODIGO_SC('FCT_MODELODOCIDIOMA', V_NEWCODE, 1, V_NRORG);

                INSERT INTO FCT_MODELODOCIDIOMA (
                    NRMODELODOCIDIOMA,  NRSEQMODDOCFCT,   CDIDIOM,
                    NMARQUIVO,          DSCAMINHOARQ,     DSTIPO,
                    VRTAMANHO,          IDATIVO,          NRORG,
                    DTINCLUSAO,         NRORGINCLUSAO,    CDOPERINCLUSAO
                )
                VALUES (
                    V_NEWCODE,                C_DOCUMENTOS.NRSEQMODDOCFCT,    V_CDIDIOM,
                    C_DOCUMENTOS.NMARQUIVO,   C_DOCUMENTOS.DSCAMINHOARQ,      C_DOCUMENTOS.DSTIPO,
                    C_DOCUMENTOS.VRTAMANHO,   'S',                            V_NRORG,
                    V_DATAATUAL,              V_NRORG,                        V_CDOPERADOR
                );

            END IF; --V_EXISTE = 0

        END LOOP; --C_DOCUMENTOS
    
    ELSE
        RAISE_APPLICATION_ERROR(-20000, 'Nao foi possivel encontrar/inserir um idioma padrao.');
    END IF; --V_CDIDIOM IS NOT NULL
END;
/