diff --git a/norma/forms.py b/norma/forms.py index 866c48ba8..dc254ab08 100644 --- a/norma/forms.py +++ b/norma/forms.py @@ -1,3 +1,5 @@ +from datetime import datetime + from crispy_forms.helper import FormHelper from crispy_forms.layout import Fieldset, Layout from django import forms @@ -94,23 +96,20 @@ class NormaJuridicaForm(ModelForm): # Campos de MateriaLegislativa tipo_materia = forms.ModelChoiceField( - label='Matéria Legislativa', + label='Matéria', required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione' ) - numero_materia = forms.CharField(label='Número', - required=False) - ano_materia = forms.ChoiceField(label='Ano', - required=False, - choices=RANGE_ANOS) - - def clean_texto_integral(self): - texto_integral = self.cleaned_data.get('texto_integral', False) - if texto_integral: - if texto_integral.size > MAX_DOC_UPLOAD_SIZE: - raise ValidationError("Arquivo muito grande. ( > 5mb )") - return texto_integral + numero_materia = forms.CharField( + label='Número Matéria', + required=False + ) + ano_materia = forms.ChoiceField( + label='Ano Matéria', + required=False, + choices=RANGE_ANOS, + ) class Meta: model = NormaJuridica @@ -130,55 +129,39 @@ class NormaJuridicaForm(ModelForm): 'ementa', 'indexacao', 'observacao', - 'texto_integral', - ] + 'texto_integral'] def clean(self): - data = super(NormaJuridicaForm, self).clean() + cleaned_data = self.cleaned_data + + if (cleaned_data['tipo_materia'] and + cleaned_data['numero_materia'] and + cleaned_data['ano_materia']): - if self.cleaned_data['tipo_materia']: try: - MateriaLegislativa.objects.get( - tipo=self.cleaned_data['tipo_materia'], - numero=self.cleaned_data['numero_materia'], - ano=self.cleaned_data['ano_materia']) + materia = MateriaLegislativa.objects.get( + tipo_id=cleaned_data['tipo_materia'], + numero=cleaned_data['numero_materia'], + ano=cleaned_data['ano_materia']) except ObjectDoesNotExist: - msg = 'Matéria adicionada não existe!' - raise forms.ValidationError(msg) + raise forms.ValidationError("Matéria escolhida não existe!") + else: + cleaned_data['materia'] = materia - return data + else: + cleaned_data['materia'] = None + return cleaned_data - def __init__(self, *args, **kwargs): - - row1 = crispy_layout_mixin.to_row( - [('tipo', 4), ('numero', 4), ('ano', 4)]) - - row2 = crispy_layout_mixin.to_row( - [('data', 4), ('esfera_federacao', 4), ('complemento', 4)]) - - row3 = crispy_layout_mixin.to_row( - [('tipo_materia', 4), ('numero_materia', 4), ('ano_materia', 4)]) - - row4 = crispy_layout_mixin.to_row( - [('data_publicacao', 3), ('veiculo_publicacao', 3), - ('pagina_inicio_publicacao', 3), ('pagina_fim_publicacao', 3)]) - - row5 = crispy_layout_mixin.to_row( - [('texto_integral', 12)]) - - row6 = crispy_layout_mixin.to_row( - [('ementa', 12)]) - - row7 = crispy_layout_mixin.to_row( - [('indexacao', 12)]) - - row8 = crispy_layout_mixin.to_row( - [('observacao', 12)]) + def clean_texto_integral(self): + texto_integral = self.cleaned_data.get('texto_integral', False) + if texto_integral: + if texto_integral.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("Arquivo muito grande. ( > 5mb )") + return texto_integral - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset('Identificação Básica', - row1, row2, row3, row4, row5, row6, row7, row8), - form_actions() - ) - super(NormaJuridicaForm, self).__init__(*args, **kwargs) + def save(self, commit=False): + norma = super(NormaJuridicaForm, self).save(commit) + norma.timestamp = datetime.now() + norma.materia = self.cleaned_data['materia'] + norma.save() + return norma diff --git a/norma/layouts.yaml b/norma/layouts.yaml index cde1cf517..b0bce2d2a 100644 --- a/norma/layouts.yaml +++ b/norma/layouts.yaml @@ -11,17 +11,22 @@ NormaJuridica: Identificação Básica: - tipo numero ano - data esfera_federacao complemento - - tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME - data_publicacao veiculo_publicacao pagina_inicio_publicacao pagina_fim_publicacao - - file_FIXME tip_situacao_norma_FIXME + - texto_integral - ementa - indexacao - observacao -NormaJuridica: +NormaJuridicaCreate: Identificação Básica: - - tipo:5 numero:2 ano:2 data + - tipo numero ano + - data esfera_federacao complemento + - tipo_materia numero_materia ano_materia + - data_publicacao veiculo_publicacao pagina_inicio_publicacao pagina_fim_publicacao + - texto_integral - ementa + - indexacao + - observacao LegislacaoCitada: Legislação Citada: diff --git a/norma/test_norma.py b/norma/test_norma.py index 4731995b2..e25b3dbfd 100644 --- a/norma/test_norma.py +++ b/norma/test_norma.py @@ -13,7 +13,7 @@ def test_incluir_norma_submit(client): descricao='Teste') # Testa POST - response = client.post(reverse('norma:norma_incluir'), + response = client.post(reverse('norma:normajuridica_create'), {'tipo': tipo.pk, 'numero': '1', 'ano': '2016', @@ -33,7 +33,7 @@ def test_incluir_norma_submit(client): @pytest.mark.django_db(transaction=False) def test_incluir_norma_errors(client): - response = client.post(reverse('norma:norma_incluir'), + response = client.post(reverse('norma:normajuridica_create'), {'salvar': 'salvar'}, follow=True) diff --git a/norma/urls.py b/norma/urls.py index 199888813..c75863a5f 100644 --- a/norma/urls.py +++ b/norma/urls.py @@ -1,7 +1,7 @@ from django.conf.urls import include, url -from norma.views import (AssuntoNormaCrud, NormaEditView, NormaIncluirView, - NormaPesquisaView, NormaTaView, NormaTemporarioCrud, +from norma.views import (AssuntoNormaCrud, NormaCrud, NormaPesquisaView, + NormaTaView, NormaTemporarioCrud, PesquisaNormaListView, TipoNormaCrud) from .apps import AppConfig @@ -24,14 +24,10 @@ norma_url_patterns = NormaTemporarioCrud.get_urls() + [ ] urlpatterns = [ - url(r'^norma/', include(norma_url_patterns)), + url(r'^norma/', include(NormaCrud.get_urls())), url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())), url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())), - - url(r'^norma/incluir$', NormaIncluirView.as_view(), name='norma_incluir'), - url(r'^norma/(?P[0-9]+)/editar$', - NormaEditView.as_view(), name='norma_editar'), url(r'^norma/pesquisa$', NormaPesquisaView.as_view(), name='norma_pesquisa'), url(r'^norma/pesquisa-resultado$', diff --git a/norma/views.py b/norma/views.py index 116405ad6..e454ac7cc 100644 --- a/norma/views.py +++ b/norma/views.py @@ -1,13 +1,11 @@ from datetime import datetime -from django.core.urlresolvers import reverse_lazy -from django.http import HttpResponseRedirect from django.shortcuts import redirect -from django.views.generic import CreateView, FormView, ListView, UpdateView +from django.views.generic import FormView, ListView +import crud.base from compilacao.views import IntegracaoTaView from crud.base import Crud, make_pagination -from materia.models import MateriaLegislativa from .forms import NormaJuridicaForm, NormaJuridicaPesquisaForm from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, @@ -15,11 +13,40 @@ from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica') TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica') -NormaCrud = Crud.build(NormaJuridica, '') NormaTemporarioCrud = Crud.build(NormaJuridica, 'norma') LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '') +class NormaCrud(Crud): + model = NormaJuridica + help_path = 'norma_juridica' + + class UpdateView(crud.base.CrudUpdateView): + form_class = NormaJuridicaForm + + @property + def layout_key(self): + return 'NormaJuridicaCreate' + + def get_initial(self): + norma = NormaJuridica.objects.get(id=self.kwargs['pk']) + if norma.materia: + self.initial['tipo_materia'] = norma.materia.tipo + self.initial['ano_materia'] = norma.materia.ano + self.initial['numero_materia'] = norma.materia.numero + return self.initial.copy() + + class CreateView(crud.base.CrudCreateView): + form_class = NormaJuridicaForm + + @property + def layout_key(self): + return 'NormaJuridicaCreate' + + class BaseMixin(crud.base.BaseMixin): + list_field_names = ['tipo', 'numero', 'ano', 'ementa'] + + class NormaPesquisaView(FormView): template_name = "norma/pesquisa.html" success_url = "norma:norma_pesquisa" @@ -110,57 +137,6 @@ class PesquisaNormaListView(ListView): return context -class NormaIncluirView(CreateView): - template_name = "norma/normajuridica_incluir.html" - form_class = NormaJuridicaForm - success_url = reverse_lazy('norma:normajuridica_list') - - def get_success_url(self): - return reverse_lazy('norma:norma_pesquisa') - - def form_valid(self, form): - norma = form.save(commit=False) - norma.timestamp = datetime.now() - if form.cleaned_data['tipo_materia']: - materia = MateriaLegislativa.objects.get( - tipo_id=form.data['tipo_materia'], - numero=form.data['numero_materia'], - ano=form.data['ano_materia']) - norma.materia = materia - norma.save() - return HttpResponseRedirect(self.get_success_url()) - - -class NormaEditView(UpdateView): - template_name = "norma/normajuridica_incluir.html" - form_class = NormaJuridicaForm - model = NormaJuridica - success_url = reverse_lazy('norma:pesquisa_norma') - - def get_initial(self): - data = super(NormaEditView, self).get_initial() - norma = NormaJuridica.objects.get(id=self.kwargs['pk']) - if norma.materia: - data.update({ - 'tipo_materia': norma.materia.tipo, - 'numero_materia': norma.materia.numero, - 'ano_materia': norma.materia.ano, - }) - return data - - def form_valid(self, form): - norma = form.save(commit=False) - norma.timestamp = datetime.now() - if form.cleaned_data['tipo_materia']: - materia = MateriaLegislativa.objects.get( - tipo_id=form.data['tipo_materia'], - numero=form.data['numero_materia'], - ano=form.data['ano_materia']) - norma.materia = materia - norma.save() - return HttpResponseRedirect(self.get_success_url()) - - class NormaTaView(IntegracaoTaView): model = NormaJuridica model_type_foreignkey = TipoNormaJuridica diff --git a/templates/norma/list_pesquisa.html b/templates/norma/list_pesquisa.html index fe46141fe..517fd3969 100644 --- a/templates/norma/list_pesquisa.html +++ b/templates/norma/list_pesquisa.html @@ -4,11 +4,11 @@ {% block actions %}{% endblock %} {% block detail_content %}
- Adicionar Norma Jurídica + Adicionar Norma Jurídica



