From 4824b65053f673b48cbfddc27d2f08e803c73faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Cantu=C3=A1ria?= Date: Tue, 13 Aug 2019 15:18:30 -0300 Subject: [PATCH] WIP Implementa modelagem de Membros de Bancadas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adiciona cadastro de membro Adiciona visualização de membros Adiciona atualização de membro WIP Adiciona deletação de membro Adiciona cadastro de cargo Adiciona visualização de cargos Adiciona atualização de cargo WIP Adiciona deletação de cargo --- sapl/parlamentares/forms.py | 254 ++++++++++++++---- .../migrations/0034_auto_20190604_1220.py | 136 ++++++++++ sapl/parlamentares/models.py | 160 +++++++---- .../parlamentares/tests/test_parlamentares.py | 41 +-- sapl/parlamentares/urls.py | 37 ++- sapl/parlamentares/views.py | 144 +++++++++- sapl/rules/map_rules.py | 2 + .../parlamentares/bancada_detail.html | 36 +++ .../cargomembrobancada_create.html | 1 + .../cargomembrobancada_delete.html | 3 + .../cargomembrobancada_detail.html | 81 ++++++ .../cargomembrobancada_update.html | 3 + sapl/templates/parlamentares/layouts.yaml | 7 +- .../parlamentares/membrobancada_create.html | 1 + .../parlamentares/membrobancada_delete.html | 3 + .../parlamentares/membrobancada_detail.html | 105 ++++++++ .../parlamentares/membrobancada_update.html | 3 + scripts/popula_bancada.py | 215 +++++++++++++++ 18 files changed, 1062 insertions(+), 170 deletions(-) create mode 100644 sapl/parlamentares/migrations/0034_auto_20190604_1220.py create mode 100644 sapl/templates/parlamentares/bancada_detail.html create mode 100644 sapl/templates/parlamentares/cargomembrobancada_create.html create mode 100644 sapl/templates/parlamentares/cargomembrobancada_delete.html create mode 100644 sapl/templates/parlamentares/cargomembrobancada_detail.html create mode 100644 sapl/templates/parlamentares/cargomembrobancada_update.html create mode 100644 sapl/templates/parlamentares/membrobancada_create.html create mode 100644 sapl/templates/parlamentares/membrobancada_delete.html create mode 100644 sapl/templates/parlamentares/membrobancada_detail.html create mode 100644 sapl/templates/parlamentares/membrobancada_update.html create mode 100644 scripts/popula_bancada.py diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 267bb15cb..e45d00654 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -23,8 +23,8 @@ from sapl.rules import SAPL_GROUP_VOTANTE import django_filters from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura, - Mandato, Parlamentar, Votante, Bloco, Bancada, CargoBloco, - CargoBlocoPartido) + Mandato, Parlamentar, Votante, Bloco, CargoBloco, CargoBlocoPartido, + Bancada, MembroBancada, CargoMembroBancada) class ImageThumbnailFileInput(ClearableFileInput): @@ -622,57 +622,6 @@ class BlocoForm(ModelForm): return bloco -class BancadaForm(ModelForm): - - class Meta: - model = Bancada - fields = ['legislatura', 'nome', 'partido', 'data_criacao', - 'data_extincao', 'descricao'] - - def clean(self): - super(BancadaForm, self).clean() - - if not self.is_valid(): - return self.cleaned_data - - data = self.cleaned_data - - legislatura = data['legislatura'] - - data_criacao = data['data_criacao'] - if data_criacao: - if (data_criacao < legislatura.data_inicio or - data_criacao > legislatura.data_fim): - raise ValidationError(_("Data de criação da bancada fora do intervalo" - " de legislatura informada")) - - data_extincao = data['data_extincao'] - if data_extincao: - if (data_extincao < legislatura.data_inicio or - data_extincao > legislatura.data_fim): - raise ValidationError(_("Data fim da bancada fora do intervalo de" - " legislatura informada")) - - if self.cleaned_data['data_extincao']: - if (self.cleaned_data['data_extincao'] < - self.cleaned_data['data_criacao']): - msg = _('Data de extinção não pode ser menor que a de criação') - raise ValidationError(msg) - return self.cleaned_data - - @transaction.atomic - def save(self, commit=True): - bancada = super(BancadaForm, self).save(commit) - content_type = ContentType.objects.get_for_model(Bancada) - object_id = bancada.pk - tipo = TipoAutor.objects.get(content_type=content_type) - Autor.objects.create( - content_type=content_type, - object_id=object_id, - tipo=tipo, - nome=bancada.nome - ) - return bancada class CargoBlocoForm(ModelForm): class Meta: model = CargoBloco @@ -683,7 +632,7 @@ class CargoBlocoPartidoForm(ModelForm): class Meta: model = CargoBlocoPartido fields = ['cargo','parlamentar','data_inicio','data_fim'] - + def __init__(self, *args, **kwargs): super(CargoBlocoPartidoForm, self).__init__(*args, **kwargs) @@ -693,7 +642,7 @@ class CargoBlocoPartidoForm(ModelForm): partidos = self.bloco.partidos.all().values_list('id', flat=True) parlamentares_filiacao = Filiacao.objects.select_related('partido').filter(partido__in=partidos).values_list('parlamentar', flat=True) self.fields['parlamentar'].queryset = Parlamentar.objects.filter(id__in=parlamentares_filiacao) - + if self.instance and self.instance.pk: self.fields['parlamentar'].widget.attrs['disabled'] = 'disabled' self.fields['parlamentar'].required = False @@ -715,10 +664,10 @@ class CargoBlocoPartidoForm(ModelForm): vinculo.data_fim) and vinculo.cargo.unico and \ not(self.instance and self.instance.id == vinculo.id): raise ValidationError("Cargo unico já é utilizado nesse período.") - + if aux_data_fim <= cleaned_data['data_inicio']: raise ValidationError("Data Inicial deve ser anterior a data final.") - + if self.instance and self.instance.pk: self.cleaned_data['parlamentar'] = self.instance.parlamentar else: @@ -730,10 +679,197 @@ class CargoBlocoPartidoForm(ModelForm): cleaned_data['data_inicio'], aux_data_fim, mandato.legislatura.data_fim): - fora_de_mandato = False + fora_de_mandato = False if fora_de_mandato: raise ValidationError("Data de inicio e fim fora de periodo do mandato do parlamentar.") if self.instance.pk and (cleaned_data['parlamentar'].id != self.instance.parlamentar.id): raise ValidationError("Não é possivel alterar o parlamentar " + str(self.instance.parlamentar)) - + + +class BancadaForm(ModelForm): + + class Meta: + model = Bancada + fields = ['nome', 'descricao', 'ativo'] + + def clean(self): + super(BancadaForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + def save(self, commit=True): + bancada = super(BancadaForm, self).save(commit) + content_type = ContentType.objects.get_for_model(Bancada) + object_id = bancada.pk + tipo = TipoAutor.objects.get(content_type=content_type) + Autor.objects.create( + content_type=content_type, + object_id=object_id, + tipo=tipo, + nome=bancada.nome + ) + return bancada + + +class MembroBancadaForm(ModelForm): + class Meta: + model = MembroBancada + fields = '__all__' + + def __init__(self, *args, **kwargs): + self.bancada = kwargs.pop('bancada') + super().__init__(*args, **kwargs) + + self.fields['bancada'].choices = [(self.bancada.pk, self.bancada.nome)] + + if not self.instance.pk: + action_label = 'Adicionar Membro' + else: + self.fields['parlamentar'].choices = [(self.instance.parlamentar.pk, self.instance.parlamentar)] + self.fields['legislatura'].initial = (self.instance.legislatura.pk, self.instance.legislatura) + self.fields['data_inicio'].initial = self.instance.data_inicio + self.fields['data_fim'].initial = self.instance.data_fim + action_label = 'Atualizar Membro' + + row = to_row([ + ('parlamentar', 6), + ('bancada', 4), + ('legislatura', 4), + ('data_inicio', 3), + ('data_fim', 3), + ]) + + self.helper = SaplFormHelper() + self.helper.layout = Layout( + Fieldset( + _(action_label), + row, + form_actions(label=_(action_label)) + ) + ) + + def clean(self): + data = super().clean() + + if not self.is_valid(): + return data + + data_inicio_legislatura = data['legislatura'].data_inicio + data_fim_legislatura = data['legislatura'].data_fim + data_inicio = data['data_inicio'] + data_fim = data['data_fim'] + + if data_fim and data_inicio > data_fim: + raise ValidationError(_('A data início de membro deve ser anterior a data fim.')) + elif data_inicio_legislatura > data_inicio: + raise ValidationError(_('A data início de membro deve ser posterior a data início da legislatura.')) + elif data_fim and data_fim > data_fim_legislatura: + raise ValidationError(_('A data fim de membro deve ser anterior a data fim da legislatura.')) + + return data + + def save(self, commit=False): + data = super().save(commit) + + if not self.instance.pk: + membro, created = MembroBancada.objects.get_or_create( + parlamentar=data.parlamentar, + bancada=data.bancada, + data_inicio=data.data_inicio, + data_fim=data.data_fim, + legislatura=data.legislatura) + else: + membro = MembroBancada.objects.get(pk=self.instance.pk) + membro.data_inicio = data.data_inicio + membro.data_fim = data.data_fim + membro.legislatura = data.legislatura + membro.save() + + return membro + + +class CargoMembroBancadaForm(ModelForm): + class Meta: + model = CargoMembroBancada + fields = '__all__' + + data_inicio_membro = forms.DateField( + label='Data Início de Membro', + required=False, + disabled=True, ) + + data_fim_membro = forms.DateField( + label='Data Fim de Membro', + required=False, + disabled=True, ) + + def __init__(self, *args, **kwargs): + self.membro = kwargs.pop('membro') + super().__init__(*args, **kwargs) + + self.fields['membro'].choices = [(self.membro.pk, self.membro.parlamentar.nome_parlamentar)] + self.fields['data_inicio_membro'].initial = self.membro.data_inicio + self.fields['data_fim_membro'].initial = self.membro.data_fim + + if not self.instance.pk: + action_label = 'Adicionar Cargo' + else: + action_label = 'Atualizar Cargo' + + row = to_row([ + ('membro', 4), + ('data_inicio_membro', 3), + ('data_fim_membro', 3), + ('cargo', 4), + ('data_inicio', 3), + ('data_fim', 3), + ]) + + self.helper = SaplFormHelper() + self.helper.layout = Layout( + Fieldset( + _(action_label), + row, + form_actions(label=_(action_label)) + ) + ) + + def clean(self): + data = super().clean() + + if not self.is_valid(): + return data + + data_inicio_membro = self.membro.data_inicio + data_fim_membro = self.membro.data_fim + data_inicio = data['data_inicio'] + data_fim = data['data_fim'] + + if data_fim and data_inicio > data_fim: + raise ValidationError(_('A data início no cargo deve ser anterior a data fim.')) + elif data_inicio_membro > data_inicio: + raise ValidationError(_('A data início no cargo deve ser posterior a data início de membro.')) + elif data_fim and data_fim_membro and data_fim > data_fim_membro: + raise ValidationError(_('A data fim no cargo deve ser anterior a data fim de membro.')) + + return data + + def save(self, commit=False): + data = super().save(commit) + + if not self.instance.pk: + cargo, created = CargoMembroBancada.objects.get_or_create( + membro=data.membro, + cargo=data.cargo, + data_inicio=data.data_inicio, + data_fim=data.data_fim) + else: + cargo = CargoMembroBancada.objects.get(pk=self.instance.pk) + cargo.cargo = data.cargo + cargo.data_inicio = data.data_inicio + cargo.data_fim = data.data_fim + cargo.save() + + return cargo diff --git a/sapl/parlamentares/migrations/0034_auto_20190604_1220.py b/sapl/parlamentares/migrations/0034_auto_20190604_1220.py new file mode 100644 index 000000000..c81d426e2 --- /dev/null +++ b/sapl/parlamentares/migrations/0034_auto_20190604_1220.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-06-04 15:20 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('parlamentares', '0033_auto_20190712_1132'), + ] + + operations = [ + migrations.CreateModel( + name='CargoMembroBancada', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data_inicio', models.DateField(verbose_name='Data Início do Membro no Cargo')), + ('data_fim', models.DateField(blank=True, null=True, verbose_name='Data Fim do Membro no Cargo')), + ], + options={ + 'verbose_name': 'Cargo Membro Bancada Parlamentar', + 'verbose_name_plural': 'Cargos Membros Bancada Parlamentar', + 'ordering': ('-data_inicio',), + }, + ), + migrations.CreateModel( + name='MembroBancada', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data_inicio', models.DateField(verbose_name='Data Início de Membro')), + ('data_fim', models.DateField(blank=True, null=True, verbose_name='Data Fim de Membro')), + ], + options={ + 'verbose_name': 'Membro Bancada Parlamentar', + 'verbose_name_plural': 'Membros Bancada Parlamentar', + 'ordering': ('parlamentar', '-data_inicio',), + }, + ), + migrations.AlterModelOptions( + name='bancada', + options={'ordering': ('nome',), 'verbose_name': 'Bancada Parlamentar', + 'verbose_name_plural': 'Bancadas Parlamentares'}, + ), + migrations.AlterModelOptions( + name='cargobancada', + options={'ordering': ('nome_cargo',), 'verbose_name': 'Cargo Bancada Parlamentar', + 'verbose_name_plural': 'Cargos Bancada Parlamentar'}, + ), + migrations.RemoveField( + model_name='bancada', + name='data_criacao', + ), + migrations.RemoveField( + model_name='bancada', + name='data_extincao', + ), + migrations.RemoveField( + model_name='bancada', + name='legislatura', + ), + migrations.RemoveField( + model_name='bancada', + name='partido', + ), + migrations.RemoveField( + model_name='cargobancada', + name='cargo_unico', + ), + migrations.AddField( + model_name='bancada', + name='ativo', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], db_index=True, default=True, + verbose_name='Bancada Parlamentar ativa?'), + ), + migrations.AddField( + model_name='cargobancada', + name='descricao', + field=models.TextField(blank=True, verbose_name='Descrição'), + ), + migrations.AlterField( + model_name='bancada', + name='nome', + field=models.CharField(max_length=30, verbose_name='Nome da Bancada Parlamentar'), + ), + migrations.AlterField( + model_name='cargobancada', + name='nome_cargo', + field=models.CharField(max_length=30, verbose_name='Nome do Cargo'), + ), + migrations.AlterModelTable( + name='cargobancada', + table=None, + ), + migrations.AddField( + model_name='membrobancada', + name='bancada', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Bancada', + verbose_name='Bancada Parlamentar'), + ), + migrations.AddField( + model_name='membrobancada', + name='legislatura', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Legislatura', + verbose_name='Legislatura do Membro'), + ), + migrations.AddField( + model_name='membrobancada', + name='parlamentar', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Parlamentar', + verbose_name='Parlamentar'), + ), + migrations.AddField( + model_name='cargomembrobancada', + name='cargo', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.CargoBancada', + verbose_name='Cargo do Membro'), + ), + migrations.AddField( + model_name='cargomembrobancada', + name='membro', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.MembroBancada', + verbose_name='Membro no Cargo'), + ), + migrations.AlterModelOptions( + name='cargobancada', + options={'ordering': ('nome',), 'verbose_name': 'Cargo Bancada Parlamentar', + 'verbose_name_plural': 'Cargos Bancada Parlamentar'}, + ), + migrations.RenameField( + model_name='cargobancada', + old_name='nome_cargo', + new_name='nome', + ), + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index eeab386ee..ebbed6946 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -659,41 +659,6 @@ class Bloco(models.Model): return self.nome -@reversion.register() -class Bancada(models.Model): - legislatura = models.ForeignKey(Legislatura, - on_delete=models.PROTECT, - verbose_name=_('Legislatura')) - nome = models.CharField( - max_length=80, - verbose_name=_('Nome da Bancada')) - partido = models.ForeignKey(Partido, - blank=True, - null=True, - on_delete=models.PROTECT, - verbose_name=_('Partido')) - data_criacao = models.DateField(blank=False, null=True, - verbose_name=_('Data Criação')) - data_extincao = models.DateField(blank=True, null=True, - verbose_name=_('Data Extinção')) - descricao = models.TextField(blank=True, verbose_name=_('Descrição')) - - # campo conceitual de reversão genérica para o model Autor que dá a - # o meio possível de localização de tipos de autores. - autor = SaplGenericRelation(Autor, related_query_name='bancada_set', - fields_search=( - ('nome', '__icontains'), - ('descricao', '__icontains'), - ('partido__sigla', '__icontains'), - ('partido__nome', '__icontains'), - )) - - class Meta: - db_table = 'parlamentares_bancada' - verbose_name = _('Bancada Parlamentar') - verbose_name_plural = _('Bancadas Parlamentares') - ordering = ('-legislatura__numero', ) - class CargoBloco(models.Model): class Meta: verbose_name = _('Cargo de Bloco') @@ -710,24 +675,6 @@ class CargoBloco(models.Model): return self.nome -@reversion.register() -class CargoBancada(models.Model): - nome_cargo = models.CharField(max_length=80, - verbose_name=_('Cargo de Bancada')) - - cargo_unico = models.BooleanField(default=False, - choices=YES_NO_CHOICES, - verbose_name=_('Cargo Único ?')) - - class Meta: - db_table = 'parlamentares_cargobancada' - verbose_name = _('Cargo de Bancada') - verbose_name_plural = _('Cargos de Bancada') - - def __str__(self): - return self.nome_cargo - - class CargoBlocoPartido(models.Model): class Meta: verbose_name = _('Vinculo bloco parlamentar') @@ -748,3 +695,110 @@ class CargoBlocoPartido(models.Model): data_inicio = models.DateField(verbose_name=_('Data Início')) data_fim = models.DateField(blank=True, null=True, verbose_name=_('Data Fim')) + + +class Bancada(models.Model): + nome = models.CharField( + max_length=30, + verbose_name=_('Nome da Bancada Parlamentar')) + descricao = models.TextField( + blank=True, + verbose_name=_('Descrição')) + ativo = models.BooleanField( + db_index=True, + default=True, + choices=YES_NO_CHOICES, + verbose_name=_('Bancada Parlamentar ativa?')) + + # campo conceitual de reversão genérica para o model Autor que dá a + # o meio possível de localização de tipos de autores. + + autor = SaplGenericRelation( + Autor, + related_query_name='bancada_set', + fields_search=( + ('nome', '__icontains'), + ('descricao', '__icontains'), + ('partido__sigla', '__icontains'), + ('partido__nome', '__icontains'),) + ) + + class Meta: + db_table = 'parlamentares_bancada' + verbose_name = _('Bancada Parlamentar') + verbose_name_plural = _('Bancadas Parlamentares') + ordering = ('nome', ) + + def __str__(self): + return self.nome + + +class MembroBancada(models.Model): + parlamentar = models.ForeignKey( + Parlamentar, + on_delete=models.CASCADE, + verbose_name=_('Parlamentar')) + bancada = models.ForeignKey( + Bancada, + on_delete=models.CASCADE, + verbose_name=_('Bancada Parlamentar')) + data_inicio = models.DateField( + verbose_name=_('Data Início de Membro')) + data_fim = models.DateField( + verbose_name=_('Data Fim de Membro'), + blank=True, + null=True) + legislatura = models.ForeignKey( + Legislatura, + on_delete=models.CASCADE, + verbose_name=_('Legislatura do Membro')) + + class Meta: + verbose_name = _('Membro Bancada Parlamentar') + verbose_name_plural = _('Membros Bancada Parlamentar') + ordering = ('parlamentar', '-data_inicio', ) + + def __str__(self): + return '{} - {}'.format(self.parlamentar, self.bancada) + + +class CargoBancada(models.Model): + nome = models.CharField( + max_length=30, + verbose_name=_('Nome do Cargo')) + descricao = models.TextField( + blank=True, + verbose_name=_('Descrição')) + + class Meta: + verbose_name = _('Cargo Bancada Parlamentar') + verbose_name_plural = _('Cargos Bancada Parlamentar') + ordering = ('nome', ) + + def __str__(self): + return self.nome + + +class CargoMembroBancada(models.Model): + cargo = models.ForeignKey( + CargoBancada, + on_delete=models.CASCADE, + verbose_name=_('Cargo do Membro')) + membro = models.ForeignKey( + MembroBancada, + on_delete=models.CASCADE, + verbose_name=_('Membro no Cargo')) + data_inicio = models.DateField( + verbose_name=_('Data Início do Membro no Cargo')) + data_fim = models.DateField( + verbose_name=_('Data Fim do Membro no Cargo'), + blank=True, + null=True) + + class Meta: + verbose_name = _('Cargo Membro Bancada Parlamentar') + verbose_name_plural = _('Cargos Membros Bancada Parlamentar') + ordering = ('-data_inicio', ) + + def __str__(self): + return '{} - {}'.format(self.cargo, self.membro) diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index 92fdbff54..1f308f54a 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -362,49 +362,16 @@ def test_valida_campos_obrigatorios_bancada_form(): errors = form.errors - assert errors['legislatura'] == [_('Este campo é obrigatório.')] assert errors['nome'] == [_('Este campo é obrigatório.')] - assert errors['data_criacao'] == [_('Este campo é obrigatório.')] - - assert len(errors) == 3 - -def data(valor): - return datetime.strptime(valor, '%Y-%m-%d').date() + assert len(errors) == 1 @pytest.mark.django_db(transaction=False) def test_bancada_form_valido(): - legislatura = mommy.make(Legislatura, - data_inicio=data('2017-11-10'), - data_fim=data('2017-12-31'), - ) - partido = mommy.make(Partido) - - form = forms.BancadaForm(data={'legislatura': str(legislatura.pk), - 'nome': 'Nome da Bancada', - 'partido': str(partido.pk), - 'data_criacao': '10/11/2017', - 'data_extincao': '10/12/2017', - 'descricao': 'teste' + form = forms.BancadaForm(data={'nome': 'Nome da Bancada', + 'descricao': 'teste', + 'ativo': True }) assert form.is_valid() - - -@pytest.mark.django_db(transaction=False) -def test_bancada_form_datas_invalidas(): - legislatura = mommy.make(Legislatura, - data_inicio=data('2017-11-10'), - data_fim=data('2017-12-31'), - ) - partido = mommy.make(Partido) - - form = forms.BancadaForm(data={'legislatura': str(legislatura.pk), - 'nome': 'Nome da Bancada', - 'partido': str(partido.pk), - 'data_criacao': '2016-11-01', - 'data_extincao': '2016-10-01', - 'descricao': 'teste' - }) - assert not form.is_valid() diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index de0007239..0862378ab 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -22,19 +22,24 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, lista_parlamentares, parlamentares_filiados, BlocoCrud, CargoBlocoCrud, - PesquisarParlamentarView, + PesquisarParlamentarView, VincularParlamentarView, deleta_historico_partido, edita_vinculo_parlamentar_bloco, deleta_vinculo_parlamentar_bloco, vincula_parlamentar_ao_bloco, - get_sessoes_legislatura) + get_sessoes_legislatura, + MembroBancadaCreate, MembroBancadaDetail, + MembroBancadaUpdate, MembroBancadaDelete, + CargoMembroBancadaCreate, CargoMembroBancadaDetail, + CargoMembroBancadaUpdate, CargoMembroBancadaDelete) from .apps import AppConfig app_name = AppConfig.name + urlpatterns = [ url(r'^parlamentar/', include( ParlamentarCrud.get_urls() + DependenteCrud.get_urls() + @@ -78,7 +83,33 @@ urlpatterns = [ edita_vinculo_parlamentar_bloco,name='edita-vinculo-parlamentar-bloco'), url(r'^sistema/deleta-vinculo-parlamentar-bloco/(?P\d+)/', deleta_vinculo_parlamentar_bloco,name='deleta-vinculo-parlamentar-bloco'), - + + url(r'^sistema/bancada/(?P\d+)/membro/create/$', + MembroBancadaCreate.as_view(), + name='membrobancada_create'), + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/$', + MembroBancadaDetail.as_view(), + name='membrobancada_detail'), + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/update/$', + MembroBancadaUpdate.as_view(), + name='membrobancada_update'), + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/delete/$', + MembroBancadaDelete.as_view(), + name='membrobancada_delete'), + + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/cargo/create/$', + CargoMembroBancadaCreate.as_view(), + name='cargomembrobancada_create'), + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/cargo/(?P\d+)/$', + CargoMembroBancadaDetail.as_view(), + name='cargomembrobancada_detail'), + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/cargo/(?P\d+)/update/$', + CargoMembroBancadaUpdate.as_view(), + name='cargomembrobancada_update'), + url(r'^sistema/bancada/(?P\d+)/membro/(?P\d+)/cargo/(?P\d+)/delete/$', + CargoMembroBancadaDelete.as_view(), + name='cargomembrobancada_delete'), + url(r'^sistema/frente/', include(FrenteCrud.get_urls())), url(r'^sistema/frente/atualiza-lista-parlamentares', diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 6cd9a572f..aab151f0f 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1,6 +1,6 @@ -from datetime import datetime import json import logging +from datetime import datetime from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin @@ -17,12 +17,11 @@ from django.utils import timezone from django.utils.datastructures import MultiValueDictKeyError from django.utils.translation import ugettext_lazy as _ from django.views.decorators.clickjacking import xframe_options_exempt -from django.views.generic import FormView -from django.views.generic.edit import UpdateView +from django.views.generic import FormView, DetailView +from django.views.generic.edit import UpdateView, CreateView, DeleteView from django_filters.views import FilterView from image_cropping.utils import get_backend - from sapl.base.forms import SessaoLegislativaForm, PartidoForm, PartidoUpdateForm from sapl.base.models import Autor from sapl.comissoes.models import Participacao @@ -32,15 +31,13 @@ from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, from sapl.materia.models import Autoria, Proposicao, Relatoria from sapl.parlamentares.apps import AppConfig from sapl.utils import (parlamentares_ativos, show_results_filter_set) - - from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, - ParlamentarCreateForm, ParlamentarForm, VotanteForm, + ParlamentarCreateForm, ParlamentarForm, VotanteForm, ParlamentarFilterSet, VincularParlamentarForm, BlocoForm, CargoBlocoForm, CargoBlocoPartidoForm, - BancadaForm) - -from .models import (Bancada, CargoBancada, CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, + BancadaForm, MembroBancadaForm, CargoMembroBancadaForm) + +from .models import (Bancada, MembroBancada, CargoMembroBancada, CargoBancada, CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, TipoAfastamento, TipoDependente, Votante, @@ -121,6 +118,125 @@ class BancadaCrud(CrudAux): def get_success_url(self): return reverse('sapl.parlamentares:bancada_list') + class DetailView(CrudAux.DetailView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + membros = [] + for membro in Bancada.objects.get(pk=self.kwargs['pk']).membrobancada_set.all(): + membros.append({ + 'pk': membro.pk, + 'nome': membro.parlamentar.nome_parlamentar, + 'ativo': 'Não' if membro.data_fim else 'Sim', + }) + + context.update({ + 'qntd': len(membros), + 'membros': membros, + 'bancada_pk': self.kwargs['pk'], + }) + + return context + + +class MembroBancadaCreate(CreateView): + template_name = 'parlamentares/membrobancada_create.html' + form_class = MembroBancadaForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs.update({'bancada': Bancada.objects.get(pk=self.kwargs['pk'])}) + return kwargs + + def get_success_url(self): + return reverse_lazy('sapl.parlamentares:bancada_detail', + kwargs={'pk': self.kwargs['pk']}) + + +class MembroBancadaDetail(DetailView): + model = MembroBancada + template_name = 'parlamentares/membrobancada_detail.html' + form_class = MembroBancadaForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + cargos = CargoMembroBancada.objects.filter(membro__pk=self.kwargs['pk']) + context.update({ + 'qntd': len(cargos), + 'cargos': cargos, + }) + return context + + +class MembroBancadaUpdate(UpdateView): + model = MembroBancada + template_name = 'parlamentares/membrobancada_update.html' + form_class = MembroBancadaForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs.update({'bancada': Bancada.objects.get(pk=self.kwargs['bancada_pk'])}) + return kwargs + + def get_success_url(self): + return reverse_lazy('sapl.parlamentares:membrobancada_detail', + kwargs={'bancada_pk': self.kwargs['bancada_pk'], 'pk': self.kwargs['pk']}) + + +class MembroBancadaDelete(DeleteView): + model = MembroBancada + template_name = 'parlamentares/membrobancada_delete.html' + form_class = MembroBancadaForm + + def get_success_url(self): + return reverse_lazy('sapl.parlamentares:bancada_detail', + kwargs={'pk': self.kwargs['pk']}) + + +class CargoMembroBancadaCreate(CreateView): + template_name = 'parlamentares/cargomembrobancada_create.html' + form_class = CargoMembroBancadaForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs.update({'membro': MembroBancada.objects.get(pk=self.kwargs['pk'])}) + return kwargs + + def get_success_url(self): + return reverse_lazy('sapl.parlamentares:membrobancada_detail', + kwargs={'bancada_pk': self.kwargs['bancada_pk'], 'pk': self.kwargs['pk']}) + + +class CargoMembroBancadaDetail(DetailView): + model = CargoMembroBancada + template_name = 'parlamentares/cargomembrobancada_detail.html' + form_class = CargoMembroBancadaForm + + +class CargoMembroBancadaUpdate(UpdateView): + model = CargoMembroBancada + template_name = 'parlamentares/cargomembrobancada_update.html' + form_class = CargoMembroBancadaForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs.update({'membro': MembroBancada.objects.get(pk=self.kwargs['membro_pk'])}) + return kwargs + + def get_success_url(self): + return reverse_lazy('sapl.parlamentares:cargomembrobancada_detail', + kwargs={'bancada_pk': self.kwargs['bancada_pk'], 'membro_pk': self.kwargs['pk'], + 'pk': self.kwargs['pk']}) + + +class CargoMembroBancadaDelete(DeleteView): + model = CargoMembroBancada + template_name = 'parlamentares/cargomembrobancada_delete.html' + form_class = CargoMembroBancadaForm + + def get_success_url(self): + return reverse_lazy('sapl.parlamentares:membrobancada_detail', + kwargs={'bancada_pk': self.kwargs['bancada_pk'], 'pk': self.kwargs['pk']}) + class FrenteList(MasterDetailCrud): model = Frente @@ -1180,7 +1296,7 @@ def deleta_historico_partido(request, pk): historico = HistoricoPartido.objects.get(pk=pk) pk_partido = historico.partido.pk historico.delete() - + return HttpResponseRedirect( reverse( 'sapl.parlamentares:partido_detail', @@ -1235,11 +1351,11 @@ class BlocoCrud(CrudAux): context['vinculados'] = CargoBlocoPartido.objects.filter(bloco=self.object) return context - - + + class CargoBlocoCrud(CrudAux): model = CargoBloco - + class CreateView(CrudAux.CreateView): form_class = CargoBlocoForm diff --git a/sapl/rules/map_rules.py b/sapl/rules/map_rules.py index eb0be21b8..7197ea8b0 100644 --- a/sapl/rules/map_rules.py +++ b/sapl/rules/map_rules.py @@ -283,7 +283,9 @@ rules_group_geral = { (parlamentares.Frente, __base__, __perms_publicas__), (parlamentares.Votante, __base__, __perms_publicas__), (parlamentares.Bancada, __base__, __perms_publicas__), + (parlamentares.MembroBancada, __base__, __perms_publicas__), (parlamentares.CargoBancada, __base__, __perms_publicas__), + (parlamentares.CargoMembroBancada, __base__, __perms_publicas__), (parlamentares.Bloco, __base__, __perms_publicas__), (parlamentares.CargoBloco, __base__, __perms_publicas__), (parlamentares.CargoBlocoPartido, __base__, __perms_publicas__), diff --git a/sapl/templates/parlamentares/bancada_detail.html b/sapl/templates/parlamentares/bancada_detail.html new file mode 100644 index 000000000..912ac98e6 --- /dev/null +++ b/sapl/templates/parlamentares/bancada_detail.html @@ -0,0 +1,36 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load common_tags %} + +{% block extra_actions %} + +{% endblock extra_actions %} + +{% block table_content %} +
+

