--===========================================================================--
-- ##INI :: IMPORTACAO DAS UNIDADES DA ESTRUTURA ORGANIZACIONAL DO ORGAO     --
--===========================================================================--

BEGIN;  -- #INI :: INICIALIZA AS TABELAS
    DELETE FROM public.seguranca_usuario_privilegio;
    DELETE FROM public.usuarioorganizacaoitem;
    DELETE FROM public.seguranca_usuario;
    DELETE FROM public.configuracaoparametrosistema;
    DELETE FROM public.configuracao;
    DELETE FROM public.estruturaorganizacional;
    DELETE FROM public.localizacao;
    DELETE FROM public.organizacao;   
    DELETE FROM public.centrocusto;
    DELETE FROM public.contacontabil;
    UPDATE public.menu SET editor_id = NULL;
COMMIT; -- #FIM :: INICIALIZA AS TABELAS


BEGIN;  -- #INI :: IMPORTACAO DO ORGAO >> ORGANIZACAO
    INSERT INTO public.organizacao
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , codigo
         , datafim
         , datainicio
         , datareferenciavigente
         , nome
         , sigla 
         , inativador_id
         , autor_id
         , editor_id
         )
    SELECT ORG.ID_ORGAO    AS id
         , ORG.DT_BLOQUEIO AS databloqueio
         , NULL            AS datainativo
         , LOCALTIMESTAMP  AS datacriacao
         , LOCALTIMESTAMP  AS dataedicao
         , 0               AS "version"
         , ORG.CD_ORGAO    AS codigo
         , NULL            AS datafim
         , TO_DATE('19730117', 'YYYYMMDD') AS datainicio
         , (select to_date(UG.NR_ANO_FECHAMENTO::TEXT||UG.NR_MES_FECHAMENTO::TEXT, 'YYYYMM') + interval '1 month' FROM ASIWEB.CR_UG UG WHERE DT_BLOQUEIO IS NULL) AS datareferenciavigente
         , ORG.NM_ORGAO    AS nome
         , ORG.SG_ORGAO    AS sigla
         , NULL            AS inativador_id
         , NULL            AS autor_id
         , NULL            AS editor_id
    FROM ASIWEB.CR_ORGAO ORG
    ORDER BY ORG.ID_ORGAO;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DO ORGAO >> ORGANIZACAO';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_ORGAO);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.ORGANIZACAO);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DO ORGAO >> ORGANIZACAO


BEGIN;  -- #INI :: IMPORTACAO DOS CENTROS DE CUSTO >> CENTROCUSTO
    INSERT INTO public.centrocusto
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , codigo
         , descricao
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , centrocustoparent_id
         )
    SELECT CC.ID_CENTRO_CUSTO AS id
         , NULL               AS databloqueio
         , NULL               AS datainativo
         , LOCALTIMESTAMP     AS datacriacao
         , LOCALTIMESTAMP     AS dataedicao
         , 0                  AS "version"
         , CC.CD_CENTRO_CUSTO AS codigo
         , CC.NM_CENTRO_CUSTO AS descricao
         , NULL               AS inativador_id
         , NULL               AS autor_id
         , NULL               AS editor_id
         , 1                  AS organizacao_id
         , NULL               AS centrocustoparent_id 
         -- DISTINCT CD_CENTRO_CUSTO_SUP RETORNOU NULL
    FROM ASIWEB.CR_CENTRO_CUSTO CC
    ORDER BY CC.ID_CENTRO_CUSTO;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DOS CENTROS DE CUSTO >> CENTROCUSTO';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_CENTRO_CUSTO);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.CENTROCUSTO);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DOS CENTROS DE CUSTO >> CENTROCUSTO


