feat(debitos): exibe valores atualizados no extrato de débitos e ajusta cabeçalho de pagamentos
Some checks failed
Dev Build & Deploy Portal / build-deploy (push) Failing after 13m59s
Some checks failed
Dev Build & Deploy Portal / build-deploy (push) Failing after 13m59s
- ExtratoDebitosPortal: adiciona formatPeriodoRef/labelEstadoConta para o extrato em PDF (mantido junto com temDebitoSelecionado já mesclado) - debitos.vue: separa lançado/atualizado/multa/juros/desconto na tabela e nos totalizadores, em vez de só principal/multa/juros - pagamentos.vue: cabeçalho do accordion passa a mostrar o número da conta tributo junto da descrição Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
0ec38639ab
commit
69f4fbfd7d
@ -36,17 +36,33 @@ export function useExtratoDebitosPortal() {
|
||||
)
|
||||
)
|
||||
|
||||
function formatPeriodoRef(date) {
|
||||
if (!date) return '-'
|
||||
const d = new Date(date)
|
||||
if (isNaN(d.getTime())) return '-'
|
||||
return `${String(d.getMonth() + 1).padStart(2, '0')}/${d.getFullYear()}`
|
||||
}
|
||||
|
||||
function labelEstadoConta(codigo) {
|
||||
if (codigo === null || codigo === undefined) return 'Todos'
|
||||
const opt = opcoesEstadoConta.find(o => o.value === Number(codigo))
|
||||
return opt?.label ?? 'Todos'
|
||||
}
|
||||
|
||||
const totalizadores = computed(() => {
|
||||
let principal = 0, multa = 0, juros = 0, valorTotal = 0
|
||||
let lancado = 0, atualizado = 0, multa = 0, juros = 0, desconto = 0, valorTotal = 0
|
||||
resultados.value.forEach(t => {
|
||||
t.selecionados?.forEach(d => {
|
||||
principal += d.valorAtulPrincipal ?? d.valorPrincipal ?? 0
|
||||
const lista = t.selecionados?.length > 0 ? t.selecionados : t.debitos || []
|
||||
lista.forEach(d => {
|
||||
lancado += d.valorPrincipal ?? 0
|
||||
atualizado += d.valorAtulPrincipal ?? d.valorPrincipal ?? 0
|
||||
multa += d.valorAtulMulta ?? d.valorMulta ?? 0
|
||||
juros += d.valorAtulJuros ?? d.valorJuros ?? 0
|
||||
desconto += d.valorAtulCorrecao ?? d.valorCorrecao ?? 0
|
||||
valorTotal += d.valorTotal ?? 0
|
||||
})
|
||||
})
|
||||
return { principal, multa, juros, valorTotal }
|
||||
return { lancado, atualizado, multa, juros, desconto, valorTotal }
|
||||
})
|
||||
|
||||
function mapearDebitos(dados) {
|
||||
@ -115,10 +131,12 @@ export function useExtratoDebitosPortal() {
|
||||
}
|
||||
|
||||
function montarDtoExtrato(usarSelecionados) {
|
||||
const lista = resultados.value.filter(t =>
|
||||
usarSelecionados ? t.selecionados?.length > 0 : t.debitos?.length > 0
|
||||
)
|
||||
const params = montarParametrosTributoConta(lista)
|
||||
return {
|
||||
listaDebitos: resultados.value
|
||||
.filter(t => (usarSelecionados ? t.selecionados?.length > 0 : t.debitos?.length > 0))
|
||||
.map(t => ({
|
||||
listaDebitos: lista.map(t => ({
|
||||
idTributo: t.idTributo,
|
||||
identificador: t.identificador,
|
||||
descricaoTributo: t.descricaoTributo,
|
||||
@ -128,6 +146,46 @@ export function useExtratoDebitosPortal() {
|
||||
totalPagamentos: t.totalPagamentos,
|
||||
debitos: (usarSelecionados ? t.selecionados : t.debitos).map(mapDebitoPayload),
|
||||
})),
|
||||
codTributo: params.codTributo,
|
||||
descricaoTributo: params.descricaoTributo,
|
||||
codContaTributo: params.codContaTributo,
|
||||
descricaoContaTributo: params.descricaoContaTributo,
|
||||
periodoInicio: formatPeriodoRef(filtro.value.periodoIni),
|
||||
periodoFim: formatPeriodoRef(filtro.value.periodoFim),
|
||||
inscricaoMunicipal: '-',
|
||||
estadoConta: labelEstadoConta(filtro.value.estadoConta),
|
||||
}
|
||||
}
|
||||
|
||||
function montarParametrosTributoConta(lista) {
|
||||
if (!lista?.length) {
|
||||
return {
|
||||
codTributo: '-',
|
||||
descricaoTributo: '-',
|
||||
codContaTributo: '-',
|
||||
descricaoContaTributo: '-',
|
||||
}
|
||||
}
|
||||
const chaves = new Map()
|
||||
for (const item of lista) {
|
||||
const key = `${item.idTributo ?? ''}_${item.idContaTributo ?? ''}`
|
||||
if (!chaves.has(key)) chaves.set(key, item)
|
||||
}
|
||||
if (chaves.size === 1) {
|
||||
const t = [...chaves.values()][0]
|
||||
return {
|
||||
codTributo: t.idTributo != null ? String(t.idTributo) : (t.identificador ?? '-'),
|
||||
descricaoTributo: t.descricaoTributo || '-',
|
||||
codContaTributo: t.idContaTributo != null ? String(t.idContaTributo) : '-',
|
||||
descricaoContaTributo: t.descricaoContaTributo || '-',
|
||||
}
|
||||
}
|
||||
const tributos = [...new Set(lista.map(t => t.descricaoTributo).filter(Boolean))]
|
||||
return {
|
||||
codTributo: 'Diversos',
|
||||
descricaoTributo: tributos.length ? tributos.join(', ') : 'Diversos tributos',
|
||||
codContaTributo: '-',
|
||||
descricaoContaTributo: '-',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -124,14 +124,20 @@ function getSegundoNome(texto) {
|
||||
<Column field="dataVencimento" header="Vencimento" style="min-width: 95px">
|
||||
<template #body="{ data }">{{ formatDate(data.dataVencimento) }}</template>
|
||||
</Column>
|
||||
<Column field="valorPrincipal" header="Principal" body-class="text-right" style="min-width: 100px">
|
||||
<Column field="valorPrincipal" header="Lançado" body-class="text-right" style="min-width: 100px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorPrincipal) }}</template>
|
||||
</Column>
|
||||
<Column field="valorMulta" header="Multa" body-class="text-right" style="min-width: 90px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorMulta) }}</template>
|
||||
<Column field="valorAtulPrincipal" header="Atualizado" body-class="text-right" style="min-width: 100px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorAtulPrincipal) }}</template>
|
||||
</Column>
|
||||
<Column field="valorJuros" header="Juros" body-class="text-right" style="min-width: 90px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorJuros) }}</template>
|
||||
<Column field="valorAtulMulta" header="Multa" body-class="text-right" style="min-width: 90px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorAtulMulta) }}</template>
|
||||
</Column>
|
||||
<Column field="valorAtulJuros" header="Juros" body-class="text-right" style="min-width: 90px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorAtulJuros) }}</template>
|
||||
</Column>
|
||||
<Column field="valorAtulCorrecao" header="Desconto" body-class="text-right" style="min-width: 90px">
|
||||
<template #body="{ data }">{{ formatCurrency(data.valorAtulCorrecao) }}</template>
|
||||
</Column>
|
||||
<Column field="valorTotal" header="Total" body-class="text-right" style="min-width: 100px">
|
||||
<template #body="{ data }">
|
||||
@ -168,10 +174,14 @@ function getSegundoNome(texto) {
|
||||
/>
|
||||
<p v-if="erros.dataVencimento" class="text-xs text-red-500 mt-1">{{ erros.dataVencimento }}</p>
|
||||
</div>
|
||||
<div class="sm:col-span-3 grid grid-cols-2 sm:grid-cols-4 gap-3 items-end">
|
||||
<div class="sm:col-span-3 grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 items-end">
|
||||
<div>
|
||||
<p class="text-xs text-slate-500">Principal</p>
|
||||
<p class="font-bold">{{ formatCurrency(totalizadores.principal) }}</p>
|
||||
<p class="text-xs text-slate-500">Lançado</p>
|
||||
<p class="font-bold">{{ formatCurrency(totalizadores.lancado) }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs text-slate-500">Atualizado</p>
|
||||
<p class="font-bold">{{ formatCurrency(totalizadores.atualizado) }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs text-slate-500">Multa</p>
|
||||
@ -181,6 +191,10 @@ function getSegundoNome(texto) {
|
||||
<p class="text-xs text-slate-500">Juros</p>
|
||||
<p class="font-bold">{{ formatCurrency(totalizadores.juros) }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs text-slate-500">Desconto</p>
|
||||
<p class="font-bold">{{ formatCurrency(totalizadores.desconto) }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs text-slate-500">Total a Pagar</p>
|
||||
<p class="font-bold text-primary">{{ formatCurrency(totalizadores.valorTotal) }}</p>
|
||||
|
||||
@ -87,7 +87,7 @@ async function emitirComprovante(pag) {
|
||||
<AccordionPanel v-for="(t, index) in tributos" :key="t.idContaTributo ?? index" :value="String(index)">
|
||||
<AccordionHeader>
|
||||
<span class="text-sm font-semibold truncate">
|
||||
{{ t.descricaoTributo }} — {{ t.descricaoContaTributo }}
|
||||
Conta {{ t.idContaTributo }} — {{ t.descricaoContaTributo || '-' }} / {{ t.descricaoTributo }}
|
||||
({{ t.pagamentos?.length ?? 0 }} pagamentos)
|
||||
</span>
|
||||
</AccordionHeader>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user