Browse Source

Merge branch 'master' of github.com:interlegis/sapl

pull/534/head
Eduardo Calil 9 years ago
parent
commit
73a4000cc0
  1. 2
      .travis.yml
  2. 2
      requirements/dev-requirements.txt
  3. 4
      sapl/base/urls.py
  4. 9
      sapl/materia/forms.py
  5. 12
      sapl/materia/tests/test_materia.py
  6. 3
      sapl/materia/urls.py
  7. 39
      sapl/materia/views.py
  8. 5
      sapl/parlamentares/views.py
  9. 7
      sapl/protocoloadm/views.py
  10. 4
      sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
  11. 8
      sapl/relatorios/views.py
  12. 2
      sapl/sessao/forms.py
  13. 9
      sapl/sessao/urls.py
  14. 13
      sapl/sessao/views.py
  15. 2
      sapl/templates/base.html
  16. 42
      sapl/templates/base/relatorios_list.html
  17. 2
      sapl/templates/index.html
  18. 3
      sapl/templates/materia/layouts.yaml
  19. 9
      sapl/templates/materia/proposicao_detail.html
  20. 100
      sapl/utils.py

2
.travis.yml

@ -18,5 +18,5 @@ before_script:
script: script:
- ./manage.py migrate - ./manage.py migrate
- ./manage.py bower install - ./manage.py bower install
- py.test - py.test --create-db
# - ./test_and_check_qa.sh # - ./test_and_check_qa.sh

2
requirements/dev-requirements.txt

@ -1,7 +1,7 @@
-r test-requirements.txt -r test-requirements.txt
autopep8==1.2.4 autopep8==1.2.4
beautifulsoup4==4.4.1 beautifulsoup4==4.4.1
django-debug-toolbar==1.4 django-debug-toolbar==1.5
ipdb==0.10.1 ipdb==0.10.1
pip-review==0.4 pip-review==0.4
pygraphviz==1.3.1 pygraphviz==1.3.1

4
sapl/base/urls.py

