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 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
@ -89,3 +94,34 @@ class ParticipacaoForm(forms.ModelForm):
lista = list(set(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.materia.models import MateriaLegislativa, Tramitacao
from .forms import ComissaoForm
from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao)
@ -100,18 +101,11 @@ class ComissaoCrud(Crud):
'data_criacao', 'data_extincao', 'ativa']
ordering = '-ativa', 'sigla'
class ListView(Crud.ListView):
@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)
class CreateView(Crud.CreateView):
form_class = ComissaoForm
def form_valid(self, form):
return super(Crud.CreateView, self).form_valid(form)
class MateriasTramitacaoListView(ListView):
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)
from sapl.materia.models import (AssuntoMateria, MateriaAssunto,
MateriaLegislativa, RegimeTramitacao,
TipoDocumento, TipoProposicao)
TipoDocumento, TipoProposicao, Orgao)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
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):
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,
ProposicaoForm, TipoProposicaoForm,
TramitacaoForm, TramitacaoUpdateForm,
DevolverProposicaoForm)
DevolverProposicaoForm, OrgaoForm)
from sapl.norma.models import LegislacaoCitada
from sapl.protocoloadm.models import Protocolo
from sapl.utils import (TURNO_TRAMITACAO_CHOICES, YES_NO_CHOICES, autor_label,
@ -296,10 +296,13 @@ def recuperar_materia(request):
return response
OrgaoCrud = CrudAux.build(Orgao, 'orgao')
StatusTramitacaoCrud = CrudAux.build(StatusTramitacao, 'status_tramitacao')
class OrgaoCrud(Crud):
model = Orgao
class CreateView(Crud.CreateView):
form_class = OrgaoForm
class TipoProposicaoCrud(CrudAux):
model = TipoProposicao

26
sapl/parlamentares/forms.py

@ -5,6 +5,7 @@ from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, User
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.db import transaction
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.rules import SAPL_GROUP_VOTANTE
from sapl.base.models import Autor, TipoAutor
from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura,
Mandato, Parlamentar, Votante)
@ -152,8 +154,18 @@ class ParlamentarCreateForm(ParlamentarForm):
Mandato.objects.create(
parlamentar=parlamentar,
legislatura=legislatura,
data_inicio_mandato=legislatura.data_inicio,
data_fim_mandato=legislatura.data_fim,
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
@ -280,6 +292,20 @@ class FrenteForm(ModelForm):
model = Frente
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):

26
sapl/parlamentares/views.py

@ -27,7 +27,7 @@ from sapl.parlamentares.apps import AppConfig
from sapl.utils import parlamentares_ativos
from .forms import (FiliacaoForm, LegislaturaForm, MandatoForm,
ParlamentarCreateForm, ParlamentarForm, VotanteForm)
ParlamentarCreateForm, ParlamentarForm, VotanteForm, FrenteForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
Dependente, Filiacao, Frente, Legislatura, Mandato,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
@ -276,27 +276,11 @@ class FrenteCrud(CrudAux):
public = [RP_DETAIL, RP_LIST]
list_field_names = ['nome', 'data_criacao', 'parlamentares']
class CreateView(CrudAux.CreateView):
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
class CreateView(Crud.CreateView):
form_class = FrenteForm
return context
def form_valid(self, form):
return super(Crud.CreateView, self).form_valid(form)
class MandatoCrud(MasterDetailCrud):

49
sapl/sessao/forms.py

@ -4,10 +4,13 @@ import django_filters
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout
from django import forms
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import transaction
from django.forms import ModelForm
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.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import (MateriaLegislativa, StatusTramitacao,
@ -18,7 +21,7 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
autor_modal, timezone)
from .models import (Bancada, ExpedienteMateria, Orador, OradorExpediente,
OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao)
OrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoResultadoVotacao, Bloco)
def recupera_anos():
@ -112,6 +115,50 @@ class BancadaForm(ModelForm):
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(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):

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,
on_delete=models.PROTECT,
verbose_name=_('Partido'))
data_criacao = models.DateField(blank=True, null=True,
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'))
@ -498,7 +498,7 @@ class Bloco(models.Model):
partidos = models.ManyToManyField(
Partido, blank=True, verbose_name=_('Partidos'))
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(
blank=True, null=True, verbose_name=_('Data Dissoluçã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['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)

24
sapl/sessao/views.py

@ -41,7 +41,7 @@ from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
OradorForm, PautaSessaoFilterSet, PresencaForm,
ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm)
VotacaoNominalForm, BancadaForm, BlocoForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
@ -53,10 +53,7 @@ TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
TipoExpedienteCrud = CrudAux.build(TipoExpediente, 'tipo_expediente')
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(
TipoResultadoVotacao, 'tipo_resultado_votacao')
@ -575,6 +572,23 @@ class OradorCrud(OradorCrud):
return reverse('sapl.sessao:orador_list',
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):
try:

Loading…
Cancel
Save