Browse Source

fixes #1685 (#1686)

* fixes #1685

* Ajusta teste de sessao

* HOT-FIX

* Automatiza criação de autor para comissão
pull/1696/head
VictorFabreF 7 years ago
committed by Edward
parent
commit
9e3ca5b508
  1. 38
      sapl/comissoes/forms.py
  2. 16
      sapl/comissoes/views.py
  3. 24
      sapl/materia/forms.py
  4. 9
      sapl/materia/views.py
  5. 26
      sapl/parlamentares/forms.py
  6. 26
      sapl/parlamentares/views.py
  7. 49
      sapl/sessao/forms.py
  8. 25
      sapl/sessao/migrations/0016_auto_20180131_1708.py
  9. 4
      sapl/sessao/models.py
  10. 3
      sapl/sessao/tests/test_sessao.py
  11. 24
      sapl/sessao/views.py

38
sapl/comissoes/forms.py

@ -1,7 +1,12 @@
from django.db.models import Q from django.db.models import Q
from django import forms from django import forms
from django.core.exceptions import ValidationError
from django.contrib.contenttypes.models import ContentType
from django.db import transaction
from django.utils.translation import ugettext_lazy as _
from sapl.comissoes.models import Participacao, Composicao from sapl.base.models import Autor, TipoAutor
from sapl.comissoes.models import Participacao, Composicao, Comissao
from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato
@ -89,3 +94,34 @@ class ParticipacaoForm(forms.ModelForm):
lista = list(set(lista)) lista = list(set(lista))
return lista return lista
class ComissaoForm(forms.ModelForm):
class Meta:
model = Comissao
fields = '__all__'
def clean(self):
super(ComissaoForm, self).clean()
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):
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')
nome = comissao.sigla+' - '+comissao.nome
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=nome
)
return comissao

16
sapl/comissoes/views.py

@ -8,6 +8,7 @@ from sapl.comissoes.forms import ParticipacaoForm
from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud
from sapl.materia.models import MateriaLegislativa, Tramitacao from sapl.materia.models import MateriaLegislativa, Tramitacao
from .forms import ComissaoForm
from .models import (CargoComissao, Comissao, Composicao, Participacao, from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao) Periodo, TipoComissao)
@ -100,18 +101,11 @@ class ComissaoCrud(Crud):
'data_criacao', 'data_extincao', 'ativa'] 'data_criacao', 'data_extincao', 'ativa']
ordering = '-ativa', 'sigla' ordering = '-ativa', 'sigla'
class ListView(Crud.ListView): class CreateView(Crud.CreateView):
form_class = ComissaoForm
@xframe_options_exempt
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
class DetailView(Crud.DetailView):
@xframe_options_exempt
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
def form_valid(self, form):
return super(Crud.CreateView, self).form_valid(form)
class MateriasTramitacaoListView(ListView): class MateriasTramitacaoListView(ListView):
template_name = "comissoes/materias_em_tramitacao.html" template_name = "comissoes/materias_em_tramitacao.html"

24
sapl/materia/forms.py

@ -31,7 +31,7 @@ from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column,
to_row) to_row)
from sapl.materia.models import (AssuntoMateria, MateriaAssunto, from sapl.materia.models import (AssuntoMateria, MateriaAssunto,
MateriaLegislativa, RegimeTramitacao, MateriaLegislativa, RegimeTramitacao,
TipoDocumento, TipoProposicao) TipoDocumento, TipoProposicao, Orgao)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
@ -77,6 +77,28 @@ class AdicionarVariasAutoriasFilterSet(django_filters.FilterSet):
) )
class OrgaoForm(ModelForm):
class Meta:
model = Orgao
fields = ['nome', 'sigla', 'unidade_deliberativa',
'endereco', 'telefone']
@transaction.atomic
def save(self, commit=True):
orgao = super(OrgaoForm, self).save(commit)
content_type = ContentType.objects.get_for_model(Orgao)
object_id = orgao.pk
tipo = TipoAutor.objects.get(descricao='Órgão')
nome = orgao.nome+' - '+orgao.sigla
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=nome
)
return orgao
class ReceberProposicaoForm(Form): class ReceberProposicaoForm(Form):
cod_hash = forms.CharField(label='Código do Documento', required=True) cod_hash = forms.CharField(label='Código do Documento', required=True)

9
sapl/materia/views.py

@ -38,7 +38,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm,
ConfirmarProposicaoForm, LegislacaoCitadaForm, ConfirmarProposicaoForm, LegislacaoCitadaForm,
ProposicaoForm, TipoProposicaoForm, ProposicaoForm, TipoProposicaoForm,
TramitacaoForm, TramitacaoUpdateForm, TramitacaoForm, TramitacaoUpdateForm,
DevolverProposicaoForm) DevolverProposicaoForm, OrgaoForm)
from sapl.norma.models import LegislacaoCitada from sapl.norma.models import LegislacaoCitada
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label, from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label,
@ -296,10 +296,13 @@ def recuperar_materia(request):
return response return response
OrgaoCrud = CrudAux.build(Orgao, 'orgao')
StatusTramitacaoCrud = CrudAux.build(StatusTramitacao, 'status_tramitacao') StatusTramitacaoCrud = CrudAux.build(StatusTramitacao, 'status_tramitacao')
class OrgaoCrud(Crud):
model = Orgao
class CreateView(Crud.CreateView):
form_class = OrgaoForm
class TipoProposicaoCrud(CrudAux): class TipoProposicaoCrud(CrudAux):
model = TipoProposicao model = TipoProposicao

