CREATE OR REPLACE PROCEDURE FCT_PREENCHE_DADOS_NOTAFISC
  (P_NRORG IN NUMBER,
   P_CDFILIAL IN VARCHAR2,
   P_NRLANCTONF IN VARCHAR2, 
   P_NRFATURACONT IN NUMBER,
   P_CDOPERINCLUSAO IN VARCHAR2)
AS
  /*PARAMETROS*/
    V_NRDADOSNF         NUMBER;      /* Sequencial da tabela FCT_DADOSNF (Novo código) */
    V_NRFATURACONT      NUMBER;      /* Vencimento */
    V_NRGRUPOFATURA     NUMBER;      /* Grupo de Faturamento */
    V_NRPARCNEGOCIO     NUMBER;      /* Parceiro de Negócio do Vencimento */
    V_NRESTRUTURAM      NUMBER;      /* Local de Atendimento */
    V_LOCALATENDIMENTO  NUMBER;      /* Parceiro de Negócio do Local de Atendimento */
    V_NRENDERECOPARC    NUMBER;      /* Endereço para NF */
    V_CDTIPOENDERECO    VARCHAR2(30);/* Tipo de Endereço para NF */
    V_CDPAIS            VARCHAR2(4); /* País para NF */
    V_SGESTADO          VARCHAR2(2); /* Estado para NF */
    V_CDMUNICIPIO       VARCHAR2(5); /* Municipio para NF */
    V_CDBAIRRO          VARCHAR2(10);/* Bairro para NF */
    V_CDLOGRADOURO      VARCHAR2(4); /* Logradouro para NF */
    V_NMBAIRROENDERECO  VARCHAR2(100);  /* Nome do Bairro para NF */
    V_DSCOMPLEENDERECO  VARCHAR2(100);  /* Complemento do Endereço para NF */
    V_NRCEPENDERECO     VARCHAR2(15);/* CEP do Endereço para NF */
    V_DSENDERECO        VARCHAR2(250);  /* Descrição do Endereço para NF */
    V_NRIMOVELENDERECO  VARCHAR2(10);/* Nr. Imóvel do endereço para NF */
    V_DSREFERENCIANOTA  VARCHAR2(2000); /* Referencia para NF */
    V_CDCLIENTE         VARCHAR2(21);/* Cliente do Parceiro do Vencimento */
    V_VALIDAENDLOCAL    NUMBER;      /* Variável para Validar o Endereço */
    V_DTINICOMPET       VARCHAR2(30);/* Data Inicial de Competência do Vencimento */
    V_DTFINCOMPET       VARCHAR2(30);/* Data Final de Competência do Vencimento */
    V_DESCRICAOMED      VARCHAR2(4000); /* Descrição da Medição */
    V_CDTIPOOPERFATURA  FCT_FATURACONT.CDTIPOOPERFATURA%TYPE;
    V_CDSERIENF         FCT_FATURACONT.CDSERIENF%TYPE;
    V_CDEMPRESA         FCT_FATURACONT.CDEMPRESA%TYPE;
    V_CDINSCESTA        FCT_FATURACONT.CDINSCESTA%TYPE;
    V_CDINSCMUNI        FCT_FATURACONT.CDINSCMUNI%TYPE;
    V_NRPARCESTRUTURA   ESTRUTURAM.NRPARCNEGOCIO%TYPE;
    V_CDPAISFAT         MUNICIPIO.CDPAIS%TYPE;
    V_SGESTADOFAT       MUNICIPIO.SGESTADO%TYPE;
    V_CDMUNICIPIOFAT    MUNICIPIO.CDMUNICIPIO%TYPE;
    V_IDNATUOPER        FCT_DADOSNF.IDNATUOPER%TYPE;
    V_CDPAISEMP         MUNICIPIO.CDPAIS%TYPE;
    V_SGESTADOEMP       MUNICIPIO.SGESTADO%TYPE;
    V_CDMUNICIPIOEMP    MUNICIPIO.CDMUNICIPIO%TYPE;
    V_IDNATUOPEREMPR    EMPRESA.IDNATUOPEREMPR%TYPE;
