Browse Source

Adiciona tramitação em lote

pull/586/head
Eduardo Edson Batista Cordeiro Alves 8 years ago
parent
commit
35d43acb19
  1. 39
      sapl/materia/forms.py
  2. 5
      sapl/materia/urls.py
  3. 68
      sapl/materia/views.py
  4. 2
      sapl/templates/materia/em_lote/primeira_tramitacao.html
  5. 122
      sapl/templates/materia/em_lote/tramitacao.html

39
sapl/materia/forms.py

@ -818,3 +818,42 @@ class PrimeiraTramitacaoEmLoteFilterSet(django_filters.FilterSet):
self.form.helper.layout = Layout(
Fieldset(_('Primeira Tramitação'),
row1, row2, form_actions(save_label='Pesquisar')))
class TramitacaoEmLoteFilterSet(django_filters.FilterSet):
filter_overrides = {models.DateField: {
'filter_class': django_filters.DateFromToRangeFilter,
'extra': lambda f: {
'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')),
'widget': RangeWidgetOverride}
}}
class Meta:
model = MateriaLegislativa
fields = ['tipo', 'data_apresentacao',
'tramitacao__unidade_tramitacao_local', 'tramitacao__status']
def __init__(self, *args, **kwargs):
super(TramitacaoEmLoteFilterSet, self).__init__(
*args, **kwargs)
self.filters['tipo'].label = 'Tipo de Matéria'
self.filters['data_apresentacao'].label = 'Data (Inicial - Final)'
self.form.fields['tipo'].required = True
self.form.fields['data_apresentacao'].required = True
self.form.fields['tramitacao__status'].required = True
self.form.fields[
'tramitacao__unidade_tramitacao_local'].required = True
row1 = to_row([
('tipo', 4),
('tramitacao__unidade_tramitacao_local', 4),
('tramitacao__status', 4)])
row2 = to_row([('data_apresentacao', 12)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Tramitação em Lote'),
row1, row2, form_actions(save_label='Pesquisar')))

5
sapl/materia/urls.py

@ -18,7 +18,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
StatusTramitacaoCrud, TipoAutorCrud,
TipoDocumentoCrud, TipoFimRelatoriaCrud,
TipoMateriaCrud, TipoProposicaoCrud,
TramitacaoCrud, UnidadeTramitacaoCrud)
TramitacaoCrud, TramitacaoEmLoteView,
UnidadeTramitacaoCrud)
from .apps import AppConfig
@ -93,4 +94,6 @@ urlpatterns = [
url(r'^primeira-tramitacao-em-lote',
PrimeiraTramitacaoEmLoteView.as_view(),
name='primeira_tramitacao_em_lote'),
url(r'^tramitacao-em-lote', TramitacaoEmLoteView.as_view(),
name='tramitacao_em_lote'),
]

68
sapl/materia/views.py

@ -41,7 +41,8 @@ from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
DocumentoAcessorioForm, LegislacaoCitadaForm,
MateriaLegislativaFilterSet, NumeracaoForm,
PrimeiraTramitacaoEmLoteFilterSet, ProposicaoForm,
ReceberProposicaoForm, RelatoriaForm, TramitacaoForm,
ReceberProposicaoForm, RelatoriaForm,
TramitacaoEmLoteFilterSet, TramitacaoForm,
TramitacaoUpdateForm, UnidadeTramitacaoForm,
filtra_tramitacao_destino,
filtra_tramitacao_destino_and_status,
@ -1360,3 +1361,68 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView):
msg = _('Tramitação completa.')
messages.add_message(request, messages.SUCCESS, msg)
return self.get(request, self.kwargs)
class TramitacaoEmLoteView(PermissionRequiredMixin, FilterView):
filterset_class = TramitacaoEmLoteFilterSet
template_name = 'materia/em_lote/tramitacao.html'
permission_required = permissoes_materia()
def get_context_data(self, **kwargs):
context = super(TramitacaoEmLoteView, self).get_context_data(**kwargs)
context['title'] = _('Tramitação em Lote')
# Verifica se os campos foram preenchidos
if not self.filterset.form.is_valid():
return context
qr = self.request.GET.copy()
context['unidade_tramitacao'] = UnidadeTramitacao.objects.all()
context['status_tramitacao'] = StatusTramitacao.objects.all()
context['turnos_tramitacao'] = TURNO_TRAMITACAO_CHOICES
context['urgente_tramitacao'] = YES_NO_CHOICES
context['unidade_local'] = UnidadeTramitacao.objects.get(
id=qr['tramitacao__unidade_tramitacao_local'])
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
return context
def post(self, request, *args, **kwargs):
marcadas = request.POST.getlist('materia_id')
if len(marcadas) == 0:
msg = _('Nenhuma máteria foi selecionada.')
messages.add_message(request, messages.ERROR, msg)
return self.get(request, self.kwargs)
if request.POST['data_encaminhamento']:
data_encaminhamento = datetime.strptime(
request.POST['data_encaminhamento'], "%d/%m/%Y")
else:
data_encaminhamento = None
if request.POST['data_fim_prazo']:
data_fim_prazo = datetime.strptime(
request.POST['data_fim_prazo'], "%d/%m/%Y")
else:
data_fim_prazo = None
import ipdb; ipdb.set_trace()
for materia_id in marcadas:
Tramitacao.objects.create(
materia_id=materia_id,
data_tramitacao=datetime.strptime(
request.POST['data_tramitacao'], "%d/%m/%Y"),
data_encaminhamento=data_encaminhamento,
data_fim_prazo=data_fim_prazo,
unidade_tramitacao_local_id=request.POST[
'unidade_tramitacao_local'],
unidade_tramitacao_destino_id=request.POST[
'unidade_tramitacao_destino'],
urgente=request.POST['urgente'],
status_id=request.POST['status'],
turno=request.POST['turno'],
texto=request.POST['texto']
)
msg = _('Tramitação completa.')
messages.add_message(request, messages.SUCCESS, msg)
return self.get(request, self.kwargs)

