diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php
index 4bba417..98995f2 100644
--- a/app/Http/Controllers/ReportsController.php
+++ b/app/Http/Controllers/ReportsController.php
@@ -16,63 +16,67 @@ class ReportsController extends Controller
$this->apiBaseUrl = env('EXTERNAL_API_URL', 'http://localhost:8081/api/');
}
- private function makeApiRequest($endpoint, $params)
-{
- try {
- $user = Session::get('user');
- $accessToken = $user['access_token'] ?? null;
+ private function makeApiRequest($endpoint, $params, $isDownload = false)
+ {
+ try {
+ $user = Session::get('user');
+ $accessToken = $user['access_token'] ?? null;
- if (!$accessToken) {
- Log::info("No access token found, redirecting to login from {$endpoint}");
- return redirect()->route('login')->with('error', 'Please log in to view reports.');
- }
+ if (!$accessToken) {
+ Log::info("No access token found, redirecting to login from {$endpoint}");
+ return redirect()->route('login')->with('error', 'Please log in to view reports.');
+ }
- // Ensure proper URL formation
- $baseUrl = rtrim($this->apiBaseUrl, '/');
- $endpoint = ltrim($endpoint, '/');
- $fullUrl = "{$baseUrl}/{$endpoint}";
+ $baseUrl = rtrim($this->apiBaseUrl, '/');
+ $endpoint = ltrim($endpoint, '/');
+ $fullUrl = "{$baseUrl}/{$endpoint}";
- Log::info("Making API request to: {$fullUrl}", ['params' => $params]);
- $response = Http::withHeaders([
- 'Accept' => 'application/json',
- 'Authorization' => 'Bearer ' . $accessToken,
- ])->timeout(30)->get($fullUrl, $params);
+ Log::info("Making API request to: {$fullUrl}", ['params' => $params]);
+ $client = Http::withHeaders([
+ 'Accept' => $isDownload ? 'text/csv' : 'application/json',
+ 'Authorization' => 'Bearer ' . $accessToken,
+ ])->timeout(30);
- Log::info("API response status: {$response->status()}", [
- 'endpoint' => $endpoint,
- 'response_body' => $response->body(),
- 'headers' => $response->headers()
- ]);
+ $response = $client->get($fullUrl, $params);
- if ($response->status() === 401 || $response->status() === 403) {
- Log::warning("Unauthorized or Forbidden API response for {$endpoint}", ['response' => $response->json()]);
- return redirect()->route('login')->with('error', 'Your session has expired. Please log in again.');
- }
-
- if (!$response->successful()) {
- Log::error("API request failed for {$endpoint}", [
- 'status' => $response->status(),
- 'response' => $response->body(),
+ Log::info("API response status: {$response->status()}", [
+ 'endpoint' => $endpoint,
'headers' => $response->headers()
]);
+
+ if ($response->status() === 401 || $response->status() === 403) {
+ Log::warning("Unauthorized or Forbidden API response for {$endpoint}", ['response' => $response->body()]);
+ return redirect()->route('login')->with('error', 'Your session has expired. Please log in again.');
+ }
+
+ if (!$response->successful()) {
+ Log::error("API request failed for {$endpoint}", [
+ 'status' => $response->status(),
+ 'response' => $response->body(),
+ 'headers' => $response->headers()
+ ]);
+ return null;
+ }
+
+ if ($isDownload) {
+ return $response; // Return raw response for file download
+ }
+
+ return $response->json();
+ } catch (\Illuminate\Http\Client\ConnectionException $e) {
+ Log::error("Connection error during API request to {$endpoint}", [
+ 'error' => $e->getMessage(),
+ 'params' => $params
+ ]);
+ return null;
+ } catch (\Exception $e) {
+ Log::error("Unexpected error during API request to {$endpoint}", [
+ 'error' => $e->getMessage(),
+ 'params' => $params
+ ]);
return null;
}
-
- return $response->json();
- } catch (\Illuminate\Http\Client\ConnectionException $e) {
- Log::error("Connection error during API request to {$endpoint}", [
- 'error' => $e->getMessage(),
- 'params' => $params
- ]);
- return null;
- } catch (\Exception $e) {
- Log::error("Unexpected error during API request to {$endpoint}", [
- 'error' => $e->getMessage(),
- 'params' => $params
- ]);
- return null;
}
-}
public function mobileUsage(Request $request)
{
$params = [
@@ -258,4 +262,31 @@ class ReportsController extends Controller
return view('pages.reports.top-up-usage-report', compact('topUpData', 'currentPage', 'lastPage', 'total', 'errorMessage'));
}
+
+ public function exportStationRating(Request $request)
+ {
+ $params = [
+ 'date_start' => $request->input('date_start'),
+ 'date_end' => $request->input('date_end'),
+ '_search' => $request->input('_search'),
+ 'sorting' => $request->input('sort', 'date|desc'),
+ ];
+
+ $response = $this->makeApiRequest('cms/reportStationRatingsExport', $params, true);
+
+ if (is_a($response, '\Illuminate\Http\RedirectResponse')) {
+ return $response;
+ }
+
+ if (!$response) {
+ Log::warning("Failed to export station rating data", ['params' => $params]);
+ return redirect()->back()->with('error', 'Failed to export CSV.');
+ }
+
+ $filename = "reports_station_rating" . date("mdY") . ".csv";
+
+ return response($response->body(), 200)
+ ->header('Content-Type', 'text/csv')
+ ->header('Content-Disposition', "attachment; filename=\"$filename\"");
+ }
}
\ No newline at end of file
diff --git a/resources/views/pages/reports/station-rating-report.blade.php b/resources/views/pages/reports/station-rating-report.blade.php
index d761036..7b8d1b2 100644
--- a/resources/views/pages/reports/station-rating-report.blade.php
+++ b/resources/views/pages/reports/station-rating-report.blade.php
@@ -70,20 +70,21 @@
}
-
+
@endsection
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index d19ece1..c84a611 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -202,7 +202,7 @@ Route::get('/mobile-usage-report', [ReportsController::class, 'mobileUsage'])->n
Route::get('/registration-report', [ReportsController::class, 'registration'])->name('registration-report');
Route::get('/station-rating-report', [ReportsController::class, 'stationRating'])->name('station-rating-report');
Route::get('/top-up-usage-report', [ReportsController::class, 'topUp'])->name('top-up-usage-report');
-
+Route::get('/station-rating-reportExport', [ReportsController::class, 'exportStationRating'])->name('station-rating-reportExport');
//Station
Route::get('/station-management', [StationController::class, 'index'])->name('stations');
Route::get('/stations/create', [StationController::class, 'create'])->name('stations.create');