Browse Source

Merge pull request #583 from interlegis/582-acessorio-em-lote

Fix #582 acessorio em lote
pull/586/head
Eduardo Edson Batista Cordeiro Alves 8 years ago
committed by GitHub
parent
commit
971ec485bf
  1. 31
      sapl/materia/forms.py
  2. 8
      sapl/materia/urls.py
  3. 51
      sapl/materia/views.py
  4. 2
      sapl/templates/base.html
  5. 101
      sapl/templates/materia/acessorio_lote.html

31
sapl/materia/forms.py

@ -755,3 +755,34 @@ class AutorForm(ModelForm):
u.groups.add(grupo) u.groups.add(grupo)
return autor return autor
class AcessorioEmLoteFilterSet(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']
def __init__(self, *args, **kwargs):
super(AcessorioEmLoteFilterSet, 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
row1 = to_row([('tipo', 12)])
row2 = to_row([('data_apresentacao', 12)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Documentos Acessórios em Lote'),
row1, row2, form_actions(save_label='Pesquisar')))

8
sapl/materia/urls.py

@ -5,8 +5,9 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
AcompanhamentoMateriaView, AnexadaCrud, AcompanhamentoMateriaView, AnexadaCrud,
AutorCrud, AutoriaCrud, ConfirmarEmailView, AutorCrud, AutoriaCrud, ConfirmarEmailView,
ConfirmarProposicao, DespachoInicialCrud, ConfirmarProposicao, DespachoInicialCrud,
DocumentoAcessorioCrud, LegislacaoCitadaCrud, DocumentoAcessorioCrud,
MateriaLegislativaCrud, DocumentoAcessorioEmLoteView,
LegislacaoCitadaCrud, MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView, MateriaLegislativaPesquisaView, MateriaTaView,
NumeracaoCrud, OrgaoCrud, OrigemCrud, NumeracaoCrud, OrgaoCrud, OrigemCrud,
ProposicaoCrud, ProposicaoDevolvida, ProposicaoCrud, ProposicaoDevolvida,
@ -86,4 +87,7 @@ urlpatterns = [
url(r'^materia/(?P<pk>\d+)/acompanhar-excluir$', url(r'^materia/(?P<pk>\d+)/acompanhar-excluir$',
AcompanhamentoExcluirView.as_view(), AcompanhamentoExcluirView.as_view(),
name='acompanhar_excluir'), name='acompanhar_excluir'),
url(r'^acessorio-em-lote', DocumentoAcessorioEmLoteView.as_view(),
name='acessorio_em_lote'),
] ]

51
sapl/materia/views.py

@ -4,7 +4,6 @@ from string import ascii_letters, digits
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button from crispy_forms.layout import HTML, Button
from django.db.models import Q
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
@ -13,6 +12,7 @@ from django.contrib.auth.tokens import default_token_generator
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http.response import HttpResponseRedirect from django.http.response import HttpResponseRedirect
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template import Context, loader from django.template import Context, loader
@ -34,8 +34,9 @@ from sapl.utils import (autor_label, autor_modal, gerar_hash_arquivo,
get_base_url, permissao_tb_aux, permissoes_autor, get_base_url, permissao_tb_aux, permissoes_autor,
permissoes_materia, permissoes_protocoloadm) permissoes_materia, permissoes_protocoloadm)
from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutorForm, from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm,
AutoriaForm, ConfirmarProposicaoForm, DespachoInicialForm, AnexadaForm, AutorForm, AutoriaForm,
ConfirmarProposicaoForm, DespachoInicialForm,
DocumentoAcessorioForm, LegislacaoCitadaForm, DocumentoAcessorioForm, LegislacaoCitadaForm,
MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm, MateriaLegislativaFilterSet, NumeracaoForm, ProposicaoForm,
ReceberProposicaoForm, RelatoriaForm, TramitacaoForm, ReceberProposicaoForm, RelatoriaForm, TramitacaoForm,
@ -1246,3 +1247,47 @@ def do_envia_email_tramitacao(request, materia):
enviar_emails(sender, recipients, messages) enviar_emails(sender, recipients, messages)
return None return None
class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView):
filterset_class = AcessorioEmLoteFilterSet
template_name = 'materia/acessorio_lote.html'
permission_required = permissoes_materia()
def get_context_data(self, **kwargs):
context = super(DocumentoAcessorioEmLoteView,
self).get_context_data(**kwargs)
context['title'] = _('Documentos Acessórios em Lote')
# Verifica se os campos foram preenchidos
if not self.filterset.form.is_valid():
return context
qr = self.request.GET.copy()
context['tipos_docs'] = TipoDocumento.objects.all()
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)
tipo = TipoDocumento.objects.get(descricao=request.POST['tipo'])
for materia_id in marcadas:
DocumentoAcessorio.objects.create(
materia_id=materia_id,
tipo=tipo,
arquivo=request.POST['arquivo'],
nome=request.POST['nome'],
data=datetime.strptime(request.POST['data'], "%d/%m/%Y"),
autor=Autor.objects.get(id=request.POST['autor']),
ementa=request.POST['ementa']
)
msg = _('Documento(s) criado(s).')
messages.add_message(request, messages.SUCCESS, msg)
return self.get(request, self.kwargs)