26
sapl/parlamentares/forms.py

@ -5,6 +5,7 @@ from crispy_forms.layout import Fieldset, Layout
from django import forms from django import forms
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, User from django.contrib.auth.models import Group, User
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import transaction from django.db import transaction
from django.db.models import Q from django.db.models import Q
@ -16,6 +17,7 @@ from floppyforms.widgets import ClearableFileInput
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.rules import SAPL_GROUP_VOTANTE from sapl.rules import SAPL_GROUP_VOTANTE
from sapl.base.models import Autor, TipoAutor
from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura, from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura,
Mandato, Parlamentar, Votante) Mandato, Parlamentar, Votante)
@ -152,8 +154,18 @@ class ParlamentarCreateForm(ParlamentarForm):
Mandato.objects.create( Mandato.objects.create(
parlamentar=parlamentar, parlamentar=parlamentar,
legislatura=legislatura, legislatura=legislatura,
data_inicio_mandato=legislatura.data_inicio,
data_fim_mandato=legislatura.data_fim, data_fim_mandato=legislatura.data_fim,
data_expedicao_diploma=self.cleaned_data['data_expedicao_diploma']) data_expedicao_diploma=self.cleaned_data['data_expedicao_diploma'])
content_type = ContentType.objects.get_for_model(Parlamentar)
object_id = parlamentar.pk
tipo = TipoAutor.objects.get(descricao='Parlamentar')
Autor.objects.create(
content_type = content_type,
object_id = object_id,
tipo = tipo,
nome = parlamentar.nome_parlamentar
)
return parlamentar return parlamentar
@ -280,6 +292,20 @@ class FrenteForm(ModelForm):
model = Frente model = Frente
fields = '__all__' fields = '__all__'
@transaction.atomic
def save(self, commit=True):
frente = super(FrenteForm, self).save(commit)
content_type = ContentType.objects.get_for_model(Frente)
object_id = frente.pk
tipo = TipoAutor.objects.get(descricao='Frente Parlamentar')
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=frente.nome
)
return frente
class VotanteForm(ModelForm): class VotanteForm(ModelForm):

26
sapl/parlamentares/views.py

@ -27,7 +27,7 @@ from sapl.parlamentares.apps import AppConfig
from sapl.utils import parlamentares_ativos from sapl.utils import parlamentares_ativos
from .forms import (FiliacaoForm, LegislaturaForm, MandatoForm, from .forms import (FiliacaoForm, LegislaturaForm, MandatoForm,
ParlamentarCreateForm, ParlamentarForm, VotanteForm) ParlamentarCreateForm, ParlamentarForm, VotanteForm, FrenteForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
Dependente, Filiacao, Frente, Legislatura, Mandato, Dependente, Filiacao, Frente, Legislatura, Mandato,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
@ -276,27 +276,11 @@ class FrenteCrud(CrudAux):
public = [RP_DETAIL, RP_LIST] public = [RP_DETAIL, RP_LIST]
list_field_names = ['nome', 'data_criacao', 'parlamentares'] list_field_names = ['nome', 'data_criacao', 'parlamentares']
class CreateView(CrudAux.CreateView): class CreateView(Crud.CreateView):
form_class = FrenteForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Update view é um indicador para o javascript
# de que esta não é uma tela de edição de frente
context['update_view'] = 0
return context
class UpdateView(CrudAux.UpdateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Update view é um indicador para o javascript
# de que esta não é uma tela de edição de frente
context['update_view'] = 1
return context def form_valid(self, form):
return super(Crud.CreateView, self).form_valid(form)
class MandatoCrud(MasterDetailCrud): class MandatoCrud(MasterDetailCrud):

49
sapl/sessao/forms.py

@ -4,10 +4,13 @@ import django_filters
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout from crispy_forms.layout import HTML, Button, Fieldset, Layout
from django import forms from django import forms
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import transaction
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.base.models import Autor, TipoAutor
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import (MateriaLegislativa, StatusTramitacao, from sapl.materia.models import (MateriaLegislativa, StatusTramitacao,
@ -18,7 +21,7 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
autor_modal, timezone) autor_modal, timezone)
from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente, from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente,
OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao) OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao, Bloco)
def recupera_anos(): def recupera_anos():
@ -112,6 +115,50 @@ class BancadaForm(ModelForm):
raise ValidationError(msg) raise ValidationError(msg)
return self.cleaned_data 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(descricao='Bancada Parlamentar')
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=bancada.nome
)
return bancada
class BlocoForm(ModelForm):
class Meta:
model = Bloco
fields = ['nome', 'partidos', 'data_criacao',
'data_extincao', 'descricao']
def clean(self):
super(BlocoForm, self).clean()
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):
bloco = super(BlocoForm, self).save(commit)
content_type = ContentType.objects.get_for_model(Bloco)
object_id = bloco.pk
tipo = TipoAutor.objects.get(descricao='Bloco Parlamentar')
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=bloco.nome
)
return bloco
class ExpedienteMateriaForm(ModelForm): class ExpedienteMateriaForm(ModelForm):

