From decd74a3663b05e7094ca9c98537d07bcf38964a Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Thu, 19 Nov 2015 16:13:46 -0200 Subject: [PATCH] Add form to relatoria in materia --- materia/urls.py | 17 +- materia/views.py | 147 +++++++++++++++++- .../migrations/0006_auto_20151119_1318.py | 19 +++ templates/materia/relatoria.html | 52 ++++++- templates/materia/relatoria_edit.html | 65 ++++++++ 5 files changed, 284 insertions(+), 16 deletions(-) create mode 100644 parlamentares/migrations/0006_auto_20151119_1318.py create mode 100644 templates/materia/relatoria_edit.html diff --git a/materia/urls.py b/materia/urls.py index ef6cb9063..ff20065cf 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -5,13 +5,14 @@ from materia.views import (AutoriaEditView, AutoriaView, FormularioCadastroView, FormularioSimplificadoView, LegislacaoCitadaEditView, LegislacaoCitadaView, MateriaAnexadaEditView, MateriaAnexadaView, - NumeracaoEditView, NumeracaoView, RelatoriaView, - TramitacaoEditView, TramitacaoView, autor_crud, - materia_legislativa_crud, orgao_crud, origem_crud, - regime_tramitacao_crud, status_tramitacao_crud, - tipo_autor_crud, tipo_documento_crud, - tipo_fim_relatoria_crud, tipo_materia_crud, - tipo_proposicao_crud, unidade_tramitacao_crud) + NumeracaoEditView, NumeracaoView, RelatoriaEditView, + RelatoriaView, TramitacaoEditView, TramitacaoView, + autor_crud, materia_legislativa_crud, orgao_crud, + origem_crud, regime_tramitacao_crud, + status_tramitacao_crud, tipo_autor_crud, + tipo_documento_crud, tipo_fim_relatoria_crud, + tipo_materia_crud, tipo_proposicao_crud, + unidade_tramitacao_crud) urlpatterns = [ url(r'^sistema/proposicoes/tipo/', include(tipo_proposicao_crud.urls)), @@ -68,4 +69,6 @@ urlpatterns = [ AutoriaView.as_view(), name='autoria'), url(r'^materia/(?P\d+)/autoria/(?P\d+)/edit$', AutoriaEditView.as_view(), name='autoria_edit'), + url(r'^materia/(?P\d+)/relatoria/(?P\d+)/edit$', + RelatoriaEditView.as_view(), name='relatoria_edit'), ] diff --git a/materia/views.py b/materia/views.py index f3021743a..ab09400b6 100644 --- a/materia/views.py +++ b/materia/views.py @@ -7,11 +7,11 @@ from django import forms from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.forms import ModelForm -from django.shortcuts import render from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.views.generic.edit import FormMixin from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica +from comissoes.models import Composicao from sapl.crud import build_crud from vanilla import GenericView @@ -1192,18 +1192,151 @@ class DocumentoAcessorioEditView(FormMixin, GenericView): return reverse('documento_acessorio', kwargs={'pk': pk}) -class RelatoriaView(FormMixin, GenericView): - template_name = "materia/relatoria.html" +class RelatoriaForm(ModelForm): + data_designacao_relator = forms.DateField( + label=u'Data Designação', + input_formats=['%d/%m/%Y'], + required=False, + widget=forms.DateInput( + format='%d/%m/%Y', + attrs={'class': 'dateinput'})) + + data_destituicao_relator = forms.DateField( + label=u'Data Destituição', + input_formats=['%d/%m/%Y'], + required=False, + widget=forms.DateInput( + format='%d/%m/%Y', + attrs={'class': 'dateinput'})) + + class Meta: + model = Relatoria + fields = ['data_designacao_relator', + 'comissao', + 'parlamentar', + 'data_destituicao_relator', + 'tipo_fim_relatoria' + ] + + +class RelatoriaEditView(FormMixin, GenericView): + template_name = "materia/relatoria_edit.html" + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('relatoria', kwargs={'pk': pk}) def get(self, request, *args, **kwargs): + form = RelatoriaForm() materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - relatorias = Relatoria.objects.filter(materia_id=kwargs['pk']) - form = None + relatoria = Relatoria.objects.get( + id=kwargs['id']) + composicao = Composicao.objects.get(comissao=relatoria.comissao) + parlamentares = composicao.participacao_set.all() return self.render_to_response( {'materialegislativa': materia, 'form': form, - 'relatorias': relatorias}) + 'relatoria': relatoria, + 'tipo_fim_relatorias': TipoFimRelatoria.objects.all(), + 'parlamentares': parlamentares}) + + def post(self, request, *args, **kwargs): + form = RelatoriaForm(request.POST) + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + relatoria = Relatoria.objects.get(id=kwargs['id']) + composicao = Composicao.objects.get(comissao=relatoria.comissao) + parlamentares = composicao.participacao_set.all() + + if form.is_valid(): + if 'excluir' in request.POST: + relatoria.delete() + return self.form_valid(form) + elif 'salvar' in request.POST: + relatoria.materia = materia + relatoria.comissao = relatoria.comissao + relatoria.data_designacao_relator = form.cleaned_data[ + 'data_designacao_relator'] + relatoria.data_destituicao_relator = form.cleaned_data[ + 'data_destituicao_relator'] + relatoria.parlamentar = form.cleaned_data['parlamentar'] + relatoria.tipo_fim_relatoria = form.cleaned_data[ + 'tipo_fim_relatoria'] + relatoria.save() + return self.form_valid(form) + else: + return self.render_to_response( + {'materialegislativa': materia, + 'form': form, + 'relatoria': relatoria, + 'tipo_fim_relatorias': TipoFimRelatoria.objects.all(), + 'parlamentares': parlamentares}) + + +class RelatoriaView(FormMixin, GenericView): + template_name = "materia/relatoria.html" + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('relatoria', kwargs={'pk': pk}) + + def post(self, request, *args, **kwargs): + form = RelatoriaForm(request.POST) + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + relatorias = Relatoria.objects.filter( + materia_id=kwargs['pk']).order_by('-data_designacao_relator') + localizacao = Tramitacao.objects.filter( + materia=materia).last() + comissao = Comissao.objects.get( + id=localizacao.unidade_tramitacao_destino_id) + + if form.is_valid(): + relatoria = form.save(commit=False) + relatoria.materia = materia + relatoria.comissao = comissao + relatoria.save() + return self.form_valid(form) + else: + + composicao = Composicao.objects.get(comissao=comissao) + parlamentares = composicao.participacao_set.all() + + return self.render_to_response( + {'materialegislativa': materia, + 'form': form, + 'relatorias': relatorias, + 'comissao': comissao, + 'tipo_fim_relatoria': TipoFimRelatoria.objects.all(), + 'parlamentares': parlamentares}) + + def get(self, request, *args, **kwargs): + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + relatorias = Relatoria.objects.filter( + materia_id=kwargs['pk']).order_by('-data_designacao_relator') + form = RelatoriaForm() + + localizacao = Tramitacao.objects.filter( + materia=materia).last() + + try: + comissao = Comissao.objects.get( + id=localizacao.unidade_tramitacao_destino_id) + except ObjectDoesNotExist: + return self.render_to_response( + {'materialegislativa': materia, + 'form': form, + 'relatorias': relatorias, + 'error_localizacao': 'O local atual deve ser uma Comissão!'}) + else: + composicao = Composicao.objects.get(comissao=comissao) + parlamentares = composicao.participacao_set.all() + return self.render_to_response( + {'materialegislativa': materia, + 'form': form, + 'relatorias': relatorias, + 'comissao': comissao, + 'tipo_fim_relatoria': TipoFimRelatoria.objects.all(), + 'parlamentares': parlamentares}) class TramitacaoForm(ModelForm): @@ -1320,7 +1453,7 @@ class TramitacaoView(FormMixin, GenericView): form = TramitacaoForm(request.POST) materia = MateriaLegislativa.objects.get(id=kwargs['pk']) tramitacoes_list = Tramitacao.objects.filter( - materia_id=kwargs['pk']) + materia_id=kwargs['pk']).order_by('-data_tramitacao') if form.is_valid(): ultima_tramitacao = Tramitacao.objects.filter( diff --git a/parlamentares/migrations/0006_auto_20151119_1318.py b/parlamentares/migrations/0006_auto_20151119_1318.py new file mode 100644 index 000000000..f220639a4 --- /dev/null +++ b/parlamentares/migrations/0006_auto_20151119_1318.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0005_parlamentar_fotografia'), + ] + + operations = [ + migrations.AlterField( + model_name='parlamentar', + name='unidade_deliberativa', + field=models.BooleanField(verbose_name='Unidade'), + ), + ] diff --git a/templates/materia/relatoria.html b/templates/materia/relatoria.html index e4b6adc93..0cee678c3 100644 --- a/templates/materia/relatoria.html +++ b/templates/materia/relatoria.html @@ -22,13 +22,61 @@ {% for r in relatorias %} - {{r.data_designacao_relator|date:'d/m/Y'}} + {{r.data_designacao_relator|date:'d/m/Y'}} {{r.comissao}} {{r.parlamentar}} {% endfor %} - + +
+ Adicionar Relator + {% if error_localizacao %} +
{{ error_localizacao }}
+ {% else %} +
+ {% csrf_token %} + +
    +
  • + Localização Atual + +
  • +
+
    +
  • + Data Designação* + +
  • +
  • + Data Destituição + +
  • +
+
    +
  • + Parlamentar* + +
  • +
  • + Motivo Fim Relatoria + +
  • +
+ +
+ {% endif %} +
{% endblock %} \ No newline at end of file diff --git a/templates/materia/relatoria_edit.html b/templates/materia/relatoria_edit.html new file mode 100644 index 000000000..10f9eed19 --- /dev/null +++ b/templates/materia/relatoria_edit.html @@ -0,0 +1,65 @@ +{% extends "materia/materialegislativa_detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block detail_content %} +
+ Matéria Legislativa +
    +
  • Tipo: {{materialegislativa.tipo.sigla}}
  • +
  • Número: {{materialegislativa.numero}}
  • +
  • Ano: {{materialegislativa.ano}}
  • +
+ Ementa: {{materialegislativa.ementa}} + +
+ Editar Relator +
+ {% csrf_token %} + +
    +
  • + Localização Atual + +
  • +
+
    +
  • + Data Designação* + +
  • +
  • + Data Destituição + +
  • +
+
    +
  • + Parlamentar* + +
  • +
  • + Motivo Fim Relatoria + +
  • +
+ + +
+
+
+{% endblock %} \ No newline at end of file