diff --git a/app/Http/Livewire/Chat/PublicChat.php b/app/Http/Livewire/Chat/PublicChat.php index d012a86..82e7550 100755 --- a/app/Http/Livewire/Chat/PublicChat.php +++ b/app/Http/Livewire/Chat/PublicChat.php @@ -480,26 +480,47 @@ class PublicChat extends Component return; } - $resultado = app(\App\Services\PagoValidadorService::class)->validar($datosPago); + $resultado = app(\App\Services\PagoValidadorService::class)->validar( + $datosPago, $this->userId, $this->nombreUsuario, 'web' + ); + $monto = (int) ($datosPago['valor'] ?? 0); $botones = []; + if ($resultado['estado'] === 'confirmado') { $botones[] = [ - 'label' => 'Aplicar recarga de $' . number_format($datosPago['valor'] ?? 0), + 'label' => 'Aplicar recarga de $' . number_format($monto), 'action' => 'pago.aplicar', - 'data' => ['monto' => $datosPago['valor'], 'referencia' => $datosPago['referencia'] ?? null], + 'data' => ['monto' => $monto, 'referencia' => $datosPago['referencia'] ?? null], + ]; + } elseif ($resultado['estado'] !== 'ya_usado') { + // No confirmado: ofrecer aplicar manualmente + $botones[] = [ + 'label' => 'Aplicar $' . number_format($monto) . ' (manual)', + 'action' => 'pago.aplicar', + 'data' => ['monto' => $monto, 'referencia' => $datosPago['referencia'] ?? null], ]; } + $botones[] = ['label' => 'Hablar con asesor', 'action' => 'asesor.solicitar', 'data' => []]; $botones[] = ['label' => '<- Menu', 'action' => 'menu.principal', 'data' => []]; + $motivoTexto = match ($resultado['motivo'] ?? '') { + 'correo_deshabilitado' => 'Verificación por correo no configurada', + 'error_imap' => 'Error al leer correos IMAP', + 'sin_correos' => 'Sin correos recientes en bandeja', + 'sin_coincidencia' => 'Ningún correo coincide con este monto/fecha', + default => null, + }; + ChatMessage::create([ 'conversation_id' => $this->convId, 'tipo' => 'bot', 'tipo_ui' => 'validacion', 'contenido' => 'Resultado del analisis:', 'payload' => [ - 'estado' => $resultado['estado'], + 'estado' => $resultado['estado'], + 'motivo' => $motivoTexto, 'ia_datos' => $datosPago, 'botones' => $botones, ], diff --git a/app/Services/TelegramBotService.php b/app/Services/TelegramBotService.php index 0ae7a18..2aceeaf 100755 --- a/app/Services/TelegramBotService.php +++ b/app/Services/TelegramBotService.php @@ -207,28 +207,47 @@ class TelegramBotService ); $monto = number_format($datosPago['valor'] ?? 0); $ref = $datosPago['referencia'] ?? 'N/A'; + $valor = (int) ($datosPago['valor'] ?? 0); $texto = "📊 *Resultado del análisis:*\n\n"; + $texto .= "Banco: " . ($datosPago['banco'] ?? 'N/A') . "\n"; $texto .= "Monto: *\$$monto*\n"; $texto .= "Referencia: `{$ref}`\n"; + if ($datosPago['fecha'] ?? null) { + $texto .= "Fecha: " . $datosPago['fecha']; + if ($datosPago['hora'] ?? null) { + $texto .= " " . $datosPago['hora']; + } + $texto .= "\n"; + } if ($resultado['estado'] === 'confirmado') { - $texto .= "Estado: *✅ Confirmado*"; + $texto .= "\nEstado: *✅ Confirmado por correo*"; $buttons = [ - [['text' => "✅ Aplicar recarga de \$$monto", 'callback_data' => 'pay_apply|' . ($datosPago['valor'] ?? 0) . '|' . $ref]], + [['text' => "✅ Aplicar recarga de \$$monto", 'callback_data' => 'pay_apply|' . $valor . '|' . $ref]], [['text' => '🔙 Menú principal', 'callback_data' => 'menu']], ]; } elseif ($resultado['estado'] === 'ya_usado') { - $texto .= "Estado: *⛔ Comprobante ya utilizado*\nEste pago ya fue registrado por otro usuario."; + $texto .= "\nEstado: *⛔ Comprobante ya utilizado*\nEste pago ya fue registrado."; $buttons = [ [['text' => '🧑 Hablar con asesor', 'callback_data' => 'agent']], [['text' => '🔙 Menú principal', 'callback_data' => 'menu']], ]; } else { - $texto .= "Estado: *⚠️ No confirmado*"; + $motivo = match ($resultado['motivo'] ?? '') { + 'correo_deshabilitado' => '📧 Verificación por correo no configurada', + 'error_imap' => '📧 Error al leer correos IMAP', + 'sin_correos' => '📧 Sin correos recientes en bandeja', + 'sin_coincidencia' => '📧 Ningún correo coincide con este monto/fecha', + default => '📧 No se pudo verificar', + }; + $texto .= "\nEstado: *⚠️ No confirmado automáticamente*\n_{$motivo}_"; + + // Ofrecer aplicar manualmente si el comprobante fue leído correctamente $buttons = [ + [['text' => "✅ Aplicar \$$monto de todas formas", 'callback_data' => 'pay_apply|' . $valor . '|' . $ref]], [['text' => '🧑 Hablar con asesor', 'callback_data' => 'agent']], - [['text' => '🔙 Menú principal', 'callback_data' => 'menu']], + [['text' => '🔙 Menú principal', 'callback_data' => 'menu']], ]; }