@ -4,7 +4,7 @@ from django.views.generic.base import TemplateView
from .apps import AppConfig from .apps import AppConfig
from .forms import LoginForm from .forms import LoginForm
from .views import CasaLegislativaCrud, HelpView, SistemaView from .views import CasaLegislativaCrud, HelpView
app_name = AppConfig.name app_name = AppConfig.name
@ -12,6 +12,8 @@ app_name = AppConfig.name
urlpatterns = [ urlpatterns = [
url(r'^sistema/', TemplateView.as_view(template_name='sistema.html')), url(r'^sistema/', TemplateView.as_view(template_name='sistema.html')),
url(r'^ajuda/', TemplateView.as_view(template_name='ajuda.html')), url(r'^ajuda/', TemplateView.as_view(template_name='ajuda.html')),
url(r'^relatorios/', TemplateView.as_view(
template_name='base/relatorios_list.html')),
url(r'^ajuda/(?P<topic>\w+)$', HelpView.as_view(), name='help_topic'), url(r'^ajuda/(?P<topic>\w+)$', HelpView.as_view(), name='help_topic'),
url(r'^ajuda/', TemplateView.as_view(template_name='ajuda/index.html'), url(r'^ajuda/', TemplateView.as_view(template_name='ajuda/index.html'),
name='help_base'), name='help_base'),

9
sapl/materia/forms.py

@ -100,8 +100,8 @@ class ProposicaoForm(ModelForm):
return texto_original return texto_original
def clean_data_envio(self): def clean_data_envio(self):
data_envio = self.cleaned_data.get('data_envio') data_envio = self.cleaned_data.get('data_envio') or None
if (not data_envio) and bool(self.initial): if (not data_envio) and len(self.initial) > 1:
data_envio = datetime.now() data_envio = datetime.now()
return data_envio return data_envio
@ -111,8 +111,6 @@ class ProposicaoForm(ModelForm):
if cleaned_data['tipo'].descricao == 'Parecer': if cleaned_data['tipo'].descricao == 'Parecer':
if self.instance.materia: if self.instance.materia:
cleaned_data['materia'] = self.instance.materia cleaned_data['materia'] = self.instance.materia
cleaned_data['autor'] = (
self.instance.materia.autoria_set.first().autor)
else: else:
try: try:
materia = MateriaLegislativa.objects.get( materia = MateriaLegislativa.objects.get(
@ -124,9 +122,6 @@ class ProposicaoForm(ModelForm):
raise ValidationError(msg) raise ValidationError(msg)
else: else:
cleaned_data['materia'] = materia cleaned_data['materia'] = materia
cleaned_data['autor'] = materia.autoria_set.first(
).autor
return cleaned_data return cleaned_data
def save(self, commit=False): def save(self, commit=False):

12
sapl/materia/tests/test_materia.py

@ -1,18 +1,16 @@
import pytest import pytest
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from model_mommy import mommy from model_mommy import mommy
from sapl.comissoes.models import Comissao, TipoComissao from sapl.comissoes.models import Comissao, TipoComissao
from sapl.materia.models import (Anexada, Autor, Autoria, DespachoInicial, from sapl.materia.models import (Anexada, Autor, Autoria, DespachoInicial,
DocumentoAcessorio, MateriaLegislativa, DocumentoAcessorio, MateriaLegislativa,
Numeracao, Proposicao, Numeracao, Proposicao, RegimeTramitacao,
RegimeTramitacao, StatusTramitacao, StatusTramitacao, TipoAutor, TipoDocumento,
TipoAutor, TipoProposicao, TipoDocumento, TipoMateriaLegislativa, TipoProposicao,
TipoMateriaLegislativa, Tramitacao, Tramitacao, UnidadeTramitacao)
UnidadeTramitacao)
from sapl.norma.models import (LegislacaoCitada, NormaJuridica, from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)

3
sapl/materia/urls.py

@ -34,7 +34,8 @@ urlpatterns = [
RelatoriaCrud.get_urls() + RelatoriaCrud.get_urls() +
DocumentoAcessorioCrud.get_urls())), DocumentoAcessorioCrud.get_urls())),
url(r'^confirmar/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$', url(r'''^confirmar/(?P<uidb64>[0-9A-Za-z_\-]+)/
(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$''',
ConfirmarEmailView.as_view(), name='confirmar_email'), ConfirmarEmailView.as_view(), name='confirmar_email'),
url(r'^proposicao/', include(ProposicaoCrud.get_urls())), url(r'^proposicao/', include(ProposicaoCrud.get_urls())),

39
sapl/materia/views.py

@ -18,8 +18,7 @@ from django.template import Context, loader
from django.utils.encoding import force_bytes from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import (CreateView, DetailView, ListView, from django.views.generic import CreateView, ListView, TemplateView, UpdateView
TemplateView, UpdateView)
from django_filters.views import FilterView from django_filters.views import FilterView
from sapl.base.models import CasaLegislativa from sapl.base.models import CasaLegislativa
@ -397,12 +396,21 @@ class ProposicaoCrud(Crud):
def get_initial(self): def get_initial(self):
try: try:
autor_id = Autor.objects.get(user=self.request.user.id).id autor_id = Autor.objects.get(user=self.request.user).id
except MultipleObjectsReturned: except MultipleObjectsReturned:
msg = _('Este usuário está relacionado a mais de um autor. ' + msg = _('Este usuário está relacionado a mais de um autor. ' +
'Operação cancelada') 'Operação cancelada')
messages.add_message(self.request, messages.ERROR, msg) messages.add_message(self.request, messages.ERROR, msg)
return redirect(self.get_success_url()) return redirect(self.get_success_url())
except ObjectDoesNotExist:
# FIXME: Pensar em uma melhor forma
tipo = TipoAutor.objects.get(name='Externo')
autor_id = Autor.objects.create(
user=self.request.user,
nome=str(self.request.user),
tipo=tipo).id
return {'autor': autor_id}
else: else:
return {'autor': autor_id} return {'autor': autor_id}
@ -410,6 +418,14 @@ class ProposicaoCrud(Crud):
form_class = ProposicaoForm form_class = ProposicaoForm
permission_required = permissoes_autor() permission_required = permissoes_autor()
def get_initial(self):
initial = self.initial.copy()
if self.object.materia:
initial['tipo_materia'] = self.object.materia.tipo.id
initial['numero_materia'] = self.object.materia.numero
initial['ano_materia'] = self.object.materia.ano
return initial
@property @property
def layout_key(self): def layout_key(self):
return 'ProposicaoCreate' return 'ProposicaoCreate'
@ -436,21 +452,6 @@ class ProposicaoCrud(Crud):
class DetailView(PermissionRequiredMixin, CrudDetailView): class DetailView(PermissionRequiredMixin, CrudDetailView):
permission_required = permissoes_autor() permission_required = permissoes_autor()
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
if self.object.materia:
context['form'].fields['tipo_materia'].initial = (
self.object.materia.tipo.id)
context['form'].fields['numero_materia'].initial = (
self.object.materia.numero)
context['form'].fields['ano_materia'].initial = (
self.object.materia.ano)
return context
@property
def layout_key(self):
return 'ProposicaoCreate'
def has_permission(self): def has_permission(self):
perms = self.get_permission_required() perms = self.get_permission_required()
if self.request.user.has_perms(perms): if self.request.user.has_perms(perms):
@ -488,7 +489,7 @@ class ProposicaoCrud(Crud):
return lista return lista
class DeleteView(PermissionRequiredMixin, CrudDeleteView): class DeleteView(PermissionRequiredMixin, CrudDeleteView):
permission_required = permissoes_materia() permission_required = {'materia.delete_proposicao'}
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
proposicao = Proposicao.objects.get(id=self.kwargs['pk']) proposicao = Proposicao.objects.get(id=self.kwargs['pk'])

5
sapl/parlamentares/views.py

@ -2,7 +2,6 @@ from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.datastructures import MultiValueDictKeyError from django.utils.datastructures import MultiValueDictKeyError
@ -10,8 +9,8 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView from django.views.generic import FormView
from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView, from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
CrudDeleteView, CrudDetailView, CrudDeleteView, CrudDetailView, CrudListView,
CrudListView, CrudUpdateView) CrudUpdateView)
from sapl.crud.masterdetail import MasterDetailCrud from sapl.crud.masterdetail import MasterDetailCrud
from sapl.utils import permissao_tb_aux, permissoes_parlamentares from sapl.utils import permissao_tb_aux, permissoes_parlamentares

