feat(vinculos): adicionar vínculos de consultoria com IES e ordenação cronológica
- Adicionar entidades e DTOs para vínculos de consultoria (IES, período, situação) - Extrair vínculos do Elasticsearch com datas e informações da IES - Exibir vínculos no card do consultor com sigla e nome completo da IES - Ordenar todas as listas do detalhe por data/ano decrescente (mais recente primeiro)
This commit is contained in:
@@ -346,11 +346,44 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
</div>
|
||||
)}
|
||||
|
||||
{consultoria?.vinculos?.length > 0 && (
|
||||
<div className="extra-details">
|
||||
<h4>Vinculos de Consultoria</h4>
|
||||
<div className="list-items">
|
||||
{[...consultoria.vinculos]
|
||||
.sort((a, b) => new Date(b.periodo?.inicio || 0) - new Date(a.periodo?.inicio || 0))
|
||||
.map((vinculo, idx) => {
|
||||
const periodo = vinculo.periodo || {};
|
||||
const isAtivo = periodo.ativo ?? !periodo.fim;
|
||||
return (
|
||||
<div key={idx} className="list-item">
|
||||
<span className={`badge ${isAtivo ? 'badge-ativo' : 'badge-historico'}`}>
|
||||
{isAtivo ? 'ATIVO' : 'ENCERRADO'}
|
||||
</span>
|
||||
<span className="ies-nome">
|
||||
{vinculo.ies
|
||||
? vinculo.ies.sigla && vinculo.ies.nome
|
||||
? `${vinculo.ies.sigla} - ${vinculo.ies.nome}`
|
||||
: vinculo.ies.sigla || vinculo.ies.nome
|
||||
: 'IES nao informada'}
|
||||
</span>
|
||||
<span className="muted">
|
||||
{formatDate(periodo.inicio)} - {isAtivo ? 'Atual' : formatDate(periodo.fim)}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{consultor.coordenacoes_capes?.length > 0 && (
|
||||
<div className="extra-details">
|
||||
<h4>Coordenacoes CAPES</h4>
|
||||
<div className="list-items">
|
||||
{consultor.coordenacoes_capes.map((coord, idx) => (
|
||||
{[...consultor.coordenacoes_capes]
|
||||
.sort((a, b) => new Date(b.inicio || b.periodo?.inicio || 0) - new Date(a.inicio || a.periodo?.inicio || 0))
|
||||
.map((coord, idx) => (
|
||||
<div key={idx} className="list-item">
|
||||
<span className="badge">{coord.codigo || coord.tipo}</span>
|
||||
<span className="pontos">{PONTOS_BASE[coord.codigo] || 0} pts</span>
|
||||
@@ -368,7 +401,9 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
<div className="extra-details">
|
||||
<h4>Premiacoes</h4>
|
||||
<div className="list-items">
|
||||
{consultor.premiacoes.map((prem, idx) => (
|
||||
{[...consultor.premiacoes]
|
||||
.sort((a, b) => (b.ano || 0) - (a.ano || 0))
|
||||
.map((prem, idx) => (
|
||||
<div key={idx} className="list-item">
|
||||
<span className="badge">{prem.codigo}</span>
|
||||
<span className="pontos">{PONTOS_BASE[prem.codigo] || 0} pts</span>
|
||||
@@ -384,7 +419,9 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
<div className="extra-details">
|
||||
<h4>Avaliacoes de Comissao</h4>
|
||||
<div className="list-items">
|
||||
{consultor.avaliacoes_comissao.map((aval, idx) => (
|
||||
{[...consultor.avaliacoes_comissao]
|
||||
.sort((a, b) => (b.ano || 0) - (a.ano || 0))
|
||||
.map((aval, idx) => (
|
||||
<div key={idx} className="list-item">
|
||||
<span className="badge">{aval.codigo}</span>
|
||||
<span className="pontos">{PONTOS_BASE[aval.codigo] || 0} pts</span>
|
||||
@@ -400,7 +437,9 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
<div className="extra-details">
|
||||
<h4>Inscricoes</h4>
|
||||
<div className="list-items">
|
||||
{consultor.inscricoes.map((insc, idx) => (
|
||||
{[...consultor.inscricoes]
|
||||
.sort((a, b) => (b.ano || 0) - (a.ano || 0))
|
||||
.map((insc, idx) => (
|
||||
<div key={idx} className="list-item">
|
||||
<span className="badge">{insc.codigo}</span>
|
||||
<span className="pontos">{PONTOS_BASE[insc.codigo] || 0} pts</span>
|
||||
@@ -416,7 +455,10 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
<div className="extra-details">
|
||||
<h4>Participacoes (Eventos/Projetos)</h4>
|
||||
<div className="list-items">
|
||||
{consultor.participacoes.slice(0, 10).map((part, idx) => (
|
||||
{[...consultor.participacoes]
|
||||
.sort((a, b) => (b.ano || 0) - (a.ano || 0))
|
||||
.slice(0, 10)
|
||||
.map((part, idx) => (
|
||||
<div key={idx} className="list-item">
|
||||
<span className="badge">{part.codigo}</span>
|
||||
<span className="pontos">{PONTOS_BASE[part.codigo] || 0} pts</span>
|
||||
|
||||
Reference in New Issue
Block a user