--===========================================================================--
-- ##INI :: AJUSTE FINAIS DA MIGRACAO                                        --
--===========================================================================--


-- #INI :: AJUSTES TABELA BEMPATRIMONIAL >> COLUNA CODIGO
    DROP INDEX ix01_bempat_cd;
    ALTER TABLE bempatrimonial DROP COLUMN codigo;
    ALTER TABLE bempatrimonial RENAME codigo_tmp TO codigo;
-- #FIM :: AJUSTES TABELA BEMPATRIMONIAL >> COLUNA CODIGO


-- #INI :: GERACAO DE CONFIGURACAO DE CONTAS PARA O RMA/RMB >> CONTACONTABILCONFIGREFERENCIA
    /*
    SCRIPT QUE GERA A REFERENCIA DE CONTAS
    ======================================
    1. Definir v_dtaini_ref e v_dtafin_ref com o período inicial que você quer gerar a referência
    2. Definir v_anomes_ant com o mês de referência anterior ao saldo que você quer gerar 
       (os saldos já devem estar gerados para esse mês)
    3. Apos o insert definir onde você quer quer a função pare de gerar a referência,
       ou seja o ultimo mes de referencia fechado no banco
    */
-- #INI :: GERACAO DE CONFIGURACAO DE CONTAS PARA O RMA/RMB >> CONTACONTABILCONFIGREFERENCIA
    /*
    SCRIPT QUE GERA A REFERENCIA DE CONTAS
    ======================================
    1. Definir v_dtaini_ref e v_dtafin_ref com o período inicial que você quer gerar a referência
    2. Definir v_anomes_ant com o mês de referência anterior ao saldo que você quer gerar 
       (os saldos já devem estar gerados para esse mês)
    3. Apos o insert definir onde você quer quer a função pare de gerar a referência,
       ou seja o ultimo mes de referencia fechado no banco
    */
    DO $$
    DECLARE
      r  RECORD;
      v_anomes_ant timestamp without time zone;
      v_dtaini_ref timestamp without time zone;
      v_dtafin_ref timestamp without time zone;
      v_anomes_fin timestamp without time zone;
      v_rma boolean;
      v_rmb boolean;
    BEGIN

      v_anomes_fin := TO_TIMESTAMP('20160201','YYYYMMDD')::timestamp without time zone;
      v_anomes_ant := TO_TIMESTAMP('20091201','YYYYMMDD')::timestamp without time zone;
      v_dtaini_ref := TO_TIMESTAMP('20100101','YYYYMMDD')::timestamp without time zone;
      v_dtafin_ref := v_dtaini_ref + interval '1 month' - interval '1 second';

      LOOP
        FOR r IN 
          SELECT C.ID, D.NOME FROM PUBLIC.CONTACONTABIL C
          INNER JOIN PUBLIC.DOMINIO D ON (D.ID = DOMINIOTIPOMATERIAL_ID)           
          ORDER BY 1
        LOOP
          
          --> A PRINCIPIO NAO APARECE NEM NO RMA NEM NO RMB
          v_rmb := FALSE;
          v_rma := FALSE;

          --> VERIFICA SE A CONTA TEM MOVIMENTO
          IF EXISTS (SELECT 'X' FROM CONTACONTABILMOVIMENTO M 
                      WHERE M.DATAREFERENCIA BETWEEN v_dtaini_ref AND v_dtafin_ref
                        AND M.CONTACONTABIL_ID = r.ID)
          THEN
            v_rmb := (r.NOME='PERMANENTE');
            v_rma := (r.NOME='CONSUMO');
          END IF;

          --> OU SE A CONTA TEM SALDO
          IF EXISTS (SELECT 'X' FROM CONTACONTABILSALDO S 
                      WHERE S.DATAREFERENCIA BETWEEN v_dtaini_ref AND v_dtafin_ref
                        AND S.CONTACONTABIL_ID = r.ID AND S.VALOR > 0.0)
          THEN
            v_rmb := (r.NOME='PERMANENTE');
            v_rma := (r.NOME='CONSUMO');
          END IF;

          --> OU SE A CONTA JA APARECEU ALGUMA VEZ NO RELATORIO (RMA)
          IF EXISTS (SELECT 'X' FROM CONTACONTABILMOVIMENTO M 
                      WHERE M.DATAREFERENCIA <= v_dtafin_ref
                        AND M.CONTACONTABIL_ID = r.ID )
          THEN            
            v_rma := (r.NOME='CONSUMO');
          END IF;          

          --> INSERE UM REGISTRO EM CONFIGURACAO PARA CADA CONTA / MESREFERENCIA
          INSERT INTO public.contacontabilconfigreferencia
               ( ID, datacriacao, dataedicao, version, apresentarma,
                 apresentarmb, apresentaRelatorioDepreciacao, mesreferencia, contacontabil_id )
          VALUES 
               ( NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, v_rma,
                 v_rmb, v_rmb, v_dtaini_ref, r.ID );

        END LOOP;
       
        IF DATE_TRUNC('month',v_dtaini_ref) = DATE_TRUNC('month', v_anomes_fin) THEN 
          return;
        END IF;

        v_dtaini_ref := v_dtaini_ref + interval '1 month';
        v_dtafin_ref := v_dtaini_ref + interval '1 month' - interval '1 second';

      END LOOP;         
    END$$;