25
sapl/sessao/migrations/0016_auto_20180131_1708.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-01-31 19:08
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0015_sessaoplenaria_painel_aberto'),
]
operations = [
migrations.AlterField(
model_name='bancada',
name='data_criacao',
field=models.DateField(null=True, verbose_name='Data Criação'),
),
migrations.AlterField(
model_name='bloco',
name='data_criacao',
field=models.DateField(null=True, verbose_name='Data Criação'),
),
]

4
sapl/sessao/models.py

@ -42,7 +42,7 @@ class Bancada(models.Model):
null=True, null=True,
on_delete=models.PROTECT, on_delete=models.PROTECT,
verbose_name=_('Partido')) verbose_name=_('Partido'))
data_criacao = models.DateField(blank=True, null=True, data_criacao = models.DateField(blank=False, null=True,
verbose_name=_('Data Criação')) verbose_name=_('Data Criação'))
data_extincao = models.DateField(blank=True, null=True, data_extincao = models.DateField(blank=True, null=True,
verbose_name=_('Data Extinção')) verbose_name=_('Data Extinção'))
@ -498,7 +498,7 @@ class Bloco(models.Model):
partidos = models.ManyToManyField( partidos = models.ManyToManyField(
Partido, blank=True, verbose_name=_('Partidos')) Partido, blank=True, verbose_name=_('Partidos'))
data_criacao = models.DateField( data_criacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Criação')) blank=False, null=True, verbose_name=_('Data Criação'))
data_extincao = models.DateField( data_extincao = models.DateField(
blank=True, null=True, verbose_name=_('Data Dissolução')) blank=True, null=True, verbose_name=_('Data Dissolução'))
descricao = models.TextField(blank=True, verbose_name=_('Descrição')) descricao = models.TextField(blank=True, verbose_name=_('Descrição'))

3
sapl/sessao/tests/test_sessao.py

@ -81,8 +81,9 @@ def test_valida_campos_obrigatorios_bancada_form():
assert errors['legislatura'] == [_('Este campo é obrigatório.')] assert errors['legislatura'] == [_('Este campo é obrigatório.')]
assert errors['nome'] == [_('Este campo é obrigatório.')] assert errors['nome'] == [_('Este campo é obrigatório.')]
assert errors['data_criacao'] == [_('Este campo é obrigatório.')]
assert len(errors) == 2 assert len(errors) == 3
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)

24
sapl/sessao/views.py

@ -41,7 +41,7 @@ from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
OradorForm, PautaSessaoFilterSet, PresencaForm, OradorForm, PautaSessaoFilterSet, PresencaForm,
ResumoOrdenacaoForm, SessaoPlenariaFilterSet, ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
SessaoPlenariaForm, VotacaoEditForm, VotacaoForm, SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm) VotacaoNominalForm, BancadaForm, BlocoForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa, from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia, MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
@ -53,10 +53,7 @@ TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
TipoExpedienteCrud = CrudAux.build(TipoExpediente, 'tipo_expediente') TipoExpedienteCrud = CrudAux.build(TipoExpediente, 'tipo_expediente')
CargoBancadaCrud = CrudAux.build(CargoBancada, '') CargoBancadaCrud = CrudAux.build(CargoBancada, '')
BlocoCrud = CrudAux.build(
Bloco, '', list_field_names=['nome', 'data_criacao', 'partidos'])
BancadaCrud = CrudAux.build(
Bancada, '', list_field_names=['nome', 'legislatura'])
TipoResultadoVotacaoCrud = CrudAux.build( TipoResultadoVotacaoCrud = CrudAux.build(
TipoResultadoVotacao, 'tipo_resultado_votacao') TipoResultadoVotacao, 'tipo_resultado_votacao')
@ -575,6 +572,23 @@ class OradorCrud(OradorCrud):
return reverse('sapl.sessao:orador_list', return reverse('sapl.sessao:orador_list',
kwargs={'pk': self.kwargs['pk']}) kwargs={'pk': self.kwargs['pk']})
class BancadaCrud(Crud):
model = Bancada
class CreateView(Crud.CreateView):
form_class = BancadaForm
def get_success_url(self):
return reverse('sapl.sessao:bancada_list')
class BlocoCrud(Crud):
model = Bloco
class CreateView(Crud.CreateView):
form_class = BlocoForm
def get_success_url(self):
return reverse('sapl.sessao:bloco_list')
def recuperar_numero_sessao(request): def recuperar_numero_sessao(request):
try: try:

Loading…
Cancel
Save