diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index abcce24f7..4ccc52c27 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -11,6 +11,33 @@ from sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio, Participacao, Reuniao) from sapl.parlamentares.models import Legislatura, Mandato, Parlamentar +class ComposicaoForm(forms.ModelForm): + + class Meta: + model = Composicao + exclude = [] + + def clean(self): + cleaned_data = super(ComposicaoForm, self).clean() + + if not self.is_valid(): + return cleaned_data + + periodo = cleaned_data['periodo'] + comissao_pk = cleaned_data['comissao'].id + intersecao_periodo = Composicao.objects.filter( + Q(periodo__data_inicio__lte=periodo.data_fim, + periodo__data_fim__gte=periodo.data_fim) | + Q(periodo__data_inicio__gte=periodo.data_inicio, + periodo__data_fim__lte=periodo.data_inicio), + comissao_id=comissao_pk) + + if intersecao_periodo: + raise ValidationError('O período informado ' + 'choca com períodos já ' + 'cadastrados para esta comissão') + + return cleaned_data class ParticipacaoCreateForm(forms.ModelForm): @@ -219,4 +246,3 @@ class DocumentoAcessorioEditForm(forms.ModelForm): def __init__(self, user=None, **kwargs): super(DocumentoAcessorioEditForm, self).__init__(**kwargs) - diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index b085eb83d..2f1d2dad7 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -13,8 +13,8 @@ from sapl.base.models import AppConfig as AppsAppConfig from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud, PermissionRequiredForAppCrudMixin) -from sapl.comissoes.forms import (ComissaoForm, DocumentoAcessorioCreateForm, - DocumentoAcessorioEditForm, ParticipacaoCreateForm, +from sapl.comissoes.forms import (ComissaoForm,ComposicaoForm, DocumentoAcessorioCreateForm, + DocumentoAcessorioEditForm, ParticipacaoCreateForm, ParticipacaoEditForm, ReuniaoForm) from sapl.materia.models import MateriaLegislativa, Tramitacao @@ -81,6 +81,10 @@ class ComposicaoCrud(MasterDetailCrud): model_set = 'participacao_set' public = [RP_LIST, RP_DETAIL, ] + class CreateView(MasterDetailCrud.CreateView): + form_class = ComposicaoForm + + class ListView(MasterDetailCrud.ListView): template_name = "comissoes/composicao_list.html" paginate_by = None @@ -176,7 +180,7 @@ class ReuniaoCrud(MasterDetailCrud): context = super().get_context_data(**kwargs) reuniao_pk = self.take_reuniao_pk() - + if reuniao_pk == 0: ultima_reuniao = list(context['reuniao_list']) if len(ultima_reuniao) > 0: @@ -235,4 +239,4 @@ class DocumentoAcessorioCrud(MasterDetailCrud): obj.delete() return HttpResponseRedirect( reverse('sapl.comissoes:reuniao_detail', - kwargs={'pk': obj.reuniao.pk})) \ No newline at end of file + kwargs={'pk': obj.reuniao.pk}))