diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 9ff12378c..ba10e5b2a 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -349,14 +349,6 @@ class ExpedienteMateriaForm(ModelForm): else: cleaned_data['materia'] = materia - exists = self._model.objects.filter( - sessao_plenaria=sessao, - materia=materia).exists() - - if exists and not self.instance.pk: - msg = _('Essa matéria já foi cadastrada.') - raise ValidationError(msg) - return cleaned_data def save(self, commit=False): diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 79c43df49..2630e6515 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -36,7 +36,8 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, OrdemDiaLeituraView, retirar_leitura, TransferenciaMateriasExpediente, TransferenciaMateriasOrdemDia, - filtra_materias_copia_sessao_ajax) + filtra_materias_copia_sessao_ajax, verifica_materia_sessao_plenaria_ajax) + from .apps import AppConfig @@ -80,6 +81,9 @@ urlpatterns = [ url(r'^sessao/filtra-materias-copia-sessao-ajax/', filtra_materias_copia_sessao_ajax, name='filtra_materias_copia_sessao_ajax_view'), + url(r'^sessao/verifica-materia-sessao-plenaria-ajax/', + verifica_materia_sessao_plenaria_ajax, + name='verifica_materia_sessao_plenaria_ajax_view'), url(r'^sessao/(?P\d+)/(?P\d+)/abrir-votacao$', abrir_votacao, diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index d8d8549a0..3d16d9298 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -736,6 +736,11 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = OrdemDiaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["tipo_materia_sessao"] = MATERIAS_ORDEMDIA + return context + def get_initial(self): self.initial['data_ordem'] = SessaoPlenaria.objects.get( pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y') @@ -753,6 +758,17 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): class UpdateView(MasterDetailCrud.UpdateView): form_class = OrdemDiaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context["tipo_materia_sessao"] = MATERIAS_ORDEMDIA + + context["tipo_materia_salvo"] = self.object.materia.tipo.id + context["numero_materia_salvo"] = self.object.materia.numero + context["ano_materia_salvo"] = self.object.materia.ano + + return context + def get_initial(self): initial = super().get_initial() @@ -833,6 +849,11 @@ class ExpedienteMateriaCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = ExpedienteMateriaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["tipo_materia_sessao"] = MATERIAS_EXPEDIENTE + return context + def get_initial(self): initial = super().get_initial() initial['data_ordem'] = SessaoPlenaria.objects.get( @@ -851,6 +872,17 @@ class ExpedienteMateriaCrud(MasterDetailCrud): class UpdateView(MasterDetailCrud.UpdateView): form_class = ExpedienteMateriaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context["tipo_materia_sessao"] = MATERIAS_EXPEDIENTE + + context["tipo_materia_salvo"] = self.object.materia.tipo.id + context["numero_materia_salvo"] = self.object.materia.numero + context["ano_materia_salvo"] = self.object.materia.ano + + return context + def get_initial(self): initial = super().get_initial() @@ -3719,11 +3751,31 @@ def retira_materias_ja_adicionadas(id_sessao, model): return lista_id_materias +def verifica_materia_sessao_plenaria_ajax(request): + # Define se a matéria é do expediente ou da ordem do dia + tipo_materia_sessao = int(request.GET['tipo_materia_sessao']) + + id_materia_selecionada = request.GET['id_materia_selecionada'] + pk_sessao_plenaria = request.GET['pk_sessao_plenaria'] + + if tipo_materia_sessao == MATERIAS_EXPEDIENTE: + is_materia_presente = ExpedienteMateria.objects.filter( + sessao_plenaria=pk_sessao_plenaria, materia=id_materia_selecionada + ).exists() + elif tipo_materia_sessao == MATERIAS_ORDEMDIA: + is_materia_presente = OrdemDia.objects.filter( + sessao_plenaria=pk_sessao_plenaria, materia=id_materia_selecionada + ).exists() + + return JsonResponse({ 'is_materia_presente': is_materia_presente }) + + class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, MateriaLegislativaPesquisaView): filterset_class = AdicionarVariasMateriasFilterSet template_name = 'sessao/adicionar_varias_materias_expediente.html' app_label = AppConfig.label + tipo_materia_sessao = MATERIAS_EXPEDIENTE logger = logging.getLogger(__name__) @@ -3764,6 +3816,8 @@ class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['pk_sessao'] = self.kwargs['pk'] + context["tipo_materia_sessao"] = self.tipo_materia_sessao + return context def post(self, request, *args, **kwargs): @@ -3815,6 +3869,7 @@ class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, class AdicionarVariasMateriasOrdemDia(AdicionarVariasMateriasExpediente): filterset_class = AdicionarVariasMateriasFilterSet template_name = 'sessao/adicionar_varias_materias_ordem.html' + tipo_materia_sessao = MATERIAS_ORDEMDIA logger = logging.getLogger(__name__) diff --git a/sapl/templates/sessao/adicionar_varias_materias_expediente.html b/sapl/templates/sessao/adicionar_varias_materias_expediente.html index c9ce0cab1..205f0397b 100644 --- a/sapl/templates/sessao/adicionar_varias_materias_expediente.html +++ b/sapl/templates/sessao/adicionar_varias_materias_expediente.html @@ -4,19 +4,16 @@ {% block actions %}{% endblock %} {% block detail_content %} - {% block buttons %} + {% block buttons %} {% if filter_url and not filter.form.errors %} - - - - + + {% endif %} - {% endblock %} {% if filter.form.errors %} @@ -29,77 +26,105 @@

{% if filter_url and not filter.form.errors %} - - {% if paginator.count %} -
- {% csrf_token %} - - - - - - - - {% if paginator.count > 1 %} -

{% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{total_materias}} matérias.{% endblocktrans %}

- {% elif paginator.count == 1 %} -

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

- {% endif %} - - {% for m in page_obj %} - - - - - {% endfor %} -

{% trans "Matérias" %}

{% trans "Tipo de Votação" %}

- - {{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
- Autores: - {% for a in m.autoria_set.all %} - {% if not forloop.first %} - ,    {{a.autor|default_if_none:""}} - {% else %} -  {{a.autor|default_if_none:""}} - {% endif %} - {% endfor %} -
- Localização Atual:  {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não informado"}}
- Status:  {{m.tramitacao_set.last.status|default_if_none:"Não informado"}}
- Data da última Tramitação:  {{m.tramitacao_set.last.data_tramitacao|default_if_none:"Não informado"}}
- Ementa: {{ m.ementa|safe }}
-

-
- -
- -
- -
- -
- -
- {% else %} - + {% if paginator.count %} + + {% csrf_token %} +
+ + + + {% if paginator.count > 1 %} +

{% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{ total_materias }} matérias.{% endblocktrans %}

+ {% elif paginator.count == 1 %} +

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

+ {% endif %} + {% for m in page_obj %} - + -

{% trans "Matérias" %}

{% trans "Tipo de Votação" %}

-

Nenhuma matéria encontrada com essas especificações

+
+ + {{ m.tipo.sigla }} {{ m.numero }}/{{ m.ano }} - {{ m.tipo }}
+ Autores: + {% for a in m.autoria_set.all %} + {% if not forloop.first %} + ,    {{ a.autor|default_if_none:"" }} + {% else %} +  {{ a.autor|default_if_none:"" }} + {% endif %} + {% endfor %} +
+ Localização Atual:  {{ m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não informado" }}
+ Status:  {{ m.tramitacao_set.last.status|default_if_none:"Não informado" }}
+ Data da última Tramitação:  {{ m.tramitacao_set.last.data_tramitacao|default_if_none:"Não informado" }}
+ Ementa: {{ m.ementa|safe }}
+

+
+ +
+ +
+ +
+
- {% endif %} - -{% endif %} - + {% endfor %} + + + + {% else %} +

Nenhuma matéria encontrada com essas especificações

+ {% endif %} + {% endif %} {% endblock detail_content %} {% block extra_js %} -{% endblock extra_js%} +{% endblock extra_js %} diff --git a/sapl/templates/sessao/expedientemateria_form.html b/sapl/templates/sessao/expedientemateria_form.html index e90ec63ff..f4dcad044 100644 --- a/sapl/templates/sessao/expedientemateria_form.html +++ b/sapl/templates/sessao/expedientemateria_form.html @@ -4,54 +4,91 @@ {% load common_tags %} {% block extra_js %} + + } + + var fields = ["#id_tipo_materia", "#id_numero_materia", "#id_ano_materia"]; + for (i = 0; i < fields.length; i++){ + $(fields[i]).change(recuperar_materia) + } + recuperar_materia() + + var modal_estilos = 'display: block; width: 85%; max-width: 600px; background: #fff; padding: 15px; border-radius: 5px;' + +'-webkit-box-shadow: 0px 6px 14px -2px rgba(0, 0, 0, 0.75); -moz-box-shadow: 0px 6px 14px -2px rgba(0, 0, 0, 0.75);' + +'box-shadow: 0px 6px 14px -2px rgba(0, 0, 0, 0.75); position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);' + +'z-index: 99999999; text-align: center'; + + var fundo_modal_estilos = 'top: 0; right: 0; bottom: 0; left: 0; position: fixed; background-color: rgba(0, 0, 0, 0.6); z-index: 99999999;' + +'display: none;'; + + var modal = '
' + +'' + +'
'; + + $(document).ready( function() { + $("body").append(modal) + + $("select[name='tipo_votacao']").children("option[value='4']").remove(); + $('#id_apenas_leitura').change( function(event) { + $('#div_id_tipo_votacao').toggle() + if ($('#id_apenas_leitura').prop('checked')){ + $("select[name='tipo_votacao']").append(new Option('Leitura', '4')) + $("select[name='tipo_votacao']").val('4') + } else { + $("select[name='tipo_votacao']").children("option[value='4']").remove() + $("select[name='tipo_votacao']").val('1') + } + }); + $("#fundo_modal, #close_model_btn").click( function() { $("#fundo_modal").hide() }); + $("#modal").click( function(e) { e.stopPropagation() }); + }); + {% endblock %}