From 332425f6c52fd34fd453f24cfcd251859ea3b07e Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 15:51:03 -0300 Subject: [PATCH 1/9] =?UTF-8?q?Inicia=20tela=20de=20primeira=20tramita?= =?UTF-8?q?=C3=A7=C3=A3o=20em=20lote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/forms.py | 32 +++++ sapl/materia/urls.py | 21 ++-- sapl/materia/views.py | 59 ++++++++- sapl/templates/base.html | 2 +- .../acessorio.html} | 0 .../materia/em_lote/primeira_tramitacao.html | 113 ++++++++++++++++++ sapl/utils.py | 11 ++ 7 files changed, 223 insertions(+), 15 deletions(-) rename sapl/templates/materia/{acessorio_lote.html => em_lote/acessorio.html} (100%) create mode 100644 sapl/templates/materia/em_lote/primeira_tramitacao.html diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 4ef42e922..fec68c766 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -786,3 +786,35 @@ class AcessorioEmLoteFilterSet(django_filters.FilterSet): self.form.helper.layout = Layout( Fieldset(_('Documentos Acessórios em Lote'), row1, row2, form_actions(save_label='Pesquisar'))) + + +class PrimeiraTramitacaoEmLoteFilterSet(django_filters.FilterSet): + + filter_overrides = {models.DateField: { + 'filter_class': django_filters.DateFromToRangeFilter, + 'extra': lambda f: { + 'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')), + 'widget': RangeWidgetOverride} + }} + + class Meta: + model = MateriaLegislativa + fields = ['tipo', 'data_apresentacao'] + + def __init__(self, *args, **kwargs): + super(PrimeiraTramitacaoEmLoteFilterSet, 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 = FormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Primeira Tramitação'), + row1, row2, form_actions(save_label='Pesquisar'))) diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 10bbbe08d..039882c22 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -10,15 +10,15 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, LegislacaoCitadaCrud, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, NumeracaoCrud, OrgaoCrud, OrigemCrud, - ProposicaoCrud, ProposicaoDevolvida, - ProposicaoPendente, ProposicaoRecebida, - ProposicaoTaView, ReceberProposicao, - ReciboProposicaoView, RegimeTramitacaoCrud, - RelatoriaCrud, StatusTramitacaoCrud, - TipoAutorCrud, TipoDocumentoCrud, - TipoFimRelatoriaCrud, TipoMateriaCrud, - TipoProposicaoCrud, TramitacaoCrud, - UnidadeTramitacaoCrud) + PrimeiraTramitacaoEmLoteView, ProposicaoCrud, + ProposicaoDevolvida, ProposicaoPendente, + ProposicaoRecebida, ProposicaoTaView, + ReceberProposicao, ReciboProposicaoView, + RegimeTramitacaoCrud, RelatoriaCrud, + StatusTramitacaoCrud, TipoAutorCrud, + TipoDocumentoCrud, TipoFimRelatoriaCrud, + TipoMateriaCrud, TipoProposicaoCrud, + TramitacaoCrud, UnidadeTramitacaoCrud) from .apps import AppConfig @@ -90,4 +90,7 @@ urlpatterns = [ url(r'^acessorio-em-lote', DocumentoAcessorioEmLoteView.as_view(), name='acessorio_em_lote'), + url(r'^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 d396e6545..7eeaab44e 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -30,15 +30,17 @@ from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, CrudUpdateView, make_pagination) from sapl.crud.masterdetail import MasterDetailCrud from sapl.norma.models import LegislacaoCitada -from sapl.utils import (autor_label, autor_modal, gerar_hash_arquivo, - get_base_url, permissao_tb_aux, permissoes_autor, - permissoes_materia, permissoes_protocoloadm) +from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, + autor_modal, gerar_hash_arquivo, get_base_url, + permissao_tb_aux, permissoes_autor, permissoes_materia, + permissoes_protocoloadm) from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AnexadaForm, AutorForm, AutoriaForm, ConfirmarProposicaoForm, DespachoInicialForm, DocumentoAcessorioForm, LegislacaoCitadaForm, - MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, + MateriaLegislativaFilterSet, NumeracaoForm, + PrimeiraTramitacaoEmLoteFilterSet, ProposicaoForm, ReceberProposicaoForm, RelatoriaForm, TramitacaoForm, TramitacaoUpdateForm, UnidadeTramitacaoForm, filtra_tramitacao_destino, @@ -1251,7 +1253,7 @@ def do_envia_email_tramitacao(request, materia): class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): filterset_class = AcessorioEmLoteFilterSet - template_name = 'materia/acessorio_lote.html' + template_name = 'materia/em_lote/acessorio.html' permission_required = permissoes_materia() def get_context_data(self, **kwargs): @@ -1291,3 +1293,50 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): msg = _('Documento(s) criado(s).') messages.add_message(request, messages.SUCCESS, msg) return self.get(request, self.kwargs) + + +class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): + filterset_class = PrimeiraTramitacaoEmLoteFilterSet + template_name = 'materia/em_lote/primeira_tramitacao.html' + permission_required = permissoes_materia() + + def get_context_data(self, **kwargs): + context = super(PrimeiraTramitacaoEmLoteView, + self).get_context_data(**kwargs) + + context['title'] = _('Primeira Tramitação em Lote') + # Verifica se os campos foram preenchidos + if not self.filterset.form.is_valid(): + return context + + qr = self.request.GET.copy() + context['unidade_tramitacao'] = UnidadeTramitacao.objects.all() + context['status_tramitacao'] = StatusTramitacao.objects.all() + context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES + context['urgente_tramitacao'] = YES_NO_CHOICES + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + 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) + + tipo = TipoDocumento.objects.get(descricao=request.POST['tipo']) + + for materia_id in marcadas: + DocumentoAcessorio.objects.create( + materia_id=materia_id, + tipo=tipo, + arquivo=request.POST['arquivo'], + nome=request.POST['nome'], + data=datetime.strptime(request.POST['data'], "%d/%m/%Y"), + autor=Autor.objects.get(id=request.POST['autor']), + ementa=request.POST['ementa'] + ) + msg = _('Documento(s) criado(s).') + messages.add_message(request, messages.SUCCESS, msg) + return self.get(request, self.kwargs) diff --git a/sapl/templates/base.html b/sapl/templates/base.html index f1c78437d..03617f5ac 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -84,10 +84,10 @@ + diff --git a/sapl/templates/materia/acessorio_lote.html b/sapl/templates/materia/em_lote/acessorio.html similarity index 100% rename from sapl/templates/materia/acessorio_lote.html rename to sapl/templates/materia/em_lote/acessorio.html diff --git a/sapl/templates/materia/em_lote/primeira_tramitacao.html b/sapl/templates/materia/em_lote/primeira_tramitacao.html new file mode 100644 index 000000000..cc97eff3c --- /dev/null +++ b/sapl/templates/materia/em_lote/primeira_tramitacao.html @@ -0,0 +1,113 @@ +{% extends "crud/detail.html" %} +{% load i18n crispy_forms_tags %} +{% block actions %}{% endblock %} +{% block sections_nav %}{% endblock %} +{% block detail_content %} + + {% if not filter_url %} + {% crispy filter.form %} + {% endif %} + + {% if filter_url %} + {% 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 %} + {% else %} +