-- #FIM :: GERACAO DE CONFIGURACAO DE CONTAS PARA O RMA/RMB >> CONTACONTABILCONFIGREFERENCIA


BEGIN;  -- #INI :: AJUSTA CONFIGURACAO DE CONTAS PARA ULTIMO MESREFERENCIA >> CONTACONTABILCONFIGREFERENCIA
    INSERT INTO public.contacontabilconfigreferencia
         ( id, datacriacao, dataedicao, version, apresentarma,
           apresentarmb, apresentarelatoriodepreciacao, mesreferencia, contacontabil_id )
    SELECT NEXTVAL('hibernate_sequence'), localtimestamp, localtimestamp, 0, r.apresentarma, r.apresentarmb,
           r.apresentarmb, TO_TIMESTAMP('20160201','YYYYMMDD')::timestamp without time zone, r.contacontabil_id
    FROM CONTACONTABILCONFIGREFERENCIA R 
    WHERE R.MESREFERENCIA = (SELECT MAX(MESREFERENCIA) FROM CONTACONTABILCONFIGREFERENCIA);
COMMIT; -- #FIM :: AJUSTA CONFIGURACAO DE CONTAS PARA ULTIMO MESREFERENCIA >> CONTACONTABILCONFIGREFERENCIA


BEGIN;  -- #INI :: DEFINICAO DAS CARACTERISTICAS FILTRAVEIS PARA O MPOG (FUTURAMENTE O USUARIO PODERA ESCOLHER MAIS CARACTERISTICAS NO SOFTWARE)
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'DESCRICAO' AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'MARCA'     AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'MODELO'    AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'SERIE'     AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'PLACA'     AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'RENAVAM'   AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'TÍTULO'    AND DATABLOQUEIO IS NULL LIMIT 1);
    UPDATE public.caracteristica SET filtro = TRUE WHERE ID = (SELECT ID FROM PUBLIC.CARACTERISTICA WHERE descricao like 'AUTOR'     AND DATABLOQUEIO IS NULL LIMIT 1);
COMMIT; -- #FIM :: DEFINICAO DAS CARACTERISTICAS FILTRAVEIS PARA O MPOG (FUTURAMENTE O USUARIO PODERA ESCOLHER MAIS CARACTERISTICAS NO SOFTWARE)


