agenda: C9 OK + rowGroup por paciente em /financeiro + bubble cobranca-atualizada
Cenário 9 (Per-session — Michael Balint 12 × R$ 150)
- Testado e passou. 1 rule + 12 agenda_eventos materializadas + 12
financial_records pending. Sem billing_contract. Badge $ em todas as
12 sessões. Conforme esperado.
/melissa/financeiro-lancamentos: agrupado por paciente
- DataTable com rowGroupMode='subheader' + groupRowsBy='patient_id'
- Header de grupo com avatar + nome + badge "N lançamento(s)"
- expandableRowGroups + v-model:expandedRowGroups; watcher popula
todos os grupos da página atual como expandidos (sempre que
recordsGrouped muda — refletindo paginação/filtros)
- Sort outer por nome do paciente, preserva inner order
(pai → filhos de multas/taxas via mesmo agenda_evento_id)
Bubble-up @cobranca-atualizada → M.refetch
- Antes: ao marcar como pago no dialog, o card no FC ficava stale
até trocar de view. AgendaEventoFinanceiroPanel emitia
cobranca-atualizada mas só o loadOccFinancialRecord do dialog
escutava; o _paymentStateMap da agenda nao re-rodava.
- Fix: AgendaEventDialog ganhou _onCobrancaAtualizada que dispara
loadOccFinancialRecord() E emit('cobranca-atualizada') pra cima.
MelissaLayout escuta nos 2 dialogs e chama M.refetch() +
refetchEventosHoje(). Card passa pra borda verde na hora.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -147,7 +147,16 @@ const props = defineProps({
|
||||
blockOverlapWarning: { type: Object, default: null }
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue', 'save', 'delete', 'updateSeriesEvent', 'editSeriesOccurrence', 'updated', 'usar-sessao', 'revogar-sessao']);
|
||||
const emit = defineEmits(['update:modelValue', 'save', 'delete', 'updateSeriesEvent', 'editSeriesOccurrence', 'updated', 'usar-sessao', 'revogar-sessao', 'cobranca-atualizada']);
|
||||
|
||||
// Helper: chamado pelo AgendaEventoFinanceiroPanel quando a cobrança
|
||||
// muda (gerada, paga, cancelada). Refresha estado interno do dialog
|
||||
// E bubble pra MelissaLayout disparar refetch da agenda (sem isso, o
|
||||
// card do FC fica com paymentState stale até trocar de view).
|
||||
function _onCobrancaAtualizada() {
|
||||
loadOccFinancialRecord();
|
||||
emit('cobranca-atualizada');
|
||||
}
|
||||
const confirm = useConfirm();
|
||||
const toast = useToast();
|
||||
const router = useRouter();
|
||||
@@ -1823,7 +1832,7 @@ onBeforeUnmount(() => {
|
||||
Para alterar tipo ou serviços, ajuste a cobrança no Financeiro abaixo.
|
||||
</div>
|
||||
</Message>
|
||||
<AgendaEventoFinanceiroPanel v-if="!occFinancialRecord._synthesized" :evento="eventRow" class="m-3" @cobranca-atualizada="loadOccFinancialRecord" />
|
||||
<AgendaEventoFinanceiroPanel v-if="!occFinancialRecord._synthesized" :evento="eventRow" class="m-3" @cobranca-atualizada="_onCobrancaAtualizada" />
|
||||
</template>
|
||||
|
||||
<!-- LOADING -->
|
||||
@@ -2338,7 +2347,7 @@ onBeforeUnmount(() => {
|
||||
Para alterar tipo ou serviços, ajuste a cobrança no Financeiro abaixo.
|
||||
</div>
|
||||
</Message>
|
||||
<AgendaEventoFinanceiroPanel v-if="!occFinancialRecord._synthesized && isEdit && eventRow?.id" :evento="eventRow" class="m-3" @cobranca-atualizada="loadOccFinancialRecord" />
|
||||
<AgendaEventoFinanceiroPanel v-if="!occFinancialRecord._synthesized && isEdit && eventRow?.id" :evento="eventRow" class="m-3" @cobranca-atualizada="_onCobrancaAtualizada" />
|
||||
</template>
|
||||
<Transition v-else-if="!occFinancialLoading" name="aed-pay-expand">
|
||||
<div class="field-card__body aed-pay-body">
|
||||
@@ -2407,7 +2416,7 @@ onBeforeUnmount(() => {
|
||||
v-if="!occFinancialRecord && !occFinancialLoading && isEdit && eventRow?.id"
|
||||
:evento="eventRow"
|
||||
class="m-3"
|
||||
@cobranca-atualizada="loadOccFinancialRecord"
|
||||
@cobranca-atualizada="_onCobrancaAtualizada"
|
||||
/>
|
||||
|
||||
<!-- Botão "Ver lançamentos" (2026-05-14): abre dialog
|
||||
|
||||
Reference in New Issue
Block a user