Membros

+ {% if membros %} +
Total de Membros: {{ qntd }}
+ + + + + + + + + {% for membro in membros %} + + + + + {% endfor %} + + + {% else %} +

Nenhum membro encontrado.

+ {% endif %} +
+{% endblock table_content %} diff --git a/sapl/templates/parlamentares/cargomembrobancada_create.html b/sapl/templates/parlamentares/cargomembrobancada_create.html new file mode 100644 index 000000000..ab9f19520 --- /dev/null +++ b/sapl/templates/parlamentares/cargomembrobancada_create.html @@ -0,0 +1 @@ +{% extends "crud/form.html" %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/cargomembrobancada_delete.html b/sapl/templates/parlamentares/cargomembrobancada_delete.html new file mode 100644 index 000000000..ca4dd562d --- /dev/null +++ b/sapl/templates/parlamentares/cargomembrobancada_delete.html @@ -0,0 +1,3 @@ +{% extends "crud/confirm_delete.html" %} + +{% block sections_nav %}{% endblock sections_nav %} diff --git a/sapl/templates/parlamentares/cargomembrobancada_detail.html b/sapl/templates/parlamentares/cargomembrobancada_detail.html new file mode 100644 index 000000000..c50958518 --- /dev/null +++ b/sapl/templates/parlamentares/cargomembrobancada_detail.html @@ -0,0 +1,81 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load common_tags %} + +{% block sections_nav %}{% endblock sections_nav %} + +{% block title %}