Nenhuma matéria encontrada.

+ {% endif %} +
+ {% csrf_token %} +
+ Detalhes da tramitação + +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+ +


+ +
+ Selecione as matérias para primeira tramitação + + + + + + {% for materia in object_list %} + + + + {% endfor %} + +
Matéria
+ + {{materia.tipo.sigla}} {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}} +
+
+ +
+ {% endif %} +{% endblock detail_content %} diff --git a/sapl/utils.py b/sapl/utils.py index d2c16063f..3f63c30df 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -100,6 +100,17 @@ def create_barcode(value): YES_NO_CHOICES = [(True, _('Sim')), (False, _('Não'))] +TURNO_TRAMITACAO_CHOICES = [ + ('P', _('Primeiro')), + ('S', _('Segundo')), + ('U', _('Único')), + ('L', _('Suplementar')), + ('F', _('Final')), + ('A', _('Votação única em Regime de Urgência')), + ('B', _('1ª Votação')), + ('C', _('2ª e 3ª Votação')), +] + def listify(function): @wraps(function) From b837e0199e1fe64843f39cb9a5f8e6be25ffe2d6 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 16:02:10 -0300 Subject: [PATCH 2/9] =?UTF-8?q?Completa=20template=20para=20primeira=20tra?= =?UTF-8?q?mita=C3=A7=C3=A3o=20em=20lote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../materia/em_lote/primeira_tramitacao.html | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sapl/templates/materia/em_lote/primeira_tramitacao.html b/sapl/templates/materia/em_lote/primeira_tramitacao.html index cc97eff3c..12050b970 100644 --- a/sapl/templates/materia/em_lote/primeira_tramitacao.html +++ b/sapl/templates/materia/em_lote/primeira_tramitacao.html @@ -21,7 +21,7 @@
{% csrf_token %}
- Detalhes da tramitação + 1. Detalhes da tramitação:
@@ -44,14 +44,16 @@
@@ -60,21 +62,24 @@
@@ -90,7 +95,7 @@


