From d0f6f7d43adc58267f016d143062b8d86f348286 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 1 Sep 2018 16:41:23 -0300 Subject: [PATCH 01/22] Acrescenta mais links p a msg de ressucitados --- sapl/legacy/scripts/ressucita_dependencias.py | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 7b37c1977..daa4ed126 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -34,29 +34,36 @@ for tabela_origem, campo, tabela_destino in [ urls = ''' -autor /sistema/autor -cargo_comissao /sistema/comissao/cargo -legislatura /sistema/parlamentar/legislatura -materia_legislativa /materia -norma_juridica /norma -parlamentar /parlamentar -sessao_legislativa /sistema/mesa-diretora/sessao-legislativa -sessao_plenaria /sessao -status_tramitacao /sistema/materia/status-tramitacao -tipo_autor /sistema/autor/tipo -tipo_expediente /sistema/sessao-plenaria/tipo-expediente -tipo_proposicao /sistema/proposicao/tipo -tipo_resultado_votacao /sistema/sessao-plenaria/tipo-resultado-votacao -unidade_tramitacao /sistema/materia/unidade-tramitacao -tipo_documento /sistema/materia/tipo-documento -orgao /sistema/materia/orgao -tipo_sessao_plenaria /sistema/sessao-plenaria/tipo -cargo_mesa /sistema/mesa-diretora/cargo-mesa -documento_administrativo /docadm -tipo_materia_legislativa /sistema/materia/tipo -tipo_norma_juridica /sistema/norma/tipo -comissao /comissao -registro_votacao ????????? +autor /sistema/autor +cargo_comissao /sistema/comissao/cargo +legislatura /sistema/parlamentar/legislatura +materia_legislativa /materia +norma_juridica /norma +parlamentar /parlamentar +sessao_legislativa /sistema/mesa-diretora/sessao-legislativa +sessao_plenaria /sessao +status_tramitacao /sistema/materia/status-tramitacao +tipo_autor /sistema/autor/tipo +tipo_expediente /sistema/sessao-plenaria/tipo-expediente +tipo_proposicao /sistema/proposicao/tipo +tipo_resultado_votacao /sistema/sessao-plenaria/tipo-resultado-votacao +unidade_tramitacao /sistema/materia/unidade-tramitacao +tipo_documento /sistema/materia/tipo-documento +orgao /sistema/materia/orgao +tipo_sessao_plenaria /sistema/sessao-plenaria/tipo +cargo_mesa /sistema/mesa-diretora/cargo-mesa +documento_administrativo /docadm +tipo_materia_legislativa /sistema/materia/tipo +tipo_norma_juridica /sistema/norma/tipo +comissao /comissao +assunto_materia /sistema/assunto-materia +coligacao /sistema/coligacao +nivel_instrucao /sistema/parlamentar/nivel-instrucao +partido /sistema/parlamentar/partido +regime_tramitacao /sistema/materia/regime-tramitacao +tipo_comissao /sistema/comissao/tipo +tipo_documento_administrativo /sistema/tipo-documento-adm +registro_votacao /admin/sessao/registrovotacao ''' urls = dict(stripsplit(urls)) From bbf79299b380d83a7e764d744ed38795b931a693 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 1 Sep 2018 17:13:57 -0300 Subject: [PATCH 02/22] =?UTF-8?q?Adiciona=20cria=C3=A7=C3=A3o=20de=20autor?= =?UTF-8?q?=20ao=20ressucitar=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/.flake8 | 3 +++ sapl/legacy/scripts/ressucita_dependencias.py | 21 ++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 sapl/legacy/scripts/.flake8 diff --git a/sapl/legacy/scripts/.flake8 b/sapl/legacy/scripts/.flake8 new file mode 100644 index 000000000..977657542 --- /dev/null +++ b/sapl/legacy/scripts/.flake8 @@ -0,0 +1,3 @@ +[flake8] +ignore = E501 + diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index daa4ed126..7f51de9f7 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -221,6 +221,13 @@ def get_dependencias_a_ressucitar(slug): return preambulo, desexcluir, criar +# deve ser idempotente pois é usada na criação de autor +# por isso o ON DUPLICATE KEY UPDATE +SQL_INSERT_TIPO_AUTOR = ''' + insert into tipo_autor (tip_autor, des_tipo_autor, ind_excluido) + values ({}, "DESCONHECIDO", 0) ON DUPLICATE KEY UPDATE ind_excluido = 0; + ''' + SQLS_CRIACAO = [ ('tipo_proposicao', ''' insert into tipo_materia_legislativa ( @@ -239,14 +246,18 @@ SQLS_CRIACAO = [ tip_resultado_votacao, nom_resultado, ind_excluido) values ({}, "DESCONHECIDO", 0); '''), - ('tipo_autor', ''' - insert into tipo_autor (tip_autor, des_tipo_autor, ind_excluido) - values ({}, "DESCONHECIDO", 0); - '''), + ('tipo_autor', SQL_INSERT_TIPO_AUTOR), ('unidade_tramitacao', ''' - insert into unidade_tramitacao (cod_unid_tramitacao, cod_comissao, cod_orgao, cod_parlamentar, ind_excluido) + insert into unidade_tramitacao ( + cod_unid_tramitacao, cod_comissao, cod_orgao, cod_parlamentar, ind_excluido) values ({}, NULL, NULL, NULL, 0); '''), + ('autor', SQL_INSERT_TIPO_AUTOR.format(0) + ''' + insert into autor ( + cod_autor, cod_partido, cod_comissao, cod_parlamentar, tip_autor, + nom_autor, des_cargo, col_username, ind_excluido) + values ({}, 0, 0, 0, 0, "DESCONHECIDO", "DESCONHECIDO", NULL, 0); + ''') ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From 537c72ce9ebc5765c9f98c7047062990c416236c Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 1 Sep 2018 17:26:31 -0300 Subject: [PATCH 03/22] =?UTF-8?q?Adiciona=20cria=C3=A7=C3=A3o=20de=20tipo?= =?UTF-8?q?=20documento=20ao=20ressucitar=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 7f51de9f7..a4c517088 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -257,7 +257,11 @@ SQLS_CRIACAO = [ cod_autor, cod_partido, cod_comissao, cod_parlamentar, tip_autor, nom_autor, des_cargo, col_username, ind_excluido) values ({}, 0, 0, 0, 0, "DESCONHECIDO", "DESCONHECIDO", NULL, 0); - ''') + '''), + ('tipo_documento', ''' + insert into tipo_documento (tip_documento, des_tipo_documento, ind_excluido) + values ({}, "DESCONHECIDO", 0); + '''), ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From c829d47d4ca1e2a4ff73d44efde7d1516d3fa301 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Mon, 3 Sep 2018 11:07:35 -0300 Subject: [PATCH 04/22] =?UTF-8?q?Propaga=20mais=20exclus=C3=B5es=20ao=20mi?= =?UTF-8?q?grar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_dados.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index 40b8a1ddc..c8a4026f7 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -539,6 +539,8 @@ PROPAGACOES_DE_EXCLUSAO = [ ('parlamentar', 'mandato', 'cod_parlamentar'), ('parlamentar', 'composicao_mesa', 'cod_parlamentar'), ('parlamentar', 'composicao_comissao', 'cod_parlamentar'), + # no 2.5 os parlamentares excluídos não são listados na presença da sessão + ('parlamentar', 'sessao_plenaria_presenca', 'cod_parlamentar'), # coligacao ('coligacao', 'composicao_coligacao', 'cod_coligacao'), @@ -553,6 +555,9 @@ PROPAGACOES_DE_EXCLUSAO = [ ('sessao_plenaria', 'expediente_sessao_plenaria', 'cod_sessao_plen'), ('sessao_plenaria', 'sessao_plenaria_presenca', 'cod_sessao_plen'), ('sessao_plenaria', 'ordem_dia_presenca', 'cod_sessao_plen'), + ('sessao_plenaria', 'mesa_sessao_plenaria', 'cod_sessao_plen'), + ('sessao_plenaria', 'oradores', 'cod_sessao_plen'), + ('sessao_plenaria', 'oradores_expediente', 'cod_sessao_plen'), # as consultas no código do sapl 2.5 # votacao_ordem_dia_obter_zsql e votacao_expediente_materia_obter_zsql From fa93d8875c0ed6d92627e1fee31a7b60794a67e1 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Mon, 3 Sep 2018 11:08:45 -0300 Subject: [PATCH 05/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index a4c517088..1221721b0 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -64,6 +64,7 @@ regime_tramitacao /sistema/materia/regime-tramitacao tipo_comissao /sistema/comissao/tipo tipo_documento_administrativo /sistema/tipo-documento-adm registro_votacao /admin/sessao/registrovotacao +tipo_dependente /sistema/parlamentar/tipo-dependente ''' urls = dict(stripsplit(urls)) @@ -262,6 +263,18 @@ SQLS_CRIACAO = [ insert into tipo_documento (tip_documento, des_tipo_documento, ind_excluido) values ({}, "DESCONHECIDO", 0); '''), + ('partido', ''' + insert into partido (cod_partido, sgl_partido, nom_partido, dat_criacao, dat_extincao, ind_excluido) + values ({}, "DESC", "DESCONHECIDO", NULL, NULL, 0); + '''), + ('legislatura', ''' + insert into legislatura (num_legislatura, dat_inicio, dat_fim, dat_eleicao, ind_excluido) + values ({}, "1/1/1", "1/1/1", "1/1/1", 0); + '''), + ('cargo_mesa', ''' + insert into cargo_mesa (cod_cargo, des_cargo, ind_unico, ind_excluido) + values ({}, "DESCONHECIDO", 0, 0); + '''), ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From c18c336b47f5171aeed9798aad9c1d7ff607969d Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Mon, 3 Sep 2018 11:58:38 -0300 Subject: [PATCH 06/22] =?UTF-8?q?Propaga=20mais=20exclus=C3=B5es=20ao=20mi?= =?UTF-8?q?grar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_dados.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index c8a4026f7..e6d4fb783 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -541,6 +541,8 @@ PROPAGACOES_DE_EXCLUSAO = [ ('parlamentar', 'composicao_comissao', 'cod_parlamentar'), # no 2.5 os parlamentares excluídos não são listados na presença da sessão ('parlamentar', 'sessao_plenaria_presenca', 'cod_parlamentar'), + # no 2.5 os parlamentares excluídos não são listados na mesa da sessão + ('parlamentar', 'mesa_sessao_plenaria', 'cod_parlamentar'), # coligacao ('coligacao', 'composicao_coligacao', 'cod_coligacao'), From 716770233e907bd39a650da40144bdd3dae5217b Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Mon, 3 Sep 2018 15:05:54 -0300 Subject: [PATCH 07/22] =?UTF-8?q?Propaga=20mais=20exclus=C3=B5es=20ao=20mi?= =?UTF-8?q?grar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_dados.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index e6d4fb783..894541e22 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -541,7 +541,9 @@ PROPAGACOES_DE_EXCLUSAO = [ ('parlamentar', 'composicao_comissao', 'cod_parlamentar'), # no 2.5 os parlamentares excluídos não são listados na presença da sessão ('parlamentar', 'sessao_plenaria_presenca', 'cod_parlamentar'), - # no 2.5 os parlamentares excluídos não são listados na mesa da sessão + # ... nem na presença da ordem do dia + ('parlamentar', 'ordem_dia_presenca', 'cod_parlamentar'), + # ... nem na mesa da sessão ('parlamentar', 'mesa_sessao_plenaria', 'cod_parlamentar'), # coligacao From 2f28a56295cc88c772cae160dd321bb6b2d8a54a Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 4 Sep 2018 10:39:47 -0300 Subject: [PATCH 08/22] =?UTF-8?q?Retira=20repeti=C3=A7=C3=B5es=20ao=20ress?= =?UTF-8?q?ucitar=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 1221721b0..e4b397406 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -1,15 +1,16 @@ +from collections import OrderedDict from textwrap import dedent -import texttable import yaml -from unipath import Path +import texttable from sapl.legacy.migracao_dados import (PROPAGACOES_DE_EXCLUSAO, campos_novos_para_antigos, exec_legado, get_arquivo_ajustes_pre_migracao, models_novos_para_antigos) from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO, NOME_BANCO_LEGADO) +from unipath import Path def stripsplit(ll): @@ -19,6 +20,7 @@ def stripsplit(ll): def _tab_legado(model): return models_novos_para_antigos[model]._meta.db_table + fks_legado = { (_tab_legado(m), campos_novos_para_antigos[f]): _tab_legado(f.related_model) # noqa for m in models_novos_para_antigos @@ -342,6 +344,10 @@ def get_url(slug): return 'sapl.{}.leg.br'.format(slug.replace('-', '.')) +def sem_repeticoes_mantendo_ordem(sequencia): + return OrderedDict.fromkeys(sequencia).keys() + + def get_sqls_desexcluir_criar(preambulo, desexcluir, criar, slug): sqls_links = [get_sql(*(args + (slug,))) for itens, get_sql in ((desexcluir, get_sql_desexcluir), @@ -351,7 +357,15 @@ def get_sqls_desexcluir_criar(preambulo, desexcluir, criar, slug): return '' else: sqls, links = zip(*sqls_links) - links = [l for ll in links for l in ll] # flatten + + sqls = [dedent(s.strip()) + ';' + for sql in sqls + for s in sql.split(';') if s.strip()] + sqls = sem_repeticoes_mantendo_ordem(sqls) + + links = (l for ll in links for l in ll) # flatten + links = sem_repeticoes_mantendo_ordem(links) + sqls, links = ['\n'.join(sorted(s)) for s in [sqls, links]] return TEMPLATE_RESSUCITADOS.format(preambulo, links, sqls) From 18a3ef857e18360307351cc2625edb5bcf440fde Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 8 Sep 2018 12:51:20 -0300 Subject: [PATCH 09/22] =?UTF-8?q?Propaga=20mais=20exclus=C3=B5es=20ao=20mi?= =?UTF-8?q?grar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_dados.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index 894541e22..14cf59285 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -584,6 +584,8 @@ PROPAGACOES_DE_EXCLUSAO = [ ('materia_legislativa', 'despacho_inicial', 'cod_materia'), ('materia_legislativa', 'legislacao_citada', 'cod_materia'), ('materia_legislativa', 'relatoria', 'cod_materia'), + ('materia_legislativa', 'materia_assunto', 'cod_materia'), + # norma ('norma_juridica', 'vinculo_norma_juridica', 'cod_norma_referente'), From a8fb5ee542d00ac490c7c912ee85f610948a8976 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 8 Sep 2018 12:51:50 -0300 Subject: [PATCH 10/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index e4b397406..fa7832b6c 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -1,16 +1,16 @@ from collections import OrderedDict from textwrap import dedent +import texttable import yaml +from unipath import Path -import texttable from sapl.legacy.migracao_dados import (PROPAGACOES_DE_EXCLUSAO, campos_novos_para_antigos, exec_legado, get_arquivo_ajustes_pre_migracao, models_novos_para_antigos) from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO, NOME_BANCO_LEGADO) -from unipath import Path def stripsplit(ll): @@ -277,6 +277,10 @@ SQLS_CRIACAO = [ insert into cargo_mesa (cod_cargo, des_cargo, ind_unico, ind_excluido) values ({}, "DESCONHECIDO", 0, 0); '''), + ('orgao', ''' + insert into orgao (cod_orgao, nom_orgao, sgl_orgao, ind_unid_deliberativa, end_orgao, num_tel_orgao, ind_excluido) + values ({}, "DESCONHECIDO", "DESC", 0, NULL, NULL, 0); + '''), ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From a0392926af65c9a780d801cf5fd23c8a3217cce4 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 8 Sep 2018 13:02:14 -0300 Subject: [PATCH 11/22] =?UTF-8?q?Apaga=20refs=20a=20mat=C3=A9rias=20inexis?= =?UTF-8?q?tes=20em=20norma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_dados.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index 14cf59285..ece005482 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -716,6 +716,12 @@ sessao_plenaria_presenca | dat_sessao = NULL | dat_sessao = 0 anula_tipos_origem_externa_invalidos() corrige_unidades_tramitacao_destino_vazia_como_anterior() + # matérias inexistentes não são mostradas em norma jurídica => apagamos + exec_legado('''update norma_juridica set cod_materia = NULL + where cod_materia not in ( + select cod_materia from materia_legislativa + where ind_excluido <> 1);''') + class Record: pass From 238a39eeedf7f5cc95cd18503c0f3fdefd58c444 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 8 Sep 2018 14:05:05 -0300 Subject: [PATCH 12/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index fa7832b6c..6dc5cf989 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -1,16 +1,16 @@ from collections import OrderedDict from textwrap import dedent -import texttable import yaml -from unipath import Path +import texttable from sapl.legacy.migracao_dados import (PROPAGACOES_DE_EXCLUSAO, campos_novos_para_antigos, exec_legado, get_arquivo_ajustes_pre_migracao, models_novos_para_antigos) from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO, NOME_BANCO_LEGADO) +from unipath import Path def stripsplit(ll): @@ -67,6 +67,7 @@ tipo_comissao /sistema/comissao/tipo tipo_documento_administrativo /sistema/tipo-documento-adm registro_votacao /admin/sessao/registrovotacao tipo_dependente /sistema/parlamentar/tipo-dependente +origem /sistema/materia/origem ''' urls = dict(stripsplit(urls)) @@ -87,6 +88,7 @@ CAMPOS_ORIGEM_PARA_ALVO = { 'cod_unid_tram_dest': 'cod_unid_tramitacao', 'cod_unid_tram_local': 'cod_unid_tramitacao', 'tip_id_basica': 'tip_materia', + 'cod_local_origem_externa': 'cod_origem', } From 6a3365c9332dc971a3168387d0708f2c9d1a890f Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 8 Sep 2018 18:17:14 -0300 Subject: [PATCH 13/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 6dc5cf989..4a780a3fc 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -68,6 +68,7 @@ tipo_documento_administrativo /sistema/tipo-documento-adm registro_votacao /admin/sessao/registrovotacao tipo_dependente /sistema/parlamentar/tipo-dependente origem /sistema/materia/origem +documento_acessorio /materia/documentoacessorio ''' urls = dict(stripsplit(urls)) From a4b7b46bbc8242da75acc101dd0d0a1b6ebf393c Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Mon, 10 Sep 2018 09:31:23 -0300 Subject: [PATCH 14/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 4a780a3fc..1484abb59 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -1,16 +1,16 @@ from collections import OrderedDict from textwrap import dedent +import texttable import yaml +from unipath import Path -import texttable from sapl.legacy.migracao_dados import (PROPAGACOES_DE_EXCLUSAO, campos_novos_para_antigos, exec_legado, get_arquivo_ajustes_pre_migracao, models_novos_para_antigos) from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO, NOME_BANCO_LEGADO) -from unipath import Path def stripsplit(ll): @@ -284,6 +284,10 @@ SQLS_CRIACAO = [ insert into orgao (cod_orgao, nom_orgao, sgl_orgao, ind_unid_deliberativa, end_orgao, num_tel_orgao, ind_excluido) values ({}, "DESCONHECIDO", "DESC", 0, NULL, NULL, 0); '''), + ('origem', ''' + insert into origem (cod_origem, sgl_origem, nom_origem, ind_excluido) + values ({}, "DESC", "DESCONHECIDO", 0); + '''), ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From bc8e41aca8c6d6f70d1e672f6175e89a98597286 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Mon, 10 Sep 2018 11:32:06 -0300 Subject: [PATCH 15/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 1484abb59..6949b06c0 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -234,6 +234,14 @@ SQL_INSERT_TIPO_AUTOR = ''' values ({}, "DESCONHECIDO", 0) ON DUPLICATE KEY UPDATE ind_excluido = 0; ''' +# deve ser idempotente pois é usada na criação de comissao +# por isso o ON DUPLICATE KEY UPDATE +SQL_INSERT_TIPO_COMISSAO = ''' + insert into tipo_comissao (tip_comissao, nom_tipo_comissao, sgl_natureza_comissao, sgl_tipo_comissao, des_dispositivo_regimental, ind_excluido) + values ({}, "DESCONHECIDO", "P", "DESC", NULL, 0) + ON DUPLICATE KEY UPDATE ind_excluido = 0; + ''' + SQLS_CRIACAO = [ ('tipo_proposicao', ''' insert into tipo_materia_legislativa ( @@ -288,6 +296,12 @@ SQLS_CRIACAO = [ insert into origem (cod_origem, sgl_origem, nom_origem, ind_excluido) values ({}, "DESC", "DESCONHECIDO", 0); '''), + ('tipo_comissao', SQL_INSERT_TIPO_COMISSAO), + ('comissao', SQL_INSERT_TIPO_COMISSAO.format(0) + ''' + insert into comissao (cod_comissao, tip_comissao, nom_comissao, sgl_comissao, dat_criacao, + ind_unid_deliberativa, ind_excluido) + values ({}, 0, "DESCONHECIDO", "DESC", "1-1-1", 0, 0); + '''), ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From d252fca69bf750b86f76eedb282d752c05a3510f Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 11 Sep 2018 15:19:38 -0300 Subject: [PATCH 16/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 6949b06c0..7bac40713 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -69,6 +69,7 @@ registro_votacao /admin/sessao/registrovotacao tipo_dependente /sistema/parlamentar/tipo-dependente origem /sistema/materia/origem documento_acessorio /materia/documentoacessorio +tipo_fim_relatoria /sistema/materia/tipo-fim-relatoria ''' urls = dict(stripsplit(urls)) From eafe16b47d926c9ff4b78ada5cc94bd8ae5fa055 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 13 Sep 2018 12:23:02 -0300 Subject: [PATCH 17/22] =?UTF-8?q?Configura=20TIME=5FZONE=20automaticamente?= =?UTF-8?q?=20na=20migra=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_dados.py | 25 ++++++------------------- sapl/legacy_migration_settings.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index ece005482..776348f50 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -33,7 +33,8 @@ from sapl.comissoes.models import Comissao, Composicao, Participacao, Reuniao from sapl.legacy.models import NormaJuridica as OldNormaJuridica from sapl.legacy.models import TipoNumeracaoProtocolo from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO, - NOME_BANCO_LEGADO) + NOME_BANCO_LEGADO, PYTZ_TIMEZONE, + SIGLA_CASA) from sapl.materia.models import (AcompanhamentoMateria, DocumentoAcessorio, MateriaLegislativa, Proposicao, StatusTramitacao, TipoDocumento, @@ -50,7 +51,6 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, OrdemDia, from sapl.utils import normalize from .scripts.normaliza_dump_mysql import normaliza_dump_mysql -from .timezonesbrasil import get_timezone # YAML SETUP ############################################################### @@ -807,19 +807,6 @@ def reinicia_sequence(model, id): REPO = git.Repo.init(DIR_REPO) -# configura timezone de migração -match = re.match('sapl_cm_(.*)', NOME_BANCO_LEGADO) -sigla_casa = match.group(1) -PATH_TABELA_TIMEZONES = DIR_DADOS_MIGRACAO.child('tabela_timezones.yaml') -with open(PATH_TABELA_TIMEZONES, 'r') as arq: - tabela_timezones = yaml.load(arq) -municipio, uf, nome_timezone = tabela_timezones[sigla_casa] -if nome_timezone: - timezone = pytz.timezone(nome_timezone) -else: - timezone = get_timezone(municipio, uf) - - def populate_renamed_fields(new, old): renames = field_renames[type(new)] @@ -846,9 +833,9 @@ def populate_renamed_fields(new, old): return (field_type == tipo and value and not value.tzinfo) if campo_tempo_sem_timezone('DateTimeField'): - value = timezone.localize(value) + value = PYTZ_TIMEZONE.localize(value) if campo_tempo_sem_timezone('TimeField'): - value = value.replace(tzinfo=timezone) + value = value.replace(tzinfo=PYTZ_TIMEZONE) setattr(new, field.name, value) @@ -860,7 +847,7 @@ def roda_comando_shell(cmd): def get_arquivo_ajustes_pre_migracao(): return DIR_DADOS_MIGRACAO.child( - 'ajustes_pre_migracao', '{}.sql'.format(sigla_casa)) + 'ajustes_pre_migracao', '{}.sql'.format(SIGLA_CASA)) def migrar_dados(apagar_do_legado=False): @@ -1180,7 +1167,7 @@ def adjust_protocolo_antes_salvar(new, old): def get_arquivo_resolve_registro_votacao(): return DIR_DADOS_MIGRACAO.child( 'ajustes_pre_migracao', - '{}_resolve_registro_votacao_ambiguo.yaml'.format(sigla_casa)) + '{}_resolve_registro_votacao_ambiguo.yaml'.format(SIGLA_CASA)) def get_como_resolver_registro_votacao_ambiguo(): diff --git a/sapl/legacy_migration_settings.py b/sapl/legacy_migration_settings.py index 96f6a83ad..ce0029937 100644 --- a/sapl/legacy_migration_settings.py +++ b/sapl/legacy_migration_settings.py @@ -1,10 +1,14 @@ import os +import re +import pytz +import yaml from decouple import Config, RepositoryEnv from dj_database_url import parse as db_url from sapl.legacy.scripts.exporta_zope.variaveis_comuns import \ DIR_DADOS_MIGRACAO +from sapl.legacy.timezonesbrasil import get_timezone from .settings import * # flake8: noqa @@ -43,3 +47,18 @@ NOME_BANCO_LEGADO = DATABASES['legacy']['NAME'] DIR_REPO = Path(DIR_DADOS_MIGRACAO, 'repos', NOME_BANCO_LEGADO) MEDIA_ROOT = DIR_REPO + + +# configura timezone de migração +match = re.match('sapl_cm_(.*)', NOME_BANCO_LEGADO) +SIGLA_CASA = match.group(1) +_PATH_TABELA_TIMEZONES = DIR_DADOS_MIGRACAO.child('tabela_timezones.yaml') +with open(_PATH_TABELA_TIMEZONES, 'r') as arq: + tabela_timezones = yaml.load(arq) +municipio, uf, nome_timezone = tabela_timezones[SIGLA_CASA] +if nome_timezone: + PYTZ_TIMEZONE = pytz.timezone(nome_timezone) +else: + PYTZ_TIMEZONE = get_timezone(municipio, uf) + +TIME_ZONE = PYTZ_TIMEZONE.zone From 5d9b103c4a47d0ab6b5850a6b271d73a944b17b2 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 13 Sep 2018 14:25:17 -0300 Subject: [PATCH 18/22] Corrige ajuste de timezone ao migrar --- sapl/legacy/migracao_dados.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index 776348f50..ae4d4b158 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -826,15 +826,16 @@ def populate_renamed_fields(new, old): and value in [None, 'None']): value = '' - # adiciona timezone faltante aos campos com tempo - # os campos TIMESTAMP do mysql são gravados em UTC - # os DATETIME e TIME não têm timezone - def campo_tempo_sem_timezone(tipo): - return (field_type == tipo - and value and not value.tzinfo) - if campo_tempo_sem_timezone('DateTimeField'): - value = PYTZ_TIMEZONE.localize(value) - if campo_tempo_sem_timezone('TimeField'): + # ajusta tempos segundo timezone + # os campos TIMESTAMP do mysql são gravados em UTC + # os DATETIME e TIME não têm timezone + + if field_type == 'DateTimeField' and value: + # as datas armazenadas no legado na verdade são naive + sem_tz = value.replace(tzinfo=None) + value = PYTZ_TIMEZONE.localize(sem_tz).astimezone(pytz.utc) + + if field_type == 'TimeField' and value: value = value.replace(tzinfo=PYTZ_TIMEZONE) setattr(new, field.name, value) From 7f5cc4cdc5f0ac590f8fa6350735185c0ce619f4 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 13 Sep 2018 14:26:26 -0300 Subject: [PATCH 19/22] =?UTF-8?q?Expande=20ressucitar=20depend=C3=AAncias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/ressucita_dependencias.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sapl/legacy/scripts/ressucita_dependencias.py b/sapl/legacy/scripts/ressucita_dependencias.py index 7bac40713..9810924a9 100644 --- a/sapl/legacy/scripts/ressucita_dependencias.py +++ b/sapl/legacy/scripts/ressucita_dependencias.py @@ -303,6 +303,10 @@ SQLS_CRIACAO = [ ind_unid_deliberativa, ind_excluido) values ({}, 0, "DESCONHECIDO", "DESC", "1-1-1", 0, 0); '''), + ('parlamentar', ''' + insert into parlamentar (cod_parlamentar, nom_completo, nom_parlamentar, sex_parlamentar, cod_casa, ind_ativo, ind_unid_deliberativa, ind_excluido) + values ({}, "DESCONHECIDO", "DESCONHECIDO", "M", 0, 0, 0, 0); + '''), ] SQLS_CRIACAO = {k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO} From f25a4c9011a68e6994556dac21390d3906fa699a Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 13 Sep 2018 15:20:42 -0300 Subject: [PATCH 20/22] =?UTF-8?q?Retira=20associa=C3=A7=C3=A3o=20de=20doc?= =?UTF-8?q?=20a=20protocolo=20do=20ano=20seguinte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Associávamos o documento administrativo a um protocolo no ano seguinte quando não encontrávamos protocolo no ano do documento. Isso estava gerando várias associações erradas então abolimos. --- sapl/legacy/migracao_dados.py | 71 ++++++++++------------------------- 1 file changed, 20 insertions(+), 51 deletions(-) diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index ae4d4b158..1be1f6e96 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -1031,65 +1031,34 @@ def adjust_acompanhamentomateria(new, old): new.confirmado = True -NOTA_DOCADM = ''' -## NOTA DE MIGRAÇÃO DE DADOS DO SAPL 2.5 ## -O número de protocolo original deste documento era [{num_protocolo}], ano {ano_original}. -'''.strip() # noqa - - def adjust_documentoadministrativo(new, old): if old.num_protocolo: - nota = None - ano_original = new.ano - protocolo = Protocolo.objects.filter( - numero=old.num_protocolo, ano=new.ano) - if not protocolo: - # tentamos encontrar o protocolo no ano seguinte - ano_novo = ano_original + 1 - protocolo = Protocolo.objects.filter(numero=old.num_protocolo, - ano=ano_novo) - if protocolo: - nota = NOTA_DOCADM + ''' -O protocolo vinculado é o de mesmo número, porém do ano seguinte ({ano_novo}), -pois não existe protocolo no sistema com este número no ano {ano_original}. -''' - nota = nota.strip().format(num_protocolo=old.num_protocolo, - ano_original=ano_original, - ano_novo=ano_novo) - msg = 'PROTOCOLO ENCONTRADO APENAS PARA O ANO SEGUINTE!!!!! '\ - 'DocumentoAdministrativo: {cod_documento}, '\ - 'numero_protocolo: {num_protocolo}, '\ - 'ano doc adm: {ano_original}' - warn('protocolo_ano_seguinte', msg, - {'cod_documento': old.cod_documento, - 'num_protocolo': old.num_protocolo, - 'ano_original': ano_original, - 'nota': nota}) - else: - # Se não achamos mesmo no ano anteriro - # colocamos no número externo - new.numero_externo = old.num_protocolo + numero, ano = old.num_protocolo, new.ano + # False < True => o primeiro será o protocolo não anulado + protocolos = Protocolo.objects.filter( + numero=numero, ano=ano).order_by('anulado') + if protocolos: + new.protocolo = protocolos[0] + else: + # Se não achamos o protocolo registramos no número externo + new.numero_externo = numero + + nota = ''' +## NOTA DE MIGRAÇÃO DE DADOS DO SAPL 2.5 ## +O número de protocolo original deste documento era [{numero}], ano [{ano}]. - nota = NOTA_DOCADM + ''' Não existe no sistema nenhum protocolo com estes dados e portanto nenhum protocolo foi vinculado a este documento. Colocamos então o número de protocolo no campo "número externo". ''' - nota = nota.format( - num_protocolo=old.num_protocolo, - ano_original=ano_original) - msg = 'Protocolo {num_protocolo} faltando (referenciado ' \ - 'no documento administrativo {cod_documento})' - warn('protocolo_faltando', msg, - {'num_protocolo': old.num_protocolo, - 'cod_documento': old.cod_documento, - 'nota': nota}) - if protocolo: - assert len(protocolo) == 1, 'mais de um protocolo encontrado' - [new.protocolo] = protocolo - # adiciona nota ao final da observação - if nota: + nota = nota.strip().format(numero=numero, ano=ano) + msg = 'Protocolo {numero} faltando (referenciado ' \ + 'no documento administrativo {cod_documento})' + warn('protocolo_faltando', msg, + {'numero': numero, + 'cod_documento': old.cod_documento, + 'nota': nota}) new.observacao += ('\n\n' if new.observacao else '') + nota From 7f8d692161d0bc8fe8615c919ae31a2bb0877fa0 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 18 Sep 2018 15:44:48 -0300 Subject: [PATCH 21/22] =?UTF-8?q?Estende=20exporta=C3=A7=C3=A3o=20de=20doc?= =?UTF-8?q?s=20para=20instala=C3=A7=C3=B5es=20de=20fora?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/exporta_zope/exporta_zope.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/sapl/legacy/scripts/exporta_zope/exporta_zope.py b/sapl/legacy/scripts/exporta_zope/exporta_zope.py index 8f3b1eb4a..529fb3d62 100755 --- a/sapl/legacy/scripts/exporta_zope/exporta_zope.py +++ b/sapl/legacy/scripts/exporta_zope/exporta_zope.py @@ -381,18 +381,30 @@ def _dump_sapl(data_fs_path, documentos_fs_path, destino, salvar, mtimes): sapl = find_sapl(app) # extrai usuários com suas senhas e perfis dump_usuarios(sapl, destino, salvar) + + # extrai folhas XSLT (primeira tentativa) + if 'XSLT' in sapl: + dump_folder(br(sapl['XSLT']), destino, salvar, mtimes) + finally: close_db() app, close_db = get_app(documentos_fs_path) + try: sapl = find_sapl(app) - # extrai folhas XSLT - if 'XSLT' in sapl: - dump_folder(br(sapl['XSLT']), destino, salvar, mtimes) + if sapl == {'id': 'sapl'}: + # em algumas instalações sapl_documentos está direto na raiz + docs = br(app['sapl_documentos']) + else: + # caso mais comum + docs = br(sapl['sapl_documentos']) + + # extrai folhas XSLT (segunda tentativa) + if 'XSLT' in sapl: + dump_folder(br(sapl['XSLT']), destino, salvar, mtimes) # extrai documentos - docs = br(sapl['sapl_documentos']) with logando_nao_identificados(): dump_folder(docs, destino, salvar, mtimes) dump_propriedades(docs, destino, salvar) From 9d1d85fbabb83179d58441e26dd1cb689a451802 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 18 Sep 2018 16:08:43 -0300 Subject: [PATCH 22/22] =?UTF-8?q?Estende=20exporta=C3=A7=C3=A3o=20de=20doc?= =?UTF-8?q?s=20p=20DtmlMethod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/scripts/exporta_zope/exporta_zope.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapl/legacy/scripts/exporta_zope/exporta_zope.py b/sapl/legacy/scripts/exporta_zope/exporta_zope.py index 529fb3d62..682296f4b 100755 --- a/sapl/legacy/scripts/exporta_zope/exporta_zope.py +++ b/sapl/legacy/scripts/exporta_zope/exporta_zope.py @@ -298,6 +298,8 @@ DUMP_FUNCTIONS = { 'Image': dump_file, 'DTML Method': partial(dump_file, get_conteudo=get_conteudo_dtml_method), + 'DTMLMethod': partial(dump_file, + get_conteudo=get_conteudo_dtml_method), 'Folder': partial(dump_folder, enum=enumerate_folder), 'BTreeFolder2': partial(dump_folder, enum=enumerate_btree), 'SDE-Document': partial(dump_sde, tipo='sde.document'),