create or replace
PROCEDURE IMPORTA_MUNICIPIO_SAP
IS
   V_CDPAIS      INTEGER;
   V_SGESTADO    INTEGER;
   V_CDMUNICIPIO INTEGER;
   V_MUNIIBGE    INTEGER;
   V_NMMUNIIBGE  VARCHAR2(40);
   
BEGIN
   FOR C_MUNICIPIO IN
       (SELECT U.CDPAIS, U.SGESTADO, U.NMMUNICIPIO, U.CDMUNICIPIOIBGE, U.IDINTERFACE, U.TPINTERFACE
          FROM USR_SAP_MUNICIPIO U
         WHERE U.DTINTERFACEDEST IS NULL)
   LOOP
      SELECT COUNT(1) AS CDPAIS
        INTO V_CDPAIS
        FROM PAIS
       WHERE CDPAIS = C_MUNICIPIO.CDPAIS;
      IF V_CDPAIS > 0 THEN
         SELECT COUNT(1) AS SGESTADO
           INTO V_SGESTADO
           FROM ESTADO
          WHERE CDPAIS   = C_MUNICIPIO.CDPAIS
            AND SGESTADO = C_MUNICIPIO.SGESTADO;
         IF V_SGESTADO > 0 THEN
            SELECT COUNT(1) CDMUNICIBGE
              INTO V_MUNIIBGE
              FROM MUNICIPIO
             WHERE CDMUNICIBGE = C_MUNICIPIO.CDMUNICIPIOIBGE;
            IF V_MUNIIBGE = 0 THEN
               SELECT CASE WHEN NOVOCDMUNIC = 9998 
                      THEN 0
                      ELSE NOVOCDMUNIC END NOVOMUNIC
                      INTO V_CDMUNICIPIO
                 FROM (SELECT (MAX(CDMUNICIPIO) + 1) NOVOCDMUNIC  
                         FROM MUNICIPIO
                        WHERE CDMUNICIPIO < 9998
                          AND CDPAIS   = C_MUNICIPIO.CDPAIS
                          AND SGESTADO = C_MUNICIPIO.SGESTADO);
               IF V_CDMUNICIPIO <> 0 THEN
                  INSERT INTO MUNICIPIO(CDPAIS, SGESTADO, CDMUNICIPIO, NMMUNICIPIO, CDMUNICIBGE)
                  VALUES (C_MUNICIPIO.CDPAIS, C_MUNICIPIO.SGESTADO, V_CDMUNICIPIO, C_MUNICIPIO.NMMUNICIPIO, C_MUNICIPIO.CDMUNICIPIOIBGE);
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_MUNICIPIO.IDINTERFACE, 'I', 4, SYSDATE, 1, 'Munic'||CHR(237)||'pio '|| C_MUNICIPIO.CDMUNICIPIOIBGE || ' - ' || C_MUNICIPIO.NMMUNICIPIO ||' Cadastrado com sucesso.');
                  
                  UPDATE USR_SAP_MUNICIPIO SET DTINTERFACEDEST = SYSDATE, STATUS = 0
                   WHERE IDINTERFACE = C_MUNICIPIO.IDINTERFACE;
               END IF;
            ELSE
               SELECT MAX(CDMUNICIPIO || ' - ' || NMMUNICIPIO)
                 INTO V_NMMUNIIBGE
                 FROM MUNICIPIO
                WHERE CDPAIS      = C_MUNICIPIO.CDPAIS
                  AND SGESTADO    = C_MUNICIPIO.SGESTADO
                  AND CDMUNICIBGE = C_MUNICIPIO.CDMUNICIPIOIBGE;
               
               INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
               VALUES(C_MUNICIPIO.IDINTERFACE, 'I', 4, SYSDATE, 1, 'C'||CHR(243)||'digo IBGE '|| C_MUNICIPIO.CDMUNICIPIOIBGE ||' j'||chr(225)||' cadastrado para o municipio '|| V_NMMUNIIBGE || ' no sistema Teknisa');
               
               UPDATE USR_SAP_MUNICIPIO SET STATUS = 2
                WHERE IDINTERFACE = C_MUNICIPIO.IDINTERFACE;
            END IF;
--            COMMIT;
         ELSE
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_MUNICIPIO.IDINTERFACE, 'I', 4, SYSDATE, 1, 'Sigla do estado '|| C_MUNICIPIO.SGESTADO ||', relacionado ao munic'||CHR(237)||'pio '|| C_MUNICIPIO.CDMUNICIPIOIBGE ||', n'||CHR(227)||'o cadastrada no sistema Teknisa');
            
            UPDATE USR_SAP_MUNICIPIO SET STATUS = 2
             WHERE IDINTERFACE = C_MUNICIPIO.IDINTERFACE;
--            COMMIT;
         END IF;
      ELSE
         INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
         VALUES(C_MUNICIPIO.IDINTERFACE, 'I', 4, SYSDATE, 1, 'C'||CHR(243)||'digo do pa'||CHR(237)||'s '||C_MUNICIPIO.CDPAIS  ||', relacionado ao munic'||CHR(237)||'pio '|| C_MUNICIPIO.CDMUNICIPIOIBGE || ', n'||CHR(227)||'o cadastrado no sistema Teknisa');
         
         UPDATE USR_SAP_MUNICIPIO SET STATUS = 2
          WHERE IDINTERFACE = C_MUNICIPIO.IDINTERFACE;
--         COMMIT;
      END IF;
   END LOOP;
   COMMIT;
END;

/

-- VERSAO --
BEGIN ATUVEROBJ('IMPORTA_MUNICIPIO_SAP','5.42.XXX'); END;
/