From 808fe22d63657fa72809bbfd4bf539de162af1d3 Mon Sep 17 00:00:00 2001 From: Luciano Almeida Date: Wed, 3 May 2017 16:53:55 -0300 Subject: [PATCH 01/55] =?UTF-8?q?Arruma=20migra=C3=A7=C3=A3o=20de=20expedi?= =?UTF-8?q?ente=20em=20RegistroVotacao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luciano Almeida --- sapl/legacy/migration.py | 40 +++++++++++++++++++--------------------- sapl/sessao/legacy.yaml | 1 - 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 6ab3cd184..24d244d4e 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -28,7 +28,7 @@ from sapl.norma.models import (AssuntoNorma, NormaJuridica, TipoVinculoNormaJuridica, NormaRelacionada) from sapl.parlamentares.models import Parlamentar from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo -from sapl.sessao.models import ExpedienteMateria, OrdemDia +from sapl.sessao.models import ExpedienteMateria, OrdemDia, RegistroVotacao from sapl.settings import PROJECT_DIR from sapl.utils import delete_texto, normalize, save_texto @@ -413,26 +413,6 @@ class DataMigrator: if field_type == 'CharField' or field_type == 'TextField': if value is None or value == 'None': value = '' - if field.model._meta.label == 'sessao.RegistroVotacao' and \ - field.name == 'ordem' and \ - not isinstance(value, OrdemDia): - try: - new_value = ExpedienteMateria.objects.get(pk=value) - setattr(new, 'expediente', new_value) - setattr(new, field.name, None) - continue - except ObjectDoesNotExist: - msg = 'FK [%s] não encontrada para valor %s ' \ - '(em %s %s)' % ( - field.name, value, - field.model.__name__, label or '---') - with reversion.create_revision(): - value = make_stub(field.related_model, value) - descricao = 'stub criado para entrada orfã!' - warn(msg + ' => ' + descricao) - save_relation(value, [field.name], msg, descricao, - eh_stub=True) - reversion.set_comment('Stub criado pela migração') setattr(new, field.name, value) elif field.model.__name__ == 'TipoAutor' and \ field.name == 'content_type': @@ -657,6 +637,23 @@ def adjust_protocolo(new, old): new.numero = p['numero__max'] + 1 +def adjust_registrovotacao(new, old): + ordem_dia = OrdemDia.objects.filter( + pk=old.cod_ordem, materia=old.cod_materia) + expediente_materia = ExpedienteMateria.objects.filter( + pk=old.cod_ordem, materia=old.cod_materia) + + if ordem_dia and not expediente_materia: + new.ordem = ordem_dia[0] + if not ordem_dia and expediente_materia: + new.expediente = expediente_materia[0] + if len(ordem_dia) == len(expediente_materia): + assert 0, "ERRO: RegistroVotacao [PK %s]. OrdemDia tem %s entrada(s)"\ + " e ExpedienteMateria %s entrada(s).\n Deve haver somente "\ + "uma entrada de OrdemDia ou ExpedienteMateria." % ( + old.pk, len(ordem_dia), len(expediente)) + + def adjust_tipoproposicao(new, old): if old.ind_mat_ou_doc == 'M': new.tipo_conteudo_related = TipoMateriaLegislativa.objects.get( @@ -754,6 +751,7 @@ AJUSTE_ANTES_SALVAR = { Parlamentar: adjust_parlamentar, Participacao: adjust_participacao, Protocolo: adjust_protocolo, + RegistroVotacao: adjust_registrovotacao, TipoProposicao: adjust_tipoproposicao, StatusTramitacao: adjust_statustramitacao, StatusTramitacaoAdministrativo: adjust_statustramitacaoadm, diff --git a/sapl/sessao/legacy.yaml b/sapl/sessao/legacy.yaml index 6e2cc2428..90188a76c 100644 --- a/sapl/sessao/legacy.yaml +++ b/sapl/sessao/legacy.yaml @@ -65,7 +65,6 @@ RegistroVotacao: numero_votos_nao: num_votos_nao numero_votos_sim: num_votos_sim observacao: txt_observacao - ordem: cod_ordem tipo_resultado_votacao: tip_resultado_votacao VotoParlamentar (RegistroVotacaoParlamentar): From 4c777c1dfabb8974661f4a879cbd453782414213 Mon Sep 17 00:00:00 2001 From: Luciano Almeida Date: Thu, 4 May 2017 17:20:19 -0300 Subject: [PATCH 02/55] =?UTF-8?q?Modifica=20fun=C3=A7=C3=A3o=20ajdust=5Fre?= =?UTF-8?q?gistrovotacao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luciano Almeida --- sapl/legacy/migration.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 24d244d4e..93bc01ebe 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -637,7 +637,7 @@ def adjust_protocolo(new, old): new.numero = p['numero__max'] + 1 -def adjust_registrovotacao(new, old): +def adjust_registrovotacao_antes_salvar(new, old): ordem_dia = OrdemDia.objects.filter( pk=old.cod_ordem, materia=old.cod_materia) expediente_materia = ExpedienteMateria.objects.filter( @@ -647,11 +647,19 @@ def adjust_registrovotacao(new, old): new.ordem = ordem_dia[0] if not ordem_dia and expediente_materia: new.expediente = expediente_materia[0] - if len(ordem_dia) == len(expediente_materia): - assert 0, "ERRO: RegistroVotacao [PK %s]. OrdemDia tem %s entrada(s)"\ - " e ExpedienteMateria %s entrada(s).\n Deve haver somente "\ - "uma entrada de OrdemDia ou ExpedienteMateria." % ( - old.pk, len(ordem_dia), len(expediente)) + + +def adjust_registrovotacao_depois_salvar(new, old): + if not new.ordem and not new.expediente: + with reversion.create_revision(): + problema = 'RegistroVotacao de PK %s não possui nenhuma OrdemDia'\ + ' ou ExpedienteMateria.' % old.pk + descricao = 'RevistroVotacao deve ter no mínimo uma ordem do dia'\ + ' ou expediente vinculado.' + warn(problema + ' => ' + descricao) + save_relation(obj=new, problema=problema, + descricao=descricao, eh_stub=False) + reversion.set_comment('RegistroVotacao sem ordem ou expediente') def adjust_tipoproposicao(new, old): @@ -751,7 +759,7 @@ AJUSTE_ANTES_SALVAR = { Parlamentar: adjust_parlamentar, Participacao: adjust_participacao, Protocolo: adjust_protocolo, - RegistroVotacao: adjust_registrovotacao, + RegistroVotacao: adjust_registrovotacao_antes_salvar, TipoProposicao: adjust_tipoproposicao, StatusTramitacao: adjust_statustramitacao, StatusTramitacaoAdministrativo: adjust_statustramitacaoadm, @@ -761,6 +769,7 @@ AJUSTE_ANTES_SALVAR = { AJUSTE_DEPOIS_SALVAR = { NormaJuridica: adjust_normajuridica_depois_salvar, Protocolo: adjust_protocolo_depois_salvar, + RegistroVotacao: adjust_registrovotacao_depois_salvar, } # CHECKS #################################################################### From d19d6cf6e24480b91fff9e789dde4188700fc223 Mon Sep 17 00:00:00 2001 From: Matheus Veleci Date: Wed, 10 May 2017 10:36:54 -0300 Subject: [PATCH 03/55] =?UTF-8?q?Fix=20das=20vari=C3=A1veis=20de=20DEBUG?= =?UTF-8?q?=20do=20=C3=BAltimo=20commit(#1072)=20e=20adiciona=20o=20comand?= =?UTF-8?q?o=20compilescss=20no=20Dockerfile,=20para=20compilar=20os=20arq?= =?UTF-8?q?uivos=20SASS/SCSS=20em=20ambiente=20de=20produ=C3=A7=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 3 +++ config/env-sample | 4 ++-- config/env_dockerfile | 2 +- start.sh | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2455200e1..838257c66 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,10 @@ COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env # manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 +# compilescss - Precompile all occurrences of your SASS/SCSS files for the whole project into css files + RUN python3 manage.py bower_install -- --allow-root --no-input && \ + python3 manage.py compilescss && \ python3 manage.py collectstatic --no-input && \ rm -rf /var/interlegis/sapl/sapl/.env && \ rm -rf /var/interlegis/sapl/sapl.db diff --git a/config/env-sample b/config/env-sample index 33fed9806..bde081a92 100644 --- a/config/env-sample +++ b/config/env-sample @@ -1,6 +1,6 @@ DATABASE_URL = postgresql://postgres:@sapldb:/sapl -KEY -DEBUG = True +KEY +DEBUG = False EMAIL_USE_TLS = True EMAIL_PORT = 587 EMAIL_HOST = '' diff --git a/config/env_dockerfile b/config/env_dockerfile index f4a9291f7..c83fc88f1 100644 --- a/config/env_dockerfile +++ b/config/env_dockerfile @@ -1,6 +1,6 @@ DATABASE_URL = sqlite:///sapl.db SECRET_KEY = 'Dockerfile_Key' -DEBUG = True +DEBUG = False EMAIL_USE_TLS = True EMAIL_PORT = 587 EMAIL_HOST = '' diff --git a/start.sh b/start.sh index 8a213affd..1b00801a2 100755 --- a/start.sh +++ b/start.sh @@ -27,7 +27,7 @@ create_env() { echo "SECRET_KEY="$KEY > $FILENAME # now only appends echo "DATABASE_URL = "$DATABASE_URL >> $FILENAME - echo "DEBUG = ""${DEBUG-True}" >> $FILENAME + echo "DEBUG = ""${DEBUG-False}" >> $FILENAME echo "EMAIL_USE_TLS = ""${USE_TLS-True}" >> $FILENAME echo "EMAIL_PORT = ""${EMAIL_PORT-587}" >> $FILENAME echo "EMAIL_HOST = ""${EMAIL_HOST-''}" >> $FILENAME From 9fd9da539ed91133362703956c692905bf53497c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Fr=C3=A1?= Date: Wed, 10 May 2017 11:25:46 -0300 Subject: [PATCH 04/55] #1011 (#1077) --- sapl/templates/sessao/resumo.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sapl/templates/sessao/resumo.html b/sapl/templates/sessao/resumo.html index db3a27c3a..226a50966 100644 --- a/sapl/templates/sessao/resumo.html +++ b/sapl/templates/sessao/resumo.html @@ -139,7 +139,6 @@ Matéria Ementa Resultado da Votação - Observação da Votação @@ -151,8 +150,7 @@ Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} {{m.ementa|safe}} - {{m.resultado}} - {{m.resultado_observacao}} + {{m.resultado}}
{{m.resultado_observacao}} {% endfor %} From e84733ccc3b6c315123c1a78aa307b4f5e702d80 Mon Sep 17 00:00:00 2001 From: eduardocalil Date: Wed, 10 May 2017 13:53:15 -0300 Subject: [PATCH 05/55] =?UTF-8?q?Refatora=20Mesa=20Diretora=20para=20Usu?= =?UTF-8?q?=C3=A1rio=20An=C3=B4nimo=20(#1078)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + sapl/parlamentares/urls.py | 4 + sapl/parlamentares/views.py | 99 ++++++++++++++++++- sapl/settings.py | 1 + .../parlamentares/composicaomesa_form.html | 3 +- .../public_composicaomesa_form.html | 89 ++++++++++++++++- 6 files changed, 186 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 52baa1622..b09b6cf6f 100644 --- a/.gitignore +++ b/.gitignore @@ -93,5 +93,6 @@ bower bower_components media whoosh/ +solr-4.10.2/ postgres-data/ data/ diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 29a31adfb..0d8d406da 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import include, url from sapl.parlamentares.views import (altera_field_mesa, + altera_field_mesa_public_view, CargoMesaCrud, ColigacaoCrud, ComposicaoColigacaoCrud, DependenteCrud, FiliacaoCrud, FrenteCrud, FrenteList, @@ -59,6 +60,9 @@ urlpatterns = [ url(r'^mesa-diretora/altera-field-mesa/$', altera_field_mesa, name='altera_field_mesa'), + url(r'^mesa-diretora/altera-field-mesa-public-view/$', + altera_field_mesa_public_view, name='altera_field_mesa_public_view'), + url(r'^mesa-diretora/insere-parlamentar-composicao/$', insere_parlamentar_composicao, name='insere_parlamentar_composicao'), diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 3c6ac630a..f9dc33f60 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -373,11 +373,9 @@ class ParlamentarCrud(Crud): # Caso exista mais de uma filiação nesse intervalo # Entretanto, NÃO DEVE OCORRER except MultipleObjectsReturned: - filiacao = parlamentar.filiacao_set.filter(Q( - data__lte=legislatura.data_fim, - data_desfiliacao__gte=legislatura.data_fim) | Q( - data__lte=legislatura.data_fim, - data_desfiliacao__isnull=True)).last() + row[2] = ( + 'O Parlamentar possui duas filiações conflitantes', + None) # Caso encontre UMA filiação nessas condições else: @@ -588,3 +586,94 @@ def remove_parlamentar_composicao(request): return JsonResponse( {'msg': ( 'Selecione algum parlamentar para ser excluido!', 0)}) + + +def partido_parlamentar_sessao_legislativa(sessao, parlamentar): + """ + Função para descobrir o partido do parlamentar durante + o período de uma dada Sessão Legislativa + """ + + # As condições para mostrar a filiação são: + # A data de filiacao deve ser menor que a data de fim + # da sessao legislativa e data de desfiliação deve nula, ou maior, + # ou igual a data de fim da sessao + try: + filiacao = parlamentar.filiacao_set.get(Q( + data__lte=sessao.data_fim, + data_desfiliacao__gte=sessao.data_fim) | Q( + data__lte=sessao.data_fim, + data_desfiliacao__isnull=True)) + + # Caso não exista filiação com essas condições + except ObjectDoesNotExist: + return '' + + # Caso exista mais de uma filiação nesse intervalo + # Entretanto, NÃO DEVE OCORRER + except MultipleObjectsReturned: + return 'O Parlamentar possui duas filiações conflitantes' + + # Caso encontre UMA filiação nessas condições + else: + return filiacao.partido.sigla + + +def altera_field_mesa_public_view(request): + """ + Essa função lida com qualquer alteração nos campos + da Mesa Diretora para usuários anônimos, + atualizando os campos após cada alteração + """ + + legislatura = request.GET['legislatura'] + sessoes = SessaoLegislativa.objects.filter( + legislatura=legislatura).order_by('-data_inicio') + + if not sessoes: + return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)}) + + # Verifica se já tem uma sessão selecionada. Ocorre quando + # é alterado o campo de sessão + if request.GET['sessao']: + sessao_selecionada = request.GET['sessao'] + # Caso a mudança tenha sido no campo legislatura, a sessão + # atual deve ser a primeira daquela legislatura + else: + sessao_selecionada = sessoes.first().id + + # Atualiza os componentes da view após a mudança + lista_sessoes = [(s.id, s.__str__()) for s in sessoes] + + composicao_mesa = ComposicaoMesa.objects.filter( + sessao_legislativa=sessao_selecionada) + + cargos_ocupados = [(m.cargo.id, + m.cargo.__str__()) for m in composicao_mesa] + + parlamentares_ocupados = [(m.parlamentar.id, + m.parlamentar.__str__() + ) for m in composicao_mesa] + + lista_fotos = [] + lista_partidos = [] + + sessao = SessaoLegislativa.objects.get(id=sessao_selecionada) + for p in parlamentares_ocupados: + parlamentar = Parlamentar.objects.get(id=p[0]) + lista_partidos.append( + partido_parlamentar_sessao_legislativa(sessao, + parlamentar)) + if parlamentar.fotografia: + lista_fotos.append(parlamentar.fotografia.url) + else: + lista_fotos.append(None) + + return JsonResponse( + {'lista_parlamentares': parlamentares_ocupados, + 'lista_partidos': lista_partidos, + 'lista_cargos': cargos_ocupados, + 'lista_sessoes': lista_sessoes, + 'lista_fotos': lista_fotos, + 'sessao_selecionada': sessao_selecionada, + 'msg': ('', 1)}) diff --git a/sapl/settings.py b/sapl/settings.py index 11b94b3de..3c757842e 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -208,6 +208,7 @@ LOCALE_PATHS = ( # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.8/howto/static-files/ + STATIC_URL = '/static/' STATIC_ROOT = PROJECT_DIR.child("collected_static") STATICFILES_DIRS = (BASE_DIR.child("static"),) diff --git a/sapl/templates/parlamentares/composicaomesa_form.html b/sapl/templates/parlamentares/composicaomesa_form.html index 855313442..6ba96835f 100644 --- a/sapl/templates/parlamentares/composicaomesa_form.html +++ b/sapl/templates/parlamentares/composicaomesa_form.html @@ -158,8 +158,7 @@ // Atualiza os campos após alguma operação de mudança da Legislatura/Sessao ou // Inserção/Remoção function altera_field(id_legislatura, id_sessao=null, msg=null){ - // Pega o novo valor do campo que foi modificado (Sessao/Legislatura) ou utiliza - // o valor da Legislatura, por conveniência, quando há alguma inserção ou remoção + // Pega o novo valor dos campos modificados var sessao_value = id_sessao var legislatura_value = id_legislatura diff --git a/sapl/templates/parlamentares/public_composicaomesa_form.html b/sapl/templates/parlamentares/public_composicaomesa_form.html index fbd780a30..6eaa3f6e5 100644 --- a/sapl/templates/parlamentares/public_composicaomesa_form.html +++ b/sapl/templates/parlamentares/public_composicaomesa_form.html @@ -10,7 +10,7 @@
- {% for l in legislaturas %}
- {% for s in sessoes %}
-
- Identificação Básica -
- {% for b in basica %} -
{{b}}
- {% endfor %} -
-
-


-
- Conteúdo Multimídia -
-
{{multimidia_audio}}
-
{{multimidia_video}}
-
-
-


+ {% include 'sessao/blocos_resumo/'|add:primeiro_ordenacao %} +


-
- Mesa Diretora -
- {% for m in mesa %} -
{{m.cargo}}: - {{m.parlamentar.nome_parlamentar}} / {{ m.parlamentar.filiacao_atual }}
- {% endfor %} -
-
-


+ {% include 'sessao/blocos_resumo/'|add:segundo_ordenacao %} +


-
- Lista de Presença na Sessão -
- {% for p in presenca_sessao %} -
{{p.nome_parlamentar}} / {{ p.filiacao_atual }}
- {% endfor %} -
-
-


+ {% include 'sessao/blocos_resumo/'|add:terceiro_ordenacao %} +


-
- Expedientes - - - {% for e in expedientes %} - - - - {% endfor %} - -
- {{e.tipo}}:

-
-

{{e.conteudo|safe}}

-
-
-
-


+ {% include 'sessao/blocos_resumo/'|add:quarto_ordenacao %} +


-
- Matérias do Expediente - - - - - - - - - - {% for m in materia_expediente %} - - - - - - {% endfor %} - -
MatériaEmentaResultado da Votação
- {{m.numero}} - {{m.titulo}} -
- Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} -
{{m.ementa|safe}}{{m.resultado}}
{{m.resultado_observacao}}
-
-


+ {% include 'sessao/blocos_resumo/'|add:quinto_ordenacao %} +


-
- Oradores do Expediente -
-
Parlamentar
-
Discurso
-
-
- {% for o in oradores %} -
{{o.numero_ordem}} - {{o.parlamentar}}
-
{{o.url_discurso}}
-
- {% endfor %} -
-
-


+ {% include 'sessao/blocos_resumo/'|add:sexto_ordenacao %} +


-
- Lista de Presença na Ordem do Dia -
- {% for p in presenca_ordem %} -
{{p.nome_parlamentar}} / {{ p.filiacao_atual }}
- {% endfor %} -
-
-


+ {% include 'sessao/blocos_resumo/'|add:setimo_ordenacao %} +


-
- Matérias da Ordem do Dia - - - - - - - - - - {% for m in materias_ordem %} - - - - - - {% endfor %} - -
MatériaEmentaResultado da Votação
- {{m.numero}} - {{m.titulo}} -
- Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} -
{{m.ementa|safe}}{{m.resultado}}
{{m.resultado_observacao}}
-
+ {% include 'sessao/blocos_resumo/'|add:oitavo_ordenacao %} +


+ + {% include 'sessao/blocos_resumo/'|add:nono_ordenacao %} +


+ + {% include 'sessao/blocos_resumo/'|add:decimo_ordenacao %} +


-
- Oradores das Explicações Pessoais -
-
Parlamentar
-
Discurso
-
-
- {% for o in oradores_explicacoes %} -
{{o.numero_ordem}} - {{o.parlamentar.nome_parlamentar}} / {{ o.parlamentar.filiacao_atual }}
-
{{o.url_discurso}}
-
- {% endfor %} -
-
{% endblock detail_content %} diff --git a/sapl/templates/sessao/resumo_ordenacao.html b/sapl/templates/sessao/resumo_ordenacao.html new file mode 100644 index 000000000..5d9fe816f --- /dev/null +++ b/sapl/templates/sessao/resumo_ordenacao.html @@ -0,0 +1,13 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block title %} +

Ordenação do Resumo

+{% endblock %} + +{% block base_content %} + +{% crispy form %} + +{% endblock %} \ No newline at end of file diff --git a/sapl/templates/sistema.html b/sapl/templates/sistema.html index 99b9c7062..72ddb240a 100644 --- a/sapl/templates/sistema.html +++ b/sapl/templates/sistema.html @@ -82,7 +82,7 @@ - +

From 33a65dc11614cc825b24f9b5fc6c5961e98680ba Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 23 May 2017 19:01:55 -0300 Subject: [PATCH 53/55] Fix #1095 --- sapl/materia/models.py | 1 - sapl/materia/views.py | 12 ++++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/sapl/materia/models.py b/sapl/materia/models.py index d5447095e..2db7c38d8 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -259,7 +259,6 @@ class MateriaLegislativa(models.Model): force_update=force_update, using=using, update_fields=update_fields) - @reversion.register() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 2cb4d54f6..fa3e66970 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -187,6 +187,18 @@ class CriarProtocoloMateriaView(CreateView): def form_valid(self, form): materia = form.save() + + try: + protocolo = Protocolo.objects.get(pk=self.kwargs['pk']) + except ObjectDoesNotExist: + raise Http404() + + if protocolo.autor: + Autoria.objects.create( + materia=materia, + autor=protocolo.autor, + primeiro_autor=True) + return redirect(self.get_success_url(materia)) From 4b94eb80f410cd9992e14e946dfb5534808c792c Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 23 May 2017 19:14:22 -0300 Subject: [PATCH 54/55] Fix #1118 --- sapl/templates/materia/materialegislativa_filter.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html index a36f6cceb..ec65ebd19 100644 --- a/sapl/templates/materia/materialegislativa_filter.html +++ b/sapl/templates/materia/materialegislativa_filter.html @@ -58,10 +58,11 @@ {% if m.autoria_set.all %} Autores: {% for a in m.autoria_set.all %} - {% if not forloop.first %} - ,    {{a.autor}} - {% else %} -  {{a.autor}} + {% if a.primeiro_autor %} + {% if not forloop.first %} + ,    + {% endif %} +  {{a.autor.nome}} {% endif %} {% endfor %}
From b59c7fe2e1fdefb24624e05386a61abd8cd3c7e7 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 23 May 2017 20:09:07 -0300 Subject: [PATCH 55/55] Coloca o form correto no Create e Update de tramitacao --- sapl/materia/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index fa3e66970..2206923cc 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -34,7 +34,8 @@ from sapl.crud.base import (ACTION_CREATE, ACTION_DELETE, ACTION_DETAIL, PermissionRequiredForAppCrudMixin, make_pagination) from sapl.materia.forms import (AnexadaForm, ConfirmarProposicaoForm, LegislacaoCitadaForm, ProposicaoForm, - TipoProposicaoForm) + TipoProposicaoForm, TramitacaoForm, + TramitacaoUpdateForm) from sapl.norma.models import LegislacaoCitada from sapl.protocoloadm.models import Protocolo from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, @@ -892,6 +893,7 @@ class TramitacaoCrud(MasterDetailCrud): ordering = '-data_tramitacao', class CreateView(MasterDetailCrud.CreateView): + form_class = TramitacaoForm def get_initial(self): local = MateriaLegislativa.objects.get( @@ -908,6 +910,7 @@ class TramitacaoCrud(MasterDetailCrud): return super(CreateView, self).post(request, *args, **kwargs) class UpdateView(MasterDetailCrud.UpdateView): + form_class = TramitacaoUpdateForm def post(self, request, *args, **kwargs): materia = MateriaLegislativa.objects.get(