From 78e5202a80bdb0aada64dfd53704a7b8419c8255 Mon Sep 17 00:00:00 2001 From: Ricardo Lima Canela Date: Mon, 11 Mar 2019 12:46:24 -0300 Subject: [PATCH] 2521 materias anexadas em lote (#2584) * fix #2415 co-authored-by: Victor Fabre * criada url anexada-em-lote * Inserindo anexada em lote em subnav de materia --- sapl/materia/forms.py | 23 ++++++ sapl/materia/urls.py | 3 + sapl/materia/views.py | 59 +++++++++++++++ sapl/templates/materia/anexada_list.html | 14 ++++ sapl/templates/materia/em_lote/anexada.html | 83 +++++++++++++++++++++ 5 files changed, 182 insertions(+) create mode 100644 sapl/templates/materia/anexada_list.html create mode 100644 sapl/templates/materia/em_lote/anexada.html diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 11e94f742..a3a0725ce 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1142,6 +1142,29 @@ class AcessorioEmLoteFilterSet(django_filters.FilterSet): Fieldset(_('Documentos Acessórios em Lote'), row1, row2, form_actions(label='Pesquisar'))) +class AnexadaEmLoteFilterSet(django_filters.FilterSet): + + class Meta(FilterOverridesMetaMixin): + model = MateriaLegislativa + fields = ['tipo', 'data_apresentacao'] + + def __init__(self, *args, **kwargs): + super(AnexadaEmLoteFilterSet, self).__init__(*args, **kwargs) + + self.filters['tipo'].label = 'Tipo de Matéria' + self.filters['data_apresentacao'].label = 'Data (Inicial - Final)' + self.form.fields['tipo'].required = True + self.form.fields['data_apresentacao'].required = True + + row1 = to_row([('tipo', 12)]) + row2 = to_row([('data_apresentacao', 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Matéria Anexada em Lote'), + row1, row2, form_actions(label='Pesquisar'))) + class PrimeiraTramitacaoEmLoteFilterSet(django_filters.FilterSet): diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index e446e6a64..aea49d89d 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -8,6 +8,7 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, CriarProtocoloMateriaView, DespachoInicialCrud, DocumentoAcessorioCrud, DocumentoAcessorioEmLoteView, + MateriaAnexadaEmLoteView, EtiquetaPesquisaView, FichaPesquisaView, FichaSelecionaView, ImpressosView, LegislacaoCitadaCrud, MateriaAssuntoCrud, @@ -93,6 +94,8 @@ urlpatterns_materia = [ url(r'^materia/acessorio-em-lote', DocumentoAcessorioEmLoteView.as_view(), name='acessorio_em_lote'), + url(r'^materia/(?P\d+)/anexada-em-lote', MateriaAnexadaEmLoteView.as_view(), + name='anexada_em_lote'), url(r'^materia/primeira-tramitacao-em-lote', PrimeiraTramitacaoEmLoteView.as_view(), name='primeira_tramitacao_em_lote'), diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 3c7b1df6f..1f9bfc99c 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -51,6 +51,7 @@ from sapl.utils import (YES_NO_CHOICES, autor_label, autor_modal, SEPARADOR_HASH show_results_filter_set, mail_service_configured) from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, + AnexadaEmLoteFilterSet, AdicionarVariasAutoriasFilterSet, DespachoInicialForm, DocumentoAcessorioForm, EtiquetaPesquisaForm, FichaPesquisaForm, FichaSelecionaForm, MateriaAssuntoForm, @@ -1996,6 +1997,64 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): messages.add_message(request, messages.SUCCESS, msg) return self.get(request, self.kwargs) +class MateriaAnexadaEmLoteView(PermissionRequiredMixin, FilterView): + filterset_class = AnexadaEmLoteFilterSet + template_name = 'materia/em_lote/anexada.html' + permission_required = ('materia.add_documentoacessorio',) + + def get_context_data(self, **kwargs): + context = super(MateriaAnexadaEmLoteView, + self).get_context_data(**kwargs) + + context['root_pk'] = self.kwargs['pk'] + + context['subnav_template_name'] = 'materia/subnav.yaml' + + + context['title'] = _('Matérias Anexadas em Lote') + # Verifica se os campos foram preenchidos + if not self.filterset.form.is_valid(): + return context + + qr = self.request.GET.copy() + context['object_list'] = context['object_list'].order_by( + 'ano', 'numero') + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + + context['show_results'] = show_results_filter_set(qr) + + return context + + def post(self, request, *args, **kwargs): + marcadas = request.POST.getlist('materia_id') + + if len(marcadas) == 0: + msg = _('Nenhuma máteria foi selecionada.') + messages.add_message(request, messages.ERROR, msg) + return self.get(request, self.kwargs) + + data_anexacao = datetime.strptime( + request.POST['data_anexacao'], "%d/%m/%Y").date() + + if request.POST['data_desanexacao'] == '': + data_desanexacao = None + else: + data_desanexacao = datetime.strptime( + request.POST['data_desanexacao'], "%d/%m/%Y").date() + + for materia_id in marcadas: + + anexada = Anexada() + anexada.materia_principal = MateriaLegislativa.objects.get(pk = kwargs['pk']) + anexada.materia_anexada = MateriaLegislativa.objects.get(pk = materia_id) + anexada.data_anexacao = data_anexacao + anexada.data_desanexacao = data_desanexacao + anexada.save() + + msg = _('Materia(s) anexada(s).') + messages.add_message(request, messages.SUCCESS, msg) + return self.get(request, self.kwargs) + class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): filterset_class = PrimeiraTramitacaoEmLoteFilterSet diff --git a/sapl/templates/materia/anexada_list.html b/sapl/templates/materia/anexada_list.html new file mode 100644 index 000000000..381f402b8 --- /dev/null +++ b/sapl/templates/materia/anexada_list.html @@ -0,0 +1,14 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load common_tags %} + + +{% block more_buttons %} + +{% if perms|get_add_perm:view %} + + {% trans "Adicionar Anexada em Lote" %} + +{% endif %} + +{% endblock more_buttons %} diff --git a/sapl/templates/materia/em_lote/anexada.html b/sapl/templates/materia/em_lote/anexada.html new file mode 100644 index 000000000..81a930cc1 --- /dev/null +++ b/sapl/templates/materia/em_lote/anexada.html @@ -0,0 +1,83 @@ +{% extends "crud/detail.html" %} +{% load i18n crispy_forms_tags %} +{% block actions %}{% endblock %} +{% block detail_content %} + + {% if not show_results %} + {% crispy filter.form %} + {% endif %} + + {% if show_results %} + {% if object_list.count > 0 %} + {% if object_list.count == 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 %}

+ {% endif %} +
+ {% csrf_token %} + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+ +
+ +
+ Matérias para Anexar em Lote + +
+
+ +
+
+ + + + + {% for materia in object_list %} + + + + {% endfor %} + +
Matéria
+ + {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}} - {{materia.tipo.descricao}} +
+
+ +
+ {% else %} +

Nenhuma matéria encontrada.

+ {% endif %} + {% endif %} +{% endblock detail_content %} +{% block extra_js %} + +{% endblock %}