Browse Source

Feat(Franco da Rocha): tela inicial e Documento Acessório do Procurador Jurídico

Customização para o Procurador Jurídico da Câmara de Franco da Rocha,
identificado pelo grupo "Operador de Norma Jurídica" (SGVP_GROUP_NORMA):

- Tela inicial exibe somente o card "Matérias Legislativas".
- Documento Acessório já abre com Tipo="Parecer Jurídico", Nome="Aprovado"
  e Data=data atual. Os campos seguem editáveis.

Adiciona o helper sapl.rules.is_procurador_juridico, usado pelas duas
funcionalidades para manter o critério de grupo em um único lugar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
pull/3858/head
Gustavo 2 months ago
parent
commit
a44d7ab5be
  1. 6
      sapl/base/views.py
  2. 24
      sapl/materia/views.py
  3. 11
      sapl/rules/__init__.py
  4. 16
      sapl/templates/index.html

6
sapl/base/views.py

@ -47,6 +47,7 @@ from sapl.parlamentares.models import (
Filiacao, Legislatura, Mandato, Parlamentar)
from sapl.protocoloadm.models import (Anexado, Protocolo)
from sapl.relatorios.views import (relatorio_estatisticas_acesso_normas)
from sapl.rules import is_procurador_juridico
from sapl.sessao.models import (Bancada, SessaoPlenaria)
from sapl.settings import EMAIL_SEND_USER, RATE_LIMITER_RATE
from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao, mail_service_configured,
@ -77,10 +78,15 @@ class IndexView(TemplateView):
# Verifica se é Operador de Protocolo Administrativo
context['is_operador_protocolo'] = self.request.user.has_perm(
'protocoloadm.add_documentoadministrativo')
# Procurador Jurídico: tela inicial restrita a Matérias
# Legislativas (customização Franco da Rocha)
context['is_procurador_juridico'] = is_procurador_juridico(
self.request.user)
else:
context['is_parlamentar'] = False
context['autor_id'] = None
context['is_operador_protocolo'] = False
context['is_procurador_juridico'] = False
return context

24
sapl/materia/views.py

@ -1951,6 +1951,12 @@ def montar_helper_documento_acessorio(self):
' class="btn btn-dark">Cancelar</a>')]))
# Valores pré-preenchidos no Documento Acessório do Procurador Jurídico
# (customização Franco da Rocha)
DESCRICAO_PARECER_JURIDICO = 'Parecer Jurídico'
NOME_PARECER_APROVADO = 'Aprovado'
class DocumentoAcessorioCrud(MasterDetailCrud):
model = DocumentoAcessorio
parent_field = 'materia'
@ -1962,10 +1968,28 @@ class DocumentoAcessorioCrud(MasterDetailCrud):
class CreateView(MasterDetailCrud.CreateView):
form_class = DocumentoAcessorioForm
logger = logging.getLogger(__name__)
def get_initial(self):
from sapl.rules import is_procurador_juridico
initial = super(CreateView, self).get_initial()
initial['data'] = timezone.now().date()
# Procurador Jurídico já abre o formulário preenchido como
# Parecer Jurídico aprovado (customização Franco da Rocha).
# Os campos continuam editáveis.
if is_procurador_juridico(self.request.user):
tipo = TipoDocumento.objects.filter(
descricao__iexact=DESCRICAO_PARECER_JURIDICO).first()
if tipo:
initial['tipo'] = tipo
else:
self.logger.warning(
'Tipo de Documento "%s" não cadastrado: o campo Tipo '
'do Documento Acessório não será pré-preenchido.',
DESCRICAO_PARECER_JURIDICO)
initial['nome'] = NOME_PARECER_APROVADO
return initial
def get_success_url(self):

11
sapl/rules/__init__.py

@ -97,3 +97,14 @@ SGVP_GROUPS = [
SGVP_GROUPS_DELETE = [
]
def is_procurador_juridico(user):
"""Identifica o Procurador Jurídico pelo grupo SGVP_GROUP_NORMA.
Customização da Câmara de Franco da Rocha: o usuário desse grupo tem a
tela inicial reduzida ao módulo de Matérias Legislativas e recebe o
Documento Acessório pré-preenchido como Parecer Jurídico aprovado.
"""
return bool(user and user.is_authenticated and
user.groups.filter(name=SGVP_GROUP_NORMA).exists())

16
sapl/templates/index.html

@ -6,6 +6,21 @@
{% block base_content%}
<div class="container-home">
<div id="homeIndex">
{% if is_procurador_juridico %}
<!-- Procurador Jurídico: tela inicial restrita a Matérias Legislativas -->
<div class="homeBlock">
<div class="card-icon">
<i class="fas fa-file-alt"></i>
</div>
<h3 class="card-title">Matérias Legislativas</h3>
<p class="card-description">Projetos de lei e proposições</p>
<div class="card-actions">
<a href="{% url 'sapl.materia:pesquisar_materia' %}" class="btn-action" title="Pesquisar Matérias">
<i class="fas fa-search"></i> Pesquisar
</a>
</div>
</div>
{% else %}
<!-- Proposições -->
{% if is_parlamentar %}
<div class="homeBlock">
@ -248,6 +263,7 @@
</div>
</div>
{% endif %}
{% endif %}
</div>
</div>
{% endblock %}

Loading…
Cancel
Save