BEGIN;  -- #INI :: IMPORTACAO DAS INSTALACOES >> LOCALIZACAO
    INSERT INTO public.localizacao
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , codigo
         , nome
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , endereco_id
         )
    SELECT L.ID_LOCALIZ    AS id
         , L.DT_BLOQUEIO   AS databloqueio
         , NULL            AS datainativo
         , LOCALTIMESTAMP  AS datacriacao
         , LOCALTIMESTAMP  AS dataedicao
         , 0               AS "version"
         , L.CD_LOCAL      AS codigo
         , L.NM_LOCAL_COMPLETO AS nome
         , NULL            AS inativador_id
         , NULL            AS autor_id
         , NULL            AS editor_id
         , 1               AS organizacao_id
         , E.ID            AS endereco_id
    FROM ASIWEB.CR_LOCALIZ L
    INNER JOIN PUBLIC.ENDERECO E ON E.CODIGO=L.CD_INSTALACAO
    ORDER BY L.ID_LOCALIZ;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DAS INSTALACOES >> LOCALIZACAO';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_LOCALIZ L INNER JOIN PUBLIC.ENDERECO E ON E.CODIGO=L.CD_INSTALACAO);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.LOCALIZACAO);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DAS INSTALACOES >> LOCALIZACAO


BEGIN;  -- #INI :: IMPORTACAO DA UNIDADE GESTORA >> ESTRUTURA ORGANIZACIONAL
    INSERT INTO public.estruturaorganizacional
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , classificacao
         , codigo
         , datafim
         , datainicio
         , nome
         , sigla
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , tipoestruturaorganizacional_id
         , unidadesuperior_id
         , localizacao_id
         )
    SELECT NEXTVAL('hibernate_sequence') AS id
         , UG.DT_BLOQUEIO    AS databloqueio
         , NULL              AS datainativo
         , LOCALTIMESTAMP    AS datacriacao 
         , LOCALTIMESTAMP    AS dataedicao
         , 0                 as "version"
         , UG.CD_ORGAO       AS classificacao
         , UG.CD_UG          AS codigo
         , UG.DT_BLOQUEIO    AS datafim
         , COALESCE(UG.DT_BLOQUEIO,LOCALTIMESTAMP,UG.DT_BLOQUEIO) AS datainicio
         , UG.NM_UG          AS nome
         , CASE WHEN UG.SG_UG IS NULL THEN  'SG' ELSE  UG.SG_UG END   AS sigla
         , NULL              AS inativador_id
         , NULL              AS autor_id
         , NULL              AS editor_id
         , 1                 AS organizacao_id
         , (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=1) AS tipoestruturaorganizacional_id -- 1;"Unidade gestora"; 2;"Unidade administrativa"; 3;"Unidade localizadora"; 4;"Unidade requisitante"
         , NULL              AS unidadesuperior_id
         , 1                 AS localizacao_id  -- COMO CR_UG NAO TEM LOCALIZACAO ATRIBUIMOS A MESMA DO ORGAO
    FROM ASIWEB.CR_UG UG
    ORDER BY UG.ID_UG;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DA UNIDADE GESTORA >> ESTRUTURA ORGANIZACIONAL';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_UG);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONAL WHERE TIPOESTRUTURAORGANIZACIONAL_ID = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=1));
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DA UNIDADE GESTORA >> ESTRUTURA ORGANIZACIONAL


