diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index d14fad28c..20518cfdd 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -32,7 +32,8 @@ from sapl.crispy_layout_mixin import (SaplFormLayout, form_actions, to_column, to_row) from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto, MateriaLegislativa, Orgao, RegimeTramitacao, - TipoDocumento, TipoProposicao) + TipoDocumento, TipoProposicao, StatusTramitacao, + UnidadeTramitacao) from sapl.norma.models import (LegislacaoCitada, NormaJuridica, TipoNormaJuridica) from sapl.parlamentares.models import Legislatura @@ -2032,3 +2033,67 @@ class FichaSelecionaForm(forms.Form): form_actions(label='Gerar Impresso') ) ) + + +class ExcluirTramitacaoEmLote(forms.Form): + + data_tramitacao = forms.DateField(required=True, + label=_('Data da Tramitação')) + + unidade_tramitacao_local = forms.ModelChoiceField(label=_('Unidade Local'), + required=True, + queryset=UnidadeTramitacao.objects.all(), + empty_label='------') + + unidade_tramitacao_destino = forms.ModelChoiceField(label=_('Unidade Destino'), + required=True, + queryset=UnidadeTramitacao.objects.all(), + empty_label='------') + + status = forms.ModelChoiceField(label=_('Status'), + required=True, + queryset=StatusTramitacao.objects.all(), + empty_label='------') + + def clean(self): + super(ExcluirTramitacaoEmLote, self).clean() + + cleaned_data = self.cleaned_data + + if not self.is_valid(): + return cleaned_data + + data_tramitacao = cleaned_data['data_tramitacao'] + unidade_tramitacao_local = cleaned_data['unidade_tramitacao_local'] + unidade_tramitacao_destino = cleaned_data['unidade_tramitacao_destino'] + status = cleaned_data['status'] + + tramitacao_set = Tramitacao.objects.filter(data_tramitacao=data_tramitacao, + unidade_tramitacao_local=unidade_tramitacao_local, + unidade_tramitacao_destino=unidade_tramitacao_destino, + status=status) + if not tramitacao_set.exists(): + raise forms.ValidationError( + _("Não existem tramitações com os dados informados.")) + + return cleaned_data + + def __init__(self, *args, **kwargs): + super(ExcluirTramitacaoEmLote, self).__init__(*args, **kwargs) + + row1 = to_row( + [('data_tramitacao', 6), + ('status', 6),]) + row2 = to_row( + [('unidade_tramitacao_local', 6), + ('unidade_tramitacao_destino', 6)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + Fieldset(_('Dados das Tramitações'), + row1, + row2, + HTML(" "), + form_actions(label='Excluir') + ) + ) diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 934c4dbac..f2c89c908 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -23,7 +23,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, TipoFimRelatoriaCrud, TipoMateriaCrud, TipoProposicaoCrud, TramitacaoCrud, TramitacaoEmLoteView, UnidadeTramitacaoCrud, - proposicao_texto, recuperar_materia) + proposicao_texto, recuperar_materia, + ExcluirTramitacaoEmLoteView) from sapl.norma.views import NormaPesquisaSimplesView from .apps import AppConfig @@ -90,6 +91,8 @@ urlpatterns_materia = [ name='primeira_tramitacao_em_lote'), url(r'^materia/tramitacao-em-lote', TramitacaoEmLoteView.as_view(), name='tramitacao_em_lote'), + url(r'^materia/excluir-tramitacao-em-lote', ExcluirTramitacaoEmLoteView.as_view(), + name='excluir_tramitacao_em_lote'), ] diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 807db3d9c..d5c4884c9 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -57,7 +57,8 @@ from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, TramitacaoEmLoteFilterSet, UnidadeTramitacaoForm, filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, - filtra_tramitacao_status) + filtra_tramitacao_status, + ExcluirTramitacaoEmLote) from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, DespachoInicial, DocumentoAcessorio, MateriaAssunto, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, @@ -1972,3 +1973,27 @@ class FichaSelecionaView(PermissionRequiredMixin, FormView): return gerar_pdf_impressos(self.request, context, 'materia/impressos/ficha_pdf.html') + + +class ExcluirTramitacaoEmLoteView(PermissionRequiredMixin, FormView): + + template_name = 'materia/em_lote/excluir_tramitacao.html' + permission_required = ('materia.add_tramitacao',) + form_class = ExcluirTramitacaoEmLote + form_valid_message = _('Tramitações excluídas com sucesso!') + + def get_success_url(self): + return reverse('sapl.materia:excluir_tramitacao_em_lote') + + def form_valid(self, form): + + tramitacao_set = Tramitacao.objects.filter(data_tramitacao=form.cleaned_data['data_tramitacao'], + unidade_tramitacao_local=form.cleaned_data['unidade_tramitacao_local'], + unidade_tramitacao_destino=form.cleaned_data['unidade_tramitacao_destino'], + status=form.cleaned_data['status']) + for tramitacao in tramitacao_set: + materia = tramitacao.materia + if tramitacao == materia.tramitacao_set.last(): + tramitacao.delete() + + return redirect(self.get_success_url()) \ No newline at end of file diff --git a/sapl/templates/materia/em_lote/excluir_tramitacao.html b/sapl/templates/materia/em_lote/excluir_tramitacao.html new file mode 100644 index 000000000..b74faa593 --- /dev/null +++ b/sapl/templates/materia/em_lote/excluir_tramitacao.html @@ -0,0 +1,7 @@ +{% extends "crud/detail.html" %} +{% load i18n crispy_forms_tags %} + +{% block actions %}{% endblock %} +{% block detail_content %} + {% crispy form %} +{% endblock detail_content %} \ No newline at end of file diff --git a/sapl/templates/navbar.yaml b/sapl/templates/navbar.yaml index c997e2e41..b80cb7acd 100644 --- a/sapl/templates/navbar.yaml +++ b/sapl/templates/navbar.yaml @@ -54,6 +54,9 @@ - title: {% trans 'Tramitação em Lote' %} url: sapl.materia:primeira_tramitacao_em_lote check_permission: materia.list_tramitacao {% comment %} FIXME transformar para checagens de menu_[funcionalidade]{% endcomment%} + - title: {% trans 'Excluir Tramitação em Lote' %} + url: sapl.materia:excluir_tramitacao_em_lote + check_permission: materia.list_tramitacao {% comment %} FIXME transformar para checagens de menu_[funcionalidade]{% endcomment%} - title: {% trans 'Normas Jurídicas' %} children: