From 8a0575353b38e3a17ae149c61d1e943cbb3e3005 Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Wed, 28 Oct 2015 15:44:05 -0200 Subject: [PATCH] Add Legislacao Citada in Materia --- materia/urls.py | 6 + materia/views.py | 207 +++++++++++++++++- norma/urls.py | 4 +- norma/views.py | 20 +- templates/materia/legislacao_citada.html | 37 ++++ templates/materia/legislacao_citada_edit.html | 74 +++++++ templates/materia/materia_detail.html | 6 +- 7 files changed, 333 insertions(+), 21 deletions(-) create mode 100644 templates/materia/legislacao_citada.html create mode 100644 templates/materia/legislacao_citada_edit.html diff --git a/materia/urls.py b/materia/urls.py index e1b738dbf..a5224c321 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -1,6 +1,8 @@ from django.conf.urls import include, url + from materia.views import (DespachoInicialEditView, DespachoInicialView, FormularioCadastroView, FormularioSimplificadoView, + LegislacaoCitadaEditView, LegislacaoCitadaView, MateriaAnexadaEditView, MateriaAnexadaView, autor_crud, materia_legislativa_crud, orgao_crud, origem_crud, regime_tramitacao_crud, @@ -42,4 +44,8 @@ urlpatterns = [ DespachoInicialView.as_view(), name='despacho_inicial'), url(r'^materia/(?P\d+)/despacho-inicial/(?P\d+)/edit', DespachoInicialEditView.as_view(), name='despacho_inicial_edit'), + url(r'^materia/(?P\d+)/legislacao-citada$', + LegislacaoCitadaView.as_view(), name='legislacao_citada'), + url(r'^materia/(?P\d+)/legislacao-citada/(?P\d+)/edit', + LegislacaoCitadaEditView.as_view(), name='legislacao_citada_edit'), ] diff --git a/materia/views.py b/materia/views.py index 4d6984fba..60009863c 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1,8 +1,7 @@ from datetime import date -from comissoes.models import Comissao from crispy_forms.helper import FormHelper -from crispy_forms.layout import HTML, ButtonHolder, Fieldset, Layout, Submit +from crispy_forms.layout import ButtonHolder, Fieldset, Layout, Submit from django import forms from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse @@ -11,9 +10,12 @@ 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 sapl.crud import build_crud from vanilla import GenericView +from comissoes.models import Comissao +from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica +from sapl.crud import build_crud + from .models import (Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao, Relatoria, @@ -715,3 +717,202 @@ class DespachoInicialEditView(FormMixin, GenericView): def get_success_url(self): pk = self.kwargs['pk'] return reverse('despacho_inicial', kwargs={'pk': pk}) + + +def get_tipos_norma(): + return [('', 'Selecione')] \ + + [(t.id, t.sigla + ' - ' + t.descricao) + for t in TipoNormaJuridica.objects.all()] + + +class LegislacaoCitadaForm(forms.Form): + + tipo = forms.ChoiceField(required=True, + label='Tipo Norma', + choices=get_tipos_norma(), + widget=forms.Select( + attrs={'class': 'selector'})) + + numero = forms.CharField(label='Número', required=True) + + ano = forms.CharField(label='Ano', required=True) + + disposicao = forms.CharField(label='Disposição', required=False) + + parte = forms.CharField(label='Parte', required=False) + + livro = forms.CharField(label='Livro', required=False) + + titulo = forms.CharField(label='Título', required=False) + + capitulo = forms.CharField(label='Capítulo', required=False) + + secao = forms.CharField(label='Seção', required=False) + + subsecao = forms.CharField(label='Subseção', required=False) + + artigo = forms.CharField(label='Artigo', required=False) + + paragrafo = forms.CharField(label='Parágrafo', required=False) + + inciso = forms.CharField(label='Inciso', required=False) + + alinea = forms.CharField(label='Alínea', required=False) + + item = forms.CharField(label='Item', required=False) + + class Meta: + model = LegislacaoCitada + + def __init__(self, *args, **kwargs): + self.helper = FormHelper() + self.helper.form_class = 'form-horizontal' + self.helper.layout = Layout( + Fieldset( + 'Incluir Legislação Citada', + 'tipo', + 'numero', + 'ano', + 'disposicao', + 'parte', + 'livro', + 'titulo', + 'capitulo', + 'secao', + 'subsecao', + 'artigo', + 'paragrafo', + 'inciso', + 'alinea', + 'item', + ButtonHolder( + Submit('submit', 'Salvar', + css_class='button primary') + ) + ) + ) + super(LegislacaoCitadaForm, self).__init__(*args, **kwargs) + + +class LegislacaoCitadaView(FormMixin, GenericView): + template_name = "materia/legislacao_citada.html" + + def get(self, request, *args, **kwargs): + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + legislacao = LegislacaoCitada.objects.filter(materia_id=kwargs['pk']) + form = LegislacaoCitadaForm() + + return self.render_to_response( + {'materia': materia, + 'form': form, + 'legislacao': legislacao}) + + def post(self, request, *args, **kwargs): + form = LegislacaoCitadaForm(request.POST) + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + legislacao_list = LegislacaoCitada.objects.filter( + materia_id=kwargs['pk']) + + if form.is_valid(): + legislacao = LegislacaoCitada() + + try: + norma = NormaJuridica.objects.get( + tipo_id=form.cleaned_data['tipo'], + numero=form.cleaned_data['numero'], + ano=form.cleaned_data['ano']) + except ObjectDoesNotExist: + error = 'Norma Juridica não existe.' + return self.render_to_response({'form': form, + 'materia': materia, + 'legislacao': legislacao_list, + 'error': error}) + legislacao.materia = materia + legislacao.norma = norma + legislacao.disposicoes = form.cleaned_data['disposicao'] + legislacao.parte = form.cleaned_data['parte'] + legislacao.livro = form.cleaned_data['livro'] + legislacao.titulo = form.cleaned_data['titulo'] + legislacao.capitulo = form.cleaned_data['capitulo'] + legislacao.secao = form.cleaned_data['secao'] + legislacao.subsecao = form.cleaned_data['subsecao'] + legislacao.artigo = form.cleaned_data['artigo'] + legislacao.paragrafo = form.cleaned_data['paragrafo'] + legislacao.inciso = form.cleaned_data['inciso'] + legislacao.alinea = form.cleaned_data['alinea'] + legislacao.item = form.cleaned_data['item'] + + legislacao.save() + return self.form_valid(form) + else: + return self.render_to_response({'form': form, + 'materia': materia, + 'legislacao': legislacao_list}) + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('legislacao_citada', kwargs={'pk': pk}) + + +class LegislacaoCitadaEditView(FormMixin, GenericView): + template_name = "materia/legislacao_citada_edit.html" + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('legislacao_citada', kwargs={'pk': pk}) + + def get(self, request, *args, **kwargs): + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + legislacao = LegislacaoCitada.objects.get(id=kwargs['id']) + form = LegislacaoCitadaForm() + + return self.render_to_response( + {'materia': materia, + 'form': form, + 'legislacao': legislacao, + 'tipos_norma': TipoNormaJuridica.objects.all()}) + + def post(self, request, *args, **kwargs): + form = LegislacaoCitadaForm(request.POST) + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + legislacao = LegislacaoCitada.objects.get(id=kwargs['id']) + + if form.is_valid(): + if 'excluir' in request.POST: + legislacao.delete() + return self.form_valid(form) + elif 'salvar' in request.POST: + try: + norma = NormaJuridica.objects.get( + tipo_id=form.cleaned_data['tipo'], + numero=form.cleaned_data['numero'], + ano=form.cleaned_data['ano']) + except ObjectDoesNotExist: + error = 'Norma Juridica não existe.' + return self.render_to_response( + {'form': form, + 'materia': materia, + 'error': error, + 'legislacao': legislacao, + 'tipos_norma': TipoNormaJuridica.objects.all()}) + legislacao.materia = materia + legislacao.norma = norma + legislacao.disposicoes = form.cleaned_data['disposicao'] + legislacao.parte = form.cleaned_data['parte'] + legislacao.livro = form.cleaned_data['livro'] + legislacao.titulo = form.cleaned_data['titulo'] + legislacao.capitulo = form.cleaned_data['capitulo'] + legislacao.secao = form.cleaned_data['secao'] + legislacao.subsecao = form.cleaned_data['subsecao'] + legislacao.artigo = form.cleaned_data['artigo'] + legislacao.paragrafo = form.cleaned_data['paragrafo'] + legislacao.inciso = form.cleaned_data['inciso'] + legislacao.alinea = form.cleaned_data['alinea'] + legislacao.item = form.cleaned_data['item'] + + legislacao.save() + return self.form_valid(form) + else: + return self.render_to_response( + {'form': form, + 'materia': materia}) diff --git a/norma/urls.py b/norma/urls.py index 4165f4f5f..6c2a69aa4 100644 --- a/norma/urls.py +++ b/norma/urls.py @@ -1,8 +1,8 @@ from django.conf.urls import include, url -from norma.views import (assunto_norma_crud, +from norma.views import (NormaIncluirView, assunto_norma_crud, norma_temporario_para_compilacao_crud, - tipo_norma_crud, NormaIncluirView) + tipo_norma_crud) norma_url_patterns = norma_temporario_para_compilacao_crud.urlpatterns diff --git a/norma/views.py b/norma/views.py index bd2495dea..292d72588 100644 --- a/norma/views.py +++ b/norma/views.py @@ -1,22 +1,18 @@ -from django.utils.translation import ugettext_lazy as _ - -from sapl.crud import build_crud +from datetime import datetime from django import forms -from django.utils.safestring import mark_safe - from django.core.urlresolvers import reverse +from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ +from django.views.generic.edit import FormMixin +from vanilla import GenericView -from datetime import datetime +from materia.models import TipoMateriaLegislativa +from sapl.crud import build_crud from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, TipoNormaJuridica) -from materia.models import TipoMateriaLegislativa - -from django.views.generic.edit import FormMixin -from vanilla import GenericView - assunto_norma_crud = build_crud( AssuntoNorma, 'assunto_norma_juridica', [ @@ -231,5 +227,3 @@ class NormaIncluirView(FormMixin, GenericView): return self.render_to_response({'form': form}) else: return self.form_invalid(form) - - diff --git a/templates/materia/legislacao_citada.html b/templates/materia/legislacao_citada.html new file mode 100644 index 000000000..8642d34a8 --- /dev/null +++ b/templates/materia/legislacao_citada.html @@ -0,0 +1,37 @@ +{% extends "materia/materia_detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block detail_content %} +
+ Matéria Legislativa +
    +
  • Tipo: {{materia.tipo.sigla}}
  • +
  • Número: {{materia.numero}}
  • +
  • Ano: {{materia.ano}}
  • +
+ Ementa: {{materia.ementa}} + +
+ Legislação Citada + + + + + + + + {% for l in legislacao %} + + + + + + + {% endfor %} +
Tipo NormaNúmeroAnoDisposição
{{l.norma.tipo.descricao}}{{l.norma.numero}}{{l.norma.ano}}{{l.disposicoes}}
+
+ {% if error %}
{{ error }}
{% endif %} + {% crispy form %} +
+{% endblock %} \ No newline at end of file diff --git a/templates/materia/legislacao_citada_edit.html b/templates/materia/legislacao_citada_edit.html new file mode 100644 index 000000000..6ba418087 --- /dev/null +++ b/templates/materia/legislacao_citada_edit.html @@ -0,0 +1,74 @@ +{% extends "materia/materia_detail.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block detail_content %} +
+ Matéria Legislativa +
    +
  • Tipo: {{materia.tipo.sigla}}
  • +
  • Número: {{materia.numero}}
  • +
  • Ano: {{materia.ano}}
  • +
+ Ementa: {{materia.ementa}} + +
+ Editar Legislação Citada +
+ {% csrf_token %} + {% if error %}
{{ error }}
{% endif %} + + Tipo Norma* + + + Número* + + + Ano* + + + Disposição + + + Parte + + + Livro + + + Título + + + Capítulo + + + Seção + + + Subseção + + + Artigo + + + Inciso + + + Alínea + + + Item + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/materia/materia_detail.html b/templates/materia/materia_detail.html index 3f72cca6e..2f754dd02 100644 --- a/templates/materia/materia_detail.html +++ b/templates/materia/materia_detail.html @@ -4,11 +4,11 @@ {% block sections_nav %}