diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py index e09671a04..9312a237b 100644 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -16,18 +16,21 @@ class AudienciaForm(forms.ModelForm): tipo_materia = forms.ModelChoiceField( label=_('Tipo Matéria'), - required=True, + required=False, queryset=TipoMateriaLegislativa.objects.all(), empty_label='Selecione', ) numero_materia = forms.CharField( - label='Número Matéria', required=True) + label='Número Matéria', required=False) ano_materia = forms.CharField( label='Ano Matéria', - initial=int(data_atual.year), - required=True) + required=False) + + materia = forms.ModelChoiceField(required=False, + widget=forms.HiddenInput(), + queryset=MateriaLegislativa.objects.all()) class Meta: model = AudienciaPublica @@ -36,7 +39,7 @@ class AudienciaForm(forms.ModelForm): 'observacao', 'audiencia_cancelada', 'url_audio', 'url_video', 'upload_pauta', 'upload_ata', 'upload_anexo', 'tipo_materia', 'numero_materia', - 'ano_materia'] + 'ano_materia', 'materia'] def __init__(self, **kwargs): @@ -59,17 +62,38 @@ class AudienciaForm(forms.ModelForm): if not self.is_valid(): return cleaned_data - try: - materia = MateriaLegislativa.objects.get( - numero=self.cleaned_data['numero_materia'], - ano=self.cleaned_data['ano_materia'], - tipo=self.cleaned_data['tipo_materia']) - except ObjectDoesNotExist: - msg = _('A matéria a ser inclusa não existe no cadastro' - ' de matérias legislativas.') - raise ValidationError(msg) + materia = cleaned_data['numero_materia'] + ano_materia = cleaned_data['ano_materia'] + tipo_materia = cleaned_data['tipo_materia'] + + if materia and ano_materia and tipo_materia: + try: + materia = MateriaLegislativa.objects.get( + numero=materia, + ano=ano_materia, + tipo=tipo_materia) + except ObjectDoesNotExist: + msg = _('A matéria %s nº %s/%s não existe no cadastro' + ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) + raise ValidationError(msg) + else: + cleaned_data['materia'] = materia + else: - cleaned_data['materia'] = materia + campos = [materia, tipo_materia, ano_materia] + if campos.count(None) + campos.count('') < len(campos): + msg = _('Preencha todos os campos relacionados à Matéria Legislativa') + raise ValidationError(msg) + + if not cleaned_data['numero']: + + ultima_audiencia = AudienciaPublica.objects.all().order_by('numero').last() + if ultima_audiencia: + cleaned_data['numero'] = ultima_audiencia.numero + 1 + else: + cleaned_data['numero'] = 1 + + if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if (self.cleaned_data['hora_fim'] < @@ -78,10 +102,3 @@ class AudienciaForm(forms.ModelForm): raise ValidationError(msg) return cleaned_data - - @transaction.atomic() - def save(self, commit=True): - audiencia = super(AudienciaForm, self).save(False) - audiencia.materia = self.cleaned_data['materia'] - audiencia.save() - return audiencia \ No newline at end of file diff --git a/sapl/audiencia/migrations/0005_auto_20180806_1236.py b/sapl/audiencia/migrations/0005_auto_20180806_1236.py new file mode 100644 index 000000000..9601a233d --- /dev/null +++ b/sapl/audiencia/migrations/0005_auto_20180806_1236.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-08-06 15:36 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0004_auto_20180305_1006'), + ] + + operations = [ + migrations.AlterField( + model_name='audienciapublica', + name='hora_fim', + field=models.CharField(blank=True, max_length=5, null=True, verbose_name='Horário Fim(hh:mm)'), + ), + ] diff --git a/sapl/audiencia/migrations/0006_auto_20180808_0856.py b/sapl/audiencia/migrations/0006_auto_20180808_0856.py new file mode 100644 index 000000000..3809f66cf --- /dev/null +++ b/sapl/audiencia/migrations/0006_auto_20180808_0856.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-08-08 11:56 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0005_auto_20180806_1236'), + ] + + operations = [ + migrations.AlterField( + model_name='audienciapublica', + name='hora_fim', + field=models.CharField(blank=True, max_length=5, verbose_name='Horário Fim(hh:mm)'), + ), + ] diff --git a/sapl/audiencia/models.py b/sapl/audiencia/models.py index 96ad8272a..477a442d9 100644 --- a/sapl/audiencia/models.py +++ b/sapl/audiencia/models.py @@ -71,7 +71,7 @@ class AudienciaPublica(models.Model): hora_inicio = models.CharField( max_length=5, verbose_name=_('Horário Início(hh:mm)')) hora_fim = models.CharField( - max_length=5, verbose_name=_('Horário Fim(hh:mm)')) + max_length=5, blank=True, verbose_name=_('Horário Fim(hh:mm)')) observacao = models.TextField( max_length=500, blank=True, verbose_name=_('Observação')) audiencia_cancelada = models.BooleanField( diff --git a/sapl/audiencia/tests/test_audiencia.py b/sapl/audiencia/tests/test_audiencia.py index 710d70dff..f617d426a 100644 --- a/sapl/audiencia/tests/test_audiencia.py +++ b/sapl/audiencia/tests/test_audiencia.py @@ -15,11 +15,7 @@ def test_valida_campos_obrigatorios_audiencia_form(): assert errors['nome'] == [_('Este campo é obrigatório.')] assert errors['tema'] == [_('Este campo é obrigatório.')] assert errors['tipo'] == [_('Este campo é obrigatório.')] - assert errors['tipo_materia'] == [_('Este campo é obrigatório.')] - assert errors['numero_materia'] == [_('Este campo é obrigatório.')] - assert errors['ano_materia'] == [_('Este campo é obrigatório.')] assert errors['data'] == [_('Este campo é obrigatório.')] assert errors['hora_inicio'] == [_('Este campo é obrigatório.')] - assert errors['hora_fim'] == [_('Este campo é obrigatório.')] - assert len(errors) == 9 + assert len(errors) == 5 diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py index 2c16b0919..bdfc6993c 100644 --- a/sapl/audiencia/views.py +++ b/sapl/audiencia/views.py @@ -6,15 +6,17 @@ from sapl.crud.base import RP_DETAIL, RP_LIST, Crud from .forms import AudienciaForm from .models import AudienciaPublica + def index(request): return HttpResponse("Audiência Pública") + class AudienciaCrud(Crud): model = AudienciaPublica public = [RP_LIST, RP_DETAIL, ] class BaseMixin(Crud.BaseMixin): - list_field_names = ['materia', 'tipo', 'numero', 'nome', + list_field_names = ['numero', 'nome', 'tipo', 'materia', 'data'] ordering = 'nome', 'numero', 'tipo', 'data'