From 09b30241f7353bd43246b89d5b93b09e40217d8c Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Mon, 25 Apr 2016 11:50:51 -0300 Subject: [PATCH] =?UTF-8?q?Coloca=20valida=C3=A7=C3=A3o=20nas=20datas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parlamentares/forms.py | 101 +++++++++++++++++++++-------------------- parlamentares/views.py | 34 ++++++++------ 2 files changed, 72 insertions(+), 63 deletions(-) diff --git a/parlamentares/forms.py b/parlamentares/forms.py index e0c85f8b7..f1112bdc0 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -53,67 +53,68 @@ class ParlamentarCreateForm(ParlamentarForm): return parlamentar -class FiliacaoForm(ModelForm): - - def validate(data, data_desfiliacao, parlamentar, filiacao): - data_filiacao = data - data_desfiliacao = data_desfiliacao - - # Dá erro caso a data de desfiliação seja anterior a de filiação - if data_desfiliacao and data_desfiliacao < data_filiacao: - error_msg = _("A data de filiação não pode anterior \ - à data de desfiliação") +def validate(data, data_desfiliacao, parlamentar, filiacao): + data_filiacao = data + data_desfiliacao = data_desfiliacao + + # Dá erro caso a data de desfiliação seja anterior a de filiação + if data_desfiliacao and data_desfiliacao < data_filiacao: + error_msg = _("A data de filiação não pode anterior \ + à data de desfiliação") + raise forms.ValidationError(error_msg) + return False + + # Esse bloco garante que não haverá intersecção entre os + # períodos de filiação + id_filiacao_atual = filiacao.pk + todas_filiacoes = parlamentar.filiacao_set.all() + + for filiacoes in todas_filiacoes: + if (not filiacoes.data_desfiliacao and + filiacoes.id != id_filiacao_atual): + error_msg = _("O parlamentar não pode se filiar a algum partido \ + sem antes se desfiliar do partido anterior") raise forms.ValidationError(error_msg) return False - # Esse bloco garante que não haverá intersecção entre os - # períodos de filiação - id_filiacao_atual = filiacao.pk - todas_filiacoes = parlamentar.filiacao_set.all() + error_msg = None + for filiacoes in todas_filiacoes: + if filiacoes.id != id_filiacao_atual: - for filiacoes in todas_filiacoes: - if (not filiacoes.data_desfiliacao and - filiacoes.id != id_filiacao_atual): - error_msg = _("O parlamentar não pode se filiar a algum partido \ - sem antes se desfiliar do partido anterior") - raise forms.ValidationError(error_msg) - return False + data_init = filiacoes.data + data_fim = filiacoes.data_desfiliacao - error_msg = None - for filiacoes in todas_filiacoes: - if filiacoes.id != id_filiacao_atual: + if data_init <= data_filiacao < data_fim: - data_init = filiacoes.data - data_fim = filiacoes.data_desfiliacao + error_msg = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") + break - if data_init <= data_filiacao < data_fim: + if (data_desfiliacao and + data_init < data_desfiliacao < data_fim): - error_msg = _("A data de filiação e \ - desfiliação não podem estar no intervalo \ - de outro período de filiação") - break + error_msg = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") + break - if (data_desfiliacao and - data_init < data_desfiliacao < data_fim): + if (data_desfiliacao and + data_filiacao <= data_init and + data_desfiliacao >= data_fim): - error_msg = _("A data de filiação e \ - desfiliação não podem estar no intervalo \ - de outro período de filiação") - break + error_msg = _("A data de filiação e \ + desfiliação não podem estar no intervalo \ + de outro período de filiação") + break - if (data_desfiliacao and - data_filiacao <= data_init and - data_desfiliacao >= data_fim): + if error_msg: + raise forms.ValidationError(error_msg) - error_msg = _("A data de filiação e \ - desfiliação não podem estar no intervalo \ - de outro período de filiação") - break + return True - if error_msg: - raise forms.ValidationError(error_msg) - return True +class FiliacaoForm(ModelForm): class Meta: model = Filiacao @@ -126,9 +127,9 @@ class FiliacaoForm(ModelForm): filiacao = super(FiliacaoForm, self).save(commit) if not validate(self.cleaned_data['data'], - self.cleaned_data['data_desfiliacao'], - filiacao.parlamentar, - filiacao): + self.cleaned_data['data_desfiliacao'], + filiacao.parlamentar, + filiacao): return self.form_invalid(form) filiacao.save() diff --git a/parlamentares/views.py b/parlamentares/views.py index a5171f8eb..0800eac67 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -29,19 +29,27 @@ TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar') DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '') MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '') -FiliacaoCrud = MasterDetailCrud.build(Filiacao, 'parlamentar', '') - - -# class FiliacaoCrud(MasterDetailCrud): -# model = Filiacao -# parent_field = 'parlamentar' -# help_path = '' -# -# class CreateView(crud.masterdetail.CrudCreateView): -# form_class = FiliacaoForm -# -# class UpdateView(crud.masterdetail.CrudUpdateView): -# form_class = FiliacaoForm +# FiliacaoCrud = MasterDetailCrud.build(Filiacao, 'parlamentar', '') + + +class FiliacaoCrud(MasterDetailCrud): + model = Filiacao + parent_field = 'parlamentar' + help_path = '' + + class CreateView(crud.masterdetail.CrudCreateView): + form_class = FiliacaoForm + + @classmethod + def get_url_regex(self): + return r'^(?P\d+)/%s/create$' % self.model._meta.model_name + + class UpdateView(crud.masterdetail.CrudUpdateView): + form_class = FiliacaoForm + + @classmethod + def get_url_regex(self): + return r'^%s/(?P\d+)/edit$' % self.model._meta.model_name class ParlamentarCrud(Crud):