BEGIN

    --1 - RECEBE OS DADOS DE VENCIMENTO
    BEGIN
        SELECT FAT.NRFATURACONT,
               FAT.NRGRUPOFATURA,
               FAT.NRPARCFATURA,
               TO_CHAR(FAT.DTINICOMPET,'DD/MM/YYYY') AS DTINICOMPET,
               TO_CHAR(FAT.DTFINCOMPET, 'DD/MM/YYYY') AS DTFINCOMPET,
               FAT.CDTIPOOPERFATURA,
               FAT.CDSERIENF,
               FAT.CDEMPRESA,
               FAT.CDINSCESTA,
               FAT.CDINSCMUNI,
               FAT.NRESTRUTURAM,
               EST.NRPARCNEGOCIO AS NRPARCESTRUTURA,
               FAT.CDPAISFAT,
               FAT.SGESTADOFAT,
               FAT.CDMUNICIPIOFAT,
               FAT.IDNATUOPER
          INTO V_NRFATURACONT,
               V_NRGRUPOFATURA,
               V_NRPARCNEGOCIO,
               V_DTINICOMPET,
               V_DTFINCOMPET,
               V_CDTIPOOPERFATURA,
               V_CDSERIENF,
               V_CDEMPRESA,
               V_CDINSCESTA,
               V_CDINSCMUNI,
               V_NRESTRUTURAM,
               V_NRPARCESTRUTURA,
               V_CDPAISFAT,
               V_SGESTADOFAT,
               V_CDMUNICIPIOFAT,
               V_IDNATUOPER
          FROM FCT_FATURACONT FAT
          LEFT JOIN ESTRUTURAM EST
            ON FAT.NRESTRUTURAM = EST.NRESTRUTURAM
         WHERE FAT.NRORG = P_NRORG
           AND FAT.NRFATURACONT = P_NRFATURACONT;
    EXCEPTION WHEN NO_DATA_FOUND THEN
        V_NRFATURACONT := NULL;
        V_NRGRUPOFATURA := NULL;
        V_NRPARCNEGOCIO := NULL;
        V_DTINICOMPET := NULL;
        V_DTFINCOMPET := NULL;
        V_CDTIPOOPERFATURA := NULL;
        V_CDSERIENF := NULL;
        V_CDEMPRESA := NULL;
        V_CDINSCESTA := NULL;
        V_CDINSCMUNI := NULL;
        V_NRESTRUTURAM := NULL;
        V_NRPARCESTRUTURA := NULL;
        V_CDPAISFAT := NULL;
        V_SGESTADOFAT := NULL;
        V_CDMUNICIPIOFAT := NULL;
        V_IDNATUOPER := NULL;
    END;
   
    --2 - BUSCA O ENDERECO DO LOCAL DE ATENDIMENTO
    IF (V_NRPARCESTRUTURA IS NOT NULL) THEN

        BEGIN
            SELECT NRENDERECOPARC,     CDTIPOENDERECO,      CDPAIS,
                   SGESTADO,           CDMUNICIPIO,         CDBAIRRO,
                   CDLOGRADOURO,       NMBAIRROENDERECO,    DSCOMPLEENDERECO,
                   NRCEPENDERECO,      DSENDERECO,          NRIMOVELENDERECO,
                   DSREFERENCIAENDE
              INTO V_NRENDERECOPARC,   V_CDTIPOENDERECO,    V_CDPAIS,
                   V_SGESTADO,         V_CDMUNICIPIO,       V_CDBAIRRO,
                   V_CDLOGRADOURO,     V_NMBAIRROENDERECO,  V_DSCOMPLEENDERECO,
                   V_NRCEPENDERECO,    V_DSENDERECO,        V_NRIMOVELENDERECO,
                   V_DSREFERENCIANOTA
              FROM ENDERECOPARC
             WHERE NRPARCNEGOCIO  = V_NRPARCESTRUTURA
               AND CDTIPOENDERECO = 'PRINCIPAL'
               AND IDATIVO        = 'S'
               AND NRORG          = P_NRORG;
        EXCEPTION WHEN NO_DATA_FOUND THEN
            V_NRENDERECOPARC := NULL;
            V_CDTIPOENDERECO := NULL;
            V_CDPAIS := NULL;
            V_SGESTADO := NULL;
            V_CDMUNICIPIO := NULL;
            V_CDBAIRRO := NULL;
            V_CDLOGRADOURO := NULL;
            V_NMBAIRROENDERECO := NULL;
            V_DSCOMPLEENDERECO := NULL;
            V_NRCEPENDERECO := NULL;
            V_DSENDERECO := NULL;
            V_NRIMOVELENDERECO := NULL;
            V_DSREFERENCIANOTA := NULL;
        END;

    ELSE
    --3 - CASO NAO TENHA LOCAL DE ATENDIMENTO, E UTILIZADO O ENDERECO DO CLIENTE

        V_NRESTRUTURAM := NULL;
        BEGIN
            SELECT CDCLIENTE
              INTO V_CDCLIENTE
              FROM CLIENTE
             WHERE NRPARCNEGOCIO = V_NRPARCNEGOCIO
               AND NRORG         = P_NRORG
               AND IDCLIEATIV    = 'S'
               AND IDATIVO       = 'S';
        EXCEPTION WHEN NO_DATA_FOUND THEN
            V_CDCLIENTE := NULL;
        END;

        IF (V_CDCLIENTE IS NOT NULL) THEN
            BEGIN
                SELECT NRENDERECOPARC,  'PRINCIPAL',   CDPAIS,
                       SGESTADO,        CDMUNICIPIO,   CDBAIRRO,
                       NULL,            NMBAIRCLIE,    DSCOMPENDCLI,
                       NRCEPCLIE,       DSENDECLIE,    NULL,
                       NULL
                  INTO V_NRENDERECOPARC,  V_CDTIPOENDERECO,   V_CDPAIS,
                       V_SGESTADO,        V_CDMUNICIPIO,      V_CDBAIRRO,
                       V_CDLOGRADOURO,    V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO,
                       V_NRCEPENDERECO,   V_DSENDERECO,       V_NRIMOVELENDERECO,
                       V_DSREFERENCIANOTA
                  FROM ENDECLIE
                 WHERE CDCLIENTE    = V_CDCLIENTE
                   AND IDTPENDECLIE = 'P'
                   AND NRORG        = P_NRORG;
            EXCEPTION WHEN NO_DATA_FOUND THEN
                V_NRENDERECOPARC := NULL;
                V_CDTIPOENDERECO := NULL;
                V_CDPAIS := NULL;
                V_SGESTADO := NULL;
                V_CDMUNICIPIO := NULL;
                V_CDBAIRRO := NULL;
                V_CDLOGRADOURO := NULL;
                V_NMBAIRROENDERECO := NULL;
                V_DSCOMPLEENDERECO := NULL;
                V_NRCEPENDERECO := NULL;
                V_DSENDERECO := NULL;
                V_NRIMOVELENDERECO := NULL;
                V_DSREFERENCIANOTA := NULL;
            END;
        ELSE
            BEGIN
                SELECT NRENDERECOPARC,     CDTIPOENDERECO,      CDPAIS,
                       SGESTADO,           CDMUNICIPIO,         CDBAIRRO,
                       CDLOGRADOURO,       NMBAIRROENDERECO,    DSCOMPLEENDERECO,
                       NRCEPENDERECO,      DSENDERECO,          NRIMOVELENDERECO,
                       DSREFERENCIAENDE
                  INTO V_NRENDERECOPARC,   V_CDTIPOENDERECO,    V_CDPAIS,
                       V_SGESTADO,         V_CDMUNICIPIO,       V_CDBAIRRO,
                       V_CDLOGRADOURO,     V_NMBAIRROENDERECO,  V_DSCOMPLEENDERECO,
                       V_NRCEPENDERECO,    V_DSENDERECO,        V_NRIMOVELENDERECO,
                       V_DSREFERENCIANOTA
                  FROM ENDERECOPARC
                 WHERE NRPARCNEGOCIO  = V_NRPARCNEGOCIO
                   AND CDTIPOENDERECO = 'PRINCIPAL'
                   AND IDATIVO        = 'S'
                   AND NRORG          = P_NRORG;
            EXCEPTION WHEN NO_DATA_FOUND THEN
                V_NRENDERECOPARC := NULL;
                V_CDTIPOENDERECO := NULL;
                V_CDPAIS := NULL;
                V_SGESTADO := NULL;
                V_CDMUNICIPIO := NULL;
                V_CDBAIRRO := NULL;
                V_CDLOGRADOURO := NULL;
                V_NMBAIRROENDERECO := NULL;
                V_DSCOMPLEENDERECO := NULL;
                V_NRCEPENDERECO := NULL;
                V_DSENDERECO := NULL;
                V_NRIMOVELENDERECO := NULL;
                V_DSREFERENCIANOTA := NULL;
            END;
        END IF; --V_CDCLIENTE IS NOT NULL

    END IF; --V_NRPARCESTRUTURA IS NOT NULL

    /* 4 - INSERE OS DADOS NA FCT_DADOSNF */
    IF (V_DSREFERENCIANOTA IS NOT NULL) THEN
        V_DSREFERENCIANOTA := V_DSREFERENCIANOTA||CHR(13)||' PERIODO: '||V_DTINICOMPET||' A '||V_DTFINCOMPET;
    END IF;

    IF (V_NRFATURACONT IS NOT NULL) THEN
        
        IF (V_CDMUNICIPIOFAT IS NOT NULL) THEN
            
            V_CDPAIS := V_CDPAISFAT;
            V_SGESTADO := V_SGESTADOFAT;
            V_CDMUNICIPIO := V_CDMUNICIPIOFAT;

        ELSE

            SELECT IDNATUOPEREMPR
              INTO V_IDNATUOPEREMPR
              FROM EMPRESA
             WHERE CDEMPRESA = V_CDEMPRESA
               AND NRORG     = P_NRORG;

            IF (V_IDNATUOPEREMPR = '01') THEN
                SELECT CDPAIS, SGESTADO, CDMUNICIPIO
                  INTO V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO
                  FROM EMPRESA
                 WHERE CDEMPRESA = V_CDEMPRESA
                   AND NRORG     = P_NRORG;
            END IF;

        END IF;
      
        NOVO_CODIGO_NT('NRDADOSNF', V_NRDADOSNF, 1, P_NRORG);
        --Variavel V_DSREFERENCIANOTA nao esta sendo utilizada
        INSERT INTO FCT_DADOSNF (
            NRDADOSNF     , CDFILIAL         , NRLANCTONF       , NRSEQCONTRATO    ,
            NRPARCNEGOCIO , NRFATURACONT     , NRGRUPOFATURA    , NRESTRUTURAM     ,
            NRAPURACAO    , NRENDERECOPARC   , CDTIPOENDERECO   , CDPAIS           ,
            SGESTADO      , CDMUNICIPIO      , CDBAIRRO         , CDLOGRADOURO     ,
            DSENDERECO    , NRIMOVELENDERECO , NMBAIRROENDERECO , DSCOMPLEENDERECO ,
            NRCEPENDERECO , DSREFERENCIANOTA , NRORG            , IDATIVO          ,
            DTINCLUSAO    , NRORGINCLUSAO    , CDOPERINCLUSAO   , CDTIPOOPERFATURA ,
            CDSERIENF     , CDEMPRESA        , CDINSCESTA       , CDINSCMUNI       ,
            IDNATUOPER
        )
        VALUES (
            V_NRDADOSNF     , P_CDFILIAL         , P_NRLANCTONF       , NULL               ,
            V_NRPARCNEGOCIO , V_NRFATURACONT     , V_NRGRUPOFATURA    , V_NRESTRUTURAM     ,
            NULL            , V_NRENDERECOPARC   , V_CDTIPOENDERECO   , V_CDPAIS           ,
            V_SGESTADO      , V_CDMUNICIPIO      , V_CDBAIRRO         , V_CDLOGRADOURO     ,
            V_DSENDERECO    , V_NRIMOVELENDERECO , V_NMBAIRROENDERECO , V_DSCOMPLEENDERECO ,
            V_NRCEPENDERECO , NULL               , P_NRORG            , 'S'                ,
            SYSDATE         , P_NRORG            , P_CDOPERINCLUSAO   , V_CDTIPOOPERFATURA ,
            V_CDSERIENF     , V_CDEMPRESA        , V_CDINSCESTA       , V_CDINSCMUNI       ,
            V_IDNATUOPER
        );
        
    END IF; --V_NRFATURACONT IS NOT NULL
END;
/
