From 32ddaceba8998ee88b7b5148cd6efe9424113ca0 Mon Sep 17 00:00:00 2001 From: VictorFabreF Date: Wed, 7 Feb 2018 14:29:47 -0200 Subject: [PATCH] Fix #1694 --- sapl/comissoes/forms.py | 55 ++++++++++++++++++--------- sapl/comissoes/views.py | 24 +++++++----- sapl/templates/comissoes/layouts.yaml | 7 ++++ 3 files changed, 58 insertions(+), 28 deletions(-) diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index b195dc772..f0230d57d 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -9,23 +9,22 @@ from sapl.base.models import Autor, TipoAutor from sapl.comissoes.models import Participacao, Composicao, Comissao from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato - -class ParticipacaoForm(forms.ModelForm): +class ParticipacaoCreateForm(forms.ModelForm): parent_pk = forms.CharField(required=False) # widget=forms.HiddenInput()) class Meta: model = Participacao - # includes = ['parlamentar', 'cargo', 'titular', 'data_designacao', 'data_desligamento', 'data_'] - # exclude = [] exclude = ['composicao'] def __init__(self, user=None, **kwargs): - super(ParticipacaoForm, self).__init__(**kwargs) + super(ParticipacaoCreateForm, self).__init__(**kwargs) - import ipdb; ipdb.set_trace() - if self.instance.pk: - participantes = self.instance.composicao.participacao_set.all() + if self.instance: + comissao = kwargs['initial'] + comissao_pk = int(comissao['parent_pk']) + composicao = Composicao.objects.get(id=comissao_pk) + participantes = composicao.participacao_set.all() id_part = [p.parlamentar.id for p in participantes] else: id_part = [] @@ -34,12 +33,12 @@ class ParticipacaoForm(forms.ModelForm): parlamentares = Mandato.objects.filter(qs, parlamentar__ativo=True - ).prefetch_related('parlamentar'). \ - values_list('parlamentar', - flat=True).distinct() + ).prefetch_related('parlamentar').\ + values_list('parlamentar', + flat=True).distinct() - qs = Parlamentar.objects.filter(id__in=parlamentares).distinct(). \ - exclude(id__in=id_part) + qs = Parlamentar.objects.filter(id__in=parlamentares).distinct().\ + exclude(id__in=id_part) eligible = self.verifica() result = list(set(qs) & set(eligible)) if not cmp(result, eligible): # se igual a 0 significa que o qs e o eli são iguais! @@ -50,7 +49,7 @@ class ParticipacaoForm(forms.ModelForm): self.fields['parlamentar'].queryset = qs def create_participacao(self): - composicao = self.instance.composicao + composicao = Composicao.objects.get(id=self.initial['parent_pk']) data_inicio_comissao = composicao.periodo.data_inicio data_fim_comissao = composicao.periodo.data_fim q1 = Q(data_fim_mandato__isnull=False, @@ -63,13 +62,11 @@ class ParticipacaoForm(forms.ModelForm): return qs def clean(self): - super(ParticipacaoForm, self).clean() - - # if self.instance: + super(ParticipacaoCreateForm, self).clean() return self.cleaned_data def verifica(self): - composicao = self.instance.composicao + composicao = Composicao.objects.get(id=self.initial['parent_pk']) participantes = composicao.participacao_set.all() participantes_id = [p.parlamentar.id for p in participantes] parlamentares = Parlamentar.objects.all().exclude(id__in=participantes_id).order_by('nome_completo') @@ -93,6 +90,26 @@ class ParticipacaoForm(forms.ModelForm): return lista +class ParticipacaoEditForm(forms.ModelForm): + + parent_pk = forms.CharField(required=False) # widget=forms.HiddenInput()) + nome_parlamentar = forms.CharField(required=False, label='Parlamentar') + + class Meta: + model = Participacao + fields = ['nome_parlamentar', 'parlamentar', 'cargo', 'titular', 'data_designacao', 'data_desligamento', 'motivo_desligamento', 'observacao'] + widgets = { + 'parlamentar': forms.HiddenInput(), + } + + def __init__(self, user=None, **kwargs): + super(ParticipacaoEditForm, self).__init__(**kwargs) + self.initial['nome_parlamentar'] = Parlamentar.objects.filter(id=self.initial['parlamentar']).first().nome_parlamentar + self.fields['nome_parlamentar'].widget.attrs['disabled'] = 'disabled' + + + + class ComissaoForm(forms.ModelForm): class Meta: @@ -114,7 +131,7 @@ class ComissaoForm(forms.ModelForm): comissao = super(ComissaoForm, self).save(commit) content_type = ContentType.objects.get_for_model(Comissao) object_id = comissao.pk - tipo = TipoAutor.objects.get(descricao='Comissão') + tipo = TipoAutor.objects.get(descricao__icontains='Comiss') nome = comissao.sigla+' - '+comissao.nome Autor.objects.create( content_type=content_type, diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 1f286cec7..a6d327352 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -4,7 +4,7 @@ from django.db.models import F from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import ListView -from sapl.comissoes.forms import ParticipacaoForm +from sapl.comissoes.forms import ParticipacaoCreateForm, ParticipacaoEditForm from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud from sapl.materia.models import MateriaLegislativa, Tramitacao @@ -29,25 +29,31 @@ TipoComissaoCrud = CrudAux.build( class ParticipacaoCrud(MasterDetailCrud): model = Participacao - parent_field = 'composicao' + parent_field = 'composicao__comissao' public = [RP_DETAIL, ] ListView = None - # is_m2m = True link_return_to_parent_field = True class BaseMixin(MasterDetailCrud.BaseMixin): list_field_names = ['composicao', 'parlamentar', 'cargo'] class CreateView(MasterDetailCrud.CreateView): - form_class = ParticipacaoForm + form_class = ParticipacaoCreateForm - # def get_initial(self): - # initial = super().get_initial() - # initial['parent_pk'] = self.kwargs['pk'] - # return initial + def get_initial(self): + initial = super().get_initial() + initial['parent_pk'] = self.kwargs['pk'] + return initial class UpdateView(MasterDetailCrud.UpdateView): - form_class = ParticipacaoForm + layout_key = 'ParticipacaoEdit' + form_class = ParticipacaoEditForm + + class DeleteView(MasterDetailCrud.DeleteView): + def get_success_url(self): + + return '{}?pk={}'.format(reverse('sapl.comissoes:composicao_list', args=[self.object.composicao.comissao.pk]), self.object.composicao.pk) + class ComposicaoCrud(MasterDetailCrud): diff --git a/sapl/templates/comissoes/layouts.yaml b/sapl/templates/comissoes/layouts.yaml index bb4759211..b5e856b2e 100644 --- a/sapl/templates/comissoes/layouts.yaml +++ b/sapl/templates/comissoes/layouts.yaml @@ -36,3 +36,10 @@ Participacao: - data_designacao data_desligamento - motivo_desligamento - observacao + +ParticipacaoEdit: + {% trans 'Participação' %}: + - nome_parlamentar cargo titular + - data_designacao data_desligamento + - motivo_desligamento + - observacao \ No newline at end of file