Cargo {{ object.cargo }}

{% endblock title %} + +{% block extra_actions %} +
+ Voltar +
+{% endblock extra_actions %} + +{% block editions %} +
+ Editar + Excluir +
+{% endblock editions %} + +{% block detail_content %} +

Cargo

+
+
+

Nome do Membro da Bancada Parlamentar

+
+
+

Data Início de Membro

+
+
+

Data Fim de Membro

+
+
+
+ +
+
+ {{ object.membro.data_inicio }} +
+
+
+
+ {% if object.membro.data_fim %}{{ object.membro.data_fim }}{% else %}-{% endif %} +
+
+
+
+
+

Nome do Cargo da Bancada Parlamentar

+
+
+

Data Início no Cargo

+
+
+

Data Fim no Cargo

+
+
+
+ +
+
+ {{ object.data_inicio }} +
+
+
+
+ {% if object.data_fim %}{{ object.data_fim }}{% else %}-{% endif %} +
+
+
+{% endblock detail_content %} diff --git a/sapl/templates/parlamentares/cargomembrobancada_update.html b/sapl/templates/parlamentares/cargomembrobancada_update.html new file mode 100644 index 000000000..a658a80a6 --- /dev/null +++ b/sapl/templates/parlamentares/cargomembrobancada_update.html @@ -0,0 +1,3 @@ +{% extends "crud/form.html" %} + +{% block sections_nav %}{% endblock sections_nav %} diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 4a717e559..b28cea12c 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -118,14 +118,13 @@ ComposicaoColigacao: Bancada: {% trans 'Bancada' %}: - - legislatura - - nome partido - - data_criacao data_extincao + - nome:9 ativo - descricao CargoBancada: {% trans 'Cargo de Bancada' %}: - - nome_cargo:8 cargo_unico + - nome + - descricao Frente: {% trans 'Frente' %}: diff --git a/sapl/templates/parlamentares/membrobancada_create.html b/sapl/templates/parlamentares/membrobancada_create.html new file mode 100644 index 000000000..ab9f19520 --- /dev/null +++ b/sapl/templates/parlamentares/membrobancada_create.html @@ -0,0 +1 @@ +{% extends "crud/form.html" %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/membrobancada_delete.html b/sapl/templates/parlamentares/membrobancada_delete.html new file mode 100644 index 000000000..ca4dd562d --- /dev/null +++ b/sapl/templates/parlamentares/membrobancada_delete.html @@ -0,0 +1,3 @@ +{% extends "crud/confirm_delete.html" %} + +{% block sections_nav %}{% endblock sections_nav %} diff --git a/sapl/templates/parlamentares/membrobancada_detail.html b/sapl/templates/parlamentares/membrobancada_detail.html new file mode 100644 index 000000000..fa031aaf6 --- /dev/null +++ b/sapl/templates/parlamentares/membrobancada_detail.html @@ -0,0 +1,105 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load common_tags %} + +{% block sections_nav %}{% endblock sections_nav %} + +{% block title %}