BEGIN;  -- #INI :: IMPORTACAO DA UNIDADE ADMINISTRATIVA >> ESTRUTURA ORGANIZACIONAL
    INSERT INTO public.estruturaorganizacional
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , classificacao
         , codigo
         , datafim
         , datainicio
         , nome
         , sigla
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , tipoestruturaorganizacional_id
         , unidadesuperior_id
         , localizacao_id
         , unidadegestora_id
         )
    SELECT NEXTVAL('hibernate_sequence') AS id
         , UA.DT_BLOQUEIO    AS databloqueio
         , NULL              AS datainativo
         , LOCALTIMESTAMP    AS datacriacao 
         , LOCALTIMESTAMP    AS dataedicao
         , 0                 as "version"
         , COALESCE(UA.CD_UA_SUP,UA.CD_UG,UA.CD_UA_SUP) AS classificacao
         , UA.CD_UA          AS codigo
         , UA.DT_BLOQUEIO    AS datafim
         , COALESCE(UA.DT_BLOQUEIO,LOCALTIMESTAMP,UA.DT_BLOQUEIO) AS datainicio
         , UA.NM_UA          AS nome
         , CASE WHEN UA.SG_UA IS NULL THEN 'SG' ELSE UA.SG_UA END AS sigla
         , NULL              AS inativador_id
         , NULL              AS autor_id
         , NULL              AS editor_id
         , 1                 AS organizacao_id
         , (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=2) AS tipoestruturaorganizacional_id -- 1;"Unidade gestora"; 2;"Unidade administrativa"; 3;"Unidade localizadora"; 4;"Unidade requisitante"
         , NULL              AS unidadesuperior_id
         , 1                 AS localizacao_id  -- COMO CR_UA NAO TEM LOCALIZACAO ATRIBUIMOS A MESMA DO ORGAO
         , (select id from estruturaorganizacional where codigo = UA.CD_UG and tipoestruturaorganizacional_id = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=1))
    FROM ASIWEB.CR_UA UA
    ORDER BY UA.ID_UA;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DA UNIDADE ADMINISTRATIVA >> ESTRUTURA ORGANIZACIONAL';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_UA);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONAL WHERE TIPOESTRUTURAORGANIZACIONAL_ID = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=2));
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DA UNIDADE ADMINISTRATIVA >> ESTRUTURA ORGANIZACIONAL


BEGIN;  -- #INI :: IMPORTACAO DA UNIDADE LOCALIZADORA >> ESTRUTURA ORGANIZACIONAL
    INSERT INTO public.estruturaorganizacional
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , classificacao
         , codigo
         , datafim
         , datainicio
         , nome
         , sigla
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , tipoestruturaorganizacional_id
         , unidadesuperior_id
         , localizacao_id
         , unidadegestora_id
         )
    SELECT NEXTVAL('hibernate_sequence') AS id
         , UL.DT_BLOQUEIO    AS databloqueio
         , NULL              AS datainativo
         , LOCALTIMESTAMP    AS datacriacao 
         , LOCALTIMESTAMP    AS dataedicao
         , 0                 AS "version"
         , UA.CODIGO         AS classificacao
         , UL.CD_UL          AS codigo
         , UL.DT_BLOQUEIO    AS datafim
         , COALESCE(UL.DT_BLOQUEIO,LOCALTIMESTAMP,UL.DT_BLOQUEIO) AS datainicio
         , E.NOME||' '||L.NOME            AS nome
         , CASE WHEN UL.SG_UL IS NULL THEN 'SG' ELSE UL.SG_UL END AS sigla
         , NULL              AS inativador_id
         , NULL              AS autor_id
         , NULL              AS editor_id
         , 1                 AS organizacao_id
         , (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=3) AS tipoestruturaorganizacional_id -- 1;"Unidade gestora"; 2;"Unidade administrativa"; 3;"Unidade localizadora"; 4;"Unidade requisitante"
         , UA.ID             AS unidadesuperior_id
         , L.ID              AS localizacao_id 
         , (SELECT ID FROM PUBLIC.ESTRUTURAORGANIZACIONAL WHERE codigo = UL.CD_UG and tipoestruturaorganizacional_id = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=1))
    FROM ASIWEB.CR_UL UL
    INNER JOIN PUBLIC.ESTRUTURAORGANIZACIONAL UA ON (UA.CODIGO = UL.CD_UA and UA.tipoestruturaorganizacional_id = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=2)) 
    INNER JOIN PUBLIC.LOCALIZACAO L ON L.CODIGO = UL.CD_LOCAL
	INNER JOIN PUBLIC.ENDERECO E ON E.ID = L.ENDERECO_ID
    ORDER BY UL.ID_UL;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DA UNIDADE LOCALIZADORA >> ESTRUTURA ORGANIZACIONAL';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_UL);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONAL WHERE TIPOESTRUTURAORGANIZACIONAL_ID = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=3));
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DA UNIDADE LOCALIZADORA >> ESTRUTURA ORGANIZACIONAL