2
sapl/templates/materia/em_lote/primeira_tramitacao.html

@ -4,7 +4,7 @@
{% block sections_nav %}
<ul class="nav nav-pills navbar-right">
<li class="active"><a href="{% url 'sapl.materia:primeira_tramitacao_em_lote' %}">Primeira Tramitação</a></li>
<li class=""><a href="">Tramitação em Lote</a></li>
<li class=""><a href="{% url 'sapl.materia:tramitacao_em_lote' %}">Tramitação em Lote</a></li>
</ul>
{% endblock sections_nav %}
{% block detail_content %}

122
sapl/templates/materia/em_lote/tramitacao.html

@ -0,0 +1,122 @@
{% extends "crud/detail.html" %}
{% load i18n crispy_forms_tags %}
{% block actions %}{% endblock %}
{% block sections_nav %}
<ul class="nav nav-pills navbar-right">
<li class=""><a href="{% url 'sapl.materia:primeira_tramitacao_em_lote' %}">Primeira Tramitação</a></li>
<li class="active"><a href="{% url 'sapl.materia:tramitacao_em_lote' %}">Tramitação em Lote</a></li>
</ul>
{% endblock sections_nav %}
{% block detail_content %}
{% if not filter_url %}
{% crispy filter.form %}
{% endif %}
{% if filter_url %}
{% if object_list|length > 0 %}
{% if object_list|length == 1 %}
<h3 style="text-align: right;">{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3>
{% else %}
<h3 style="text-align: right;">Foram encontradas {{object_list|length}} matérias.</h3>
{% endif %}
{% else %}
<tr><td><h3 style="text-align: right;">Nenhuma matéria encontrada.</h3></td></tr>
{% endif %}
<form method="POST">
{% csrf_token %}
<fieldset>
<legend>1. Detalhes da tramitação:</legend>
<div class="row">
<div class="col-md-4">
<label>Data da Tramitação*</label>
<input type="text" name="data_tramitacao" class="form-control dateinput" required="True">
</div>
<div class="col-md-4">
<label>Data Encaminhamento</label>
<input type="text" name="data_encaminhamento" class="form-control dateinput">
</div>
<div class="col-md-4">
<label>Data Fim do Prazo</label>
<input type="text" name="data_fim_prazo" class="form-control dateinput">
</div>
</div>
<div class="row">
<div class="col-md-6">
<label>Unidade Local*</label>
<select name="unidade_tramitacao_local" class="form-control" required="True">
<option value="{{unidade_local.id}}">{{unidade_local}}</option>
</select>
</div>
<div class="col-md-6">
<label>Unidade Destino*</label>
<select name="unidade_tramitacao_destino" class="form-control" required="True">
<option>----------</option>
{% for u in unidade_tramitacao %} <option value="{{u.id}}">{{u}}</option> {% endfor %}
</select>
</div>
</div>
<div class="row">
<div class="col-md-4">
<label>Status*</label>
<select name="status" class="form-control" required="True">
<option>----------</option>
{% for s in status_tramitacao %} <option value="{{s.id}}">{{s}}</option> {% endfor %}
</select>
</div>
<div class="col-md-4">
<label>Urgente?*</label>
<select name="urgente" class="form-control" required="True">
<option>----------</option>
{% for u in urgente_tramitacao %} <option value="{{u|first}}">{{u|last}}</option> {% endfor %}
</select>
</div>
<div class="col-md-4">
<label>Turno</label>
<select name="turno" class="form-control">
<option>----------</option>
{% for t in turnos_tramitacao %} <option value="{{t|first}}">{{t|last}}</option> {% endfor %}
</select>
</div>
</div>
<div class="row">
<div class="col-md-12">
<label>Texto de Ação*</label>
<textarea name="texto" class="textarea form-control" cols="40" rows="10" required="True"></textarea>
</div>
</div>
</fieldset>
<br /><br /><br />
<fieldset>
<legend>2. Selecione as matérias para primeira tramitação:</legend>
<table class="table table-striped table-hover">
<thead>
<tr><th>Matéria</th></tr>
</thead>
<tbody>
{% for materia in object_list %}
<tr>
<td>
<input type="checkbox" name="materia_id" value="{{materia.id}}" {% if check %} checked {% endif %}/>
{{materia.tipo.sigla}} {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
<input type="submit" value="Salvar" class="btn btn-primary"S>
</form>
{% endif %}
{% endblock detail_content %}
Loading…
Cancel
Save