diff --git a/materia/forms.py b/materia/forms.py index 2464cdc82..2406b58b5 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -15,10 +15,9 @@ from norma.models import LegislacaoCitada, TipoNormaJuridica from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.utils import RANGE_ANOS -from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, - DespachoInicial, DocumentoAcessorio, MateriaLegislativa, - Numeracao, Proposicao, Relatoria, TipoMateriaLegislativa, - Tramitacao) +from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial, + DocumentoAcessorio, MateriaLegislativa, Numeracao, + Proposicao, Relatoria, TipoMateriaLegislativa, Tramitacao) ANO_CHOICES = [('', '---------')] + RANGE_ANOS @@ -403,60 +402,6 @@ class AnexadaForm(ModelForm): fields = ['tipo', 'numero', 'ano', 'data_anexacao', 'data_desanexacao'] -class AutoriaForm(ModelForm): - autor = forms.ModelChoiceField( - label=_('Autor'), - required=True, - queryset=Autor.objects.all().order_by('tipo', 'nome'), - ) - primeiro_autor = forms.ChoiceField( - label=_('Primeiro Autor'), - required=True, - choices=[(True, _('Sim')), (False, _('Não'))], - ) - - materia_id = forms.CharField(widget=forms.HiddenInput(), required=False) - - class Meta: - model = Autoria - fields = ['autor', - 'primeiro_autor', - 'partido', - 'materia_id'] - - def clean(self): - if self.data['materia_id'] and self.data['autor']: - try: - materia = MateriaLegislativa.objects.get( - id=self.data['materia_id']) - Autoria.objects.get(autor=self.data['autor'], - materia=materia) - raise forms.ValidationError( - _('Essa autoria já foi adicionada!')) - except ObjectDoesNotExist: - pass - - def __init__(self, excluir=False, *args, **kwargs): - - row1 = crispy_layout_mixin.to_row( - [('autor', 4), ('primeiro_autor', 4), ('partido', 4)]) - - more = [] - if excluir: - more = [Submit('Excluir', 'Excluir')] - - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset( - _('Adicionar Autoria'), - row1, - form_actions(more=more) - ) - ) - super(AutoriaForm, self).__init__( - *args, **kwargs) - - class RangeWidgetOverride(forms.MultiWidget): def __init__(self, attrs=None): diff --git a/materia/layouts.yaml b/materia/layouts.yaml index 260f44d4f..dee076e02 100644 --- a/materia/layouts.yaml +++ b/materia/layouts.yaml @@ -58,7 +58,7 @@ Autor: Autoria: Autoria: - - tip_autor_FIXME nom_autor_FIXME primeiro_autor + - autor partido primeiro_autor DocumentoAcessorio: Documento Acessório: diff --git a/materia/migrations/0029_auto_20160428_1020.py b/materia/migrations/0029_auto_20160428_1020.py new file mode 100644 index 000000000..2cdd68c76 --- /dev/null +++ b/materia/migrations/0029_auto_20160428_1020.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-04-28 13:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0028_auto_20160419_1000'), + ] + + operations = [ + migrations.AlterField( + model_name='autoria', + name='primeiro_autor', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Primeiro Autor'), + ), + ] diff --git a/materia/models.py b/materia/models.py index d80d751c4..28dc52e80 100644 --- a/materia/models.py +++ b/materia/models.py @@ -229,7 +229,8 @@ class Autoria(models.Model): partido = models.ForeignKey(Partido, blank=True, null=True) autor = models.ForeignKey(Autor) materia = models.ForeignKey(MateriaLegislativa) - primeiro_autor = models.BooleanField(verbose_name=_('Primeiro Autor')) + primeiro_autor = models.BooleanField(verbose_name=_('Primeiro Autor'), + choices=YES_NO_CHOICES) class Meta: verbose_name = _('Autoria') diff --git a/materia/tests/test_materia.py b/materia/tests/test_materia.py index 088ce0472..f95f1bcfa 100644 --- a/materia/tests/test_materia.py +++ b/materia/tests/test_materia.py @@ -124,7 +124,7 @@ def test_autoria_submit(client): autor = mommy.make(Autor, tipo=tipo_autor, nome='Autor Teste') # Testa POST - response = client.post(reverse('materia:autoria', + response = client.post(reverse('materia:autoria_create', kwargs={'pk': materia_principal.pk}), {'autor': autor.pk, 'primeiro_autor': True, @@ -305,7 +305,7 @@ def test_form_errors_anexada(client): def test_form_errors_autoria(client): materia_principal = make_materia_principal() - response = client.post(reverse('materia:autoria', + response = client.post(reverse('materia:autoria_create', kwargs={'pk': materia_principal.pk}), {'materia_id': materia_principal.pk, 'partido': '', @@ -315,8 +315,6 @@ def test_form_errors_autoria(client): assert (response.context_data['form'].errors['autor'] == ['Este campo é obrigatório.']) - assert (response.context_data['form'].errors['primeiro_autor'] == - ['Este campo é obrigatório.']) @pytest.mark.django_db(transaction=False) diff --git a/materia/urls.py b/materia/urls.py index 00c5dbf53..4eaae5bea 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -3,11 +3,10 @@ from django.conf.urls import include, url from materia.views import (AcompanhamentoConfirmarView, AcompanhamentoExcluirView, AcompanhamentoMateriaView, AnexadaCrud, AutorCrud, - AutoriaEditView, AutoriaView, - DespachoInicialEditView, DespachoInicialView, - DocumentoAcessorioEditView, DocumentoAcessorioView, - LegislacaoCitadaEditView, LegislacaoCitadaView, - MateriaLegislativaCrud, + AutoriaCrud, DespachoInicialEditView, + DespachoInicialView, DocumentoAcessorioEditView, + DocumentoAcessorioView, LegislacaoCitadaEditView, + LegislacaoCitadaView, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, NumeracaoEditView, NumeracaoView, OrgaoCrud, OrigemCrud, ProposicaoEditView, ProposicaoListView, @@ -25,7 +24,8 @@ app_name = AppConfig.name urlpatterns = [ url(r'^materia/', include(MateriaLegislativaCrud.get_urls() + - AnexadaCrud.get_urls())), + AnexadaCrud.get_urls() + + AutoriaCrud.get_urls())), url(r'^materia/(?P[0-9]+)/ta$', @@ -74,10 +74,6 @@ urlpatterns = [ TramitacaoView.as_view(), name='tramitacao_materia'), url(r'^materia/(?P\d+)/tramitacao/(?P\d+)/edit$', TramitacaoEditView.as_view(), name='tramitacao_edit'), - url(r'^materia/(?P\d+)/autoria$', - 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'), url(r'^materia/proposicao$', diff --git a/materia/views.py b/materia/views.py index fbc3a8540..c3075f346 100644 --- a/materia/views.py +++ b/materia/views.py @@ -22,10 +22,9 @@ from compilacao.views import IntegracaoTaView from crud.base import Crud, make_pagination from crud.masterdetail import MasterDetailCrud from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica -from parlamentares.models import Partido from sapl.utils import get_base_url -from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm, +from .forms import (AcompanhamentoMateriaForm, AnexadaForm, DespachoInicialForm, DocumentoAcessorioForm, LegislacaoCitadaForm, MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, RelatoriaForm, @@ -48,7 +47,6 @@ TipoFimRelatoriaCrud = Crud.build(TipoFimRelatoria, 'fim_relatoria') AnexadaCrud = Crud.build(Anexada, '') TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor') AutorCrud = Crud.build(Autor, 'autor') -AutoriaCrud = Crud.build(Autoria, '') DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '') NumeracaoCrud = Crud.build(Numeracao, '') OrgaoCrud = Crud.build(Orgao, 'orgao') @@ -59,6 +57,8 @@ StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao') UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao') TramitacaoCrud = Crud.build(Tramitacao, '') +AutoriaCrud = MasterDetailCrud.build(Autoria, 'materia', '') + class AnexadaCrud(MasterDetailCrud): model = Anexada @@ -958,87 +958,6 @@ class TramitacaoEditView(CreateView): return reverse('materia:tramitacao_materia', kwargs={'pk': pk}) -class AutoriaView(CreateView): - template_name = "materia/autoria.html" - form_class = AutoriaForm - form_valid_message = _('Autoria cadastrada com sucesso!') - model = Autoria - - def get_initial(self): - initial = super(AutoriaView, self).get_initial() - initial['materia_id'] = self.kwargs['pk'] - return initial - - def get_context_data(self, **kwargs): - context = super(AutoriaView, self).get_context_data(**kwargs) - - materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) - autorias = Autoria.objects.filter(materia=materia) - - context.update({'object': materia, - 'autorias': autorias}) - return context - - def form_valid(self, form): - materia = MateriaLegislativa.objects.get(id=form.data['materia_id']) - if 'salvar' in self.request.POST: - autoria = Autoria() - autoria.autor = Autor.objects.get(id=form.data['autor']) - autoria.materia = materia - autoria.primeiro_autor = form.data['primeiro_autor'] - - if form.data['partido']: - filiacao_autor = Partido.objects.get(id=form.data['partido']) - autoria.partido = filiacao_autor - - autoria.save() - - return redirect(self.get_success_url()) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:autoria', kwargs={'pk': pk}) - - -class AutoriaEditView(CreateView): - template_name = "materia/autoria_edit.html" - form_class = AutoriaForm - - def get(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - autoria = Autoria.objects.get(id=self.kwargs['id']) - form = AutoriaForm(instance=autoria, excluir=True) - - return self.render_to_response( - {'object': materia, - 'form': form}) - - def post(self, request, *args, **kwargs): - materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - form = self.get_form() - if form.is_valid(): - autoria = Autoria.objects.get(id=self.kwargs['id']) - if 'salvar' in request.POST: - autoria.autor = Autor.objects.get(id=form.data['autor']) - autoria.primeiro_autor = form.data['primeiro_autor'] - if 'partido' in form.data: - autoria.partido = Partido.objects.get( - id=form.data['partido']) - autoria.materia = materia - autoria.save() - elif 'Excluir' in request.POST: - autoria.delete() - return redirect(self.get_success_url()) - else: - return self.render_to_response( - {'object': materia, - 'form': form}) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('materia:autoria', kwargs={'pk': pk}) - - class ProposicaoListView(ListView): template_name = "materia/proposicao/proposicao_list.html" paginate_by = 10 diff --git a/parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py b/parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py new file mode 100644 index 000000000..be2e861fe --- /dev/null +++ b/parlamentares/migrations/0017_remove_parlamentar_unidade_deliberativa.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-04-28 13:20 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0016_auto_20160404_1409'), + ] + + operations = [ + migrations.RemoveField( + model_name='parlamentar', + name='unidade_deliberativa', + ), + ] diff --git a/templates/materia/autoria.html b/templates/materia/autoria.html deleted file mode 100644 index c60e5ddbf..000000000 --- a/templates/materia/autoria.html +++ /dev/null @@ -1,33 +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" %} - -
- Autorias - - - - - - - - - - {% for a in autorias %} - - - - - - - {% endfor %} -
Nome AutorTipo AutorPrimeiro AutorPartido Autor
{{a.autor}}{{a.autor.tipo.descricao}}{{a.primeiro_autor|yesno:"Sim,Não"}}{{a.partido.sigla|default_if_none:"Não Informado"}}
-
- {% crispy form %} -
-{% endblock %} diff --git a/templates/materia/autoria_edit.html b/templates/materia/autoria_edit.html deleted file mode 100644 index 2d5d01c2d..000000000 --- a/templates/materia/autoria_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 40fc1ca18..75958fb46 100644 --- a/templates/materia/subnav.yaml +++ b/templates/materia/subnav.yaml @@ -3,7 +3,7 @@ - title: Anexada url: anexada_list - title: Autoria - url: autoria + url: autoria_list - title: Despacho Inicial url: despacho_inicial - title: Documento Acessório