BEGIN;  -- #INI :: IMPORTACAO UNIDADE REQUISITANTE >> ESTRUTURAORGANIZACIONAL
    /*
     - Conceito diferente de UG/UA/UL
     - Unidades Requisitantes com mesma UA e mesmo LOCAL que a UL, não serão criadas
     - Estamos considerando somente as Unidades Requisitantes que não possuem correspondente com UL
    */
    INSERT INTO public.estruturaorganizacional
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , classificacao
         , codigo
         , datafim
         , datainicio
         , nome
         , sigla
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , tipoestruturaorganizacional_id
         , unidadesuperior_id
         , localizacao_id
         , unidadegestora_id
         )
    SELECT NEXTVAL('hibernate_sequence') AS id
         , UR.DT_BLOQUEIO       AS databloqueio
         , NULL                 AS datainativo
         , LOCALTIMESTAMP       AS datacriacao 
         , LOCALTIMESTAMP       AS dataedicao
         , 0                    AS "version"
         , UR.CD_UA             AS classificacao
         , UR.CD_UR||'1'        AS codigo
         , UR.DT_BLOQUEIO       AS datafim
         , COALESCE(UR.DT_BLOQUEIO,LOCALTIMESTAMP) AS datainicio
         , UR.NM_UR             AS nome
         , CASE WHEN UR.SG_UR IS NULL THEN 'SG' ELSE UR.SG_UR END AS sigla
         , NULL                 AS inativador_id
         , NULL                 AS autor_id
         , NULL                 AS editor_id
         , 1                    AS organizacao_id
         , (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=4) AS tipoestruturaorganizacional_id -- 1;"Unidade gestora"; 2;"Unidade administrativa"; 3;"Unidade localizadora"; 4;"Unidade requisitante"
         , UA.ID                AS unidadesuperior_id
         , L.ID                 AS localizacao_id 
         , UA.UNIDADEGESTORA_ID AS unidadegestora_id
    FROM ASIWEB.AX_UR UR
    INNER JOIN PUBLIC.ESTRUTURAORGANIZACIONAL UA ON (UA.CODIGO = UR.CD_UA and UA.tipoestruturaorganizacional_id = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=2))     
    INNER JOIN PUBLIC.LOCALIZACAO L ON L.CODIGO = UR.CD_LOCAL
    ORDER BY UR.ID_UR;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO UNIDADE REQUISITANTE >> ESTRUTURAORGANIZACIONAL';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.AX_UR);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONAL WHERE TIPOESTRUTURAORGANIZACIONAL_ID = (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoEstruturaOrganizacional' AND CODIGO=4));
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO UNIDADE REQUISITANTE >> ESTRUTURAORGANIZACIONAL


BEGIN;  -- #INI :: REPLICACAO ESTRUTURAORGANIZACIONAL >> ESTRUTURAORGANIZACIONALPATRIM
    INSERT INTO public.estruturaorganizacionalpatrim
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version    
         , isalmoxarifado
         , islocalizadoradebem
         , inativador_id
         , autor_id
         , editor_id
         , estruturaorganizacional_id
         )
    SELECT NEXTVAL('hibernate_sequence')
         , NULL             AS databloqueio
         , NULL             AS datainativo
         , LOCALTIMESTAMP   AS datacriacao
         , LOCALTIMESTAMP   AS dataedicao
         , 0                AS version
         , FALSE            AS isalmoxarifado
         , FALSE            AS islocalizadoradebem
         , NULL             AS inativador_id
         , NULL             AS autor_id
         , NULL             AS editor_id
         , E.ID             AS estruturaorganizacional_id
    FROM ESTRUTURAORGANIZACIONAL E;    

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'REPLICACAO ESTRUTURAORGANIZACIONAL >> ESTRUTURAORGANIZACIONALPATRIM';
      RAISE NOTICE 'Total de registros do EO  (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONAL);
      RAISE NOTICE 'Total de registros no EOP (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONALPATRIM);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: REPLICACAO ESTRUTURAORGANIZACIONAL >> ESTRUTURAORGANIZACIONALPATRIM


