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