{% if object_list %} - +
diff --git a/templates/norma/normajuridica_detail.html b/templates/norma/normajuridica_detail.html deleted file mode 100644 index 13ec219d4..000000000 --- a/templates/norma/normajuridica_detail.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% block sections_nav %} - - - -{% endblock sections_nav %} - -
- {% block actions %} - - {% endblock actions %} -
diff --git a/templates/norma/normajuridica_incluir.html b/templates/norma/normajuridica_incluir.html deleted file mode 100644 index 42eb54de9..000000000 --- a/templates/norma/normajuridica_incluir.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "crud/form.html" %} -{% load i18n %} -{% load crispy_forms_tags %} diff --git a/templates/norma/normajuridica_list.html b/templates/norma/normajuridica_list.html deleted file mode 100644 index f39f02bf0..000000000 --- a/templates/norma/normajuridica_list.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "crud/list.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block base_content %} -
- - {% blocktrans with verbose_name=view.verbose_name %} Adicionar {{ verbose_name }} {% endblocktrans %} - -
-


- {% if object_list %} -
Tipo da Norma Juridica
- - - - - - - - - - {% for obj in object_list %} - - - - - - - - {% endfor %} -
Tipo da Norma JuridicaNúmeroAnoDataEmenta
{{obj.tipo}}{{obj.numero}}{{obj.ano}}{{obj.data}}{{obj.ementa|safe}}
- {% include "paginacao.html" %} - {% else %} -

Nenhum Registro recuperado

- {% endif %} -{% endblock %} diff --git a/templates/norma/pesquisa.html b/templates/norma/pesquisa.html index 42eb54de9..82edd4116 100644 --- a/templates/norma/pesquisa.html +++ b/templates/norma/pesquisa.html @@ -1,3 +1,17 @@ -{% extends "crud/form.html" %} +{% extends "crud/detail.html" %} {% load i18n %} {% load crispy_forms_tags %} + + +{% block base_content %} + {% block actions %} +
+ {% trans 'Adicionar Norma Juridica' %} +
+

+ {% endblock %} + + {% block detail_content %} + {% crispy form %} + {% endblock %} +{% endblock %}