- Selecione as matérias para primeira tramitação + 2. Selecione as matérias para primeira tramitação: From 44faf0abe3fee755c63ddfde98cb40ddfd7a8868 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 16:40:37 -0300 Subject: [PATCH 3/9] =?UTF-8?q?Filtra=20mat=C3=A9rias=20sem=20tramita?= =?UTF-8?q?=C3=A7=C3=A3o=20e=20adiciona=20subnav?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 29 ++++++++++++------- .../materia/em_lote/primeira_tramitacao.html | 15 ++++++---- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 7eeaab44e..7ce0a0dab 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1309,6 +1309,10 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): if not self.filterset.form.is_valid(): return context + # Pega somente matéria que não possuem tramitação + context['object_list'] = context['object_list'].filter( + tramitacao__isnull=True) + qr = self.request.GET.copy() context['unidade_tramitacao'] = UnidadeTramitacao.objects.all() context['status_tramitacao'] = StatusTramitacao.objects.all() @@ -1325,18 +1329,23 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) - tipo = TipoDocumento.objects.get(descricao=request.POST['tipo']) - for materia_id in marcadas: - DocumentoAcessorio.objects.create( + Tramitacao.objects.create( materia_id=materia_id, - tipo=tipo, - arquivo=request.POST['arquivo'], - nome=request.POST['nome'], - data=datetime.strptime(request.POST['data'], "%d/%m/%Y"), - autor=Autor.objects.get(id=request.POST['autor']), - ementa=request.POST['ementa'] + data_tramitacao=datetime.strptime( + request.POST['data_tramitacao'], "%d/%m/%Y"), + data_encaminhamento=datetime.strptime( + request.POST['data_encaminhamento'], "%d/%m/%Y") or None, + data_fim_prazo=datetime.strptime( + request.POST['data_fim_prazo'], "%d/%m/%Y") or None, + unidade_tramitacao_local_id=request.POST[ + 'unidade_tramitacao_local'], + unidade_tramitacao_destino_id=request.POST[ + 'unidade_tramitacao_destino'], + urgente=request.POST['urgente'], + turno=request.POST['turno'], + texto=request.POST['texto'] ) - msg = _('Documento(s) criado(s).') + msg = _('Tramitação completa.') messages.add_message(request, messages.SUCCESS, msg) return self.get(request, self.kwargs) diff --git a/sapl/templates/materia/em_lote/primeira_tramitacao.html b/sapl/templates/materia/em_lote/primeira_tramitacao.html index 12050b970..f36226aa0 100644 --- a/sapl/templates/materia/em_lote/primeira_tramitacao.html +++ b/sapl/templates/materia/em_lote/primeira_tramitacao.html @@ -1,7 +1,12 @@ {% extends "crud/detail.html" %} {% load i18n crispy_forms_tags %} {% block actions %}{% endblock %} -{% block sections_nav %}{% endblock %} +{% block sections_nav %} + +{% endblock sections_nav %} {% block detail_content %} {% if not filter_url %} @@ -9,11 +14,11 @@ {% endif %} {% if filter_url %} - {% if object_list.count > 0 %} - {% if object_list.count == 1 %} + {% if object_list|length > 0 %} + {% if object_list|length == 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 {{object_list|length}} matérias.