7
sapl/protocoloadm/views.py

@ -24,10 +24,9 @@ from sapl.utils import (create_barcode, get_client_ip, permissoes_adm,
from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
DocumentoAdministrativoFilterSet, DocumentoAdministrativoFilterSet,
DocumentoAdministrativoForm, DocumentoAdministrativoForm, ProtocoloDocumentForm,
ProtocoloDocumentForm, ProtocoloFilterSet, ProtocoloFilterSet, ProtocoloMateriaForm,
ProtocoloMateriaForm, TramitacaoAdmEditForm, TramitacaoAdmEditForm, TramitacaoAdmForm)
TramitacaoAdmForm)
from .models import (Autor, DocumentoAcessorioAdministrativo, from .models import (Autor, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, Protocolo, DocumentoAdministrativo, Protocolo,
StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,

4
sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py

@ -235,8 +235,8 @@ def votacao(lst_votacao):
txt_ementa = votacao['txt_ementa'].replace('&', '&amp;') txt_ementa = votacao['txt_ementa'].replace('&', '&amp;')
tmp += '<td><para style="P4">' + txt_ementa + '</para></td>\n' tmp += '<td><para style="P4">' + txt_ementa + '</para></td>\n'
tmp += '<td><para style="P3"><b>' + \ tmp += '<td><para style="P3"><b>' + \
votacao['nom_resultado'] + '</b></para>\n' + '<para style="P3">' + \ str(votacao['nom_resultado']) + '</b></para>\n' + '<para style="P3">' + \
votacao['votacao_observacao'] + '</para></td></tr>\n' str(votacao['votacao_observacao']) + '</para></td></tr>\n'
tmp += '\t\t</blockTable>\n' tmp += '\t\t</blockTable>\n'
return tmp return tmp

8
sapl/relatorios/views.py

@ -16,6 +16,7 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, Orador,
OradorExpediente, OrdemDia, PresencaOrdemDia, OradorExpediente, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, RegistroVotacao, SessaoPlenaria,
SessaoPlenariaPresenca, TipoExpediente) SessaoPlenariaPresenca, TipoExpediente)
from sapl.settings import STATIC_ROOT
from sapl.utils import UF from sapl.utils import UF
from .templates import (pdf_capa_processo_gerar, from .templates import (pdf_capa_processo_gerar,
@ -49,12 +50,10 @@ def get_cabecalho(casa):
def get_imagem(casa): def get_imagem(casa):
if casa.logotipo: if casa.logotipo:
return casa.logotipo.path return casa.logotipo.path
else: else:
# TODO: recuperar de uma variavel de sistema return STATIC_ROOT + '/img/brasao_transp.gif'
return 'static/img/brasao_transp.gif'
def get_rodape(casa): def get_rodape(casa):
@ -564,7 +563,8 @@ def get_sessao_plenaria(sessao, casa):
materia=expediente_materia.materia).first() materia=expediente_materia.materia).first()
if numeracao is not None: if numeracao is not None:
dic_expediente_materia["des_numeracao"] = ( dic_expediente_materia["des_numeracao"] = (
str(numeracao.numero) + '/' + str(numeracao.ano)) str(numeracao.numero_materia) + '/' + str(
numeracao.ano_materia))
dic_expediente_materia["des_turno"] = ' ' dic_expediente_materia["des_turno"] = ' '
tram = Tramitacao.objects.filter( tram = Tramitacao.objects.filter(

2
sapl/sessao/forms.py

@ -13,7 +13,7 @@ from sapl.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import RANGE_DIAS_MES, RANGE_MESES, autor_label, autor_modal from sapl.utils import RANGE_DIAS_MES, RANGE_MESES, autor_label, autor_modal
from .models import Bancada, ExpedienteMateria, SessaoPlenaria, OrdemDia from .models import Bancada, ExpedienteMateria, OrdemDia, SessaoPlenaria
def pega_anos(): def pega_anos():

9
sapl/sessao/urls.py

@ -1,11 +1,10 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sapl.sessao.views import (AdicionarVariasMateriasExpediente, from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
AdicionarVariasMateriasOrdemDia, AdicionarVariasMateriasOrdemDia, BancadaCrud,
BancadaCrud, CargoBancadaCrud, CargoBancadaCrud, ExpedienteMateriaCrud,
ExpedienteMateriaCrud, ExpedienteView, ExpedienteView, MateriaOrdemDiaCrud, MesaView,
MateriaOrdemDiaCrud, MesaView, OradorCrud, OradorCrud, OradorExpedienteCrud, PainelView,
OradorExpedienteCrud, PainelView,
PautaExpedienteDetail, PautaOrdemDetail, PautaExpedienteDetail, PautaOrdemDetail,
PautaSessaoDetailView, PautaSessaoListView, PautaSessaoDetailView, PautaSessaoListView,
PesquisarSessaoPlenariaView, PesquisarSessaoPlenariaView,

13
sapl/sessao/views.py

@ -10,7 +10,7 @@ from django.http.response import HttpResponseRedirect
from django.utils.datastructures import MultiValueDictKeyError from django.utils.datastructures import MultiValueDictKeyError
from django.utils.html import strip_tags from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView, ListView, TemplateView from django.views.generic import ListView, TemplateView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from django_filters.views import FilterView from django_filters.views import FilterView
from rest_framework import generics from rest_framework import generics
@ -20,18 +20,16 @@ from sapl.crud.base import (Crud, CrudBaseMixin, CrudCreateView,
CrudUpdateView, make_pagination) CrudUpdateView, make_pagination)
from sapl.crud.masterdetail import MasterDetailCrud from sapl.crud.masterdetail import MasterDetailCrud
from sapl.materia.forms import pega_ultima_tramitacao from sapl.materia.forms import pega_ultima_tramitacao
from sapl.materia.models import (Autoria, DocumentoAcessorio, from sapl.materia.models import Autoria, DocumentoAcessorio, Tramitacao
TipoMateriaLegislativa, Tramitacao)
from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.materia.views import MateriaLegislativaPesquisaView
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.sessao.serializers import SessaoPlenariaSerializer from sapl.sessao.serializers import SessaoPlenariaSerializer
from sapl.utils import permissao_tb_aux, permissoes_painel, permissoes_sessao from sapl.utils import permissao_tb_aux, permissoes_painel, permissoes_sessao
from .forms import (AdicionarVariasMateriasFilterSet, from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
BancadaForm, ExpedienteForm, ExpedienteMateriaForm, ExpedienteForm, ExpedienteMateriaForm, ListMateriaForm,
ListMateriaForm, MesaForm, MesaForm, OrdemDiaForm, PresencaForm,
OrdemDiaForm, PresencaForm,
SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm, SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm) VotacaoNominalForm)
from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria, from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria,
@ -2059,7 +2057,6 @@ class AdicionarVariasMateriasExpediente(MateriaLegislativaPesquisaView):
return kwargs return kwargs
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# import ipdb; ipdb.set_trace()
context = super(MateriaLegislativaPesquisaView, context = super(MateriaLegislativaPesquisaView,
self).get_context_data(**kwargs) self).get_context_data(**kwargs)

2
sapl/templates/base.html

@ -62,7 +62,7 @@
<li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:receber-proposicao' %}">Receber Proposições</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:receber-proposicao' %}">Receber Proposições</a></li>
<!-- <li class="nav__sub-item"><a class="nav__sub-link" href="/materia">Protocolo Legislativo</a></li> --> <!-- <li class="nav__sub-item"><a class="nav__sub-link" href="/materia">Protocolo Legislativo</a></li> -->
{# <li class="nav__sub-item"><a class="nav__sub-link" href="">Protocolo Geral</a></li> #} {# <li class="nav__sub-item"><a class="nav__sub-link" href="">Protocolo Geral</a></li> #}
{# <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.protocoloadm:proposicao' %}">Proposições</a></li> #} {# <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'sapl.materia:proposicao' %}">Proposições</a></li> #}
</ul> </ul>
</li> </li>

42
sapl/templates/base/relatorios_list.html

@ -0,0 +1,42 @@
{% extends "base.html" %}
{% load i18n crispy_forms_tags %}
{% block base_content %}
<fieldset>
<legend>Relatórios Administrativos</legend>
<table class="table">
<thead>
<tr>
<th>Título</th>
<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="">Matérias em tramitação</a></td>
<td>Matérias Legislativas por Ano, Tipo, Local atual e Status da Tramitação informados.</td>
</tr>
<tr>
<td><a href="">Proposituras por Tipo, Autor e Ano</a></td>
<td>Número de matérias legislativas, agrupadas por Tipo e Autor e Ano selecionado.</td>
</tr>
<tr>
<td><a href="">Proposituras por Autor</a></td>
<td>Resumo de Proposituras de um determinado ano, agrupadas por Autor.</td>
</tr>
<tr>
<td><a href="">Presença nas sessões</a></td>
<td>Presença dos parlamentares nas sessões plenárias.</td>
</tr>
<tr>
<td><a href="">Atas</a></td>
<td>Matérias Legislativas por Ano, Tipo, Local atual e Status da Tramitação informados.</td>
</tr>
<tr>
<td><a href="">Histórico de tramitações</a></td>
<td>Histórico de tramitações por período e local informados.</td>
</tr>
</tbody>
</table>
</fieldset
{% endblock base_content %}

2
sapl/templates/index.html

@ -156,7 +156,7 @@
Contém informações estatísticas sobre a produção legislativa dos parlamentares e da Casa, dispostas e agrupadas de diferentes formas de acordo com parâmetros fornecidos. Contém informações estatísticas sobre a produção legislativa dos parlamentares e da Casa, dispostas e agrupadas de diferentes formas de acordo com parâmetros fornecidos.
</p> </p>
</div> </div>
<a href=""></a> <a href="/relatorios"></a>
</div> </div>
</div> </div>
</div> </div>

3
sapl/templates/materia/layouts.yaml

@ -98,7 +98,8 @@ ProposicaoCreate:
{% trans 'Proposição' %}: {% trans 'Proposição' %}:
- tipo data_envio - tipo data_envio
- descricao - descricao
{% trans 'Materia' %}:
- tipo_materia numero_materia ano_materia
{% trans 'Complemento' %}: {% trans 'Complemento' %}:
- texto_original - texto_original

9
sapl/templates/materia/proposicao_detail.html

@ -4,22 +4,21 @@
{% block actions %} {% block actions %}
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
<<<<<<< HEAD
{% if proposicao.data_envio %} {% if proposicao.data_envio %}
{% if perms|get_change_perm:view %} {% if perms|get_change_perm:view and not object.data_recebimento %}
<a href="{{ view.update_url }}" class="btn btn-default">{% trans 'Editar Proposição' %}</a> <a href="{{ view.update_url }}" class="btn btn-default">{% trans 'Editar Proposição' %}</a>
{% endif %} {% endif %}
{% if perms|get_delete_perm:view %} {% if perms|get_delete_perm:view and not object.data_recebimento %}
<a href="{{ view.delete_url }}" class="btn btn-default">{% trans 'Retornar Proposição Enviada' %}</a> <a href="{{ view.delete_url }}" class="btn btn-default">{% trans 'Retornar Proposição Enviada' %}</a>
{% endif %} {% endif %}
{% else %} {% else %}
{% if perms|get_change_perm:view %} {% if perms|get_change_perm:view and not object.data_recebimento %}
<a href="{{ view.update_url }}" class="btn btn-default">{% trans 'Enviar/Editar Proposição' %}</a> <a href="{{ view.update_url }}" class="btn btn-default">{% trans 'Enviar/Editar Proposição' %}</a>
{% endif %} {% endif %}
{% if perms|get_delete_perm:view %} {% if perms|get_delete_perm:view and not object.data_recebimento %}
<a href="{{ view.delete_url }}" class="btn btn-default">{% trans 'Excluir Proposição' %}</a> <a href="{{ view.delete_url }}" class="btn btn-default">{% trans 'Excluir Proposição' %}</a>
{% endif %} {% endif %}
{% endif %} {% endif %}

100
sapl/utils.py

@ -224,73 +224,98 @@ def intervalos_tem_intersecao(a_inicio, a_fim, b_inicio, b_fim):
def permissoes_materia(): def permissoes_materia():
lista_permissoes = [] lista_permissoes = []
cts = ContentType.objects.filter(app_label='materia') try:
perms_materia = list(Permission.objects.filter(content_type__in=cts)) cts = ContentType.objects.filter(app_label='materia')
for p in perms_materia: perms_materia = list(Permission.objects.filter(content_type__in=cts))
lista_permissoes.append('materia.' + p.codename) for p in perms_materia:
lista_permissoes.append('materia.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_comissoes(): def permissoes_comissoes():
lista_permissoes = [] lista_permissoes = []
cts = ContentType.objects.filter(app_label='comissoes') try:
perms_comissoes = list(Permission.objects.filter(content_type__in=cts)) cts = ContentType.objects.filter(app_label='comissoes')
for p in perms_comissoes: perms_comissoes = list(Permission.objects.filter(content_type__in=cts))
lista_permissoes.append('comissoes.' + p.codename) for p in perms_comissoes:
lista_permissoes.append('comissoes.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_norma(): def permissoes_norma():
lista_permissoes = [] lista_permissoes = []
cts = ContentType.objects.filter(app_label='norma') try:
perms_norma = list(Permission.objects.filter(content_type__in=cts)) cts = ContentType.objects.filter(app_label='norma')
for p in perms_norma: perms_norma = list(Permission.objects.filter(content_type__in=cts))
lista_permissoes.append('norma.' + p.codename) for p in perms_norma:
lista_permissoes.append('norma.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_parlamentares(): def permissoes_parlamentares():
lista_permissoes = [] lista_permissoes = []
cts = ContentType.objects.filter(app_label='parlamentares') try:
perms_parlamentares = list(Permission.objects.filter(content_type__in=cts)) cts = ContentType.objects.filter(app_label='parlamentares')
for p in perms_parlamentares: perms_parlamentares = list(Permission.objects.filter(
lista_permissoes.append('parlamentares.' + p.codename) content_type__in=cts))
for p in perms_parlamentares:
lista_permissoes.append('parlamentares.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_protocoloadm(): def permissoes_protocoloadm():
lista_permissoes = [] lista_permissoes = []
perms_protocolo = Permission.objects.filter( try:
group__name='Operador de Protocolo Administrativo') perms_protocolo = Permission.objects.filter(
for p in perms_protocolo: group__name='Operador de Protocolo Administrativo')
lista_permissoes.append('protocoloadm.' + p.codename) for p in perms_protocolo:
lista_permissoes.append('protocoloadm.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_adm(): def permissoes_adm():
lista_permissoes = [] lista_permissoes = []
perms_adm = Permission.objects.filter( try:
group__name='Operador Administrativo') perms_adm = Permission.objects.filter(
for p in perms_adm: group__name='Operador Administrativo')
lista_permissoes.append('protocoloadm.' + p.codename) for p in perms_adm:
lista_permissoes.append('protocoloadm.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_sessao(): def permissoes_sessao():
lista_permissoes = [] lista_permissoes = []
perms_sessao = list(Permission.objects.filter( try:
group__name='Operador de Sessão Plenária')) perms_sessao = list(Permission.objects.filter(
for p in perms_sessao: group__name='Operador de Sessão Plenária'))
lista_permissoes.append('sessao.' + p.codename) for p in perms_sessao:
lista_permissoes.append('sessao.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
def permissoes_painel(): def permissoes_painel():
lista_permissoes = [] lista_permissoes = []
perms_painel = list(Permission.objects.filter( try:
group__name='Operador de Painel Eletrônico')) perms_painel = list(Permission.objects.filter(
for p in perms_painel: group__name='Operador de Painel Eletrônico'))
lista_permissoes.append('painel.' + p.codename) for p in perms_painel:
lista_permissoes.append('painel.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)
@ -304,10 +329,13 @@ def permissao_tb_aux(self):
def permissoes_autor(): def permissoes_autor():
lista_permissoes = [] lista_permissoes = []
perms_autor = list(Permission.objects.filter( try:
group__name='Autor')) perms_autor = list(Permission.objects.filter(
for p in perms_autor: group__name='Autor'))
lista_permissoes.append('materia.' + p.codename) for p in perms_autor:
lista_permissoes.append('materia.' + p.codename)
except:
pass
return set(lista_permissoes) return set(lista_permissoes)

Loading…
Cancel
Save