refactor: update vacation management structure and enhance status handling

- Renamed and refactored vacation-related types and components for clarity, transitioning from 'SolicitacaoFerias' to 'PeriodoFerias'.
- Improved the handling of vacation statuses, including the addition of 'EmFérias' to the status options.
- Streamlined the vacation request and approval components to better reflect individual vacation periods.
- Enhanced data handling in backend queries and schema to support the new structure and ensure accurate status updates.
- Improved user experience by refining UI elements related to vacation periods and their statuses.
This commit is contained in:
2025-11-13 15:54:59 -03:00
parent 4ae5baffcc
commit c058865817
11 changed files with 1150 additions and 949 deletions

View File

@@ -229,23 +229,20 @@ export const obterDadosGraficos = query({
// Buscar férias do período
try {
const solicitacoesFerias = await ctx.db
.query('solicitacoesFerias')
const ferias = await ctx.db
.query('ferias')
.filter((q) =>
q.or(
q.eq(q.field('status'), 'aprovado'),
q.eq(q.field('status'), 'data_ajustada_aprovada')
q.eq(q.field('status'), 'data_ajustada_aprovada'),
q.eq(q.field('status'), 'EmFérias')
)
)
.collect();
solicitacoesFerias.forEach((s) => {
if (s.periodos && Array.isArray(s.periodos)) {
s.periodos.forEach((p: { dataInicio: string; dataFim: string }) => {
const dias = calcularDias(p.dataInicio, p.dataFim);
totalDiasPorTipo.ferias += dias;
});
}
ferias.forEach((f) => {
const dias = calcularDias(f.dataInicio, f.dataFim);
totalDiasPorTipo.ferias += dias;
});
} catch (error) {
console.error('Erro ao buscar férias para gráfico:', error);
@@ -619,48 +616,42 @@ export const obterEventosCalendario = query({
// Integrar com férias (se não estiver filtrando por tipo específico)
if (!args.tipoFiltro || args.tipoFiltro === 'todos' || args.tipoFiltro === 'ferias') {
try {
// Buscar solicitações de férias aprovadas
const solicitacoesFerias = await ctx.db
.query('solicitacoesFerias')
// Buscar férias aprovadas
const ferias = await ctx.db
.query('ferias')
.filter((q) =>
q.or(
q.eq(q.field('status'), 'aprovado'),
q.eq(q.field('status'), 'data_ajustada_aprovada')
q.eq(q.field('status'), 'data_ajustada_aprovada'),
q.eq(q.field('status'), 'EmFérias')
)
)
.collect();
for (const solicitacao of solicitacoesFerias) {
for (const feriasRegistro of ferias) {
try {
const funcionario = await ctx.db.get(solicitacao.funcionarioId);
const funcionario = await ctx.db.get(feriasRegistro.funcionarioId);
if (!funcionario) continue;
// Verificar se periodos existe e é um array
if (!solicitacao.periodos || !Array.isArray(solicitacao.periodos)) {
continue;
}
if (!feriasRegistro.dataInicio || !feriasRegistro.dataFim) continue;
for (const periodo of solicitacao.periodos) {
if (!periodo.dataInicio || !periodo.dataFim) continue;
eventos.push({
id: `ferias-${solicitacao._id}-${periodo.dataInicio}`,
title: `${funcionario.nome} - Férias`,
start: periodo.dataInicio,
end: periodo.dataFim,
color: '#10b981', // verde
tipo: 'ferias',
funcionarioNome: funcionario.nome,
funcionarioId: funcionario._id
});
}
eventos.push({
id: `ferias-${feriasRegistro._id}`,
title: `${funcionario.nome} - Férias`,
start: feriasRegistro.dataInicio,
end: feriasRegistro.dataFim,
color: '#10b981', // verde
tipo: 'ferias',
funcionarioNome: funcionario.nome,
funcionarioId: funcionario._id
});
} catch (error) {
console.error(`Erro ao processar solicitação de férias ${solicitacao._id}:`, error);
console.error(`Erro ao processar férias ${feriasRegistro._id}:`, error);
continue;
}
}
} catch (error) {
console.error('Erro ao buscar solicitações de férias:', error);
console.error('Erro ao buscar férias:', error);
// Continua mesmo se houver erro ao buscar férias
}
}