Browse Source

Adiciona campo de Parlamentar Autor e Requerimento em Audiência Pública (#3008)

Co-authored-by: Vinícius Cantuária <cantuariavc@gmail.com>
pull/3192/head
Ricardo Lima Canela 5 years ago
committed by GitHub
parent
commit
79261d887b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 58
      sapl/audiencia/forms.py
  2. 28
      sapl/audiencia/migrations/0015_auto_20200518_1158.py
  3. 13
      sapl/audiencia/models.py
  4. 2
      sapl/templates/audiencia/layouts.yaml

58
sapl/audiencia/forms.py

@ -10,44 +10,56 @@ from crispy_forms.layout import Button, Column, Fieldset, HTML, Layout
from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica, AnexoAudienciaPublica from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica, AnexoAudienciaPublica
from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, SaplFormLayout, to_row from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, SaplFormLayout, to_row
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Parlamentar
from sapl.utils import timezone, FileFieldCheckMixin, validar_arquivo from sapl.utils import timezone, FileFieldCheckMixin, validar_arquivo
class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
data_atual = timezone.now() data_atual = timezone.now()
tipo = forms.ModelChoiceField(required=True, tipo = forms.ModelChoiceField(
label='Tipo de Audiência Pública', required=True,
queryset=TipoAudienciaPublica.objects.all().order_by('nome')) label=_('Tipo de Audiência Pública'),
queryset=TipoAudienciaPublica.objects.all().order_by('nome'))
tipo_materia = forms.ModelChoiceField( tipo_materia = forms.ModelChoiceField(
label=_('Tipo Matéria'), label=_('Tipo Matéria'),
required=False, required=False,
queryset=TipoMateriaLegislativa.objects.all(), queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione', empty_label=_('Selecione'))
)
numero_materia = forms.CharField( numero_materia = forms.CharField(
label='Número Matéria', required=False) label=_('Número Matéria'),
required=False)
ano_materia = forms.CharField( ano_materia = forms.CharField(
label='Ano Matéria', label=_('Ano Matéria'),
required=False) required=False)
materia = forms.ModelChoiceField(required=False, materia = forms.ModelChoiceField(
widget=forms.HiddenInput(), required=False,
queryset=MateriaLegislativa.objects.all()) widget=forms.HiddenInput(),
queryset=MateriaLegislativa.objects.all())
parlamentar_autor = forms.ModelChoiceField(
label=_("Parlamentar Autor"),
required=False,
queryset=Parlamentar.objects.all())
requerimento = forms.ModelChoiceField(
label=_("Requerimento"),
required=False,
queryset=MateriaLegislativa.objects.select_related("tipo").filter(tipo__descricao="Requerimento"))
class Meta: class Meta:
model = AudienciaPublica model = AudienciaPublica
fields = ['tipo', 'numero', 'nome', fields = ['tipo', 'numero', 'nome',
'tema', 'data', 'hora_inicio', 'hora_fim', 'tema', 'data', 'hora_inicio', 'hora_fim',
'observacao', 'audiencia_cancelada', 'url_audio', 'observacao', 'audiencia_cancelada', 'parlamentar_autor', 'requerimento', 'url_audio',
'url_video', 'upload_pauta', 'upload_ata', 'url_video', 'upload_pauta', 'upload_ata',
'upload_anexo', 'tipo_materia', 'numero_materia', 'upload_anexo', 'tipo_materia', 'numero_materia',
'ano_materia', 'materia'] 'ano_materia', 'materia']
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(AudienciaForm, self).__init__(**kwargs) super(AudienciaForm, self).__init__(**kwargs)
@ -62,9 +74,7 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
for t in tipos: for t in tipos:
t.save() t.save()
def clean(self): def clean(self):
cleaned_data = super(AudienciaForm, self).clean() cleaned_data = super(AudienciaForm, self).clean()
if not self.is_valid(): if not self.is_valid():
return cleaned_data return cleaned_data
@ -72,6 +82,8 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
materia = cleaned_data['numero_materia'] materia = cleaned_data['numero_materia']
ano_materia = cleaned_data['ano_materia'] ano_materia = cleaned_data['ano_materia']
tipo_materia = cleaned_data['tipo_materia'] tipo_materia = cleaned_data['tipo_materia']
parlamentar_autor = cleaned_data["parlamentar_autor"]
requerimento = cleaned_data["requerimento"]
if materia and ano_materia and tipo_materia: if materia and ano_materia and tipo_materia:
try: try:
@ -107,12 +119,14 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
cleaned_data['numero'] = 1 cleaned_data['numero'] = 1
if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']:
if (self.cleaned_data['hora_fim'] < if self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']:
self.cleaned_data['hora_inicio']): msg = _('A hora de fim ({}) não pode ser anterior a hora de início({})'
msg = _('A hora de fim ({}) não pode ser anterior a hora ' .format(self.cleaned_data['hora_fim'], self.cleaned_data['hora_inicio']))
'de início({})'.format(self.cleaned_data['hora_fim'], self.cleaned_data['hora_inicio'])) self.logger.error('Hora de fim anterior à hora de início.')
self.logger.error('Hora de fim anterior à hora de início.') raise ValidationError(msg)
raise ValidationError(msg)
if parlamentar_autor.autor.first() not in requerimento.autores.all():
raise ValidationError("Parlamentar Autor selecionado não faz parte da autoria do Requerimento selecionado.")
upload_pauta = self.cleaned_data.get('upload_pauta', False) upload_pauta = self.cleaned_data.get('upload_pauta', False)
upload_ata = self.cleaned_data.get('upload_ata', False) upload_ata = self.cleaned_data.get('upload_ata', False)
@ -120,10 +134,10 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm):
if upload_pauta: if upload_pauta:
validar_arquivo(upload_pauta, "Pauta da Audiência Pública") validar_arquivo(upload_pauta, "Pauta da Audiência Pública")
if upload_ata: if upload_ata:
validar_arquivo(upload_ata, "Ata da Audiência Pública") validar_arquivo(upload_ata, "Ata da Audiência Pública")
if upload_anexo: if upload_anexo:
validar_arquivo(upload_anexo, "Anexo da Audiência Pública") validar_arquivo(upload_anexo, "Anexo da Audiência Pública")

28
sapl/audiencia/migrations/0015_auto_20200518_1158.py

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-05-18 14:58
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0031_auto_20200407_1406'),
('materia', '0067_auto_20200416_1538'),
('audiencia', '0014_auto_20191023_1538'),
]
operations = [
migrations.AddField(
model_name='audienciapublica',
name='parlamentar_autor',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Parlamentar', verbose_name='Parlamentar Autor'),
),
migrations.AddField(
model_name='audienciapublica',
name='requerimento',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='requerimento', to='materia.MateriaLegislativa', verbose_name='Requerimento da Audiência Pública'),
),
]