{% endif %} {% else %}
@@ -87,7 +92,7 @@
- +
From 95409494a2e905e827624edbf2e4083fd1ddd6e1 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 16:54:45 -0300 Subject: [PATCH 4/9] =?UTF-8?q?Salva=20as=20tramita=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 7ce0a0dab..b704a906c 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1329,20 +1329,31 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) + if request.POST['data_encaminhamento']: + data_encaminhamento = datetime.strptime( + request.POST['data_encaminhamento'], "%d/%m/%Y") + else: + data_encaminhamento = None + + if request.POST['data_fim_prazo']: + data_fim_prazo = datetime.strptime( + request.POST['data_fim_prazo'], "%d/%m/%Y") + else: + data_fim_prazo = None + for materia_id in marcadas: Tramitacao.objects.create( materia_id=materia_id, data_tramitacao=datetime.strptime( request.POST['data_tramitacao'], "%d/%m/%Y"), - data_encaminhamento=datetime.strptime( - request.POST['data_encaminhamento'], "%d/%m/%Y") or None, - data_fim_prazo=datetime.strptime( - request.POST['data_fim_prazo'], "%d/%m/%Y") or None, + data_encaminhamento=data_encaminhamento, + data_fim_prazo=data_fim_prazo, unidade_tramitacao_local_id=request.POST[ 'unidade_tramitacao_local'], unidade_tramitacao_destino_id=request.POST[ 'unidade_tramitacao_destino'], urgente=request.POST['urgente'], + status_id=request.POST['status'], turno=request.POST['turno'], texto=request.POST['texto'] ) From 35d43acb19c65e681012d7d674f28588fb727a2c Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 17:30:16 -0300 Subject: [PATCH 5/9] =?UTF-8?q?Adiciona=20tramita=C3=A7=C3=A3o=20em=20lote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/forms.py | 39 ++++++ sapl/materia/urls.py | 5 +- sapl/materia/views.py | 68 +++++++++- .../materia/em_lote/primeira_tramitacao.html | 2 +- .../templates/materia/em_lote/tramitacao.html | 122 ++++++++++++++++++ 5 files changed, 233 insertions(+), 3 deletions(-) create mode 100644 sapl/templates/materia/em_lote/tramitacao.html diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index fec68c766..b3eecfa1c 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -818,3 +818,42 @@ class PrimeiraTramitacaoEmLoteFilterSet(django_filters.FilterSet): self.form.helper.layout = Layout( Fieldset(_('Primeira Tramitação'), row1, row2, form_actions(save_label='Pesquisar'))) + + +class TramitacaoEmLoteFilterSet(django_filters.FilterSet): + + filter_overrides = {models.DateField: { + 'filter_class': django_filters.DateFromToRangeFilter, + 'extra': lambda f: { + 'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')), + 'widget': RangeWidgetOverride} + }} + + class Meta: + model = MateriaLegislativa + fields = ['tipo', 'data_apresentacao', + 'tramitacao__unidade_tramitacao_local', 'tramitacao__status'] + + def __init__(self, *args, **kwargs): + super(TramitacaoEmLoteFilterSet, 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 + self.form.fields['tramitacao__status'].required = True + self.form.fields[ + 'tramitacao__unidade_tramitacao_local'].required = True + + row1 = to_row([ + ('tipo', 4), + ('tramitacao__unidade_tramitacao_local', 4), + ('tramitacao__status', 4)]) + row2 = to_row([('data_apresentacao', 12)]) + + self.form.helper = FormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Tramitação em Lote'), + row1, row2, form_actions(save_label='Pesquisar'))) diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 039882c22..8ffe63f86 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -18,7 +18,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, StatusTramitacaoCrud, TipoAutorCrud, TipoDocumentoCrud, TipoFimRelatoriaCrud, TipoMateriaCrud, TipoProposicaoCrud, - TramitacaoCrud, UnidadeTramitacaoCrud) + TramitacaoCrud, TramitacaoEmLoteView, + UnidadeTramitacaoCrud) from .apps import AppConfig @@ -93,4 +94,6 @@ urlpatterns = [ url(r'^primeira-tramitacao-em-lote', PrimeiraTramitacaoEmLoteView.as_view(), name='primeira_tramitacao_em_lote'), + url(r'^tramitacao-em-lote', TramitacaoEmLoteView.as_view(), + name='tramitacao_em_lote'), ] diff --git a/sapl/materia/views.py b/sapl/materia/views.py index b704a906c..f5f51efeb 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -41,7 +41,8 @@ from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, DocumentoAcessorioForm, LegislacaoCitadaForm, MateriaLegislativaFilterSet, NumeracaoForm, PrimeiraTramitacaoEmLoteFilterSet, ProposicaoForm, - ReceberProposicaoForm, RelatoriaForm, TramitacaoForm, + ReceberProposicaoForm, RelatoriaForm, + TramitacaoEmLoteFilterSet, TramitacaoForm, TramitacaoUpdateForm, UnidadeTramitacaoForm, filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, @@ -1360,3 +1361,68 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): msg = _('Tramitação completa.') messages.add_message(request, messages.SUCCESS, msg) return self.get(request, self.kwargs) + + +class TramitacaoEmLoteView(PermissionRequiredMixin, FilterView): + filterset_class = TramitacaoEmLoteFilterSet + template_name = 'materia/em_lote/tramitacao.html' + permission_required = permissoes_materia() + + def get_context_data(self, **kwargs): + context = super(TramitacaoEmLoteView, self).get_context_data(**kwargs) + + context['title'] = _('Tramitação em Lote') + # Verifica se os campos foram preenchidos + if not self.filterset.form.is_valid(): + return context + + qr = self.request.GET.copy() + context['unidade_tramitacao'] = UnidadeTramitacao.objects.all() + context['status_tramitacao'] = StatusTramitacao.objects.all() + context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES + context['urgente_tramitacao'] = YES_NO_CHOICES + context['unidade_local'] = UnidadeTramitacao.objects.get( + id=qr['tramitacao__unidade_tramitacao_local']) + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' + 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) + + if request.POST['data_encaminhamento']: + data_encaminhamento = datetime.strptime( + request.POST['data_encaminhamento'], "%d/%m/%Y") + else: + data_encaminhamento = None + + if request.POST['data_fim_prazo']: + data_fim_prazo = datetime.strptime( + request.POST['data_fim_prazo'], "%d/%m/%Y") + else: + data_fim_prazo = None + + import ipdb; ipdb.set_trace() + for materia_id in marcadas: + Tramitacao.objects.create( + materia_id=materia_id, + data_tramitacao=datetime.strptime( + request.POST['data_tramitacao'], "%d/%m/%Y"), + data_encaminhamento=data_encaminhamento, + data_fim_prazo=data_fim_prazo, + unidade_tramitacao_local_id=request.POST[ + 'unidade_tramitacao_local'], + unidade_tramitacao_destino_id=request.POST[ + 'unidade_tramitacao_destino'], + urgente=request.POST['urgente'], + status_id=request.POST['status'], + turno=request.POST['turno'], + texto=request.POST['texto'] + ) + msg = _('Tramitação completa.') + messages.add_message(request, messages.SUCCESS, msg) + return self.get(request, self.kwargs) diff --git a/sapl/templates/materia/em_lote/primeira_tramitacao.html b/sapl/templates/materia/em_lote/primeira_tramitacao.html index f36226aa0..a927e315d 100644 --- a/sapl/templates/materia/em_lote/primeira_tramitacao.html +++ b/sapl/templates/materia/em_lote/primeira_tramitacao.html @@ -4,7 +4,7 @@ {% block sections_nav %} {% endblock sections_nav %} {% block detail_content %} diff --git a/sapl/templates/materia/em_lote/tramitacao.html b/sapl/templates/materia/em_lote/tramitacao.html new file mode 100644 index 000000000..d4fbdb33a --- /dev/null +++ b/sapl/templates/materia/em_lote/tramitacao.html @@ -0,0 +1,122 @@ +{% extends "crud/detail.html" %} +{% load i18n crispy_forms_tags %} +{% block actions %}{% endblock %} +{% block sections_nav %} + +{% endblock sections_nav %} +{% block detail_content %} + + {% if not filter_url %} + {% crispy filter.form %} + {% endif %} + + {% if filter_url %} + {% if object_list|length > 0 %} + {% if object_list|length == 1 %} +

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

