up
This commit is contained in:
@@ -77,6 +77,7 @@ $filas = $db->fetchAll(
|
||||
COALESCE(d.seguro_nombre,'') AS seguro_nombre,
|
||||
d.estado AS dom_estado,
|
||||
COALESCE(d.valor_domicilio, 0) AS valor_domicilio,
|
||||
COALESCE(d.valor_copago, 0) AS valor_copago,
|
||||
d.pago_estado,
|
||||
COALESCE(d.pago_modo,'') AS pago_modo,
|
||||
COALESCE(d.pago_monto, 0) AS pago_monto,
|
||||
@@ -109,16 +110,21 @@ unset($f);
|
||||
|
||||
// Resumen financiero — sumar desde parcialidades cuando existen
|
||||
$resumen = [
|
||||
'total' => count($filas),
|
||||
'pagados' => 0,
|
||||
'pendientes' => 0,
|
||||
'exentos' => 0,
|
||||
'monto_total' => 0.0,
|
||||
'por_modo' => [],
|
||||
'total' => count($filas),
|
||||
'pagados' => 0,
|
||||
'pendientes' => 0,
|
||||
'exentos' => 0,
|
||||
'monto_total' => 0.0,
|
||||
'total_valor_dom' => 0.0, // suma valor_domicilio esperado
|
||||
'total_valor_copago' => 0.0, // suma valor_copago esperado
|
||||
'por_modo' => [],
|
||||
];
|
||||
|
||||
foreach ($filas as $f) {
|
||||
$est = $f['pago_estado'] ?? 'pendiente';
|
||||
// Acumular valores esperados (siempre, no solo pagados)
|
||||
$resumen['total_valor_dom'] += (float)($f['valor_domicilio'] ?? 0);
|
||||
$resumen['total_valor_copago'] += (float)($f['valor_copago'] ?? 0);
|
||||
if ($est === 'pagado') {
|
||||
$resumen['pagados']++;
|
||||
if (!empty($f['pagos_detalle'])) {
|
||||
@@ -126,15 +132,15 @@ foreach ($filas as $f) {
|
||||
foreach ($f['pagos_detalle'] as $p) {
|
||||
$monto = (float)$p['monto'];
|
||||
$key = $p['modo'] ?: 'sin_registrar';
|
||||
$resumen['monto_total'] += $monto;
|
||||
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
|
||||
$resumen['monto_total'] += $monto;
|
||||
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
|
||||
}
|
||||
} else {
|
||||
// Fallback registro legacy
|
||||
$monto = (float)$f['pago_monto'];
|
||||
$key = $f['pago_modo'] ?: 'sin_registrar';
|
||||
$resumen['monto_total'] += $monto;
|
||||
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
|
||||
$resumen['monto_total'] += $monto;
|
||||
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
|
||||
}
|
||||
} elseif ($est === 'exento') {
|
||||
$resumen['exentos']++;
|
||||
|
||||
+19
-4
@@ -177,6 +177,7 @@ if ($tipo) {
|
||||
d.tipo_cliente, COALESCE(d.seguro_nombre,'') AS seguro,
|
||||
d.estado AS dom_estado,
|
||||
COALESCE(d.valor_domicilio,0) AS valor_domicilio,
|
||||
COALESCE(d.valor_copago,0) AS valor_copago,
|
||||
COALESCE(d.pago_estado,'pendiente') AS pago_estado,
|
||||
COALESCE(d.pago_modo,'') AS pago_modo,
|
||||
COALESCE(d.pago_monto,0) AS pago_monto,
|
||||
@@ -193,7 +194,7 @@ if ($tipo) {
|
||||
$headers = [
|
||||
'ID','Fecha programada','Fecha pago','Paciente','Documento',
|
||||
'Enfermero/a','Tipo cliente','Seguro','Estado domicilio',
|
||||
'Valor domicilio','Estado pago','Modo pago','Monto recibido','Notas pago',
|
||||
'Valor domicilio','Valor copago','Estado pago','Modo pago','Monto recibido','Notas pago',
|
||||
];
|
||||
break;
|
||||
|
||||
@@ -769,11 +770,22 @@ async function cargarReportePagos() {
|
||||
const modosEl = document.getElementById('pr-modos');
|
||||
const MODO_LABEL = { efectivo:'Efectivo', transferencia:'Transferencia', otro:'Otro', sin_registrar:'Sin modo' };
|
||||
const modos = Object.entries(rs.por_modo || {});
|
||||
modosEl.innerHTML = modos.length
|
||||
|
||||
// Badges por método de pago + desglose domicilio/copago esperados
|
||||
let modosHtml = modos.length
|
||||
? modos.map(([k, v]) =>
|
||||
`<span class="badge bg-secondary">${esc(MODO_LABEL[k] || k)}: ${fmtMoney(v)}</span>`
|
||||
).join('')
|
||||
: '';
|
||||
if (rs.total_valor_dom || rs.total_valor_copago) {
|
||||
modosHtml += `<span class="badge" style="background:#0d6efd20;color:#0d6efd;border:1px solid #0d6efd">
|
||||
Domicilio esperado: ${fmtMoney(rs.total_valor_dom || 0)}
|
||||
</span>
|
||||
<span class="badge" style="background:#19875420;color:#198754;border:1px solid #198754">
|
||||
Copago esperado: ${fmtMoney(rs.total_valor_copago || 0)}
|
||||
</span>`;
|
||||
}
|
||||
modosEl.innerHTML = modosHtml;
|
||||
document.getElementById('pago-resumen').style.display = '';
|
||||
|
||||
// Tabla de detalle
|
||||
@@ -796,7 +808,8 @@ async function cargarReportePagos() {
|
||||
<th>Documento</th>
|
||||
<th>Enfermero/a</th>
|
||||
<th>Tipo cliente</th>
|
||||
<th class="text-end">Valor domicilio</th>
|
||||
<th class="text-end">Val. domicilio</th>
|
||||
<th class="text-end">Val. copago</th>
|
||||
<th class="text-center">Estado pago</th>
|
||||
<th class="text-center">Modo pago</th>
|
||||
<th class="text-end">Monto recibido</th>
|
||||
@@ -835,7 +848,8 @@ async function cargarReportePagos() {
|
||||
<td class="text-muted">${esc(f.numero_documento || '—')}</td>
|
||||
<td class="text-nowrap">${esc(f.enfermera)}</td>
|
||||
<td class="small">${cliente}</td>
|
||||
<td class="text-end">${fmtMoney(f.valor_domicilio)}</td>
|
||||
<td class="text-end">${parseFloat(f.valor_domicilio||0) > 0 ? fmtMoney(f.valor_domicilio) : '<span class="text-muted">—</span>'}</td>
|
||||
<td class="text-end">${parseFloat(f.valor_copago||0) > 0 ? fmtMoney(f.valor_copago) : '<span class="text-muted">—</span>'}</td>
|
||||
<td class="text-center">
|
||||
<span class="badge bg-${PAGO_BADGE[pagoEst] || 'secondary'}">${esc(pagoEst)}</span>
|
||||
</td>
|
||||
@@ -855,6 +869,7 @@ async function cargarReportePagos() {
|
||||
<tr>
|
||||
<td colspan="6" class="ps-3">Total</td>
|
||||
<td class="text-end">${fmtMoney(d.filas.reduce((s,f) => s + parseFloat(f.valor_domicilio||0), 0))}</td>
|
||||
<td class="text-end">${fmtMoney(d.filas.reduce((s,f) => s + parseFloat(f.valor_copago||0), 0))}</td>
|
||||
<td></td><td></td>
|
||||
<td class="text-end text-success">${fmtMoney(rs.monto_total)}</td>
|
||||
<td colspan="3"></td>
|
||||
|
||||
Reference in New Issue
Block a user