13
sapl/audiencia/models.py

@ -80,6 +80,19 @@ class AudienciaPublica(models.Model):
default=False, default=False,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Audiência Cancelada?')) verbose_name=_('Audiência Cancelada?'))
parlamentar_autor = models.ForeignKey(
Parlamentar,
on_delete=models.PROTECT,
null=True,
blank=True,
verbose_name=_('Parlamentar Autor'))
requerimento = models.ForeignKey(
MateriaLegislativa,
null=True,
blank=True,
on_delete=models.PROTECT,
verbose_name=_('Requerimento da Audiência Pública'),
related_name=_('requerimento'))
url_audio = models.URLField( url_audio = models.URLField(
max_length=150, blank=True, max_length=150, blank=True,
verbose_name=_('URL Arquivo Áudio (Formatos MP3 / AAC)')) verbose_name=_('URL Arquivo Áudio (Formatos MP3 / AAC)'))

2
sapl/templates/audiencia/layouts.yaml

@ -6,6 +6,7 @@ AudienciaPublica:
{% trans 'Dados' %}: {% trans 'Dados' %}:
- tipo_materia numero_materia ano_materia - tipo_materia numero_materia ano_materia
- tipo:4 data:2 hora_inicio:3 hora_fim:3 - tipo:4 data:2 hora_inicio:3 hora_fim:3
- parlamentar_autor requerimento
- url_audio url_video - url_audio url_video
- upload_pauta upload_ata upload_anexo - upload_pauta upload_ata upload_anexo
- observacao - observacao
@ -18,6 +19,7 @@ AudienciaPublicaDetail:
{% trans 'Dados' %}: {% trans 'Dados' %}:
- materia tipo - materia tipo
- data hora_inicio hora_fim - data hora_inicio hora_fim
- parlamentar_autor requerimento
- url_audio url_video - url_audio url_video
- upload_pauta upload_ata upload_anexo - upload_pauta upload_ata upload_anexo
- observacao - observacao

Loading…
Cancel
Save