- Implementa CRUD de unidades y soporte para decimales en inventario. - Integra servicios de WhatsApp para envío de documentos y auth. - Ajusta validación de series y permisos (RoleSeeder).
122 lines
4.1 KiB
PHP
122 lines
4.1 KiB
PHP
<?php namespace App\Http\Controllers\App;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Services\WhatsappService;
|
|
use Illuminate\Http\Request;
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
|
|
class WhatsappController extends Controller
|
|
{
|
|
public function __construct(
|
|
protected WhatsappService $whatsAppService
|
|
) {}
|
|
|
|
/**
|
|
* Enviar documento por WhatsApp
|
|
*/
|
|
public function sendDocument(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'phone_number' => ['required', 'string', 'regex:/^[0-9]{10,13}$/'],
|
|
'document_url' => ['required', 'url'],
|
|
'caption' => ['required', 'string', 'max:1000'],
|
|
'filename' => ['required', 'string', 'max:255'],
|
|
'ticket' => ['required', 'string', 'max:100'],
|
|
'customer_name' => ['required', 'string', 'max:255'],
|
|
], [
|
|
'phone_number.required' => 'El número de teléfono es obligatorio',
|
|
'phone_number.regex' => 'El número de teléfono debe tener entre 10 y 13 dígitos',
|
|
'document_url.required' => 'La URL del documento es obligatoria',
|
|
'document_url.url' => 'La URL del documento no es válida',
|
|
]);
|
|
|
|
$result = $this->whatsAppService->sendDocument(
|
|
phoneNumber: $validated['phone_number'],
|
|
documentUrl: $validated['document_url'],
|
|
caption: $validated['caption'],
|
|
filename: $validated['filename'],
|
|
userEmail: auth()->user()->email,
|
|
ticket: $validated['ticket'],
|
|
customerName: $validated['customer_name']
|
|
);
|
|
|
|
if ($result['success']) {
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Documento enviado correctamente por WhatsApp',
|
|
'data' => $result
|
|
]);
|
|
}
|
|
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => $result['message'],
|
|
'error' => $result['error'] ?? null
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Enviar factura por WhatsApp
|
|
*/
|
|
public function sendInvoice(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'phone_number' => ['required', 'string', 'regex:/^[0-9]{10,13}$/'],
|
|
'invoice_number' => ['required', 'string'],
|
|
'pdf_url' => ['required', 'url'],
|
|
'xml_url' => ['nullable', 'url'],
|
|
'customer_name' => ['required', 'string', 'max:255'],
|
|
]);
|
|
|
|
$result = $this->whatsAppService->sendInvoice(
|
|
phoneNumber: $validated['phone_number'],
|
|
pdfUrl: $validated['pdf_url'],
|
|
xmlUrl: $validated['xml_url'] ?? null,
|
|
invoiceNumber: $validated['invoice_number'],
|
|
customerName: $validated['customer_name']
|
|
);
|
|
|
|
if ($result['success']) {
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Factura enviada correctamente por WhatsApp',
|
|
'data' => $result
|
|
]);
|
|
}
|
|
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'Error al enviar la factura',
|
|
'error' => $result
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Enviar ticket de venta por WhatsApp
|
|
*/
|
|
public function sendSaleTicket(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'phone_number' => ['required', 'string', 'regex:/^[0-9]{10,13}$/'],
|
|
'sale_number' => ['required', 'string'],
|
|
'ticket_url' => ['required', 'url'],
|
|
'customer_name' => ['required', 'string', 'max:255'],
|
|
]);
|
|
|
|
$result = $this->whatsAppService->sendSaleTicket(
|
|
phoneNumber: $validated['phone_number'],
|
|
ticketUrl: $validated['ticket_url'],
|
|
saleNumber: $validated['sale_number'],
|
|
customerName: $validated['customer_name']
|
|
);
|
|
|
|
if ($result['success']) {
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Ticket enviado correctamente por WhatsApp',
|
|
'data' => $result
|
|
]);
|
|
}
|
|
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => $result['message'],
|
|
'error' => $result['error'] ?? null
|
|
]);
|
|
}
|
|
}
|