BEGIN;  -- #INI :: BLOQUEIO DE ALGUNS DOMINIOS PEDIDO PELO MPOG ** JULIANA
    --> ALGUNS TIPOS DE RECEBIMENTO
    UPDATE PUBLIC.DOMINIO SET databloqueio = LOCALTIMESTAMP
    WHERE CHAVE = 'tipoRecebimento' 
    -- AND CODIGO IN (5, 9, 11, 13);
    AND NOME IN ('TRANSFERENCIA_FORA_DO_SISTEMA','RESTO_A_PAGAR','AQUISICAO_EXTRA_ORCAMENTARIA/MULTA', 'D02');
    
    --> ALGUNS TIPOS DE BAIXA
    UPDATE PUBLIC.DOMINIO SET databloqueio = LOCALTIMESTAMP
    WHERE CHAVE = 'tipoBaixa'
    -- AND CODIGO IN (1,3,6,12,13,14);
    AND NOME IN ('VENDA','CESSAO_DE_USO','TRANSFERENCIA_FORA_DO_SISTEMA','DIVERSAS','RECUPERAVEL','DESPACHO');

    UPDATE PUBLIC.DOMINIO SET databloqueio = LOCALTIMESTAMP
    WHERE CHAVE = 'tipoBaixaAlmoxarifado'
    -- AND CODIGO IN (1, 7, 8);
    AND NOME IN ('EXTRAVIO','INSERVIVEL','VALIDADE');

    -->  VALOR PADRAO DA LISTA
    UPDATE PUBLIC.DOMINIO SET ispadrao = TRUE
    WHERE CHAVE = 'tipoBaixaAlmoxarifado'
    AND NOME = 'DOACAO';
    
    UPDATE PUBLIC.DOMINIO SET ispadrao = TRUE
    WHERE CHAVE = 'tipoEntradaAlmoxarifado'
    AND NOME = 'ORCAMENTARIA';
    
    UPDATE PUBLIC.DOMINIO SET ispadrao = TRUE
    WHERE CHAVE = 'tipoRecebimentoAlmoxarifado'
    AND NOME = 'COMPRA_ORCAMENTARIA';
    
    UPDATE PUBLIC.DOMINIO SET ispadrao = TRUE
    WHERE CHAVE = 'tipoEntrada'
    AND NOME = 'ORCAMENTARIA';
    
    UPDATE PUBLIC.DOMINIO SET ispadrao = TRUE
    WHERE CHAVE = 'tipoRecebimento'
    AND NOME = 'COMPRA_ORCAMENTARIA';
COMMIT; -- #FIM :: BLOQUEIO DE ALGUNS DOMINIOS PEDIDO PELO MPOG ** JULIANA


-- #INI :: AJUSTES TIPOSTATUSBAIXAESTORNO >> BAIXAALMOXARIFADO
    DO $$
    DECLARE
      r RECORD;
      v_tipoSemEstorno bigint;
      v_tipoParcial bigint;
      v_tipoTotal bigint;
    BEGIN
      SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE = 'tipoStatusBaixaEstorno' AND NOME = 'SEM_ESTORNO' INTO v_tipoSemEstorno;
      SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE = 'tipoStatusBaixaEstorno' AND NOME = 'ESTORNO_PARCIAL' INTO v_tipoParcial;
      SELECT ID FROM PUBLIC.DOMINIO WHERE CHAVE = 'tipoStatusBaixaEstorno' AND NOME = 'ESTORNO_TOTAL' INTO v_tipoTotal;
      FOR r IN
        SELECT BA.BAIXAALMOXARIFADO_ID AS BAIXA_ID, COUNT(BA.BAIXAALMOXARIFADO_ID) AS QTD_ITENS, COUNT(BA.DATAESTORNO) AS QTS_ESTORNADO
        FROM BAIXAALMOXARIFADOITEM BA
        INNER JOIN BAIXAALMOXARIFADO B ON B.ID = BA.BAIXAALMOXARIFADO_ID
        GROUP BY BAIXAALMOXARIFADO_ID
      LOOP
        IF (r.qtd_itens = r.qts_estornado) AND (r.qts_estornado > 0) THEN
          UPDATE BaixaAlmoxarifado SET dominiosituacaoestorno_id = v_tipoTotal WHERE ID = r.baixa_id;
        ELSIF (r.qtd_itens > r.qts_estornado) AND (r.qts_estornado > 0) THEN
          UPDATE BaixaAlmoxarifado SET dominiosituacaoestorno_id = v_tipoParcial WHERE ID = r.baixa_id;
        ELSE
          UPDATE BaixaAlmoxarifado SET dominiosituacaoestorno_id = v_tipoSemEstorno WHERE ID = r.baixa_id;
        END IF;
      END LOOP;
    END$$;
