feat: add period adjustment fields to point processing and PDF generation, enhancing data capture and display for time adjustments
This commit is contained in:
@@ -2618,6 +2618,14 @@ export const ajustarBancoHoras = mutation({
|
||||
periodoDias: v.number(),
|
||||
periodoHoras: v.number(),
|
||||
periodoMinutos: v.number(),
|
||||
dataAplicacao: v.string(), // YYYY-MM-DD - Data em que o ajuste deve ser aplicado
|
||||
// Período do ajuste (data/hora início e fim)
|
||||
dataInicio: v.optional(v.string()), // YYYY-MM-DD
|
||||
horaInicio: v.optional(v.number()), // 0-23
|
||||
minutoInicio: v.optional(v.number()), // 0-59
|
||||
dataFim: v.optional(v.string()), // YYYY-MM-DD
|
||||
horaFim: v.optional(v.number()), // 0-23
|
||||
minutoFim: v.optional(v.number()), // 0-59
|
||||
motivoId: v.optional(v.string()),
|
||||
motivoTipo: v.optional(v.string()),
|
||||
motivoDescricao: v.optional(v.string()),
|
||||
@@ -2655,8 +2663,8 @@ export const ajustarBancoHoras = mutation({
|
||||
ajusteFinal = -ajusteMinutos;
|
||||
}
|
||||
|
||||
// Buscar banco de horas mais recente ou criar um registro de ajuste
|
||||
const hoje = new Date().toISOString().split('T')[0]!;
|
||||
// Usar a data de aplicação fornecida pelo usuário
|
||||
const dataAplicacao = args.dataAplicacao;
|
||||
|
||||
// Criar registro de ajuste na nova tabela
|
||||
const ajusteId = await ctx.db.insert('ajustesBancoHoras', {
|
||||
@@ -2666,7 +2674,13 @@ export const ajustarBancoHoras = mutation({
|
||||
motivoId: args.motivoId,
|
||||
motivoDescricao: args.motivoDescricao || `Ajuste ${args.tipoAjuste}`,
|
||||
valorMinutos: ajusteFinal,
|
||||
dataAplicacao: hoje,
|
||||
dataAplicacao: dataAplicacao,
|
||||
dataInicio: args.dataInicio,
|
||||
horaInicio: args.horaInicio,
|
||||
minutoInicio: args.minutoInicio,
|
||||
dataFim: args.dataFim,
|
||||
horaFim: args.horaFim,
|
||||
minutoFim: args.minutoFim,
|
||||
gestorId: usuario._id,
|
||||
observacoes: args.observacoes,
|
||||
aplicado: false,
|
||||
@@ -2676,7 +2690,7 @@ export const ajustarBancoHoras = mutation({
|
||||
const bancoHorasAtual = await ctx.db
|
||||
.query('bancoHoras')
|
||||
.withIndex('by_funcionario_data', (q) =>
|
||||
q.eq('funcionarioId', args.funcionarioId).eq('data', hoje)
|
||||
q.eq('funcionarioId', args.funcionarioId).eq('data', dataAplicacao)
|
||||
)
|
||||
.first();
|
||||
|
||||
@@ -2708,7 +2722,7 @@ export const ajustarBancoHoras = mutation({
|
||||
|
||||
await ctx.db.insert('bancoHoras', {
|
||||
funcionarioId: args.funcionarioId,
|
||||
data: hoje,
|
||||
data: dataAplicacao,
|
||||
cargaHorariaDiaria,
|
||||
horasTrabalhadas: 0,
|
||||
saldoMinutos: ajusteFinal,
|
||||
@@ -2727,7 +2741,7 @@ export const ajustarBancoHoras = mutation({
|
||||
});
|
||||
|
||||
// Recalcular banco de horas mensal após ajuste
|
||||
const mes = hoje.substring(0, 7); // YYYY-MM
|
||||
const mes = dataAplicacao.substring(0, 7); // YYYY-MM
|
||||
|
||||
// Verificar se estamos ajustando um mês passado
|
||||
const hojeDate = new Date();
|
||||
@@ -2738,6 +2752,7 @@ export const ajustarBancoHoras = mutation({
|
||||
await calcularBancoHorasMensal(ctx, args.funcionarioId, mes, estaAjustandoMesPassado);
|
||||
|
||||
// Criar registro de homologação (mantido para compatibilidade)
|
||||
// Armazenar o ajusteId para facilitar a busca posterior
|
||||
const homologacaoId = await ctx.db.insert('homologacoesPonto', {
|
||||
funcionarioId: args.funcionarioId,
|
||||
gestorId: usuario._id,
|
||||
@@ -2753,6 +2768,9 @@ export const ajustarBancoHoras = mutation({
|
||||
criadoEm: Date.now()
|
||||
});
|
||||
|
||||
// Armazenar ajusteId na homologação usando um campo customizado ou buscar depois
|
||||
// Por enquanto, vamos buscar o ajuste no listarHomologacoes usando os critérios
|
||||
|
||||
return { success: true, homologacaoId, ajusteId, ajusteMinutos: ajusteFinal };
|
||||
}
|
||||
});
|
||||
@@ -2820,6 +2838,62 @@ export const listarHomologacoes = query({
|
||||
}
|
||||
}
|
||||
|
||||
// Buscar dataAplicacao e período do ajuste se for um ajuste de banco de horas
|
||||
let dataAplicacaoAjuste: string | null = null;
|
||||
let periodoAjuste: {
|
||||
dataInicio?: string;
|
||||
horaInicio?: number;
|
||||
minutoInicio?: number;
|
||||
dataFim?: string;
|
||||
horaFim?: number;
|
||||
minutoFim?: number;
|
||||
} | null = null;
|
||||
if (h.tipoAjuste && h.ajusteMinutos !== undefined) {
|
||||
// Buscar ajustes criados próximo ao tempo da homologação (dentro de 5 minutos antes)
|
||||
// O ajuste é criado logo antes da homologação em ajustarBancoHoras
|
||||
const tempoLimite = h.criadoEm - 5 * 60 * 1000; // 5 minutos antes
|
||||
|
||||
// Buscar todos os ajustes do funcionário com os mesmos critérios
|
||||
// e criados próximo ao tempo da homologação
|
||||
const ajustes = await ctx.db
|
||||
.query('ajustesBancoHoras')
|
||||
.withIndex('by_funcionario', (q) => q.eq('funcionarioId', h.funcionarioId))
|
||||
.filter((q) =>
|
||||
q.and(
|
||||
q.eq(q.field('motivoTipo'), 'manual'),
|
||||
q.eq(q.field('tipo'), h.tipoAjuste),
|
||||
q.eq(q.field('valorMinutos'), h.ajusteMinutos),
|
||||
q.eq(q.field('gestorId'), h.gestorId),
|
||||
q.gte(q.field('criadoEm'), tempoLimite),
|
||||
q.lte(q.field('criadoEm'), h.criadoEm)
|
||||
)
|
||||
)
|
||||
.collect();
|
||||
|
||||
// Se encontrou ajuste(s), encontrar o mais próximo em tempo à homologação
|
||||
if (ajustes.length > 0) {
|
||||
// Encontrar o ajuste com timestamp mais próximo ao da homologação
|
||||
let ajusteMaisProximo = ajustes[0]!;
|
||||
let menorDiferenca = Math.abs(ajustes[0]!.criadoEm - h.criadoEm);
|
||||
for (const ajusteCandidato of ajustes) {
|
||||
const diferenca = Math.abs(ajusteCandidato.criadoEm - h.criadoEm);
|
||||
if (diferenca < menorDiferenca) {
|
||||
menorDiferenca = diferenca;
|
||||
ajusteMaisProximo = ajusteCandidato;
|
||||
}
|
||||
}
|
||||
dataAplicacaoAjuste = ajusteMaisProximo.dataAplicacao;
|
||||
periodoAjuste = {
|
||||
dataInicio: ajusteMaisProximo.dataInicio,
|
||||
horaInicio: ajusteMaisProximo.horaInicio,
|
||||
minutoInicio: ajusteMaisProximo.minutoInicio,
|
||||
dataFim: ajusteMaisProximo.dataFim,
|
||||
horaFim: ajusteMaisProximo.horaFim,
|
||||
minutoFim: ajusteMaisProximo.minutoFim
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...h,
|
||||
funcionario: funcionario
|
||||
@@ -2839,7 +2913,9 @@ export const listarHomologacoes = query({
|
||||
data: registro.data,
|
||||
tipo: registro.tipo
|
||||
}
|
||||
: null
|
||||
: null,
|
||||
dataAplicacaoAjuste,
|
||||
periodoAjuste
|
||||
};
|
||||
})
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user