diff --git a/materia/forms.py b/materia/forms.py index c03846d06..d90057bcb 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -315,25 +315,21 @@ class NumeracaoForm(ModelForm): 'ano_materia', 'data_materia'] - def __init__(self, excluir=False, *args, **kwargs): - more = [] - if excluir: - more = [Submit('Excluir', 'Excluir')] + def clean(self): + if self.errors: + return self.errors - row1 = crispy_layout_mixin.to_row( - [('tipo_materia', 12)]) - row2 = crispy_layout_mixin.to_row( - [('numero_materia', 4), ('ano_materia', 4), ('data_materia', 4)]) + try: + materia_anexada = MateriaLegislativa.objects.get( + numero=self.cleaned_data['numero_materia'], + ano=self.cleaned_data['ano_materia'], + tipo=self.cleaned_data['tipo_materia']) + except ObjectDoesNotExist: + msg = _('A matéria a ser inclusa não existe no cadastro' + ' de matérias legislativas.') + raise ValidationError(msg) - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset( - _('Incluir Numeração'), - row1, row2, - form_actions(more=more) - ) - ) - super(NumeracaoForm, self).__init__(*args, **kwargs) + return self.cleaned_data class AnexadaForm(ModelForm): diff --git a/materia/layouts.yaml b/materia/layouts.yaml index 958edc210..cafaeb94f 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -70,8 +70,7 @@ DocumentoAcessorio: Numeracao: Numeração: - - tipo_materia numero_materia - - ano_materia data_materia + - tipo_materia numero_materia ano_materia data_materia Orgao: Órgão: diff --git a/materia/tests/test_materia.py b/materia/tests/test_materia.py index 5cf871795..a72d8a497 100644 --- a/materia/tests/test_materia.py +++ b/materia/tests/test_materia.py @@ -170,17 +170,14 @@ def test_despacho_inicial_submit(client): @pytest.mark.django_db(transaction=False) def test_numeracao_submit(client): materia_principal = make_materia_principal() + materia = make_materia_principal() - # Cria dados para inserir na numeração - tipo = mommy.make(TipoMateriaLegislativa, - sigla='T2', - descricao='Teste_2') # Testa POST - response = client.post(reverse('materia:numeracao', + response = client.post(reverse('materia:numeracao_create', kwargs={'pk': materia_principal.pk}), - {'tipo_materia': tipo.pk, - 'numero_materia': '341', - 'ano_materia': 2015, + {'tipo_materia': materia.tipo.pk, + 'numero_materia': materia.numero, + 'ano_materia': materia.ano, 'data_materia': '2016-03-21', 'salvar': 'salvar'}, follow=True) @@ -189,8 +186,8 @@ def test_numeracao_submit(client): # Verifica se a numeração foi criada numeracao = Numeracao.objects.first() - assert numeracao.tipo_materia == tipo - assert numeracao.ano_materia == 2015 + assert numeracao.tipo_materia == materia.tipo + assert numeracao.ano_materia == materia.ano @pytest.mark.django_db(transaction=False) @@ -366,7 +363,7 @@ def test_form_errors_legislacao_citada(client): def test_form_errors_numeracao(client): materia_principal = make_materia_principal() - response = client.post(reverse('materia:numeracao', + response = client.post(reverse('materia:numeracao_create', kwargs={'pk': materia_principal.pk}), {'salvar': 'salvar'}, follow=True) diff --git a/materia/urls.py b/materia/urls.py index 012039406..26982c318 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -8,8 +8,8 @@ from materia.views import (AcompanhamentoConfirmarView, LegislacaoCitadaEditView, LegislacaoCitadaView, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, - NumeracaoEditView, NumeracaoView, OrgaoCrud, - OrigemCrud, ProposicaoEditView, ProposicaoListView, + NumeracaoCrud, OrgaoCrud, OrigemCrud, + ProposicaoEditView, ProposicaoListView, ProposicaoTaView, ProposicaoView, RegimeTramitacaoCrud, RelatoriaEditView, RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud, @@ -26,7 +26,8 @@ urlpatterns = [ url(r'^materia/', include(MateriaLegislativaCrud.get_urls() + AnexadaCrud.get_urls() + AutoriaCrud.get_urls() + - DespachoInicialCrud.get_urls())), + DespachoInicialCrud.get_urls() + + NumeracaoCrud.get_urls())), url(r'^materia/(?P[0-9]+)/ta$', @@ -57,10 +58,6 @@ urlpatterns = [ LegislacaoCitadaView.as_view(), name='legislacao_citada'), url(r'^materia/(?P\d+)/legislacao-citada/(?P\d+)/edit', LegislacaoCitadaEditView.as_view(), name='legislacao_citada_edit'), - url(r'^materia/(?P\d+)/numeracao$', - NumeracaoView.as_view(), name='numeracao'), - url(r'^materia/(?P\d+)/numeracao/(?P\d+)/edit', - NumeracaoEditView.as_view(), name='numeracao_edit'), url(r'^materia/(?P\d+)/documento-acessorio$', DocumentoAcessorioView.as_view(), name='documento_acessorio'), url(r'^materia/(?P\d+)/documento-acessorio/(?P\d+)/edit', diff --git a/materia/views.py b/materia/views.py index e59e7da6d..1a5534321 100644 --- a/materia/views.py +++ b/materia/views.py @@ -47,7 +47,6 @@ AnexadaCrud = Crud.build(Anexada, '') TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor') AutorCrud = Crud.build(Autor, 'autor') DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '') -NumeracaoCrud = Crud.build(Numeracao, '') OrgaoCrud = Crud.build(Orgao, 'orgao') RelatoriaCrud = Crud.build(Relatoria, '') TipoProposicaoCrud = Crud.build(TipoProposicao, 'tipo_proposicao') @@ -60,6 +59,18 @@ AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') DespachoInicialCrud = MasterDetailCrud.build(DespachoInicial, 'materia', '') +class NumeracaoCrud(MasterDetailCrud): + model = Numeracao + parent_field = 'materia' + help_path = '' + + class CreateView(MasterDetailCrud.CreateView): + form_class = NumeracaoForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = NumeracaoForm + + class AnexadaCrud(MasterDetailCrud): model = Anexada parent_field = 'materia_principal' @@ -222,80 +233,6 @@ class LegislacaoCitadaEditView(FormView): 'object': materia}) -class NumeracaoView(CreateView): - template_name = "materia/numeracao.html" - form_class = NumeracaoForm - - def get(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao = Numeracao.objects.filter(materia_id=kwargs['pk']) - - return self.render_to_response( - {'object': materia, - 'form': self.get_form(), - 'numeracao': numeracao}) - - def post(self, request, *args, **kwargs): - form = self.get_form() - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao_list = Numeracao.objects.filter( - materia_id=kwargs['pk']) - - if form.is_valid(): - numeracao = form.save(commit=False) - numeracao.materia = materia - numeracao.save() - return self.form_valid(form) - else: - return self.render_to_response({'form': form, - 'object': materia, - 'numeracao': numeracao_list}) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:numeracao', kwargs={'pk': pk}) - - -class NumeracaoEditView(CreateView): - template_name = "materia/numeracao_edit.html" - form_class = NumeracaoForm - - def get(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao = Numeracao.objects.get(id=kwargs['id']) - form = NumeracaoForm(instance=numeracao, excluir=True) - - return self.render_to_response( - {'object': materia, - 'form': form, - 'numeracao': numeracao}) - - def post(self, request, *args, **kwargs): - form = self.get_form() - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - numeracao = Numeracao.objects.get(id=kwargs['id']) - - if form.is_valid(): - if 'excluir' in request.POST: - numeracao.delete() - elif 'salvar' in request.POST: - numeracao.materia = materia - numeracao.tipo_materia = form.cleaned_data['tipo_materia'] - numeracao.numero_materia = form.cleaned_data['numero_materia'] - numeracao.ano_materia = form.cleaned_data['ano_materia'] - numeracao.data_materia = form.cleaned_data['data_materia'] - numeracao.save() - return redirect(self.get_success_url()) - else: - return self.render_to_response({'form': form, - 'object': materia, - 'numeracao': numeracao}) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:numeracao', kwargs={'pk': pk}) - - class DocumentoAcessorioView(CreateView): template_name = "materia/documento_acessorio.html" form_class = DocumentoAcessorioForm diff --git a/templates/materia/numeracao.html b/templates/materia/numeracao.html deleted file mode 100644 index 518ee133f..000000000 --- a/templates/materia/numeracao.html +++ /dev/null @@ -1,35 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} -
- Matéria Legislativa - {% include "materia/resumo_detail_materia.html" %} - -
- Numeração - - - - - - - - - - - {% for n in numeracao %} - - - - - - - - {% endfor %} -
Tipo MatériaDescriçãoNúmeroAnoData
{{n.tipo_materia.sigla}}{{n.tipo_materia.descricao}}{{n.numero_materia}}{{n.ano_materia}}{{n.data_materia|date:'d/m/Y'}}
-
- {% crispy form %} -
-{% endblock %} diff --git a/templates/materia/numeracao_edit.html b/templates/materia/numeracao_edit.html deleted file mode 100644 index 139dd4117..000000000 --- a/templates/materia/numeracao_edit.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} -{% block actions %} {% endblock %} -{% block detail_content %} - {% crispy form %} -{% endblock %} diff --git a/templates/materia/subnav.yaml b/templates/materia/subnav.yaml index 45c21ec0a..49d4d40e2 100644 --- a/templates/materia/subnav.yaml +++ b/templates/materia/subnav.yaml @@ -11,7 +11,7 @@ - title: Legislação Citada url: legislacao_citada - title: Numeração - url: numeracao + url: numeracao_list - title: Tramitação url: tramitacao_materia - title: Relatoria