diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index efe445aa5..82dd8248a 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -601,32 +601,44 @@ class TramitacaoUpdateForm(TramitacaoForm): if not self.is_valid(): return self.cleaned_data + cd = self.cleaned_data + obj = self.instance + ultima_tramitacao = Tramitacao.objects.filter( - materia_id=self.instance.materia_id).order_by( + materia_id=obj.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: + if ultima_tramitacao != obj: + if cd['unidade_tramitacao_destino'] != \ + obj.unidade_tramitacao_destino: self.logger.error("Você não pode mudar a Unidade de Destino desta " "tramitação para {}, pois irá conflitar com a Unidade " "Local da tramitação seguinte ({})." - .format(self.cleaned_data['unidade_tramitacao_destino'], - self.instance.unidade_tramitacao_destino)) + .format(cd['unidade_tramitacao_destino'], + obj.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') + + # Se não houve qualquer alteração em um dos dados, mantém o usuário e ip + if not (cd['data_tramitacao'] != obj.data_tramitacao or \ + cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or \ + cd['status'] != obj.status or cd['texto'] != obj.texto or \ + cd['data_encaminhamento'] != obj.data_encaminhamento or \ + cd['data_fim_prazo'] != obj.data_fim_prazo or \ + cd['urgente'] != obj.urgente or \ + cd['turno'] != obj.turno): + cd['user'] = obj.user + cd['ip'] = obj.ip + + cd['data_tramitacao'] = obj.data_tramitacao + cd['unidade_tramitacao_local'] = obj.unidade_tramitacao_local - self.cleaned_data['data_tramitacao'] = \ - self.instance.data_tramitacao - self.cleaned_data['unidade_tramitacao_local'] = \ - self.instance.unidade_tramitacao_local - - return self.cleaned_data + return cd class LegislacaoCitadaForm(ModelForm): diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 8f9167db1..a65746ee0 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1252,6 +1252,12 @@ class TramitacaoCrud(MasterDetailCrud): layout_key = 'TramitacaoUpdate' + def get_initial(self): + initial = super(UpdateView, self).get_initial() + initial['ip'] = get_client_ip(self.request) + initial['user'] = self.request.user + return initial + def form_valid(self, form): self.object = form.save() username = self.request.user.username diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index c783effc2..3f237f18f 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -762,30 +762,40 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): if not self.is_valid(): return self.cleaned_data + cd = self.cleaned_data + obj = self.instance + ultima_tramitacao = TramitacaoAdministrativo.objects.filter( - documento_id=self.instance.documento_id).order_by( + documento_id=obj.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: + if ultima_tramitacao != obj: + if cd['unidade_tramitacao_destino'] != \ + obj.unidade_tramitacao_destino: self.logger.error('Você não pode mudar a Unidade de Destino desta ' 'tramitação (id={}), pois irá conflitar com a Unidade ' - 'Local da tramitação seguinte'.format(self.instance.documento_id)) + 'Local da tramitação seguinte'.format(obj.documento_id)) 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 + # Se não houve qualquer alteração em um dos dados, mantém o usuário e ip + if not (cd['data_tramitacao'] != obj.data_tramitacao or \ + cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or \ + cd['status'] != obj.status or cd['texto'] != obj.texto or \ + cd['data_encaminhamento'] != obj.data_encaminhamento or \ + cd['data_fim_prazo'] != obj.data_fim_prazo): + cd['user'] = obj.user + cd['ip'] = obj.ip - return self.cleaned_data + cd['data_tramitacao'] = obj.data_tramitacao + cd['unidade_tramitacao_local'] = obj.unidade_tramitacao_local + + return cd class AnexadoForm(ModelForm): diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 252637e88..ff4852dde 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -1156,6 +1156,12 @@ class TramitacaoAdmCrud(MasterDetailCrud): form_class = TramitacaoAdmEditForm logger = logging.getLogger(__name__) + def get_initial(self): + initial = super(UpdateView, self).get_initial() + initial['ip'] = get_client_ip(self.request) + initial['user'] = self.request.user + return initial + def form_valid(self, form): self.object = form.save() username = self.request.user.username @@ -1164,7 +1170,6 @@ class TramitacaoAdmCrud(MasterDetailCrud): post=self.object, request=self.request) except Exception as e: - # TODO log error self.logger.error('user=' + username + '. Tramitação criada, mas e-mail de acompanhamento de documento ' 'não enviado. A não configuração do servidor de e-mail ' 'impede o envio de aviso de tramitação. ' + str(e)) diff --git a/sapl/templates/materia/tramitacao_detail.html b/sapl/templates/materia/tramitacao_detail.html index b01e62d24..4aaca09b6 100644 --- a/sapl/templates/materia/tramitacao_detail.html +++ b/sapl/templates/materia/tramitacao_detail.html @@ -1,7 +1,6 @@ {% extends "crud/detail.html" %} {% load i18n %} -{% block actions %} {% endblock %} {% block detail_content %} {{ block.super }} {% if user.is_superuser %}