Spaces:
Runtime error
Runtime error
{% extends 'base.html' %} {% block head %} | |
<link rel="stylesheet" href="../static/candidatos.css" /> | |
{% endblock %} {% block conteudo %} | |
<div class="page-content"> | |
<div class="modal-choose-vaga"> | |
<span id="choose-vaga-modal">Selecione a vaga</span> | |
<select name="choose-vaga-select" id="select-vaga"> | |
<option value="" disabled selected hidden></option> | |
{% for vaga in vagas %} | |
<option value="{{vaga.id}}">{{vaga.cargo}}</option> | |
{% endfor %} | |
</select> | |
<i id="new-candidate" class="bi bi-filetype-pdf"></i> | |
</div> | |
</div> | |
<main class="page"> | |
<div class="container-candidatos"> | |
<div class="header-page-candidatos"> | |
<span id="header-field">Candidatos</span> | |
</div> | |
<div class="card-column"> | |
<ul id="filter-head" class="filter-head"> | |
<li> | |
<div class="icons-filter-add"> | |
<i | |
class="bi-nc bi-person-plus" | |
id="add-candidato" | |
title="Adicionar candidato" | |
></i> | |
</div> | |
</li> | |
<div class="filter-content"> | |
<li class="dropdown"> | |
<i class="bi-fnl bi-funnel" id="view-filter"></i> | |
<span class="dropdown-funnel">Filtrar por</span> | |
<ul class="dropdown-menu"> | |
<li>Departamento</li> | |
<li>Data de cadastro</li> | |
<li>Fase</li> | |
</ul> | |
</li> | |
<select id="status-dropdown"> | |
<option value=""></option> | |
</select> | |
</div> | |
<li> | |
<div class="icons-filter"> | |
<i | |
id="ordenar-az" | |
class="bi-sort bi-sort-alpha-down" | |
data-sort-by="nome" | |
></i> | |
<i data-info="hide" class="bi bi-eye-slash-fill"></i> | |
</div> | |
</li> | |
<li> | |
<div class="container-input"> | |
<input | |
type="text" | |
placeholder="Pesquisar" | |
name="text" | |
class="input-search" | |
/> | |
<svg | |
xmlns="http://www.w3.org/2000/svg" | |
width="16" | |
height="16" | |
fill="#000000" | |
class="bi bi-search" | |
viewBox="0 0 16 16" | |
> | |
<path | |
d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0" | |
/> | |
</svg> | |
</div> | |
</li> | |
</ul> | |
</div> | |
{% if candidatos|length == 0 %} | |
<div class="no-cards-available"> | |
<i class="bi bi-emoji-frown"></i> | |
<span>Nenhum candidato disponível</span> | |
</div> | |
{% endif %} | |
<div class="card-container"> | |
{% for candidato in candidatos %}{% if candidato.nome != none %} | |
<div class="card-content {{candidato.vaga.departamento}}"> | |
<div | |
class="status-bar {{ candidato.status | replace(' ', '_') }}" | |
data-category="{{candidato.status}}" | |
></div> | |
<a href="/candidatos/{{candidato.id}}"> | |
<div class="card-avaliacao"> | |
<span>{{candidato.avaliacao_ia}}</span> | |
</div> | |
<div class="div-card-title"> | |
<p id="card-nome">{{candidato.nome}}</p> | |
<p class="card-vaga-cargo">{{candidato.vaga.cargo}}</p> | |
<p class="card-email">{{candidato.email}}</p> | |
<p class="card-telefone">{{candidato.telefone}}</p> | |
</div> | |
<div class="div-card-body"> | |
<p class="card-data-cadastro"> | |
Cadastrado em {{candidato.data_cadastro.strftime('%d/%m/%Y ')}} | |
</p> | |
<div | |
class="card-departamento" | |
data-category="{{candidato.vaga.departamento}}" | |
> | |
<a href="/vagas/{{candidato.vaga.id}}"> | |
{{candidato.vaga.departamento}} | |
</a> | |
</div> | |
</div> | |
</a> | |
</div> | |
{% endif %}{% endfor %} | |
</div> | |
</div> | |
</main> | |
{% include 'animation_publish.html' %} {% endblock %} {% block finalscript %} | |
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script> | |
<script> | |
$(document).ready(function () { | |
// Adiciona um ouvinte de evento para o clique em um item do menu dropdown | |
$(".dropdown-menu li").click(function () { | |
// Encontra o texto da opção selecionada | |
var selectedText = $(this).text(); | |
// Atualiza o texto do span .dropdown-funnel com o texto da opção selecionada | |
$(this).closest(".dropdown").find(".dropdown-funnel").text(selectedText); | |
$(this) | |
.closest(".dropdown") | |
.find("#view-filter") | |
.removeClass() | |
.addClass("bi-funnel-fill") | |
.attr("title", "Limpar filtros"); | |
// Fecha o menu dropdown | |
$(this).closest(".dropdown").find(".dropdown-menu").slideUp(); | |
}); | |
// Adiciona um ouvinte de evento para o clique no link dropdown | |
$(".dropdown-funnel").click(function () { | |
// Encontra o menu dropdown correspondente | |
var dropdownMenu = $(this).next(".dropdown-menu"); | |
// Alterna a visibilidade do menu dropdown | |
dropdownMenu.slideToggle(); | |
$("#status-dropdown").empty(); | |
}); | |
function limparFiltros() { | |
$(".dropdown-funnel").text("Filtrar por"); | |
$("#status-dropdown").empty(); | |
$("#view-filter").removeClass().addClass("bi-funnel"); | |
} | |
// Evento de clique no botão de limpar filtro | |
$("#view-filter").click(function () { | |
limparFiltros(); | |
}); | |
}); | |
</script> | |
<script> | |
$(document).ready(function () { | |
$(".dropdown-menu li").click(function () { | |
$(".card-candidatos").show(); | |
var opcaoSelecionada = $(this).text().toLowerCase(); | |
// Atualiza o texto do span para refletir a opção selecionada | |
$(".dropdown-funnel").text( | |
opcaoSelecionada.charAt(0).toUpperCase() + opcaoSelecionada.slice(1) | |
); | |
// Atualiza o valor do select com base no filtro selecionado | |
if (opcaoSelecionada === "departamento") { | |
// Preencha o select com departamentos | |
var departamentos = []; | |
$(".card-departamento").each(function () { | |
var departamento = $(this).text().trim(); | |
if (!departamentos.includes(departamento)) { | |
departamentos.push(departamento); | |
} | |
}); | |
// Limpa o select | |
$("#status-dropdown").empty(); | |
// Adiciona as opções ao select | |
departamentos.forEach(function (departamento) { | |
$("#status-dropdown").append( | |
'<option data-filter=".' + | |
departamento + | |
'" value="' + | |
departamento + | |
'">' + | |
departamento + | |
"</option>" | |
); | |
$("#status-dropdown").val(""); | |
}); | |
} else if (opcaoSelecionada === "data de cadastro") { | |
var datas = ["15 dias", "30 dias", "45 dias"]; | |
$("#status-dropdown").empty(); | |
datas.forEach(function (data) { | |
$("#status-dropdown").append( | |
'<option data-filter=".' + | |
data.trim() + | |
' " value="' + | |
data.trim() + | |
'">' + | |
data.trim() + | |
"</option>" | |
); | |
$("#status-dropdown").val(""); | |
}); | |
} else if (opcaoSelecionada === "fase") { | |
var statusList = []; | |
$(".status-bar").each(function () { | |
var status = $(this).attr("class").split(" ")[1]; // Remove a classe "status-bar" e espaços em branco | |
if (!statusList.includes(status)) { | |
statusList.push(status); | |
} | |
}); | |
// Limpa o select | |
$("#status-dropdown").empty(); | |
// Adiciona as opções ao select | |
statusList.forEach(function (status) { | |
$("#status-dropdown").append( | |
'<option data-filter=".' + | |
status + | |
'" value="' + | |
status + | |
'">' + | |
status.replace("_", " ") + | |
"</option>" | |
); | |
$("#status-dropdown").val(""); | |
}); | |
} | |
}); | |
}); | |
</script> | |
<script> | |
$(document).ready(function () { | |
var $listing = $(".card-container").isotope({ | |
layoutMode: "fitRows", | |
fitRows: { | |
gutter: 5, | |
}, | |
getSortData: { | |
nome: "#card-nome", | |
}, | |
}); | |
$("#status-dropdown").change(function () { | |
var opcaoSelecionada = $(".dropdown-funnel").text(); | |
var filterValue = $(this) | |
.children("option:selected") | |
.attr("data-filter") | |
.trim(); | |
if (opcaoSelecionada === "Departamento") { | |
$listing.isotope({ filter: filterValue }); | |
} else if (opcaoSelecionada === "Data de cadastro") { | |
var hoje = new Date(); | |
var filtroDias; | |
if (filterValue === ".15 dias") { | |
filtrarPorData(15); | |
} else if (filterValue === ".30 dias") { | |
filtrarPorData(30); | |
} else if (filterValue === ".45 dias") { | |
filtrarPorData(45); | |
} else { | |
// Se nenhuma opção for selecionada, exibe todos os itens | |
$listing.isotope({ filter: "*" }); | |
} | |
} else if (opcaoSelecionada === "Fase") { | |
var faseSelecionada = $(this).children("option:selected").attr("value"); | |
filtrarPorFase(faseSelecionada); | |
} | |
}); | |
function filtrarPorFase(faseSelecionada) { | |
$listing.isotope({ | |
filter: function () { | |
// Verifica se o candidato atual tem a classe de status correspondente à fase selecionada | |
var statusCandidato = $(this) | |
.find(".status-bar") | |
.attr("class") | |
.split(" ")[1]; | |
// Retorna true se a fase selecionada estiver presente nas classes de status do candidato atual | |
return statusCandidato === faseSelecionada; | |
}, | |
}); | |
} | |
function filtrarPorData(filtroDias) { | |
var hoje = new Date(); | |
var dataCorte = new Date(hoje); | |
dataCorte.setDate(hoje.getDate() - filtroDias); | |
$listing.isotope({ | |
filter: function () { | |
var dataPublicacaoStr = $(this) | |
.find(".card-data-cadastro") | |
.text() | |
.trim(); | |
dataPublicacaoStr = dataPublicacaoStr.replace( | |
/^Cadastrado\s+em\s+/i, | |
"" | |
); | |
var partesData = dataPublicacaoStr.split("/"); | |
var dia = parseInt(partesData[0], 10); // Converte o dia para número inteiro | |
var mes = parseInt(partesData[1], 10) - 1; // Converte o mês para número inteiro (0-based) | |
var ano = parseInt(partesData[2], 10); | |
var dataTexto = new Date(ano, mes, dia); | |
return dataTexto >= dataCorte; | |
}, | |
}); | |
} | |
$("#view-filter").click(function () { | |
$listing.isotope({ filter: "*" }); | |
}); | |
$("#ordenar-az").click(function () { | |
var $biSort = $("#ordenar-az"); | |
if ($biSort.hasClass("bi-sort-alpha-down")) { | |
$biSort.removeClass().addClass("bi-sort-alpha-up-alt"); | |
$listing.isotope({ sortBy: "vaga", sortAscending: false }); | |
} else { | |
$biSort.removeClass().addClass("bi-sort-alpha-down"); | |
$listing.isotope({ sortBy: "vaga", sortAscending: true }); | |
} | |
}); | |
$(".input-search").on("input", function () { | |
var searchText = $(this).val().toLowerCase(); | |
$listing.isotope({ | |
filter: function () { | |
// Obtém o texto do nome do card atual | |
var cardNome = $(this).find("#card-nome").text().toLowerCase(); | |
// Retorna true se o texto do nome do card contiver o texto de pesquisa | |
return cardNome.includes(searchText); | |
}, | |
}); | |
}); | |
}); | |
</script> | |
<script> | |
$(document).ready(function () { | |
$("#candidatos-navbar-a").toggleClass("active"); | |
}); | |
</script> | |
<script> | |
$(document).ready(function () { | |
$("#header-field").click(function () { | |
location.reload(); // Atualiza a página | |
}); | |
}); | |
</script> | |
<script> | |
$(document).ready(function () { | |
$(".icons-filter-add").click(function () { | |
$(".page-content").fadeIn(300); | |
}); | |
}); | |
</script> | |
<script> | |
$(document).ready(function () { | |
// Função para fechar o modal ao clicar fora dele | |
$(document).mouseup(function (e) { | |
var container = $(".modal-choose-vaga"); | |
var pageContent = $(".page-content"); | |
// Verifica se o clique foi fora do modal ou no ícone do PDF | |
if ( | |
!container.is(e.target) && | |
container.has(e.target).length === 0 && | |
!$("#upload-pdf").is(e.target) | |
) { | |
pageContent.hide(); // Esconde o page content | |
} | |
}); | |
}); | |
</script> | |
{%endblock %} | |