up
This commit is contained in:
@@ -163,6 +163,20 @@ class Domicilio {
|
||||
[$id]
|
||||
);
|
||||
|
||||
// Vínculo: domicilio origen (este fue reprogramado desde otro)
|
||||
if (!empty($dom['domicilio_origen_id'])) {
|
||||
$dom['origen_info'] = $this->db->fetch(
|
||||
"SELECT id, fecha_programada, hora_programada, estado FROM lab_domicilios WHERE id = ?",
|
||||
[(int)$dom['domicilio_origen_id']]
|
||||
);
|
||||
}
|
||||
|
||||
// Vínculo: domicilio(s) reprogramado(s) desde este
|
||||
$dom['reprogramaciones'] = $this->db->fetchAll(
|
||||
"SELECT id, fecha_programada, hora_programada, estado FROM lab_domicilios WHERE domicilio_origen_id = ? ORDER BY id ASC",
|
||||
[$id]
|
||||
);
|
||||
|
||||
return $dom;
|
||||
}
|
||||
|
||||
@@ -217,6 +231,63 @@ class Domicilio {
|
||||
return $ok > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reprogramar un domicilio:
|
||||
* 1. Marca el original como 'reprogramado' con fecha_reprogramada.
|
||||
* 2. Clona el domicilio para la nueva fecha/hora.
|
||||
* 3. Vincula el clon con domicilio_origen_id.
|
||||
*
|
||||
* @return int ID del nuevo domicilio creado.
|
||||
*/
|
||||
public function reprogramar(
|
||||
int $idOrigen,
|
||||
string $nuevaFecha,
|
||||
string $nuevaHora = '',
|
||||
string $motivo = '',
|
||||
?int $adminId = null
|
||||
): int {
|
||||
// 1. Obtener datos del original
|
||||
$origen = $this->db->fetch(
|
||||
'SELECT * FROM lab_domicilios WHERE id = ?', [$idOrigen]
|
||||
);
|
||||
if (!$origen) {
|
||||
throw new \RuntimeException('Domicilio no encontrado');
|
||||
}
|
||||
|
||||
// 2. Marcar original como reprogramado
|
||||
$extrasOrigen = [
|
||||
'fecha_reprogramada' => $nuevaFecha,
|
||||
];
|
||||
if ($motivo) $extrasOrigen['motivo_cancelacion'] = $motivo;
|
||||
$this->cambiarEstado($idOrigen, 'reprogramado', $adminId, $extrasOrigen);
|
||||
|
||||
// 3. Clonar campos relevantes para el nuevo domicilio
|
||||
$campos = $this->filtrarCampos($origen);
|
||||
// Resetear campos operativos del original
|
||||
unset(
|
||||
$campos['estado'], $campos['motivo_cancelacion'],
|
||||
$campos['fecha_reprogramada'], $campos['hora_llegada'],
|
||||
$campos['hora_salida'], $campos['observaciones'],
|
||||
$campos['muestras_tomadas'], $campos['pago_estado'],
|
||||
$campos['pago_modo'], $campos['pago_monto'],
|
||||
$campos['pago_fecha'], $campos['pago_notas'],
|
||||
$campos['pago_registrado_por'], $campos['temperatura_inicio'],
|
||||
$campos['temperatura_salida'], $campos['domicilio_origen_id']
|
||||
);
|
||||
$campos['fecha_programada'] = $nuevaFecha;
|
||||
$campos['hora_programada'] = $nuevaHora ?: null;
|
||||
$campos['estado'] = 'programado';
|
||||
$campos['domicilio_origen_id']= $idOrigen;
|
||||
$campos['creado_por'] = $adminId;
|
||||
|
||||
$nuevoId = (int)$this->db->insert('lab_domicilios', $campos);
|
||||
$this->log->registrar($adminId, 'domicilios', 'reprogramar', $nuevoId, [
|
||||
'origen_id' => $idOrigen,
|
||||
'nueva_fecha' => $nuevaFecha,
|
||||
]);
|
||||
return $nuevoId;
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
// Agenda del día
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
@@ -279,6 +350,7 @@ class Domicilio {
|
||||
'observaciones', 'muestras_tomadas', 'notas_admin',
|
||||
'seguro_nombre', 'autorizacion', 'copago_laboratorio',
|
||||
'valor_domicilio', 'valor_copago',
|
||||
'domicilio_origen_id',
|
||||
// pago
|
||||
'pago_estado', 'pago_modo', 'pago_monto', 'pago_fecha',
|
||||
'pago_notas', 'pago_registrado_por',
|
||||
|
||||
Reference in New Issue
Block a user