fix(selos): corrigir geração de selos e adicionar ícones visuais
- Corrigir extração de orientações (tipo "Orientação de Discentes") - Selos de premiação agora usam campo papel (Autor/Orientador/Coorientador) - Adicionar ícones visuais aos selos (emojis Unicode) - Adicionar estilos CSS para novos tipos de selos - Melhorias no Oracle client e ranking repository
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
|
||||
import cx_Oracle
|
||||
import oracledb
|
||||
from typing import List, Dict, Any, Optional
|
||||
from contextlib import contextmanager
|
||||
|
||||
@@ -12,19 +12,18 @@ class OracleClient:
|
||||
self.user = user
|
||||
self.password = password
|
||||
self.dsn = dsn
|
||||
self._pool: Optional[cx_Oracle.SessionPool] = None
|
||||
self._pool: Optional[oracledb.ConnectionPool] = None
|
||||
self._connected = False
|
||||
|
||||
def connect(self) -> None:
|
||||
try:
|
||||
self._pool = cx_Oracle.SessionPool(
|
||||
self._pool = oracledb.create_pool(
|
||||
user=self.user,
|
||||
password=self.password,
|
||||
dsn=self.dsn,
|
||||
min=2,
|
||||
max=10,
|
||||
increment=1,
|
||||
encoding="UTF-8",
|
||||
)
|
||||
self._connected = True
|
||||
except Exception as e:
|
||||
@@ -35,7 +34,7 @@ class OracleClient:
|
||||
if self._pool:
|
||||
try:
|
||||
self._pool.close()
|
||||
except cx_Oracle.Error:
|
||||
except oracledb.Error:
|
||||
pass
|
||||
|
||||
@property
|
||||
|
||||
@@ -15,7 +15,7 @@ class RankingOracleRepository:
|
||||
Insere ou atualiza um batch de consultores usando MERGE.
|
||||
Retorna o número de registros processados.
|
||||
"""
|
||||
import cx_Oracle
|
||||
import oracledb
|
||||
|
||||
if not consultores:
|
||||
return 0
|
||||
@@ -66,18 +66,18 @@ class RankingOracleRepository:
|
||||
cursor = conn.cursor()
|
||||
try:
|
||||
for consultor in consultores:
|
||||
json_str = json.dumps(consultor.get("detalhes", {}), ensure_ascii=False)
|
||||
cursor.setinputsizes(json_detalhes=cx_Oracle.CLOB)
|
||||
json_str = json.dumps(consultor, ensure_ascii=False)
|
||||
cursor.setinputsizes(json_detalhes=oracledb.DB_TYPE_CLOB)
|
||||
params = {
|
||||
"id_pessoa": consultor["id_pessoa"],
|
||||
"nome": consultor["nome"],
|
||||
"pontuacao_total": consultor["pontuacao_total"],
|
||||
"componente_a": consultor["componente_a"],
|
||||
"componente_b": consultor["componente_b"],
|
||||
"componente_c": consultor["componente_c"],
|
||||
"componente_d": consultor["componente_d"],
|
||||
"ativo": "S" if consultor["ativo"] else "N",
|
||||
"anos_atuacao": consultor["anos_atuacao"],
|
||||
"componente_a": consultor.get("bloco_a") or consultor.get("componente_a", 0),
|
||||
"componente_b": consultor.get("bloco_b") or consultor.get("componente_b", 0),
|
||||
"componente_c": consultor.get("bloco_c") or consultor.get("componente_c", 0),
|
||||
"componente_d": consultor.get("bloco_d") or consultor.get("componente_d", 0),
|
||||
"ativo": "S" if consultor.get("ativo") else "N",
|
||||
"anos_atuacao": consultor.get("anos_atuacao", 0),
|
||||
"json_detalhes": json_str
|
||||
}
|
||||
cursor.execute(merge_sql, params)
|
||||
|
||||
@@ -355,10 +355,52 @@ class ConsultorRepositoryImpl(ConsultorRepository):
|
||||
orientacoes = []
|
||||
|
||||
for a in atuacoes:
|
||||
tipo = a.get("tipo", "").lower()
|
||||
if "orientação" not in tipo and "orientacao" not in tipo:
|
||||
tipo = a.get("tipo", "")
|
||||
tipo_lower = tipo.lower()
|
||||
|
||||
if tipo == "Orientação de Discentes":
|
||||
dados = a.get("dadosOrientacaoDiscente", {}) or {}
|
||||
total_mestrado = dados.get("totalOrientacaoFinalizadaMestrado") or 0
|
||||
total_doutorado = dados.get("totalOrientacaoFinalizadaDoutorado") or 0
|
||||
total_pos_doc = dados.get("totalAcompanhamentoPosDoutorado") or 0
|
||||
|
||||
for _ in range(int(total_pos_doc)):
|
||||
orientacoes.append(Orientacao(
|
||||
codigo="ORIENT_POS_DOC",
|
||||
tipo="Orientação Pós-Doutorado",
|
||||
nivel="Pós-Doutorado",
|
||||
ano=None,
|
||||
coorientacao=False,
|
||||
premiada=False,
|
||||
premiacao_tipo=None,
|
||||
))
|
||||
|
||||
for _ in range(int(total_doutorado)):
|
||||
orientacoes.append(Orientacao(
|
||||
codigo="ORIENT_TESE",
|
||||
tipo="Orientação Doutorado",
|
||||
nivel="Doutorado",
|
||||
ano=None,
|
||||
coorientacao=False,
|
||||
premiada=False,
|
||||
premiacao_tipo=None,
|
||||
))
|
||||
|
||||
for _ in range(int(total_mestrado)):
|
||||
orientacoes.append(Orientacao(
|
||||
codigo="ORIENT_DISS",
|
||||
tipo="Orientação Mestrado",
|
||||
nivel="Mestrado",
|
||||
ano=None,
|
||||
coorientacao=False,
|
||||
premiada=False,
|
||||
premiacao_tipo=None,
|
||||
))
|
||||
continue
|
||||
if "co-orientação" in tipo or "coorientação" in tipo or "co_orient" in tipo:
|
||||
|
||||
if "orientação" not in tipo_lower and "orientacao" not in tipo_lower:
|
||||
continue
|
||||
if "co-orientação" in tipo_lower or "coorientação" in tipo_lower or "co_orient" in tipo_lower:
|
||||
continue
|
||||
|
||||
dados = a.get("dadosOrientacao", {}) or {}
|
||||
|
||||
Reference in New Issue
Block a user