-- #FIM :: AJUSTES TIPOSTATUSBAIXAESTORNO >> BAIXAALMOXARIFADO


BEGIN;  -- #INI :: GARANTINDO QUE AS CONTAS SEM SALDO ANTERIOR, TENHAM UM SALDO ZERADO
    INSERT INTO public.contacontabilsaldo
         ( id, datacriacao, dataedicao, version
         , datareferencia, valor, contacontabil_id, depreciacaoacumulada
         , depreciacaomensal, reavaliacaoperiodo, reavaliacaoacumulada, reducaoperiodo, reducaoacumulada
         )
    SELECT NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0
         , TO_DATE('20160201','YYYYMMDD'), 0, ID, 0
         , 0, 0, 0, 0, 0
    FROM   PUBLIC.CONTACONTABIL
    WHERE  CONTACONTABILSALDOANTERIOR_ID IS NULL;

    -- Referenciar um conta contabil ha um registro do conta contabil
    UPDATE PUBLIC.CONTACONTABIL C 
       SET CONTACONTABILSALDOANTERIOR_ID = 
         ( SELECT S.ID FROM PUBLIC.CONTACONTABILSALDO S 
           WHERE  S.CONTACONTABIL_ID = C.ID 
           ORDER BY DATAREFERENCIA DESC LIMIT 1);
COMMIT; -- #INI :: GARANTINDO QUE AS CONTAS SEM SALDO ANTERIOR, TENHAM UM SALDO ZERADO


-- #INI :: CRIA TABELA TEMPORARIA PARA OS MENUS DE ADMINISTRACAO DE MATERIAIS
    -- DROP TABLE sg_perfis_mp;
    CREATE TABLE sg_perfis_mp
    AS
    SELECT s.nome as submenu, m.nome, m.chave, true as administrador, true as administrador_jr, false as consulta, false as transferencia, false as inventario, s.ordem as ordem_s, m.ordem as ordem_m
      FROM menu r, menu s, menu m
     WHERE s.parent_id = r.id
       AND m.parent_id = s.id
       AND r.chave = 'ADMINISTRACAO_DE_MATERIAIS'
       AND s.nome IN ('Materiais','Patrimônio','Relatórios patrimônio','Inventário','Relatórios inventário','Financeiro','Relatórios financeiro')
    ORDER BY s.ordem, m.ordem;
    
    ALTER TABLE sg_perfis_mp ADD CONSTRAINT pk_sg_perfis_mp PRIMARY KEY (chave);
-- #FIM :: CRIA TABELA TEMPORARIA PARA OS MENUS DE ADMINISTRACAO DE MATERIAIS


