From acc619c13e00b270f116b266ae989926079d2ffe Mon Sep 17 00:00:00 2001 From: Victor Fabre Date: Mon, 4 Jun 2018 17:10:06 -0300 Subject: [PATCH] Fix #1960 (#1962) * Fix #1960 * Tira ipdb --- sapl/protocoloadm/forms.py | 57 ++++++++++++++++++- sapl/protocoloadm/urls.py | 5 +- sapl/protocoloadm/views.py | 22 ++++++- .../protocoloadm/protocoloadm_detail.html | 1 + 4 files changed, 82 insertions(+), 3 deletions(-) diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 19d9d9b81..7d68ad9c3 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -758,6 +758,7 @@ class DocumentoAdministrativoForm(ModelForm): super(DocumentoAdministrativoForm, self).__init__( *args, **kwargs) + class DesvincularDocumentoForm(ModelForm): numero = forms.CharField(required=True, @@ -816,4 +817,58 @@ class DesvincularDocumentoForm(ModelForm): ) ) super(DesvincularDocumentoForm, self).__init__( - *args, **kwargs) \ No newline at end of file + *args, **kwargs) + + +class DesvincularMateriaForm(forms.Form): + + numero = forms.CharField(required=True, + label=_('Número da Matéria')) + ano = forms.ChoiceField(required=True, + label=_('Ano da Matéria'), + choices=RANGE_ANOS, + widget=forms.Select(attrs={'class': 'selector'})) + tipo = forms.ModelChoiceField(label=_('Tipo de Matéria'), + required=True, + queryset=TipoMateriaLegislativa.objects.all(), + empty_label='------') + + def clean(self): + super(DesvincularMateriaForm, self).clean() + + cleaned_data = self.cleaned_data + + if not self.is_valid(): + return cleaned_data + + numero = cleaned_data['numero'] + ano = cleaned_data['ano'] + tipo = cleaned_data['tipo'] + + try: + materia = MateriaLegislativa.objects.get(numero=numero, ano=ano, tipo=tipo) + if not materia.numero_protocolo: + raise forms.ValidationError( + _("%s %s/%s não se encontra vinculada a nenhum protocolo" % (tipo, numero, ano))) + except ObjectDoesNotExist: + raise forms.ValidationError( + _("%s %s/%s não existe" % (tipo, numero, ano))) + + return cleaned_data + + def __init__(self, *args, **kwargs): + super(DesvincularMateriaForm, self).__init__(*args, **kwargs) + + row1 = to_row( + [('numero', 4), + ('ano', 4), + ('tipo', 4)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + Fieldset(_('Identificação da Matéria'), + row1, + HTML(" "), + form_actions(label='Desvincular') + ) + ) diff --git a/sapl/protocoloadm/urls.py b/sapl/protocoloadm/urls.py index de5c79b58..223c38014 100644 --- a/sapl/protocoloadm/urls.py +++ b/sapl/protocoloadm/urls.py @@ -16,7 +16,8 @@ from sapl.protocoloadm.views import (AnularProtocoloAdmView, TramitacaoAdmCrud, atualizar_numero_documento, doc_texto_integral, - DesvincularDocumentoView) + DesvincularDocumentoView, + DesvincularMateriaView) from .apps import AppConfig @@ -64,6 +65,8 @@ urlpatterns_protocolo = [ AnularProtocoloAdmView.as_view(), name='anular_protocolo'), url(r'^protocoloadm/desvincular-documento', DesvincularDocumentoView.as_view(), name='desvincular_documento'), + url(r'^protocoloadm/desvincular-materia', + DesvincularMateriaView.as_view(), name='desvincular_materia'), url(r'^protocoloadm/protocolar-mat', ProtocoloMateriaView.as_view(), name='protocolar_mat'), diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 8aa51d814..7dd7206c7 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -13,6 +13,7 @@ from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.views.generic import CreateView, ListView from django.views.generic.base import RedirectView, TemplateView +from django.views.generic.edit import FormView from django_filters.views import FilterView import sapl @@ -30,7 +31,7 @@ from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, DocumentoAdministrativoFilterSet, DocumentoAdministrativoForm, ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloMateriaForm, - TramitacaoAdmEditForm, TramitacaoAdmForm, DesvincularDocumentoForm) + TramitacaoAdmEditForm, TramitacaoAdmForm, DesvincularDocumentoForm, DesvincularMateriaForm) from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo, StatusTramitacaoAdministrativo, TipoDocumentoAdministrativo, TramitacaoAdministrativo) @@ -722,6 +723,7 @@ def atualizar_numero_documento(request): return response + class DesvincularDocumentoView(PermissionRequiredMixin, CreateView): template_name = 'protocoloadm/anular_protocoloadm.html' form_class = DesvincularDocumentoForm @@ -738,3 +740,21 @@ class DesvincularDocumentoView(PermissionRequiredMixin, CreateView): documento.protocolo = None documento.save() return redirect(self.get_success_url()) + + +class DesvincularMateriaView(PermissionRequiredMixin, FormView): + template_name = 'protocoloadm/anular_protocoloadm.html' + form_class = DesvincularMateriaForm + form_valid_message = _('Matéria desvinculado com sucesso!') + permission_required = ('protocoloadm.action_anular_protocolo', ) + + def get_success_url(self): + return reverse('sapl.protocoloadm:protocolo') + + def form_valid(self, form): + materia = MateriaLegislativa.objects.get(numero=form.cleaned_data['numero'], + ano=form.cleaned_data['ano'], + tipo=form.cleaned_data['tipo']) + materia.numero_protocolo = None + materia.save() + return redirect(self.get_success_url()) \ No newline at end of file diff --git a/sapl/templates/protocoloadm/protocoloadm_detail.html b/sapl/templates/protocoloadm/protocoloadm_detail.html index e9da072ec..3db9ea6d8 100644 --- a/sapl/templates/protocoloadm/protocoloadm_detail.html +++ b/sapl/templates/protocoloadm/protocoloadm_detail.html @@ -6,5 +6,6 @@ {% trans 'Protocolar Documento' %} {% trans 'Anular Protocolo' %} {% trans 'Desvincular Documentos' %} + {% trans 'Desvincular Matérias' %} {% endblock editions %}