diff --git a/materia/migrations/0014_autoria_partido.py b/materia/migrations/0014_autoria_partido.py new file mode 100644 index 000000000..fcdb5df70 --- /dev/null +++ b/materia/migrations/0014_autoria_partido.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0010_auto_20160107_1850'), + ('materia', '0013_remove_tramitacao_ultima'), + ] + + operations = [ + migrations.AddField( + model_name='autoria', + name='partido', + field=models.ForeignKey(null=True, to='parlamentares.Partido', blank=True), + ), + ] diff --git a/materia/models.py b/materia/models.py index 490616868..7c46f5322 100644 --- a/materia/models.py +++ b/materia/models.py @@ -219,6 +219,7 @@ class Autor(models.Model): 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')) diff --git a/materia/views.py b/materia/views.py index 48c887aab..ab808c4ce 100644 --- a/materia/views.py +++ b/materia/views.py @@ -21,7 +21,7 @@ import sapl from comissoes.models import Comissao, Composicao from compilacao.views import IntegracaoTaView from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica -from parlamentares.models import Parlamentar +from parlamentares.models import Parlamentar, Partido from sapl.crud import build_crud from sessao.models import AcompanharMateria @@ -1592,6 +1592,11 @@ class AutoriaForm(forms.Form): tipo_autor = forms.CharField() nome_autor = forms.CharField() primeiro_autor = forms.CharField() + partido_autor = forms.ModelChoiceField( + label='Partido (Autor)', + required=False, + queryset=Partido.objects.all(), + empty_label='Selecione') class AutoriaView(GenericView): @@ -1606,6 +1611,7 @@ class AutoriaView(GenericView): {'materialegislativa': materia, 'form': form, 'autorias': autorias, + 'partido_autor': Partido.objects.all(), 'tipo_autores': TipoAutor.objects.all(), 'autores': Autor.objects.all(), 'tipo_autor_id': TipoAutor.objects.first().id}) @@ -1624,23 +1630,29 @@ class AutoriaView(GenericView): autor = Autor.objects.get( id=int(form.data['nome_autor'])) + filiacao_autor = Partido.objects.get( + sigla=form.data['partido_autor']) + try: autoria = Autoria.objects.get( autor=autor, - materia=materia + materia=materia, + partido=filiacao_autor ) except ObjectDoesNotExist: - autoria = Autoria() autoria.autor = autor autoria.materia = materia + autoria.partido = filiacao_autor autoria.primeiro_autor = primeiro + autoria.save() return self.render_to_response( {'materialegislativa': materia, 'form': form, 'autorias': autorias, + 'partido_autor': Partido.objects.all(), 'tipo_autores': TipoAutor.objects.all(), 'autores': Autor.objects.all(), 'tipo_autor_id': int(form.data['tipo_autor'])}) @@ -1659,6 +1671,7 @@ class AutoriaView(GenericView): {'materialegislativa': materia, 'form': form, 'autorias': autorias, + 'partido_autor': Partido.objects.all(), 'tipo_autores': TipoAutor.objects.all(), 'autores': Autor.objects.all(), 'tipo_autor_id': int(form.data['tipo_autor'])}) @@ -1668,7 +1681,7 @@ class AutoriaView(GenericView): return reverse('autoria', kwargs={'pk': pk}) -class AutoriaEditView(GenericView): +class AutoriaEditView(GenericView, FormMixin): template_name = "materia/autoria_edit.html" def get(self, request, *args, **kwargs): @@ -1682,6 +1695,7 @@ class AutoriaEditView(GenericView): 'form': form, 'autorias': autorias, 'tipo_autores': TipoAutor.objects.all(), + 'partido': Partido.objects.all(), 'autores': Autor.objects.all(), 'tipo_autor_id': autor.tipo.id, 'autor_id': autor.id}) @@ -1691,7 +1705,7 @@ class AutoriaEditView(GenericView): autorias = Autoria.objects.filter(materia=materia) form = AutoriaForm(request.POST) - if 'salvar' in request.POST: + if form.is_valid(): if int(form.data['primeiro_autor']) == 1: primeiro = True else: @@ -1700,41 +1714,26 @@ class AutoriaEditView(GenericView): autor = Autor.objects.get( id=int(form.data['nome_autor'])) - try: - autoria = Autoria.objects.get( - autor=autor, - materia=materia - ) - except ObjectDoesNotExist: + filiacao_autor = Partido.objects.get( + sigla=form.data['partido']) - autoria = Autoria() - autoria.autor = autor - autoria.materia = materia - autoria.primeiro_autor = primeiro + autoria = Autoria.objects.get(materia=materia, autor__id=autor.id) + autoria.autor = autor + autoria.partido = filiacao_autor + autoria.materia = materia + autoria.primeiro_autor = primeiro + + if 'salvar' in request.POST: autoria.save() - return self.render_to_response( - {'materialegislativa': materia, - 'form': form, - 'autorias': autorias, - 'tipo_autores': TipoAutor.objects.all(), - 'autores': Autor.objects.all(), - 'tipo_autor_id': int(form.data['tipo_autor'])}) - else: - msg = 'Essa autoria já foi adicionada!' - messages.add_message(request, messages.INFO, msg) - return self.render_to_response( - {'materialegislativa': materia, - 'form': form, - 'autorias': autorias, - 'tipo_autores': TipoAutor.objects.all(), - 'autores': Autor.objects.all(), - 'tipo_autor_id': int(form.data['tipo_autor'])}) + return self.form_valid(form) + else: return self.render_to_response( {'materialegislativa': materia, 'form': form, 'autorias': autorias, + 'partido': Partido.objects.all(), 'tipo_autores': TipoAutor.objects.all(), 'autores': Autor.objects.all(), 'tipo_autor_id': int(form.data['tipo_autor'])}) @@ -1939,6 +1938,19 @@ class MateriaLegislativaPesquisaForm(forms.Form): widget=forms.Select( attrs={'class': 'selector'})) + tipo_autor = forms.ModelChoiceField( + label='Tipo Autor', + required=False, + queryset=TipoAutor.objects.all(), + empty_label='Selecione', + ) + + partido_autor = forms.ModelChoiceField( + label='Partido (Autor)', + required=False, + queryset=Partido.objects.all(), + empty_label='Selecione') + # TODO: Verificar se esses campos estão corretos # assunto? # -> usado 'ementa' em 'assunto' # localizacao atual? # @@ -1960,17 +1972,20 @@ class MateriaLegislativaPesquisaForm(forms.Form): [('autor', 6), ('relator', 6)]) row5 = sapl.layout.to_row( + [('tipo_autor', 6), + ('partido_autor', 6)]) + row6 = sapl.layout.to_row( [('localizacao', 6), ('situacao', 6)]) - row6 = sapl.layout.to_row( - [('tramitacao', 12)]) row7 = sapl.layout.to_row( + [('tramitacao', 12)]) + row8 = sapl.layout.to_row( [('assunto', 12)]) self.helper = FormHelper() self.helper.layout = Layout( Fieldset('Pesquisa Básica', - row1, row2, row3, row4, row5, row6, row7), + row1, row2, row3, row4, row5, row6, row7, row8), ButtonHolder( Submit('submit', 'Pesquisar', css_class='button primary') @@ -2080,6 +2095,12 @@ class MateriaLegislativaPesquisaView(FormMixin, GenericView): if request.POST['situacao']: kwargs['tramitacao__status'] = request.POST['situacao'] + if request.POST['tipo_autor']: + kwargs['autoria__autor__tipo'] = request.POST['tipo_autor'] + + if request.POST['partido_autor']: + kwargs['autoria__partido'] = request.POST['partido_autor'] + request.session['kwargs'] = kwargs return redirect('pesquisar_materia_list') @@ -2091,8 +2112,6 @@ class PesquisaMateriaListView(FormMixin, ListView): paginate_by = 10 def get_queryset(self): - # import ipdb; ipdb.set_trace() - kwargs = self.request.session['kwargs'] lista_materias = MateriaLegislativa.objects.filter(**kwargs) materias = [] diff --git a/templates/materia/autoria.html b/templates/materia/autoria.html index e8f483bc1..88bd14116 100644 --- a/templates/materia/autoria.html +++ b/templates/materia/autoria.html @@ -5,7 +5,7 @@ {% block detail_content %}