add projet

This commit is contained in:
root
2026-03-05 12:29:37 -05:00
parent 8d1eef8ba8
commit 23b7db1107
9109 changed files with 1106501 additions and 73 deletions
+140
View File
@@ -0,0 +1,140 @@
<?php
namespace App\Http\Controllers\Api;
use App\Models\PayPalPayment;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Response as ResponseFacade;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
class PaypalTransactionsController extends BaseApiController
{
protected PayPalPayment $paypalPayment;
public function __construct()
{
parent::__construct();
$this->paypalPayment = model(PayPalPayment::class);
}
public function index()
{
$page = max(1, (int) ($this->request->getGet('page') ?? 1));
$perPage = min(100, max(1, (int) ($this->request->getGet('per_page') ?? 20)));
$keyword = $this->request->getGet('q');
$query = $this->paypalPayment->newQuery()->orderBy('created_at', 'DESC');
if ($keyword) {
$query->where(function ($q) use ($keyword) {
$q->where('transaction_id', 'LIKE', "%{$keyword}%")
->orWhere('payer_email', 'LIKE', "%{$keyword}%")
->orWhere('event_type', 'LIKE', "%{$keyword}%")
->orWhere('order_id', 'LIKE', "%{$keyword}%")
->orWhere('parent_school_id', 'LIKE', "%{$keyword}%");
});
}
$result = $this->paginate($query, $page, $perPage);
return $this->success($result, 'PayPal transactions retrieved successfully');
}
public function show($id = null)
{
$transaction = $this->paypalPayment->find($id);
if (!$transaction) {
return $this->error('PayPal transaction not found', Response::HTTP_NOT_FOUND);
}
return $this->success($transaction, 'PayPal transaction retrieved successfully');
}
/**
* GET /api/v1/paypal-transactions/transaction/{transactionId}
* Get transaction by PayPal transaction ID
*/
public function getByTransactionId($transactionId = null)
{
$transaction = $this->paypalPayment->newQuery()
->where('transaction_id', $transactionId)
->first();
if (!$transaction) {
return $this->error('PayPal transaction not found', Response::HTTP_NOT_FOUND);
}
return $this->success($transaction, 'PayPal transaction retrieved successfully');
}
/**
* GET /api/v1/paypal-transactions/export-csv
* Export PayPal transactions to CSV file
*/
public function exportCsv(): StreamedResponse
{
$keyword = $this->request->getGet('q');
$query = $this->paypalPayment->newQuery()->orderBy('created_at', 'DESC');
if ($keyword) {
$query->where(function ($q) use ($keyword) {
$q->where('transaction_id', 'LIKE', "%{$keyword}%")
->orWhere('payer_email', 'LIKE', "%{$keyword}%")
->orWhere('event_type', 'LIKE', "%{$keyword}%")
->orWhere('order_id', 'LIKE', "%{$keyword}%")
->orWhere('parent_school_id', 'LIKE', "%{$keyword}%");
});
}
$transactions = $query->get()->toArray();
$filename = 'paypal_transactions_' . date('Ymd_His') . '.csv';
$headers = [
'Content-Type' => 'text/csv',
'Content-Disposition' => "attachment; filename=\"{$filename}\"",
'Pragma' => 'no-cache',
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Expires' => '0',
];
return ResponseFacade::streamDownload(function () use ($transactions) {
$output = fopen('php://output', 'w');
// CSV headers
fputcsv($output, [
'ID',
'Transaction ID',
'Order ID',
'Parent School ID',
'Email',
'Amount',
'Net Amount',
'Currency',
'Status',
'Event Type',
'Created At',
]);
foreach ($transactions as $t) {
$t = (array) $t; // Convert to array for consistent access
fputcsv($output, [
$t['id'] ?? '',
$t['transaction_id'] ?? '',
$t['order_id'] ?? '',
$t['parent_school_id'] ?? '',
$t['payer_email'] ?? '',
$t['amount'] ?? '',
$t['net_amount'] ?? '',
$t['currency'] ?? '',
$t['status'] ?? '',
$t['event_type'] ?? '',
$t['created_at'] ?? '',
]);
}
fclose($output);
}, $filename, $headers);
}
}