diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index edbeed810..af78b20ff 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -817,6 +817,26 @@ class AnexadaForm(ModelForm): if is_anexada: self.logger.error("Matéria já se encontra anexada.") raise ValidationError(_('Matéria já se encontra anexada')) + + ciclico = False + anexadas_anexada = Anexada.objects.filter(materia_principal=materia_anexada) + + while anexadas_anexada and not ciclico: + anexadas = [] + + for anexa in anexadas_anexada: + + if materia_principal == anexa.materia_anexada: + ciclico = True + else: + for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada): + anexadas.append(a) + + anexadas_anexada = anexadas + + if ciclico: + self.logger.error("A matéria não pode ser anexada por uma de suas anexadas.") + raise ValidationError(_("A matéria não pode ser anexada por uma de suas anexadas.")) cleaned_data['materia_anexada'] = materia_anexada @@ -1741,7 +1761,7 @@ class ConfirmarProposicaoForm(ProposicaoForm): required=False, widget=widgets.TextInput( attrs={'readonly': 'readonly'})) - regime_tramitacao = forms.ModelChoiceField( + regime_tramitacao = forms.ModelChoiceField(label="Regime de tramitação", required=False, queryset=RegimeTramitacao.objects.all()) gerar_protocolo = forms.ChoiceField( @@ -1807,6 +1827,10 @@ class ConfirmarProposicaoForm(ProposicaoForm): # esta chamada isola o __init__ de ProposicaoForm super(ProposicaoForm, self).__init__(*args, **kwargs) + if self.instance.tipo.content_type.model_class() ==\ + TipoMateriaLegislativa: + self.fields['regime_tramitacao'].required = True + fields = [ Fieldset( _('Dados Básicos'), diff --git a/sapl/materia/views.py b/sapl/materia/views.py index eb827f7f9..464b505ee 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -2070,11 +2070,39 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): qr = self.request.GET.copy() context['object_list'] = context['object_list'].order_by( - 'ano', 'numero') + 'numero', '-ano') principal = MateriaLegislativa.objects.get(pk=self.kwargs['pk']) not_list = [self.kwargs['pk']] + \ [m for m in principal.materia_principal_set.all().values_list('materia_anexada_id', flat=True)] context['object_list'] = context['object_list'].exclude(pk__in=not_list) + + context['temp_object_list'] = context['object_list'] + context['object_list'] = [] + for obj in context['temp_object_list']: + materia_anexada = obj + ciclico = False + anexadas_anexada = Anexada.objects.filter( + materia_principal = materia_anexada + ) + + while anexadas_anexada and not ciclico: + anexadas = [] + + for anexa in anexadas_anexada: + + if principal == anexa.materia_anexada: + ciclico = True + else: + for a in Anexada.objects.filter(materia_principal=anexa.materia_anexada): + anexadas.append(a) + + anexadas_anexada = anexadas + + if not ciclico: + context['object_list'].append(obj) + + context['numero_res'] = len(context['object_list']) + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['show_results'] = show_results_filter_set(qr) @@ -2110,7 +2138,9 @@ class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): msg = _('Matéria(s) anexada(s).') messages.add_message(request, messages.SUCCESS, msg) - return self.get(request, self.kwargs) + + sucess_url = reverse('sapl_index') + 'materia/' + kwargs['pk'] + '/anexada' + return HttpResponseRedirect(sucess_url) class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): diff --git a/sapl/sessao/migrations/0036_auto_20190409_1334.py b/sapl/sessao/migrations/0036_auto_20190409_1334.py new file mode 100644 index 000000000..81ffca6b1 --- /dev/null +++ b/sapl/sessao/migrations/0036_auto_20190409_1334.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-09 16:34 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0035_resumoordenacao_decimo_quarto'), + ] + + operations = [ + migrations.AlterField( + model_name='expedientesessao', + name='sessao_plenaria', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='expedientesessao_set', to='sessao.SessaoPlenaria'), + ), + ] diff --git a/sapl/templates/materia/em_lote/anexada.html b/sapl/templates/materia/em_lote/anexada.html index 76a154ec6..2b1c22c56 100644 --- a/sapl/templates/materia/em_lote/anexada.html +++ b/sapl/templates/materia/em_lote/anexada.html @@ -8,11 +8,11 @@ {% endif %} {% if show_results %} - {% if object_list.count > 0 %} - {% if object_list.count == 1 %} + {% if numero_res > 0 %} + {% if numero_res == 1 %}

{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

{% else %} -

{% blocktrans with object_list.count as total_materias %}Foram encontradas {{total_materias}} matérias.{% endblocktrans %}

+

Foram encontradas {{ numero_res }} matérias.

{% endif %}
{% csrf_token %} diff --git a/sapl/templates/sessao/painel.html b/sapl/templates/sessao/painel.html index 9e1ed742b..7d8a4a104 100644 --- a/sapl/templates/sessao/painel.html +++ b/sapl/templates/sessao/painel.html @@ -116,11 +116,11 @@ $(function() { } startTime(); - - $('#discurso').prop('disabled', true); - $('#aparte').prop('disabled', true); - $('#ordem').prop('disabled', true); - $('#consideracoes').prop('disabled', true); + var audioAlertFinish = document.getElementById("audio"); + $('#discurso').prop('disabled', false); + $('#aparte').prop('disabled', false); + $('#ordem').prop('disabled', false); + $('#consideracoes').prop('disabled', false); $('#discurso').runner({ autostart: false, @@ -130,16 +130,10 @@ $(function() { milliseconds: false }).on('runnerFinish', function(eventObject, info){ $.get('/painel/cronometro', { tipo: 'discurso', action: 'stop' } ); - + audioAlertFinish.play(); $('#discursoReset').show(); $('#discurso').runner('stop'); $('#discursoStart').text('Iniciar'); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); }); @@ -152,12 +146,6 @@ $(function() { $('#discursoReset').hide(); $('#discurso').runner('start'); $('#discursoStart').text('Parar'); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); } else { @@ -166,12 +154,6 @@ $(function() { $('#discursoReset').show(); $('#discurso').runner('stop'); $('#discursoStart').text('Iniciar'); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); } }); @@ -191,16 +173,10 @@ $(function() { milliseconds: false }).on('runnerFinish', function(eventObject, info){ $.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } ); - + audioAlertFinish.play(); $('#aparteReset').show(); $('#aparte').runner('stop'); $('#aparteStart').text('Iniciar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); }); @@ -212,12 +188,7 @@ $(function() { $('#aparteReset').hide(); $('#aparte').runner('start'); $('#aparteStart').text('Parar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); + } else { $.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } ); @@ -225,12 +196,7 @@ $(function() { $('#aparteReset').show(); $('#aparte').runner('stop'); $('#aparteStart').text('Iniciar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); + } }); @@ -250,16 +216,11 @@ $(function() { milliseconds: false }).on('runnerFinish', function(eventObject, info){ $.get('/painel/cronometro', { tipo: 'ordem', action: 'stop' } ); - + audioAlertFinish.play(); $('#ordemReset').show(); $('#ordem').runner('stop'); $('#ordemStart').text('Iniciar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); + }); $('#ordemStart').click(function() { @@ -270,12 +231,7 @@ $(function() { $('#ordemReset').hide(); $('#ordem').runner('start'); $('#ordemStart').text('Parar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); + } else { @@ -284,12 +240,7 @@ $(function() { $('#ordemReset').show(); $('#ordem').runner('stop'); $('#ordemStart').text('Iniciar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); - $('#consideracoesStart').prop('disabled', false); - $('#consideracoesReset').prop('disabled', false); + } }); @@ -309,16 +260,11 @@ $(function() { milliseconds: false }).on('runnerFinish', function(eventObject, info){ $.get('/painel/cronometro', { tipo: 'consideracoes', action: 'stop' } ); - + audioAlertFinish.play(); $('#consideracoesReset').show(); $('#consideracoes').runner('stop'); $('#consideracoesStart').text('Iniciar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); + }); @@ -330,12 +276,7 @@ $(function() { $('#consideracoesReset').hide(); $('#consideracoes').runner('start'); $('#consideracoesStart').text('Parar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); + } else { $.get('/painel/cronometro', { tipo: 'consideracoes', action: 'stop' } ); @@ -343,12 +284,7 @@ $(function() { $('#consideracoesReset').show(); $('#consideracoes').runner('stop'); $('#consideracoesStart').text('Iniciar'); - $('#discursoStart').prop('disabled', false); - $('#discursoReset').prop('disabled', false); - $('#ordemStart').prop('disabled', false); - $('#ordemReset').prop('disabled', false); - $('#aparteStart').prop('disabled', false); - $('#aparteReset').prop('disabled', false); + } });