BEGIN;  -- #INI :: REPLICACAO ESTRUTURAORGANIZACIONAL >> ESTRUTURAORGANIZACIONALALMOX
    INSERT INTO public.estruturaorganizacionalalmox
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , diasrequisicao
         , isalmoxarifado
         , isundconsumidorarequisitante
         , inativador_id
         , autor_id
         , editor_id
         , estruturaorganizacional_id
         )
    SELECT NEXTVAL('hibernate_sequence')
         , NULL             AS databloqueio
         , NULL             AS datainativo
         , LOCALTIMESTAMP   AS datacriacao
         , LOCALTIMESTAMP   AS dataedicao
         , 0                AS version
         , NULL             AS diasrequisicao
         , FALSE            AS isalmoxarifado
         , FALSE            AS isundconsumidorarequisitante
         , NULL             AS inativador_id
         , NULL             AS autor_id
         , NULL             AS editor_id
         , E.ID             AS estruturaorganizacional_id
    FROM ESTRUTURAORGANIZACIONAL E;    

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'REPLICACAO ESTRUTURAORGANIZACIONAL >> ESTRUTURAORGANIZACIONALALMOX';
      RAISE NOTICE 'Total de registros do EO  (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONAL);
      RAISE NOTICE 'Total de registros no EOA (%)', (SELECT COUNT(*) FROM PUBLIC.ESTRUTURAORGANIZACIONALALMOX);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: REPLICACAO ESTRUTURAORGANIZACIONAL >> ESTRUTURAORGANIZACIONALALMOX


BEGIN;  -- #INI :: AJUSTAR PARENT_ID COM BASE NO CD_UA_SUP IMPORTADO PARA CLASSIFICACAO
    UPDATE public.estruturaorganizacional
       SET unidadesuperior_id = ep.parent_id
      FROM 
         ( SELECT f.id, p.id AS parent_id
             FROM public.estruturaorganizacional p  INNER JOIN 
                  public.estruturaorganizacional f  ON f.classificacao = p.codigo
         ) AS ep
     WHERE public.estruturaorganizacional.id = ep.id
       AND public.estruturaorganizacional.id <> 1;
COMMIT; -- #FIM :: AJUSTAR PARENT_ID COM BASE NO CD_UA_SUP IMPORTADO PARA CLASSIFICACAO


BEGIN;  -- #INI :: PRECISEI JOGAR 1 NO CODIGO DAS URS POR QUE URS TINHAM CODIGOS DUPLICADOS COM ULS
    /*
     * Alinhado com área de negócios de fazer esse update para jogar o código da classifição
     * sem o 1 para o usuário poder buscar pelo código antigo.
     */
    UPDATE public.estruturaorganizacional
       SET classificacao = SUBSTRING(codigo FROM 0 FOR 5)
     WHERE tipoestruturaorganizacional_id = 
         ( SELECT ID FROM PUBLIC.DOMINIO 
           WHERE CHAVE='tipoEstruturaOrganizacional' 
           AND CODIGO=4 ); 
COMMIT; -- #FIM :: PRECISEI JOGAR 1 NO CODIGO DAS URS POR QUE URS TINHAM CODIGOS DUPLICADOS COM ULS