BEGIN;  -- #INI :: AJUSTA OS PERFIS "Planilha de Perfis de Acesso.ods" ANEXA TAREFA #3098
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'ENTRADA_DE_MATERIAIS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'CATALOGO_DE_MATERIAIS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'REQUISICAO_DE_MATERIAIS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'ATENDIMENTO_DE_REQUISICAO_CONSUMO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'DEVOLUCAO_MATERIAL_CONSUMO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'CONFIGURACAO_NOTIFICACAO_DE_RESSUPRIMENTO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'BAIXA_ALMOXARIFADO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'CONSULTA_DE_MATERIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_ENTRADAS_DO_ALMOXARIFADO_NO_PERIODO_POR_MATERIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_SAIDAS_DO_ALMOXARIFADO_NO_PERIODO_POR_MATERIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_CONSUMO_DO_ALMOXARIFADO_NO_PERIODO_POR_MATERIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_SAIDAS_DO_ALMOXARIFADO_POR_CONTA_CONTABIL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_ENTRADAS_DO_ALMOXARIFADO_NO_PERIODO_POR_RECEBIMENTO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_POSICAO_ESTOQUE_DO_ALMOXARIFADO_POR_CONTA';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_MATERIAL_NO_ESTOQUE_ALMOXARIFADO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_MOVIMENTACAO_DO_ALMOXARIFADO_(RMA)';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_MOVIMENTACAO_DE_BENS_(RMB)';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'ENTRADA_DE_BENS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = true,  transferencia = false, inventario = true  WHERE chave = 'BEM_PATRIMONIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = true  WHERE chave = 'SELECAO_DE_BEM_PATRIMONIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = true,  inventario = false WHERE chave = 'TRANSFERENCIA_INTERNA';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'ADICAO_A_BEM_PRINCIPAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'DEFINIR_DETENTOR';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = true,  inventario = false WHERE chave = 'SAIDA_TEMPORARIA';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'BAIXA_DE_BENS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = true,  transferencia = false, inventario = true  WHERE chave = 'HISTORICO_BEM_PATRIMONIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = true  WHERE chave = 'EMISSAO_DE_TERMO_DE_RESPONSABILIDADE';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_ENTRADAS_NO_PATRIMONIO_NO_PERIODO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'RELATORIO_DE_BAIXAS_NO_PATRIMONIO_NO_PERIODO';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = false, consulta = false, transferencia = false, inventario = false WHERE chave = 'CONTA_CONTABIL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = false, consulta = false, transferencia = false, inventario = false WHERE chave = 'TRANSFERENCIA_ENTRE_CONTAS_CONTABEIS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = false, consulta = false, transferencia = false, inventario = false WHERE chave = 'FECHAMENTO_DO_MES_DE_REFERENCIA';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'DEPRECIACOES';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = true  WHERE chave = 'RELATORIO_GERAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = true  WHERE chave = 'RELATORIOS_DIVERSOS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'CADASTRO_DE_MATERIAL';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'CLASSIFICACAO_DE_MATERIAIS';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = false WHERE chave = 'UNIDADE_DE_MEDIDA';
    UPDATE public.sg_perfis_mp SET administrador = true, administrador_jr = true,  consulta = false, transferencia = false, inventario = true  WHERE chave = 'INVENTARIO_DE_BENS';
COMMIT; -- #INI :: AJUSTA OS PERFIS "Planilha de Perfis de Acesso.ods" ANEXA TAREFA #3098


