- database/07_add_pago_domicilio.sql: 6 columnas nuevas en lab_domicilios (pago_estado ENUM, pago_modo, pago_monto, pago_fecha, pago_notas, pago_registrado_por) - Domicilio::filtrarCampos(): permite guardar campos de pago vía actualizar() - Enfermera::agenda(): incluye valor_domicilio, valor_copago, pago_estado, pago_modo, pago_monto, pago_notas - api/lab/registrar_pago.php: endpoint POST para registrar/actualizar pago del domicilio - enfermero_portal.php: bloque cobro en card, modal registrar pago (efectivo/transferencia/exento), objeto pagoModal JS - lab_domicilios.php: badge pago ⏳/✅/🔵 en fila tabla, sección pago detallada en panel lateral
66 lines
2.3 KiB
PHP
66 lines
2.3 KiB
PHP
<?php
|
|
/**
|
|
* POST /api/lab/registrar_pago.php
|
|
* Registra el pago de un domicilio por parte del cliente.
|
|
* Solo puede llamarse desde el portal del enfermero o por un admin.
|
|
*
|
|
* Body JSON:
|
|
* {
|
|
* domicilio_id: int,
|
|
* pago_estado: 'pagado' | 'exento' | 'pendiente',
|
|
* pago_modo: 'efectivo' | 'transferencia' | 'otro', (requerido si pagado)
|
|
* pago_monto: float, (requerido si pagado)
|
|
* pago_notas: string|null
|
|
* }
|
|
*/
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('POST');
|
|
|
|
try {
|
|
$datos = inputJson();
|
|
|
|
$domId = (int)($datos['domicilio_id'] ?? 0);
|
|
$estado = $datos['pago_estado'] ?? '';
|
|
|
|
if (!$domId) jsonError('domicilio_id requerido');
|
|
if (!in_array($estado, ['pagado', 'exento', 'pendiente'], true))
|
|
jsonError('pago_estado inválido (pagado|exento|pendiente)');
|
|
|
|
if ($estado === 'pagado') {
|
|
if (empty($datos['pago_modo']) || !in_array($datos['pago_modo'], ['efectivo','transferencia','otro'], true))
|
|
jsonError('pago_modo inválido (efectivo|transferencia|otro)');
|
|
if (!isset($datos['pago_monto']) || (float)$datos['pago_monto'] <= 0)
|
|
jsonError('pago_monto debe ser mayor a 0');
|
|
}
|
|
|
|
$adminId = adminId();
|
|
$dom = new Domicilio();
|
|
|
|
// Verificar que existe
|
|
$exist = Database::getInstance()->fetch(
|
|
'SELECT id, pago_estado FROM lab_domicilios WHERE id = ?', [$domId]
|
|
);
|
|
if (!$exist) jsonError("Domicilio #$domId no encontrado");
|
|
|
|
$campos = [
|
|
'pago_estado' => $estado,
|
|
'pago_modo' => ($estado === 'pagado') ? ($datos['pago_modo'] ?? null) : null,
|
|
'pago_monto' => ($estado === 'pagado') ? ((float)$datos['pago_monto']) : null,
|
|
'pago_fecha' => ($estado === 'pagado') ? date('Y-m-d H:i:s') : null,
|
|
'pago_notas' => !empty($datos['pago_notas']) ? trim($datos['pago_notas']) : null,
|
|
'pago_registrado_por' => $adminId,
|
|
];
|
|
|
|
$dom->actualizar($domId, $campos, $adminId);
|
|
|
|
jsonOk([
|
|
'domicilio_id' => $domId,
|
|
'pago_estado' => $estado,
|
|
], 'Pago registrado correctamente');
|
|
|
|
} catch (InvalidArgumentException $e) {
|
|
jsonError($e->getMessage());
|
|
} catch (Exception $e) {
|
|
jsonError($e->getMessage(), 500);
|
|
}
|