From 43b4e36317b8dc910a3517af5aa892d98f1f221d Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 19 Sep 2017 17:08:55 -0300 Subject: [PATCH] =?UTF-8?q?Refatora=C3=A7=C3=A3o=20de=20TramitacaoAdm=20(#?= =?UTF-8?q?1491)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Faz a refatoração * Conserta PEP8 --- sapl/materia/views.py | 6 +- sapl/protocoloadm/forms.py | 56 ++++++++++--------- sapl/protocoloadm/views.py | 55 +++++++++++++++++- .../tramitacaoadministrativo_form.html | 12 ++++ 4 files changed, 102 insertions(+), 27 deletions(-) create mode 100644 sapl/templates/protocoloadm/tramitacaoadministrativo_form.html diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 85a514031..35dfab49f 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1023,7 +1023,11 @@ class TramitacaoCrud(MasterDetailCrud): url = reverse('sapl.materia:tramitacao_list', kwargs={'pk': tramitacao.materia.id}) - if tramitacao.pk != materia.tramitacao_set.last().pk: + ultima_tramitacao = materia.tramitacao_set.order_by( + '-data_tramitacao', + '-id').first() + + if tramitacao.pk != ultima_tramitacao.pk: msg = _('Somente a última tramitação pode ser deletada!') messages.add_message(request, messages.ERROR, msg) return HttpResponseRedirect(url) diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 433212094..bd0fe3cd6 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -441,28 +441,26 @@ class TramitacaoAdmForm(ModelForm): 'texto', ] - widgets = { - 'data_tramitacao': forms.DateInput(format='%d/%m/%Y'), - 'data_encaminhamento': forms.DateInput(format='%d/%m/%Y'), - 'data_fim_prazo': forms.DateInput(format='%d/%m/%Y'), - } - def clean(self): - super(TramitacaoAdmForm, self).clean() + cleaned_data = super(TramitacaoAdmForm, self).clean() - data_enc_form = self.cleaned_data['data_encaminhamento'] - data_prazo_form = self.cleaned_data['data_fim_prazo'] - 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 + if not self.is_valid(): + return cleaned_data ultima_tramitacao = TramitacaoAdministrativo.objects.filter( documento_id=self.instance.documento_id).exclude( - id=self.instance.id).last() + id=self.instance.id).order_by( + '-data_tramitacao', + '-id').first() if not self.instance.data_tramitacao: - if ultima_tramitacao: destino = ultima_tramitacao.unidade_tramitacao_destino if (destino != self.cleaned_data['unidade_tramitacao_local']): @@ -516,19 +514,27 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): 'texto', ] - widgets = { - 'data_encaminhamento': forms.DateInput(format='%d/%m/%Y'), - 'data_fim_prazo': forms.DateInput(format='%d/%m/%Y'), - } - def clean(self): - super(TramitacaoAdmEditForm, self).clean() - - local = self.instance.unidade_tramitacao_local - data_tram = self.instance.data_tramitacao + ultima_tramitacao = TramitacaoAdministrativo.objects.filter( + documento_id=self.instance.documento_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') + + 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(TramitacaoAdmEditForm, self).clean() diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index c2ff10189..c4558801b 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -8,6 +8,7 @@ from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.db.models import Max, Q from django.http import Http404, HttpResponse, JsonResponse +from django.http.response import HttpResponseRedirect from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from django.views.generic import CreateView, ListView @@ -585,6 +586,33 @@ class TramitacaoAdmCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = TramitacaoAdmForm + def get_initial(self): + local = DocumentoAdministrativo.objects.get( + pk=self.kwargs['pk']).tramitacaoadministrativo_set.order_by( + '-data_tramitacao', + '-id').first() + + if local: + self.initial['unidade_tramitacao_local' + ] = local.unidade_tramitacao_destino.pk + else: + self.initial['unidade_tramitacao_local'] = '' + self.initial['data_tramitacao'] = datetime.now() + return self.initial + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + primeira_tramitacao = not(TramitacaoAdministrativo.objects.filter( + documento_id=int(kwargs['root_pk'])).exists()) + + # Se não for a primeira tramitação daquela matéria, o campo + # não pode ser modificado + if not primeira_tramitacao: + context['form'].fields[ + 'unidade_tramitacao_local'].widget.attrs['disabled'] = True + return context + class UpdateView(MasterDetailCrud.UpdateView): form_class = TramitacaoAdmEditForm @@ -593,12 +621,37 @@ class TramitacaoAdmCrud(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 DetailView(DocumentoAdministrativoMixin, MasterDetailCrud.DetailView): pass + class DeleteView(MasterDetailCrud.DeleteView): + + def delete(self, request, *args, **kwargs): + tramitacao = TramitacaoAdministrativo.objects.get( + id=self.kwargs['pk']) + documento = DocumentoAdministrativo.objects.get( + id=tramitacao.documento.id) + url = reverse( + 'sapl.protocoloadm:tramitacaoadministrativo_list', + kwargs={'pk': tramitacao.documento.id}) + + ultima_tramitacao = \ + documento.tramitacaoadministrativo_set.order_by( + '-data_tramitacao', + '-id').first() + + if tramitacao.pk != ultima_tramitacao.pk: + msg = _('Somente a última tramitação pode ser deletada!') + messages.add_message(request, messages.ERROR, msg) + return HttpResponseRedirect(url) + else: + tramitacao.delete() + return HttpResponseRedirect(url) + class DocumentoAcessorioAdministrativoCrud(MasterDetailCrud): model = DocumentoAcessorioAdministrativo diff --git a/sapl/templates/protocoloadm/tramitacaoadministrativo_form.html b/sapl/templates/protocoloadm/tramitacaoadministrativo_form.html new file mode 100644 index 000000000..5be26dd5c --- /dev/null +++ b/sapl/templates/protocoloadm/tramitacaoadministrativo_form.html @@ -0,0 +1,12 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% block extra_js %} + +{% endblock extra_js %} \ No newline at end of file