Membro {{ object.parlamentar }}

{% endblock title %} + +{% block extra_actions %} + +{% endblock extra_actions %} +{% block editions %} +
+ Editar + Excluir +
+{% endblock editions %} + +{% block detail_content %} +

Membro

+
+
+

Nome do Membro da Bancada Parlamentar

+
+
+

Bancada Parlamentar

+
+
+ +
+
+

Legislatura

+
+
+

Data Início de Membro

+
+
+

Data Fim de Membro

+
+
+
+ +
+
+ {{ object.data_inicio }} +
+
+
+
+ {% if object.data_fim %}{{ object.data_fim }}{% else %}-{% endif %} +
+
+
+{% endblock detail_content %} + +{% block table_content %} +
+

Cargos

+ {% if cargos %} +
Total de Cargos: {{ qntd }}
+ + + + + + + + + + {% for cargo in cargos %} + + + + + + {% endfor %} + + + {% else %} +

Nenhum cargo encontrado.

+ {% endif %} +
+{% endblock table_content %} diff --git a/sapl/templates/parlamentares/membrobancada_update.html b/sapl/templates/parlamentares/membrobancada_update.html new file mode 100644 index 000000000..a658a80a6 --- /dev/null +++ b/sapl/templates/parlamentares/membrobancada_update.html @@ -0,0 +1,3 @@ +{% extends "crud/form.html" %} + +{% block sections_nav %}{% endblock sections_nav %} diff --git a/scripts/popula_bancada.py b/scripts/popula_bancada.py new file mode 100644 index 000000000..af06d7668 --- /dev/null +++ b/scripts/popula_bancada.py @@ -0,0 +1,215 @@ +from datetime import datetime + +from sapl.parlamentares.models import Bancada, MembroBancada, Parlamentar, Legislatura, CargoBancada, CargoMembroBancada + + +def main(): + popula_bancada() + popula_membro_bancada() + popula_cargo_bancada() + popula_cargo_membro_bancada() + + +def popula_bancada(): + Bancada.objects.create( + nome='Bancada 1', + descricao='Descrição da Bancada 1.', + ativo=True) + Bancada.objects.create( + nome='Bancada 2', + descricao='Descrição da Bancada 2.', + ativo=False) + Bancada.objects.create( + nome='Bancada 3', + descricao='Descrição da Bancada 3.', + ativo=True) + + +def popula_membro_bancada(): + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[0], + bancada=Bancada.objects.get(nome='Bancada 1'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[1], + bancada=Bancada.objects.get(nome='Bancada 1'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[2], + bancada=Bancada.objects.get(nome='Bancada 1'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[3], + bancada=Bancada.objects.get(nome='Bancada 1'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[4], + bancada=Bancada.objects.get(nome='Bancada 1'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[5], + bancada=Bancada.objects.get(nome='Bancada 2'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[6], + bancada=Bancada.objects.get(nome='Bancada 2'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[7], + bancada=Bancada.objects.get(nome='Bancada 2'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[8], + bancada=Bancada.objects.get(nome='Bancada 2'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[9], + bancada=Bancada.objects.get(nome='Bancada 2'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[10], + bancada=Bancada.objects.get(nome='Bancada 3'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[11], + bancada=Bancada.objects.get(nome='Bancada 3'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[12], + bancada=Bancada.objects.get(nome='Bancada 3'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[13], + bancada=Bancada.objects.get(nome='Bancada 3'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + MembroBancada.objects.create( + parlamentar=Parlamentar.objects.all()[14], + bancada=Bancada.objects.get(nome='Bancada 3'), + data_inicio='2018-1-1', + data_fim='2019-12-31', + legislatura=Legislatura.objects.first()) + + +def popula_cargo_bancada(): + CargoBancada.objects.create( + nome='Cargo 1', + descricao='Descrição do Cargo 1.') + CargoBancada.objects.create( + nome='Cargo 2', + descricao='Descrição do Cargo 2.') + CargoBancada.objects.create( + nome='Cargo 3', + descricao='Descrição do Cargo 3.') + + +def popula_cargo_membro_bancada(): + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[0]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[1]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[2]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[3]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[4]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[5]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[6]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[7]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[8]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[9]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[10]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[11]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 1'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[12]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 2'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[13]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + CargoMembroBancada.objects.create( + cargo=CargoBancada.objects.get(nome='Cargo 3'), + membro=MembroBancada.objects.get(parlamentar=Parlamentar.objects.all()[14]), + data_inicio='2018-1-30', + data_fim='2019-5-31') + + +if __name__ == '__main__': + main()