+ {% else %} +

Foram encontradas {{object_list|length}} matérias.

+ {% endif %} + {% else %} +
+ {% endif %} + + {% csrf_token %} +
+ 1. Detalhes da tramitação: + +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+ +


+ +
+ 2. Selecione as matérias para primeira tramitação: +
Matéria

Nenhuma matéria encontrada.

Nenhuma matéria encontrada.

+ + + + + {% for materia in object_list %} + + + + {% endfor %} + +
Matéria
+ + {{materia.tipo.sigla}} {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}} +
+
+ + + {% endif %} +{% endblock detail_content %} From 0ba993c77fe9c46e47e3a414613646880e7c7abd Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 17:56:55 -0300 Subject: [PATCH 6/9] =?UTF-8?q?Remove=20duplicidade=20do=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 62 ++------- .../materia/em_lote/primeira_tramitacao.html | 123 ------------------ sapl/templates/materia/em_lote/subnav.html | 4 + .../templates/materia/em_lote/tramitacao.html | 12 +- 4 files changed, 18 insertions(+), 183 deletions(-) delete mode 100644 sapl/templates/materia/em_lote/primeira_tramitacao.html create mode 100644 sapl/templates/materia/em_lote/subnav.html diff --git a/sapl/materia/views.py b/sapl/materia/views.py index f5f51efeb..4b7d4321b 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1298,7 +1298,7 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): filterset_class = PrimeiraTramitacaoEmLoteFilterSet - template_name = 'materia/em_lote/primeira_tramitacao.html' + template_name = 'materia/em_lote/tramitacao.html' permission_required = permissoes_materia() def get_context_data(self, **kwargs): @@ -1311,11 +1311,14 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): return context # Pega somente matéria que não possuem tramitação - context['object_list'] = context['object_list'].filter( - tramitacao__isnull=True) + if (type(self.__dict__[ + 'filterset']).__name__ == 'PrimeiraTramitacaoEmLoteFilterSet'): + context['object_list'] = context['object_list'].filter( + tramitacao__isnull=True) qr = self.request.GET.copy() - context['unidade_tramitacao'] = UnidadeTramitacao.objects.all() + context['unidade_destino'] = UnidadeTramitacao.objects.all() + context['unidade_local'] = UnidadeTramitacao.objects.all() context['status_tramitacao'] = StatusTramitacao.objects.all() context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES context['urgente_tramitacao'] = YES_NO_CHOICES @@ -1363,10 +1366,8 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): return self.get(request, self.kwargs) -class TramitacaoEmLoteView(PermissionRequiredMixin, FilterView): +class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): filterset_class = TramitacaoEmLoteFilterSet - template_name = 'materia/em_lote/tramitacao.html' - permission_required = permissoes_materia() def get_context_data(self, **kwargs): context = super(TramitacaoEmLoteView, self).get_context_data(**kwargs) @@ -1377,52 +1378,11 @@ class TramitacaoEmLoteView(PermissionRequiredMixin, FilterView): return context qr = self.request.GET.copy() - context['unidade_tramitacao'] = UnidadeTramitacao.objects.all() + context['unidade_destino'] = UnidadeTramitacao.objects.all() context['status_tramitacao'] = StatusTramitacao.objects.all() context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES context['urgente_tramitacao'] = YES_NO_CHOICES - context['unidade_local'] = UnidadeTramitacao.objects.get( - id=qr['tramitacao__unidade_tramitacao_local']) + context['unidade_local'] = [UnidadeTramitacao.objects.get( + id=qr['tramitacao__unidade_tramitacao_local'])] context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' 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) - - if request.POST['data_encaminhamento']: - data_encaminhamento = datetime.strptime( - request.POST['data_encaminhamento'], "%d/%m/%Y") - else: - data_encaminhamento = None - - if request.POST['data_fim_prazo']: - data_fim_prazo = datetime.strptime( - request.POST['data_fim_prazo'], "%d/%m/%Y") - else: - data_fim_prazo = None - - import ipdb; ipdb.set_trace() - for materia_id in marcadas: - Tramitacao.objects.create( - materia_id=materia_id, - data_tramitacao=datetime.strptime( - request.POST['data_tramitacao'], "%d/%m/%Y"), - data_encaminhamento=data_encaminhamento, - data_fim_prazo=data_fim_prazo, - unidade_tramitacao_local_id=request.POST[ - 'unidade_tramitacao_local'], - unidade_tramitacao_destino_id=request.POST[ - 'unidade_tramitacao_destino'], - urgente=request.POST['urgente'], - status_id=request.POST['status'], - turno=request.POST['turno'], - texto=request.POST['texto'] - ) - msg = _('Tramitação completa.') - messages.add_message(request, messages.SUCCESS, msg) - return self.get(request, self.kwargs) diff --git a/sapl/templates/materia/em_lote/primeira_tramitacao.html b/sapl/templates/materia/em_lote/primeira_tramitacao.html deleted file mode 100644 index a927e315d..000000000 --- a/sapl/templates/materia/em_lote/primeira_tramitacao.html +++ /dev/null @@ -1,123 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n crispy_forms_tags %} -{% block actions %}{% endblock %} -{% block sections_nav %} - -{% endblock sections_nav %} -{% block detail_content %} - - {% if not filter_url %} - {% crispy filter.form %} - {% endif %} - - {% if filter_url %} - {% if object_list|length > 0 %} - {% if object_list|length == 1 %} -

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