BEGIN;  -- #INI :: AJUSTAR CENTROCUSTO_ID COM BASE NO CD_CENTRO_CUSTO DA UNIDADE REQUISITANTE
    UPDATE public.estruturaorganizacionalalmox
       SET centrocusto_id = und_requisitante.cc_id
      FROM 
         ( SELECT E.ID AS EO_ID, CC.ID AS CC_ID
           FROM ASIWEB.AX_UR UR
           INNER JOIN PUBLIC.ESTRUTURAORGANIZACIONAL E ON (E.CODIGO = UR.CD_UR||'1')    
           INNER JOIN PUBLIC.ESTRUTURAORGANIZACIONALALMOX EA ON (EA.ESTRUTURAORGANIZACIONAL_ID = E.ID AND EA.ISUNDCONSUMIDORAREQUISITANTE)
           INNER JOIN PUBLIC.CENTROCUSTO CC ON (CC.CODIGO = UR.CD_CENTRO_CUSTO)
         ) AS und_requisitante
     WHERE public.estruturaorganizacionalalmox.estruturaorganizacional_id = und_requisitante.eo_id;
COMMIT; -- #FIM :: AJUSTAR CENTROCUSTO_ID COM BASE NO CD_CENTRO_CUSTO DA UNIDADE REQUISITANTE


BEGIN;  -- #INI :: IMPORTACAO DAS CONTAS CONTABEIS >> CONTACONTABIL
    INSERT INTO public.contacontabil
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , codigo
         , codigosistemaorigem
         , descricao
         , percentualnaodepreciavel
         , taxadepreciacaomensal
         , vidautil
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         , contacontabilsaldoanterior_id
         , dominiotipocontacontabil_id
         , dominiotipomaterial_id
         )
    SELECT (row_number() OVER (ORDER BY CC.ID_CONTA)) + M.MAX AS id
         , CC.DT_BLOQUEIO     AS databloqueio
         , NULL               AS datainativo
         , LOCALTIMESTAMP     AS datacriacao
         , LOCALTIMESTAMP     AS dataedicao
         , 0                  AS "version"
         , regexp_replace(CC.CD_CONTA ,'[^0-9]+','')  AS codigo
         , CC.CD_CONTA        AS codigosistemaorigem
         , CC.NM_CONTA        AS descricao
         , (CC.VL_PERCENT_NAO_DEPRECIAVEL/100) AS percentualnaodepreciavel
         , CASE 
             WHEN CC.NR_VIDA_UTIL = 0 OR CC.NR_VIDA_UTIL IS NULL THEN 0.0
             ELSE 1/CC.NR_VIDA_UTIL
           END                AS taxadepreciacaomensal 
         , COALESCE(CC.NR_VIDA_UTIL, 0.0) AS vidautil
         , NULL               AS inativador_id
         , NULL               AS autor_id
         , NULL               AS editor_id
         , 1                  AS organizacao_id
         , NULL               AS contacontabilsaldoanterior_id 
         , (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoContaContabil' AND CODIGO=5) AS dominiotipocontacontabil_id -- Todas como contas do "Ativo"
         , CASE 
             WHEN CC.CD_SISTEMA = 'AX' THEN  -- Material de consumo
               (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoMaterial' AND CODIGO= 1) 
             WHEN CC.CD_SISTEMA = 'PA' THEN  -- Material de permanente
               (SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE='tipoMaterial' AND CODIGO= 2)
           END                AS dominiotipomaterial_id
    FROM ASIWEB.CR_CONTA CC
    JOIN (SELECT COALESCE(MAX(ID),0) AS MAX FROM PUBLIC.CONTACONTABIL) M ON 1=1
    ORDER BY CC.ID_CONTA;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'IMPORTACAO DAS CONTAS CONTABEIS >> CONTACONTABIL';
      RAISE NOTICE 'Total de registros do ASI (%)', (SELECT COUNT(*) FROM ASIWEB.CR_CONTA);
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.CONTACONTABIL);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: IMPORTACAO DAS CONTAS CONTABEIS >> CONTACONTABIL


BEGIN;  -- #INI :: DEFINE UMA CONFIGURACAO PADRAO DO ORGAO
    DO $$
    DECLARE
      v_conta_id numeric;
    BEGIN
      SELECT id INTO v_conta_id FROM public.contacontabil WHERE descricao = 'BENS MÓVEIS EM ESTOQUE' LIMIT 1;
      IF v_conta_id IS NOT NULL THEN
        INSERT INTO configuracao
             (id, databloqueio, datainativo, datacriacao, dataedicao, version,
              inativador_id, autor_id, editor_id, anexoimagem_id, organizacao_id) 
        VALUES
             (1, NULL, NULL, LOCALTIMESTAMP, LOCALTIMESTAMP, 0,
              NULL, NULL, NULL, NULL, 1);
      
        INSERT INTO public.configuracaoparametrosistema
             (id, datacriacao, dataedicao, version, grupo, chave, valor, configuracao_id) 
        VALUES 
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-1', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-2', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-3', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-4', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-5', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-6', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU-7', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_SCRIPT_MENU', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_DOMINIOS', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_DEFAULT_FILE', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_MODULO', 'false', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'EXECUTAR_INTERNACIONALIZACAO', 'true', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'PATRIMONIO_MASCARA_NUMERO_PATRIMONIO', '999999', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'CONTA_CONTABIL_ALMOXARIFADO', CAST(v_conta_id as text), 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'TIPO_AVALIACAO_MONETARIA_ESTOQUE', '2', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'RELATORIO_PRIMEIRO_TITULO', 'Ministério do Planejamento, Orçamento e Gestão - MP', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'RELATORIO_SEGUNDO_TITULO', 'Diretoria de Administração - DIRAD', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'RELATORIO_TERCEIRO_TITULO', 'Coordenação-Geral de Administração Predial - CGDAP', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'MASCARA_NUMERO_IDENTIFICACAO', 'AAAA999999', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'TIPO_DEP_REAVALIACAO_REDUCAO', '1', 1),
             (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, NULL, 'TIPO_MOV_REAVALIACAO_REDUCAO', '2', 1);
      ELSE
        RAISE NOTICE 'Conta [BENS MÓVEIS EM ESTOQUE] não encontrada!';
        RAISE NOTICE ' ';
      END IF;
    END$$;

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'DEFINE UMA CONFIGURACAO PADRAO DO ORGAO';
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.CONFIGURACAO);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: DEFINE UMA CONFIGURACAO PADRAO DO ORGAO