BEGIN;  -- #INI :: CRIA OS GRUPOS E ATRIBUI AS FUNCIONALIDADES
   -- Cria os grupos
    INSERT INTO public.grupo
         (id, datacriacao, dataedicao, version, organizacao_id, nome, sigla)
    VALUES 
         (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1, 'Consulta', 'CON'),
         (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1, 'Administrador', 'ADM'),
         (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1, 'Administrador Júnior', 'SUP'),
         (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1, 'Inventário', 'INV'),
         (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1, 'Transferência', 'TRA');
    
    -- Atribui as funcionalidades do [Administrador]
    INSERT INTO public.menugrupo 
         ( id, datacriacao, dataedicao, version, organizacao_id
         , grupo_id
         , menu_id
         )
    SELECT NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1
         , (SELECT ID FROM PUBLIC.GRUPO WHERE SIGLA='ADM' LIMIT 1) AS grupo_id
         , M.ID
      FROM PUBLIC.SG_PERFIS_MP P, PUBLIC.MENU M
     WHERE P.CHAVE=M.CHAVE
       AND P.ADMINISTRADOR;
    
    -- Atribui as funcionalidades do [Administrador Júnior]
    INSERT INTO public.menugrupo 
         ( id, datacriacao, dataedicao, version, organizacao_id
         , grupo_id
         , menu_id
         )
    SELECT NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1
         , (SELECT ID FROM PUBLIC.GRUPO WHERE SIGLA='SUP' LIMIT 1) AS grupo_id
         , M.ID
      FROM PUBLIC.SG_PERFIS_MP P, PUBLIC.MENU M
     WHERE P.CHAVE=M.CHAVE
     AND P.ADMINISTRADOR_JR;
    
    -- Atribui as funcionalidades do [Transferência]
    INSERT INTO public.menugrupo 
         ( id, datacriacao, dataedicao, version, organizacao_id
         , grupo_id
         , menu_id
         )
    SELECT NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1
         , (SELECT ID FROM PUBLIC.GRUPO WHERE SIGLA='TRA' LIMIT 1) AS grupo_id
         , M.ID
      FROM PUBLIC.SG_PERFIS_MP P, PUBLIC.MENU M
     WHERE P.CHAVE=M.CHAVE
     AND P.TRANSFERENCIA;

    -- Atribui as funcionalidades do [Inventário]
    INSERT INTO public.menugrupo 
         ( id, datacriacao, dataedicao, version, organizacao_id
         , grupo_id
         , menu_id
         )
    SELECT NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1
         , (SELECT ID FROM PUBLIC.GRUPO WHERE SIGLA='INV' LIMIT 1) AS grupo_id
         , M.ID
      FROM PUBLIC.SG_PERFIS_MP P, PUBLIC.MENU M
     WHERE P.CHAVE=M.CHAVE
     AND P.INVENTARIO;
    
    -- Atribui as funcionalidades do [Consulta]
    INSERT INTO public.menugrupo 
         ( id, datacriacao, dataedicao, version, organizacao_id
         , grupo_id
         , menu_id
         )
    SELECT NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1
         , (SELECT ID FROM PUBLIC.GRUPO WHERE SIGLA='CON' LIMIT 1) AS grupo_id
         , M.ID
      FROM PUBLIC.SG_PERFIS_MP P, PUBLIC.MENU M
     WHERE P.CHAVE=M.CHAVE
     AND P.CONSULTA;   

    -- Ajusta a propriedade do menu que indica possuir permissao definida
    UPDATE public.menu m
       SET permissaodeacessodefinida = TRUE
     WHERE EXISTS (SELECT 1 FROM PUBLIC.SG_PERFIS_MP P WHERE P.CHAVE = M.CHAVE);

    -- Inclui usuários nos grupos ### EXEMPLO DE ATRIBUIÇÃO PELO LOGIN E SIGLA DO GRUPO
    /*
    INSERT INTO public.grupousuario
         ( id, datacriacao, dataedicao, version, organizacao_id
         , grupo_id
         , usuario_id
         )
    VALUES 
         (NEXTVAL('hibernate_sequence'), LOCALTIMESTAMP, LOCALTIMESTAMP, 0, 1
         , (SELECT ID FROM PUBLIC.GRUPO WHERE SIGLA='SUP' LIMIT 1)
         , (SELECT ID FROM PUBLIC.SEGURANCA_USUARIO WHERE USERNAME='patricia.leao' LIMIT 1));
     */
COMMIT; -- #INI :: CRIA OS GRUPOS E ATRIBUI AS FUNCIONALIDADES


UPDATE public.configuracaoparametrosistema
   SET valor = 'Ministério do Planejamento, Orçamento e Gestão - MP'
 WHERE chave = 'RELATORIO_PRIMEIRO_TITULO';

UPDATE public.configuracaoparametrosistema
   SET valor = 'Diretoria de Administração - DIRAD'
 WHERE chave = 'RELATORIO_SEGUNDO_TITULO';

UPDATE public.configuracaoparametrosistema
   SET valor = 'Coordenação-Geral de Administração Predial - CGDAP'
 WHERE chave = 'RELATORIO_TERCEIRO_TITULO';
 

INSERT INTO public.anexoimagem 
     ( id, databloqueio, datainativo, anexo, descricao, idorganizacao, inativador_id, configuracao_id) 
VALUES 
     ( 1, NULL, NULL, '\[encoded data, 1948935 characters]', 'planalto_presidencia_simbolosnacionais_brasao.gif', 1, NULL, 1);

UPDATE public.configuracao
   SET anexoimagem_id = 1
 WHERE id = 1;

--===========================================================================--
-- ##FIM :: AJUSTE FINAIS DA MIGRACAO                                        --
--===========================================================================--