- {% else %} -

Foram encontradas {{object_list|length}} matérias.

- {% endif %} - {% else %} -

Nenhuma matéria encontrada.

- {% endif %} -
- {% csrf_token %} -
- 1. Detalhes da tramitação: - -
-
- - -
- -
- - -
- -
- - -
-
- -
-
- - -
- -
- - -
-
- -
-
- - -
- -
- - -
- -
- - -
-
- -
-
- - -
-
-
- -


- -
- 2. Selecione as matérias para primeira tramitação: - - - - - - {% for materia in object_list %} - - - - {% endfor %} - -
Matéria
- - {{materia.tipo.sigla}} {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}} -
-
- -
- {% endif %} -{% endblock detail_content %} diff --git a/sapl/templates/materia/em_lote/subnav.html b/sapl/templates/materia/em_lote/subnav.html new file mode 100644 index 000000000..1ba0fe431 --- /dev/null +++ b/sapl/templates/materia/em_lote/subnav.html @@ -0,0 +1,4 @@ + diff --git a/sapl/templates/materia/em_lote/tramitacao.html b/sapl/templates/materia/em_lote/tramitacao.html index d4fbdb33a..3fe090955 100644 --- a/sapl/templates/materia/em_lote/tramitacao.html +++ b/sapl/templates/materia/em_lote/tramitacao.html @@ -1,12 +1,7 @@ {% extends "crud/detail.html" %} {% load i18n crispy_forms_tags %} {% block actions %}{% endblock %} -{% block sections_nav %} - -{% endblock sections_nav %} +{% block sections_nav %} {% include 'materia/em_lote/subnav.html'%} {% endblock sections_nav %} {% block detail_content %} {% if not filter_url %} @@ -49,15 +44,14 @@
From e29a4d5d7ace22ad28fcbf2c061600458574c79d Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 18:00:11 -0300 Subject: [PATCH 7/9] =?UTF-8?q?Remove=20context=5Fdata=20desnecess=C3=A1ri?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 28 +++++-------------- .../mesa_diretora/mesa_diretora.html | 0 2 files changed, 7 insertions(+), 21 deletions(-) rename sapl/templates/{ => menus}/mesa_diretora/mesa_diretora.html (100%) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 4b7d4321b..b0377f921 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1305,20 +1305,24 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): context = super(PrimeiraTramitacaoEmLoteView, self).get_context_data(**kwargs) - context['title'] = _('Primeira Tramitação em Lote') # Verifica se os campos foram preenchidos if not self.filterset.form.is_valid(): return context + qr = self.request.GET.copy() # Pega somente matéria que não possuem tramitação if (type(self.__dict__[ 'filterset']).__name__ == 'PrimeiraTramitacaoEmLoteFilterSet'): context['object_list'] = context['object_list'].filter( tramitacao__isnull=True) + context['unidade_local'] = UnidadeTramitacao.objects.all() + context['title'] = _('Primeira Tramitação em Lote') + else: + context['title'] = _('Tramitação em Lote') + context['unidade_local'] = [UnidadeTramitacao.objects.get( + id=qr['tramitacao__unidade_tramitacao_local'])] - qr = self.request.GET.copy() context['unidade_destino'] = UnidadeTramitacao.objects.all() - context['unidade_local'] = UnidadeTramitacao.objects.all() context['status_tramitacao'] = StatusTramitacao.objects.all() context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES context['urgente_tramitacao'] = YES_NO_CHOICES @@ -1368,21 +1372,3 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): filterset_class = TramitacaoEmLoteFilterSet - - def get_context_data(self, **kwargs): - context = super(TramitacaoEmLoteView, self).get_context_data(**kwargs) - - context['title'] = _('Tramitação em Lote') - # Verifica se os campos foram preenchidos - if not self.filterset.form.is_valid(): - return context - - qr = self.request.GET.copy() - context['unidade_destino'] = UnidadeTramitacao.objects.all() - context['status_tramitacao'] = StatusTramitacao.objects.all() - context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES - context['urgente_tramitacao'] = YES_NO_CHOICES - context['unidade_local'] = [UnidadeTramitacao.objects.get( - id=qr['tramitacao__unidade_tramitacao_local'])] - context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' - return context diff --git a/sapl/templates/mesa_diretora/mesa_diretora.html b/sapl/templates/menus/mesa_diretora/mesa_diretora.html similarity index 100% rename from sapl/templates/mesa_diretora/mesa_diretora.html rename to sapl/templates/menus/mesa_diretora/mesa_diretora.html From d92270d540e9dadf58b63937ed2f5eaacc26079c Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 15 Sep 2016 18:07:09 -0300 Subject: [PATCH 8/9] Fix qa --- sapl/base/views.py | 5 +---- sapl/materia/views.py | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/sapl/base/views.py b/sapl/base/views.py index d813d4aff..c0c228c39 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1,5 +1,3 @@ -from itertools import chain - from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.urlresolvers import reverse from django.db.models import Count, Q @@ -12,8 +10,7 @@ from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, CrudDetailView, CrudUpdateView) from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.parlamentares.models import Parlamentar -from sapl.sessao.models import (OrdemDia, PresencaOrdemDia, SessaoPlenaria, - SessaoPlenariaPresenca) +from sapl.sessao.models import OrdemDia, SessaoPlenaria from sapl.utils import permissao_tb_aux from .forms import (CasaLegislativaForm, RelatorioAtasFilterSet, diff --git a/sapl/materia/views.py b/sapl/materia/views.py index b0377f921..ff1a849f4 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1309,23 +1309,25 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): if not self.filterset.form.is_valid(): return context + context['title'] = _('Primeira Tramitação em Lote') + qr = self.request.GET.copy() + context['unidade_destino'] = UnidadeTramitacao.objects.all() + context['status_tramitacao'] = StatusTramitacao.objects.all() + context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES + context['urgente_tramitacao'] = YES_NO_CHOICES + context['unidade_local'] = UnidadeTramitacao.objects.all() + # Pega somente matéria que não possuem tramitação - if (type(self.__dict__[ - 'filterset']).__name__ == 'PrimeiraTramitacaoEmLoteFilterSet'): + if (type(self.__dict__['filterset']).__name__ == + 'PrimeiraTramitacaoEmLoteFilterSet'): context['object_list'] = context['object_list'].filter( tramitacao__isnull=True) - context['unidade_local'] = UnidadeTramitacao.objects.all() - context['title'] = _('Primeira Tramitação em Lote') else: context['title'] = _('Tramitação em Lote') context['unidade_local'] = [UnidadeTramitacao.objects.get( id=qr['tramitacao__unidade_tramitacao_local'])] - context['unidade_destino'] = UnidadeTramitacao.objects.all() - context['status_tramitacao'] = StatusTramitacao.objects.all() - context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES - context['urgente_tramitacao'] = YES_NO_CHOICES context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' return context From 14e32d9b48e2377c5eddeb2f066d9fbd87a70577 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Fri, 16 Sep 2016 09:34:00 -0300 Subject: [PATCH 9/9] Conserta save --- sapl/materia/views.py | 1 + sapl/templates/materia/em_lote/tramitacao.html | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index ff1a849f4..2468d5186 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1351,6 +1351,7 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): else: data_fim_prazo = None + import ipdb; ipdb.set_trace() for materia_id in marcadas: Tramitacao.objects.create( materia_id=materia_id, diff --git a/sapl/templates/materia/em_lote/tramitacao.html b/sapl/templates/materia/em_lote/tramitacao.html index 3fe090955..6e4235c28 100644 --- a/sapl/templates/materia/em_lote/tramitacao.html +++ b/sapl/templates/materia/em_lote/tramitacao.html @@ -43,6 +43,7 @@
+ {% if unidade_local|length > 1 %}{% endif %} @@ -50,6 +51,7 @@
+ @@ -60,7 +62,7 @@
@@ -68,7 +70,7 @@
@@ -76,7 +78,7 @@
@@ -84,7 +86,7 @@
- +