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..0a8b466c4 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,23 @@ 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'])
+ tramitacao_set.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/materia/em_lote/tramitacao.html b/sapl/templates/materia/em_lote/tramitacao.html
index 08483d88d..9ed94c84d 100644
--- a/sapl/templates/materia/em_lote/tramitacao.html
+++ b/sapl/templates/materia/em_lote/tramitacao.html
@@ -91,7 +91,7 @@