From 3caf5792f86b842ea68e17cf2ad65d6e040e6f54 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 20 May 2026 09:16:15 -0300 Subject: [PATCH] agenda popover: botao Agendada + fixes pos-C10/B Adicoes (durante teste C10/A2): - Botao "Agendada" no popover (pi-calendar, variante --info azul cyan) pra permitir reset de status realizado/faltou/cancelado voltando pra agendado sem precisar abrir o AgendaEventDialog. Wire-up: emit 'agendar' -> onAgendar -> updateEventoStatus. - CSS .evento-act--info: hover + is-current com tom cyan (#38bdf8 do domainColors da agenda). Highlight generico rgba(255,255,255,0.12) era invisivel em light mode. Bug fixes durante teste C10/B com Otto Rank: - MelissaEventoPanel paymentLabel: usar paymentAmount tambem pra state='pending' (antes so 'paid' usava; pending caia em ev.price e mostrava R$ 150 original quando o pendente real era R$ 30 da multa). - useMelissaAgenda onUpdateSeriesEvent: chamar _reloadRange() apos _applyStatusDecisions. Sem isso o paymentStateMap+amountMap nao re-populavam apos status change com multa -> FullCalendar e popover ficavam stale ate F5/troca de view. Pendencia salva em memoria: travas em reverse transitions (faltou->agendado deixa multa orfa). User hit pra valer com Otto durante teste, R$ 30 limpo manualmente no DB. Implementar pos-C13. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/layout/melissa/MelissaEventoPanel.vue | 30 +++++++++++++++---- src/layout/melissa/MelissaLayout.vue | 2 ++ .../melissa/composables/useMelissaAgenda.js | 6 ++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/layout/melissa/MelissaEventoPanel.vue b/src/layout/melissa/MelissaEventoPanel.vue index 4fa00c8..258aa21 100644 --- a/src/layout/melissa/MelissaEventoPanel.vue +++ b/src/layout/melissa/MelissaEventoPanel.vue @@ -25,6 +25,7 @@ const props = defineProps({ const emit = defineEmits([ 'close', + 'agendar', 'concluir', 'faltou', 'cancelar', @@ -159,11 +160,12 @@ const paymentIcon = computed(() => { }); const paymentLabel = computed(() => { const state = ev.value.paymentState; - // Pra estado 'paid', usar o VALOR REAL pago (paymentAmount, vem do - // financial_record). Em pacote upfront, é o package_price total — - // o evento.price pode ter sido editado depois e divergir. Em outros - // estados, fallback pro price/insurance_value do evento. - const valor = state === 'paid' && ev.value.paymentAmount != null + // Pra estados 'paid' e 'pending' usar o VALOR REAL do record (paymentAmount). + // Necessário pra cobrir caso de multa: original cancelled R$ 200 + multa + // pending R$ 30 → state='pending' mas paymentAmount=30 (não R$ 200 do ev.price). + // Em pacote upfront paid, é o package_price total. Só cai no fallback de + // ev.price/insurance_value quando state='none' (sem record ativo). + const valor = (state === 'paid' || state === 'pending') && ev.value.paymentAmount != null ? ev.value.paymentAmount : (ev.value.price ?? ev.value.insurance_value); const valorFmt = (valor != null && !Number.isNaN(Number(valor))) @@ -358,6 +360,15 @@ function modalidadeIcon(mod) {
Marcar sessão como:
+