2
sapl/templates/base.html

@ -83,8 +83,8 @@
{% endif %} {% endif %}
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:pesquisar_materia' %}">Matérias Legislativas</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:pesquisar_materia' %}">Matérias Legislativas</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.sessao:pesquisar_sessao' %}">Sessões Plenárias</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.sessao:pesquisar_sessao' %}">Sessões Plenárias</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.sessao:list_pauta_sessao' %}">Pautas das Sessões</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.sessao:list_pauta_sessao' %}">Pautas das Sessões</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:acessorio_em_lote' %}">Acessório em Lote</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Atas das Sessões</a></li> <!-- <li class="nav__sub-item"><a class="nav__sub-link" href="#">Atas das Sessões</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Reuniões das Comissões</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="#">Reuniões das Comissões</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Tramitação em Lote</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="#">Tramitação em Lote</a></li>

101
sapl/templates/materia/acessorio_lote.html

@ -0,0 +1,101 @@
{% extends "crud/detail.html" %}
{% load i18n crispy_forms_tags %}
{% block actions %}{% endblock %}
{% block sections_nav %}{% endblock %}
{% block detail_content %}
{% if not filter_url %}
{% crispy filter.form %}
{% endif %}
{% if filter_url %}
{% if object_list.count > 0 %}
{% if object_list.count == 1 %}
<h3 style="text-align: right;">{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3>
{% else %}
<h3 style="text-align: right;">{% blocktrans with object_list.count as total_materias %}Foram encontradas {{total_materias}} matérias.{% endblocktrans %}</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>Documento Acessório</legend>
<div class="row">
<div class="col-md-4">
<label>Tipo*</label>
<select name="tipo" class="form-control" required="True">
{% for t in tipos_docs %} <option>{{t}}</option> {% endfor %}
</select>
</div>
<div class="col-md-4">
<label>Nome*</label>
<input type="text" name="nome" class="form-control" required="True">
</div>
<div class="col-md-4">
<label>Data*</label>
<input type="text" name="data" class="form-control dateinput" required="True">
</div>
</div>
<div class="row">
<div class="col-md-12">
<label>Autor:</label>
<span id="nome_autor" name="nome_autor"> </span>
</div>
<div id="modal_autor" title="Selecione o Autor" align="center">
<input id="q" type="text" /> <input id="pesquisar" type="submit" value="Pesquisar" class="btn btn-primary btn-sm"/>
<div id="div-resultado"></div>
<input type="submit" id="selecionar" value="Selecionar" hidden="true" />
</div>
<div class="row-fluid">
<div class="col-md-0"><input id="id_autor" maxlength="50" name="autor" type="hidden" /></div>
<div class="col-md-2"><input type="button" name="pesquisar" value="Pesquisar Autor" class="btn btn btn-primary btn-sm" id="button-id-pesquisar"/></div>
<div class="col-md-10"><input type="button" name="limpar" value="Limpar Autor" class="btn btn btn-primary btn-sm" id="button-id-limpar"/></div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<label>Ementa</label>
<textarea name="ementa" class="textarea form-control" cols="40" rows="10"></textarea>
</div>
</div>
<div class="row">
<div class="col-md-12">
<label>Texto Integral*</label>
<input type="file" name="arquivo" required="True">
</div>
</div>
</fieldset>
<br /><br /><br />
<fieldset>
<legend>Matérias para inclusão do Documento Acessório</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.numero}}/{{materia.ano}} - {{materia.tipo.descricao}}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
<input type="submit" value="Salvar" class="btn btn-primary"S>
</form>
{% endif %}
{% endblock detail_content %}
Loading…
Cancel
Save