diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 950dac3c1..909be865a 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -215,24 +215,26 @@ class TramitacaoForm(ModelForm): def __init__(self, *args, **kwargs): super(TramitacaoForm, self).__init__(*args, **kwargs) - self.fields['data_tramitacao'].initial = datetime.now() + self.fields['data_tramitacao'].initial = datetime.now().date() def clean(self): - super(TramitacaoForm, self).clean() + cleaned_data = super(TramitacaoForm, self).clean() - if 'data_encaminhamento' in self.data: - data_enc_form = self.cleaned_data['data_encaminhamento'] - if 'data_fim_prazo' in self.data: - data_prazo_form = self.cleaned_data['data_fim_prazo'] - if 'data_tramitacao' in self.data: - data_tram_form = self.cleaned_data['data_tramitacao'] + if 'data_encaminhamento' in cleaned_data: + data_enc_form = cleaned_data['data_encaminhamento'] + if 'data_fim_prazo' in cleaned_data: + data_prazo_form = cleaned_data['data_fim_prazo'] + if 'data_tramitacao' in cleaned_data: + data_tram_form = cleaned_data['data_tramitacao'] if self.errors: return self.errors ultima_tramitacao = Tramitacao.objects.filter( materia_id=self.instance.materia_id).exclude( - id=self.instance.id).last() + id=self.instance.id).order_by( + '-data_tramitacao', + '-id').first() if not self.instance.data_tramitacao: @@ -243,7 +245,7 @@ class TramitacaoForm(ModelForm): 'destino da última adicionada!') raise ValidationError(msg) - if self.cleaned_data['data_tramitacao'] > datetime.now().date(): + if cleaned_data['data_tramitacao'] > datetime.now().date(): msg = _( 'A data de tramitação deve ser ' + 'menor ou igual a data de hoje!') @@ -267,7 +269,7 @@ class TramitacaoForm(ModelForm): 'maior que a data de tramitação!') raise ValidationError(msg) - return self.cleaned_data + return cleaned_data class TramitacaoUpdateForm(TramitacaoForm): @@ -296,13 +298,26 @@ class TramitacaoUpdateForm(TramitacaoForm): } def clean(self): - super(TramitacaoUpdateForm, self).clean() + ultima_tramitacao = Tramitacao.objects.filter( + materia_id=self.instance.materia_id).order_by( + '-data_tramitacao', + '-id').first() + + # Se a Tramitação que está sendo editada não for a mais recente, + # ela não pode ter seu destino alterado. + if ultima_tramitacao != self.instance: + if self.cleaned_data['unidade_tramitacao_destino'] != \ + self.instance.unidade_tramitacao_destino: + raise ValidationError( + 'Você não pode mudar a Unidade de Destino desta '\ + 'tramitação, pois irá conflitar com a Unidade ' \ + 'Local da tramitação seguinte') - local = self.instance.unidade_tramitacao_local - data_tram = self.instance.data_tramitacao + self.cleaned_data['data_tramitacao'] = \ + self.instance.data_tramitacao + self.cleaned_data['unidade_tramitacao_local'] = \ + self.instance.unidade_tramitacao_local - self.cleaned_data['data_tramitacao'] = data_tram - self.cleaned_data['unidade_tramitacao_local'] = local return super(TramitacaoUpdateForm, self).clean() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index f3aafb662..8ef6e625b 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -930,7 +930,8 @@ class TramitacaoCrud(MasterDetailCrud): def get_initial(self): local = MateriaLegislativa.objects.get( pk=self.kwargs['pk']).tramitacao_set.order_by( - '-data_tramitacao').first() + '-data_tramitacao', + '-id').first() if local: self.initial['unidade_tramitacao_local' @@ -1009,7 +1010,8 @@ class TramitacaoCrud(MasterDetailCrud): def get_queryset(self): qs = super(MasterDetailCrud.ListView, self).get_queryset() kwargs = {self.crud.parent_field: self.kwargs['pk']} - return qs.filter(**kwargs).order_by('-data_tramitacao', '-id') + return qs.filter(**kwargs).order_by('-data_tramitacao', + '-id') class DeleteView(MasterDetailCrud.DeleteView):