From cf3df64125ac285f597eb5e27206db9cabfb3ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Cantu=C3=A1ria?= Date: Wed, 17 Apr 2019 14:39:10 -0300 Subject: [PATCH] =?UTF-8?q?Fix=20#2700=20Corrige=20Duplica=C3=A7=C3=A3o=20?= =?UTF-8?q?em=20PDF=20de=20Resumo=20de=20Sess=C3=A3o=20(#2704)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Corrige duplicação em pdf de resumo de sessão * Corrige conflito de migração --- sapl/sessao/forms.py | 128 ++++++++++------ .../migrations/0037_auto_20190415_1635.py | 85 +++++++++++ .../migrations/0038_merge_20190415_1800.py | 16 ++ sapl/sessao/models.py | 84 +++++++++-- sapl/sessao/views.py | 138 ++++++------------ 5 files changed, 297 insertions(+), 154 deletions(-) create mode 100644 sapl/sessao/migrations/0037_auto_20190415_1635.py create mode 100644 sapl/sessao/migrations/0038_merge_20190415_1800.py diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 373b1e951..451f2b990 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -26,29 +26,14 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao, - OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia) + OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia, ORDENACAO_RESUMO, + ResumoOrdenacao) MES_CHOICES = RANGE_MESES DIA_CHOICES = RANGE_DIAS_MES -ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'), - ('exp', 'Expedientes'), - ('id_basica', 'Identificação Básica'), - ('lista_p', 'Lista de Presença'), - ('lista_p_o_d', 'Lista de Presença Ordem do Dia'), - ('mat_exp', 'Matérias do Expediente'), - ('mat_o_d', 'Matérias da Ordem do Dia'), - ('mesa_d', 'Mesa Diretora'), - ('oradores_exped', 'Oradores do Expediente'), - ('oradores_expli', 'Oradores das Explicações Pessoais'), - ('ocorr_sessao', 'Ocorrências da Sessão'), - ('v_n_mat_exp', 'Votações Nominais - Matérias do Expediente'), - ('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia'), - ('oradores_o_d', 'Oradores da Ordem do Dia')] - - class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm): class Meta: @@ -807,38 +792,64 @@ class PautaSessaoFilterSet(SessaoPlenariaFilterSet): class ResumoOrdenacaoForm(forms.Form): - primeiro = forms.ChoiceField(label=_('1°'), - choices=ORDENACAO_RESUMO) - segundo = forms.ChoiceField(label=_('2°'), - choices=ORDENACAO_RESUMO) - terceiro = forms.ChoiceField(label='3°', - choices=ORDENACAO_RESUMO) - quarto = forms.ChoiceField(label=_('4°'), - choices=ORDENACAO_RESUMO) - quinto = forms.ChoiceField(label=_('5°'), - choices=ORDENACAO_RESUMO) - sexto = forms.ChoiceField(label=_('6°'), - choices=ORDENACAO_RESUMO) - setimo = forms.ChoiceField(label=_('7°'), - choices=ORDENACAO_RESUMO) - oitavo = forms.ChoiceField(label=_('8°'), - choices=ORDENACAO_RESUMO) - nono = forms.ChoiceField(label=_('9°'), - choices=ORDENACAO_RESUMO) - decimo = forms.ChoiceField(label='10°', - choices=ORDENACAO_RESUMO) - decimo_primeiro = forms.ChoiceField(label='11°', - choices=ORDENACAO_RESUMO) - decimo_segundo = forms.ChoiceField(label='12°', - choices=ORDENACAO_RESUMO) - decimo_terceiro = forms.ChoiceField(label='13°', - choices=ORDENACAO_RESUMO) - decimo_quarto = forms.ChoiceField(label='14°', - choices=ORDENACAO_RESUMO) + primeiro = forms.ChoiceField( + label='1°', + choices=ORDENACAO_RESUMO + ) + segundo = forms.ChoiceField( + label='2°', + choices=ORDENACAO_RESUMO + ) + terceiro = forms.ChoiceField( + label='3°', + choices=ORDENACAO_RESUMO + ) + quarto = forms.ChoiceField( + label='4°', + choices=ORDENACAO_RESUMO + ) + quinto = forms.ChoiceField( + label='5°', + choices=ORDENACAO_RESUMO + ) + sexto = forms.ChoiceField( + label='6°', + choices=ORDENACAO_RESUMO + ) + setimo = forms.ChoiceField( + label='7°', + choices=ORDENACAO_RESUMO + ) + oitavo = forms.ChoiceField( + label='8°', + choices=ORDENACAO_RESUMO + ) + nono = forms.ChoiceField( + label='9°', + choices=ORDENACAO_RESUMO + ) + decimo = forms.ChoiceField( + label='10°', + choices=ORDENACAO_RESUMO + ) + decimo_primeiro = forms.ChoiceField( + label='11°', + choices=ORDENACAO_RESUMO + ) + decimo_segundo = forms.ChoiceField( + label='12°', + choices=ORDENACAO_RESUMO + ) + decimo_terceiro = forms.ChoiceField( + label='13°', + choices=ORDENACAO_RESUMO + ) + decimo_quarto = forms.ChoiceField( + label='14°', + choices=ORDENACAO_RESUMO + ) def __init__(self, *args, **kwargs): - super(ResumoOrdenacaoForm, self).__init__(*args, **kwargs) - row1 = to_row( [('primeiro', 12)]) row2 = to_row( @@ -878,6 +889,8 @@ class ResumoOrdenacaoForm(forms.Form): form_actions(label='Atualizar')) ) + super().__init__(*args, **kwargs) + def clean(self): super(ResumoOrdenacaoForm, self).clean() @@ -896,6 +909,27 @@ class ResumoOrdenacaoForm(forms.Form): 'Não é possível ter campos repetidos')) return self.cleaned_data + def save(self): + ordenacao = ResumoOrdenacao.objects.get() + cleaned_data = self.cleaned_data + + ordenacao.primeiro = cleaned_data['primeiro'] + ordenacao.segundo = cleaned_data['segundo'] + ordenacao.terceiro = cleaned_data['terceiro'] + ordenacao.quarto = cleaned_data['quarto'] + ordenacao.quinto = cleaned_data['quinto'] + ordenacao.sexto = cleaned_data['sexto'] + ordenacao.setimo = cleaned_data['setimo'] + ordenacao.oitavo = cleaned_data['oitavo'] + ordenacao.nono = cleaned_data['nono'] + ordenacao.decimo = cleaned_data['decimo'] + ordenacao.decimo_primeiro = cleaned_data['decimo_primeiro'] + ordenacao.decimo_segundo = cleaned_data['decimo_segundo'] + ordenacao.decimo_terceiro = cleaned_data['decimo_terceiro'] + ordenacao.decimo_quarto = cleaned_data['decimo_quarto'] + + ordenacao.save() + class JustificativaAusenciaForm(ModelForm): diff --git a/sapl/sessao/migrations/0037_auto_20190415_1635.py b/sapl/sessao/migrations/0037_auto_20190415_1635.py new file mode 100644 index 000000000..701d9eee9 --- /dev/null +++ b/sapl/sessao/migrations/0037_auto_20190415_1635.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-15 19:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0036_auto_20190412_1106'), + ] + + operations = [ + migrations.AlterField( + model_name='resumoordenacao', + name='decimo', + field=models.CharField(default='mat_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_primeiro', + field=models.CharField(default='v_n_mat_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_quarto', + field=models.CharField(default='ocorr_sessao', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_segundo', + field=models.CharField(default='oradores_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='decimo_terceiro', + field=models.CharField(default='oradores_expli', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='nono', + field=models.CharField(default='lista_p_o_d', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='oitavo', + field=models.CharField(default='oradores_exped', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='primeiro', + field=models.CharField(default='id_basica', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='quarto', + field=models.CharField(default='lista_p', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='quinto', + field=models.CharField(default='exp', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='segundo', + field=models.CharField(default='cont_mult', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='setimo', + field=models.CharField(default='v_n_mat_exp', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='sexto', + field=models.CharField(default='mat_exp', max_length=50), + ), + migrations.AlterField( + model_name='resumoordenacao', + name='terceiro', + field=models.CharField(default='mesa_d', max_length=50), + ), + ] diff --git a/sapl/sessao/migrations/0038_merge_20190415_1800.py b/sapl/sessao/migrations/0038_merge_20190415_1800.py new file mode 100644 index 000000000..0bf3ab4ea --- /dev/null +++ b/sapl/sessao/migrations/0038_merge_20190415_1800.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-15 21:00 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0037_auto_20190415_1635'), + ('sessao', '0037_auto_20190415_1324'), + ] + + operations = [ + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 5d2d1c7cc..3d7c98186 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -584,30 +584,86 @@ class Bloco(models.Model): return self.nome +ORDENACAO_RESUMO = [ + ('id_basica', 'Identificação Básica'), + ('cont_mult', 'Conteúdo Multimídia'), + ('mesa_d', 'Mesa Diretora'), + ('lista_p', 'Lista de Presença'), + ('exp', 'Expedientes'), + ('mat_exp', 'Matérias do Expediente'), + ('v_n_mat_exp', 'Votações Nominais - Matérias do Expediente'), + ('oradores_exped', 'Oradores do Expediente'), + ('lista_p_o_d', 'Lista de Presença Ordem do Dia'), + ('mat_o_d', 'Matérias da Ordem do Dia'), + ('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia'), + ('oradores_o_d', 'Oradores da Ordem do Dia'), + ('oradores_expli', 'Oradores das Explicações Pessoais'), + ('ocorr_sessao', 'Ocorrências da Sessão') +] + + @reversion.register() class ResumoOrdenacao(models.Model): ''' Tabela para registrar em qual ordem serão renderizados os componentes da tela de resumo de uma sessão ''' - primeiro = models.CharField(max_length=30) - segundo = models.CharField(max_length=30) - terceiro = models.CharField(max_length=30) - quarto = models.CharField(max_length=30) - quinto = models.CharField(max_length=30) - sexto = models.CharField(max_length=30) - setimo = models.CharField(max_length=30) - oitavo = models.CharField(max_length=30) - nono = models.CharField(max_length=30) - decimo = models.CharField(max_length=30) + primeiro = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[0][0] + ) + segundo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[1][0] + ) + terceiro = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[2][0] + ) + quarto = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[3][0] + ) + quinto = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[4][0] + ) + sexto = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[5][0] + ) + setimo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[6][0] + ) + oitavo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[7][0] + ) + nono = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[8][0] + ) + decimo = models.CharField( + max_length=50, + default=ORDENACAO_RESUMO[9][0] + ) decimo_primeiro = models.CharField( - max_length=30, default="Ocorrências da Sessão") + max_length=50, + default=ORDENACAO_RESUMO[10][0] + ) decimo_segundo = models.CharField( - max_length=30, default="Votos Nominais Mat Expediente") + max_length=50, + default=ORDENACAO_RESUMO[11][0] + ) decimo_terceiro = models.CharField( - max_length=30, default="Votos Nominais Mat Ordem Dia") + max_length=50, + default=ORDENACAO_RESUMO[12][0] + ) decimo_quarto = models.CharField( - max_length=30, default="Oradores da Ordem do Dia") + max_length=50, + default=ORDENACAO_RESUMO[13][0] + ) class Meta: verbose_name = _('Ordenação do Resumo de uma Sessão') diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 602e70ca6..afc349221 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -49,7 +49,7 @@ from .models import (Bancada, Bloco, CargoBancada, CargoMesa, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta, - RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia) + RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO) TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') @@ -1296,49 +1296,38 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView): form_class = ResumoOrdenacaoForm permission_required = {'sessao.change_resumoordenacao'} - def get_success_url(self): - return reverse('sapl.base:sistema') + def get_tupla(self, tupla_key): + for tupla in ORDENACAO_RESUMO: + if tupla[0] == tupla_key: + return tupla def get_initial(self): - initial = super(ResumoOrdenacaoView, self).get_initial() - ordenacao = ResumoOrdenacao.objects.first() - if ordenacao: - initial.update({'primeiro': ordenacao.primeiro, - 'segundo': ordenacao.segundo, - 'terceiro': ordenacao.terceiro, - 'quarto': ordenacao.quarto, - 'quinto': ordenacao.quinto, - 'sexto': ordenacao.sexto, - 'setimo': ordenacao.setimo, - 'oitavo': ordenacao.oitavo, - 'nono': ordenacao.nono, - 'decimo': ordenacao.decimo, - 'decimo_primeiro': ordenacao.decimo_primeiro, - 'decimo_segundo': ordenacao.decimo_segundo, - 'decimo_terceiro': ordenacao.decimo_terceiro, - 'decimo_quarto': ordenacao.decimo_quarto}) - return initial - - def form_valid(self, form): ordenacao = ResumoOrdenacao.objects.get_or_create()[0] - ordenacao.primeiro = form.cleaned_data['primeiro'] - ordenacao.segundo = form.cleaned_data['segundo'] - ordenacao.terceiro = form.cleaned_data['terceiro'] - ordenacao.quarto = form.cleaned_data['quarto'] - ordenacao.quinto = form.cleaned_data['quinto'] - ordenacao.sexto = form.cleaned_data['sexto'] - ordenacao.setimo = form.cleaned_data['setimo'] - ordenacao.oitavo = form.cleaned_data['oitavo'] - ordenacao.nono = form.cleaned_data['nono'] - ordenacao.decimo = form.cleaned_data['decimo'] - ordenacao.decimo_primeiro = form.cleaned_data['decimo_primeiro'] - ordenacao.decimo_segundo = form.cleaned_data['decimo_segundo'] - ordenacao.decimo_terceiro = form.cleaned_data['decimo_terceiro'] - ordenacao.decimo_quarto = form.cleaned_data['decimo_quarto'] - - ordenacao.save() + initial = { + 'primeiro': self.get_tupla(ordenacao.primeiro), + 'segundo': self.get_tupla(ordenacao.segundo), + 'terceiro': self.get_tupla(ordenacao.terceiro), + 'quarto': self.get_tupla(ordenacao.quarto), + 'quinto': self.get_tupla(ordenacao.quinto), + 'sexto': self.get_tupla(ordenacao.sexto), + 'setimo': self.get_tupla(ordenacao.setimo), + 'oitavo': self.get_tupla(ordenacao.oitavo), + 'nono': self.get_tupla(ordenacao.nono), + 'decimo': self.get_tupla(ordenacao.decimo), + 'decimo_primeiro': self.get_tupla(ordenacao.decimo_primeiro), + 'decimo_segundo': self.get_tupla(ordenacao.decimo_segundo), + 'decimo_terceiro': self.get_tupla(ordenacao.decimo_terceiro), + 'decimo_quarto': self.get_tupla(ordenacao.decimo_quarto) + } + + return initial + def get_success_url(self): + return reverse('sapl.base:sistema') + + def form_valid(self, form): + form.save() return HttpResponseRedirect(self.get_success_url()) @@ -1761,7 +1750,6 @@ class ResumoView(DetailView): context.update(get_ocorrencias_da_sessão(self.object)) # ===================================================================== # Indica a ordem com a qual o template será renderizado - ordenacao = ResumoOrdenacao.objects.first() dict_ord_template = { 'cont_mult': 'conteudo_multimidia.html', 'exp': 'expedientes.html', @@ -1779,59 +1767,23 @@ class ResumoView(DetailView): 'ocorr_sessao': 'ocorrencias_da_sessao.html' } - if ordenacao: - try: - context.update( - {'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro], - 'segundo_ordenacao': dict_ord_template[ordenacao.segundo], - 'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro], - 'quarto_ordenacao': dict_ord_template[ordenacao.quarto], - 'quinto_ordenacao': dict_ord_template[ordenacao.quinto], - 'sexto_ordenacao': dict_ord_template[ordenacao.sexto], - 'setimo_ordenacao': dict_ord_template[ordenacao.setimo], - 'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo], - 'nono_ordenacao': dict_ord_template[ordenacao.nono], - 'decimo_ordenacao': dict_ord_template[ordenacao.decimo], - 'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro], - 'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo], - 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro], - 'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]}) - except KeyError as e: - self.logger.error('user=' + self.request.user.username + '. ' + "KeyError: " + str(e) + ". Erro " - "ao tentar utilizar configuração de ordenação. Utilizando ordenação padrão.") - context.update( - {'primeiro_ordenacao': dict_ord_template['id_basica'], - 'segundo_ordenacao': dict_ord_template['cont_mult'], - 'terceiro_ordenacao': dict_ord_template['mesa_d'], - 'quarto_ordenacao': dict_ord_template['lista_p'], - 'quinto_ordenacao': dict_ord_template['exp'], - 'sexto_ordenacao': dict_ord_template['mat_exp'], - 'setimo_ordenacao': dict_ord_template['v_n_mat_exp'], - 'oitavo_ordenacao': dict_ord_template['oradores_exped'], - 'nono_ordenacao': dict_ord_template['lista_p_o_d'], - 'decimo_ordenacao': dict_ord_template['mat_o_d'], - 'decimo_primeiro_ordenacao': dict_ord_template['v_n_mat_o_d'], - 'decimo_segundo_ordenacao': dict_ord_template['oradores_o_d'], - 'decimo_terceiro_ordenacao': dict_ord_template['oradores_expli'], - 'decimo_quarto_ordenacao': dict_ord_template['ocorr_sessao'] - }) - else: - context.update( - {'primeiro_ordenacao': dict_ord_template['id_basica'], - 'segundo_ordenacao': dict_ord_template['cont_mult'], - 'terceiro_ordenacao': dict_ord_template['mesa_d'], - 'quarto_ordenacao': dict_ord_template['lista_p'], - 'quinto_ordenacao': dict_ord_template['exp'], - 'sexto_ordenacao': dict_ord_template['mat_exp'], - 'setimo_ordenacao': dict_ord_template['v_n_mat_exp'], - 'oitavo_ordenacao': dict_ord_template['oradores_exped'], - 'nono_ordenacao': dict_ord_template['lista_p_o_d'], - 'decimo_ordenacao': dict_ord_template['mat_o_d'], - 'decimo_primeiro_ordenacao': dict_ord_template['v_n_mat_o_d'], - 'decimo_segundo_ordenacao': dict_ord_template['oradores_o_d'], - 'decimo_terceiro_ordenacao': dict_ord_template['oradores_expli'], - 'decimo_quarto_ordenacao': dict_ord_template['ocorr_sessao'] - }) + ordenacao = ResumoOrdenacao.objects.get_or_create()[0] + context.update({ + 'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro], + 'segundo_ordenacao': dict_ord_template[ordenacao.segundo], + 'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro], + 'quarto_ordenacao': dict_ord_template[ordenacao.quarto], + 'quinto_ordenacao': dict_ord_template[ordenacao.quinto], + 'sexto_ordenacao': dict_ord_template[ordenacao.sexto], + 'setimo_ordenacao': dict_ord_template[ordenacao.setimo], + 'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo], + 'nono_ordenacao': dict_ord_template[ordenacao.nono], + 'decimo_ordenacao': dict_ord_template[ordenacao.decimo], + 'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro], + 'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo], + 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro], + 'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto] + }) return context