Browse Source

Merge pull request #356 from interlegis/353-Crud-Numercao

Fix #353 crud numeração
pull/382/head
Edward 9 years ago
parent
commit
718d021ee3
  1. 39
      materia/forms.py
  2. 3
      materia/layouts.yaml
  3. 19
      materia/migrations/0030_auto_20160429_1349.py
  4. 5
      materia/models.py
  5. 19
      materia/tests/test_materia.py
  6. 11
      materia/urls.py
  7. 87
      materia/views.py
  8. 35
      templates/materia/numeracao.html
  9. 7
      templates/materia/numeracao_edit.html
  10. 2
      templates/materia/subnav.yaml

39
materia/forms.py

@ -315,25 +315,30 @@ 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:
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)
if Numeracao.objects.filter(
materia=self.instance.materia,
tipo_materia=self.cleaned_data['tipo_materia'],
ano_materia=self.cleaned_data['ano_materia'],
numero_materia=self.cleaned_data['numero_materia']
).exists():
msg = _('Essa numeração já foi cadastrada.')
raise ValidationError(msg)
return self.cleaned_data
class AnexadaForm(ModelForm):

3
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:

19
materia/migrations/0030_auto_20160429_1349.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-04-29 16:49
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('materia', '0029_auto_20160428_1020'),
]
operations = [
migrations.AlterModelOptions(
name='numeracao',
options={'ordering': ('materia', 'tipo_materia', 'numero_materia', 'ano_materia', 'data_materia'), 'verbose_name': 'Numeração', 'verbose_name_plural': 'Numerações'},
),
]

5
materia/models.py

@ -317,6 +317,11 @@ class Numeracao(models.Model):
class Meta:
verbose_name = _('Numeração')
verbose_name_plural = _('Numerações')
ordering = ('materia',
'tipo_materia',
'numero_materia',
'ano_materia',
'data_materia',)
def __str__(self):
return _('%(numero)s %(tipo)s - %(data)s') % {

19
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)

11
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<pk>[0-9]+)/ta$',
@ -57,10 +58,6 @@ urlpatterns = [
LegislacaoCitadaView.as_view(), name='legislacao_citada'),
url(r'^materia/(?P<pk>\d+)/legislacao-citada/(?P<id>\d+)/edit',
LegislacaoCitadaEditView.as_view(), name='legislacao_citada_edit'),
url(r'^materia/(?P<pk>\d+)/numeracao$',
NumeracaoView.as_view(), name='numeracao'),
url(r'^materia/(?P<pk>\d+)/numeracao/(?P<id>\d+)/edit',
NumeracaoEditView.as_view(), name='numeracao_edit'),
url(r'^materia/(?P<pk>\d+)/documento-acessorio$',
DocumentoAcessorioView.as_view(), name='documento_acessorio'),
url(r'^materia/(?P<pk>\d+)/documento-acessorio/(?P<id>\d+)/edit',

87
materia/views.py

@ -48,7 +48,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')
@ -72,6 +71,18 @@ class DespachoInicialCrud(MasterDetailCrud):
form_class = DespachoInicialForm
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'
@ -234,80 +245,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

35
templates/materia/numeracao.html

@ -1,35 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<fieldset>
<legend>Matéria Legislativa</legend>
{% include "materia/resumo_detail_materia.html" %}
<fieldset>
<legend>Numeração</legend>
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Tipo Matéria</th>
<th>Descrição</th>
<th>Número</th>
<th>Ano</th>
<th>Data</th>
</tr>
</thead>
{% for n in numeracao %}
<tr>
<td><a href="{% url 'materia:numeracao_edit' object.id n.id %}">{{n.tipo_materia.sigla}}</a></td>
<td>{{n.tipo_materia.descricao}}</td>
<td>{{n.numero_materia}}</td>
<td>{{n.ano_materia}}</td>
<td>{{n.data_materia|date:'d/m/Y'}}</td>
</tr>
{% endfor %}
</table>
</fieldset>
{% crispy form %}
</fieldset>
{% endblock %}

7
templates/materia/numeracao_edit.html

@ -1,7 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}

2
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

Loading…
Cancel
Save