feat(schedule): automatically remove auto-generated absences when rescheduling past lessons

This commit is contained in:
Sidney 2026-05-21 09:41:38 -03:00
parent bd972deda3
commit 2f2dec63d5
2 changed files with 8 additions and 2 deletions

View File

@ -50,6 +50,7 @@
- [x] **Parser Global de NUMERIC (Postgres):** Configurado o driver `pg` nos servidores do Manager e do Portal para converter automaticamente `NUMERIC`/`DECIMAL` (OID 1700) para `Number`, cumprindo as regras 19 e 32 do `GEMINI.md`. - [x] **Parser Global de NUMERIC (Postgres):** Configurado o driver `pg` nos servidores do Manager e do Portal para converter automaticamente `NUMERIC`/`DECIMAL` (OID 1700) para `Number`, cumprindo as regras 19 e 32 do `GEMINI.md`.
- [x] **Resolução de Condição de Corrida:** Implementado `await` no update duplo de cobranças do SQL na edição de cobranças do Manager (`Finance.tsx`), assegurando consistência na re-busca de dados. - [x] **Resolução de Condição de Corrida:** Implementado `await` no update duplo de cobranças do SQL na edição de cobranças do Manager (`Finance.tsx`), assegurando consistência na re-busca de dados.
- [x] **Ordem de Exclusão e Notificação (Regra 34):** Removida a exclusão local imediata no endpoint `/api/excluir_cobranca`. A remoção local é delegada ao webhook do Asaas, permitindo que a mensagem de WhatsApp acesse os dados necessários antes da deleção. - [x] **Ordem de Exclusão e Notificação (Regra 34):** Removida a exclusão local imediata no endpoint `/api/excluir_cobranca`. A remoção local é delegada ao webhook do Asaas, permitindo que a mensagem de WhatsApp acesse os dados necessários antes da deleção.
- [x] **Limpeza de Faltas no Reagendamento:** Ajustada a função `handleRescheduleLesson` no `LessonSchedule.tsx` para filtrar e deletar automaticamente do banco de dados/estado todas as faltas geradas de forma automática para uma aula que estava no passado e foi reagendada para o futuro.
- [x] **Validação de Build e Git Push:** Confirmada compilação bem-sucedida do frontend/backend e efetuado o push para a branch remota `main` sob autorização do usuário. - [x] **Validação de Build e Git Push:** Confirmada compilação bem-sucedida do frontend/backend e efetuado o push para a branch remota `main` sob autorização do usuário.
## 📋 Próximos Passos ## 📋 Próximos Passos

View File

@ -321,6 +321,11 @@ const LessonSchedule: React.FC<LessonScheduleProps> = ({ classObj, data, updateD
l.id === lesson.id ? { ...l, date: replacementDate, startTime: replacementStartTime, endTime: replacementEndTime, status: 'rescheduled', type: l.type, cancelReason: undefined } : l l.id === lesson.id ? { ...l, date: replacementDate, startTime: replacementStartTime, endTime: replacementEndTime, status: 'rescheduled', type: l.type, cancelReason: undefined } : l
); );
// Remove qualquer registro de falta (absence) gerado automaticamente para esta aula (Regra 21)
const updatedAttendance = (data.attendance || []).filter(
a => !(a.lessonId === lesson.id && a.type === 'absence')
);
const oldDateStr = new Date(lesson.date + 'T12:00:00Z').toLocaleDateString('pt-BR'); const oldDateStr = new Date(lesson.date + 'T12:00:00Z').toLocaleDateString('pt-BR');
const newDateStr = new Date(replacementDate + 'T12:00:00Z').toLocaleDateString('pt-BR'); const newDateStr = new Date(replacementDate + 'T12:00:00Z').toLocaleDateString('pt-BR');
@ -330,8 +335,8 @@ const LessonSchedule: React.FC<LessonScheduleProps> = ({ classObj, data, updateD
const newNotifs = notifyLessonAction('Aula Reagendada', notifMsg, waMsg); const newNotifs = notifyLessonAction('Aula Reagendada', notifMsg, waMsg);
const updatedNotifications = [...(data.notifications || []), ...newNotifs]; const updatedNotifications = [...(data.notifications || []), ...newNotifs];
updateData({ lessons: updatedLessons, notifications: updatedNotifications }); updateData({ lessons: updatedLessons, notifications: updatedNotifications, attendance: updatedAttendance });
await dbService.saveData({ ...data, lessons: updatedLessons, notifications: updatedNotifications }); await dbService.saveData({ ...data, lessons: updatedLessons, notifications: updatedNotifications, attendance: updatedAttendance });
setTimeout(() => { setTimeout(() => {
setShowLessonDetail(null); setShowLessonDetail(null);