BEGIN;  -- #INI :: DEFINE UM MAPA ORGANIZACIONAL PADRAO DO ORGAO
    INSERT INTO public.mapaorganizacional
         ( id
         , databloqueio
         , datainativo
         , datacriacao
         , dataedicao
         , version
         , codigo
         , datafim
         , datainicio
         , nome
         , inativador_id
         , autor_id
         , editor_id
         , organizacao_id
         )
    VALUES 
         ( NEXTVAL('hibernate_sequence')
         , NULL
         , NULL
         , LOCALTIMESTAMP
         , LOCALTIMESTAMP
         , 0
         , '2016000001'
         , NULL
         , LOCALTIMESTAMP
         , 'MAPA - MIGRACAO ASI (2016)'
         , NULL
         , NULL
         , NULL
         , 1
         );

    -- TOTALIZADORES
    DO $$ DECLARE
    BEGIN
      RAISE NOTICE 'DEFINE UM MAPA ORGANIZACIONAL PADRAO DO ORGAO';
      RAISE NOTICE 'Total de registros no GRP (%)', (SELECT COUNT(*) FROM PUBLIC.MAPAORGANIZACIONAL);
      RAISE NOTICE ' ';
    END$$;
COMMIT; -- #FIM :: DEFINE UM MAPA ORGANIZACIONAL PADRAO DO ORGAO


--===========================================================================--
-- ##FIM :: IMPORTACAO DAS ESTRUTURAS DO ORGAO                               --
--===========================================================================--