prepare( "SELECT tm.id, tm.solicitud_id, tm.estado, ts.turno_id AS turno_origen_id FROM turnero_muestras tm JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id WHERE tm.id = ?" ); $stmt->execute([$muestraId]); $muestra = $stmt->fetch(PDO::FETCH_ASSOC); if (!$muestra) jsonError('Muestra no encontrada.', 404); // Solo registrar "recibida en otro turno" cuando de verdad es una visita distinta // a la que generó la muestra (no tocar la solicitud/turno original). $recibidaEnTurno = ($turnoId && $turnoId !== (int)$muestra['turno_origen_id']) ? $turnoId : null; // Construir campos a actualizar $ahora = date('Y-m-d H:i:s'); $adminI = adminId(); if ($estado === 'recibida') { $pdo->prepare( "UPDATE turnero_muestras SET estado = 'recibida', recibida_por = ?, recibida_at = ?, recibida_en_turno_id = ?, motivo_rechazo = NULL WHERE id = ?" )->execute([$adminI, $ahora, $recibidaEnTurno, $muestraId]); } elseif ($estado === 'rechazada') { $pdo->prepare( "UPDATE turnero_muestras SET estado = 'rechazada', recibida_por = ?, recibida_at = ?, motivo_rechazo = ? WHERE id = ?" )->execute([$adminI, $ahora, $motivo, $muestraId]); } else { // Revertir a pendiente $pdo->prepare( "UPDATE turnero_muestras SET estado = 'pendiente', recibida_por = NULL, recibida_at = NULL, recibida_en_turno_id = NULL, motivo_rechazo = NULL WHERE id = ?" )->execute([$muestraId]); } jsonOk(['muestra_id' => $muestraId, 'estado' => $estado], 'Muestra actualizada');