unioil-mobile-api/app/Http/Controllers/API/ReportsController.php

216 lines
7.3 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Contracts\RegistrationResourceInterface;
use App\Exports\ReportRegistrationExport;
use App\Http\Resources\RegistrationResource;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Contracts\PaymentResourceInterface;
use App\Contracts\AdminActionLogsInterface;
use App\Contracts\RatingsResourceInterface;
use App\Contracts\MobileAnalyticsResourceInterface;
use App\Http\Resources\ReportTopUpResource;
use App\Http\Resources\ReportStationRatingsResource;
use App\Http\Resources\ReportMobileUsageResource;
use App\Helpers\HttpStatusCode;
use App\Libraries\ParameterHelper;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ReportTopUpExport;
use App\Exports\ReportStationRatingsExport;
use App\Exports\ReportMobileUsageExport;
class ReportsController extends Controller
{
public $payments;
public $ratings;
public $mobileAnalytics;
public $registration;
protected $format;
public function __construct(PaymentResourceInterface $payments, HttpStatusCode $httpStatusCode,AdminActionLogsInterface $admin_logs, RatingsResourceInterface $ratings, MobileAnalyticsResourceInterface $mobileAnalytics, RegistrationResourceInterface $registration)
{
$this->payments = $payments;
$this->format = $httpStatusCode;
$this->admin_logs = $admin_logs;
$this->ratings = $ratings;
$this->mobileAnalytics = $mobileAnalytics;
$this->registration = $registration;
}
/**
* TOP UP REPORT
*
*
*/
public function top_up(Request $request)
{
$params = [
'search' => ($request->has('_search') ? $request->get('_search') : NULL),
'page_size' => ($request->has('page_size') ? $request->get('page_size') : 10),
'page' => ($request->has('page') ? $request->get('page') : 10),
'date_start' => ($request->has('date_start') ? $request->get('date_start') : null),
'date_end' => ($request->has('date_end') ? $request->get('date_end') : null),
'sorting' => ParameterHelper::prepareSortingParameter($request)
];
if(ParameterHelper::validateStartEndDate($params))
{
return $this->format->unprocessableEntity('Start date must not be greater than end date');
}
$list = $this->payments->report_topUp($params);
if(count($list))
{
$additionals = $this->format->success("Success",[],false);
$data = ReportTopUpResource::collection($list)->additional($additionals);
return $data->response()->setStatusCode(200);
}
else
{
return $this->format->success("No records found",[]);
}
}
public function export_top_up()
{
$filename = "reports_top_up" . date("mdY") . ".csv";
$this->admin_logs->log(0,'REPORT_TOPUP','EXPORT',$filename);
return Excel::download(new ReportTopUpExport($this->payments), $filename);
}
/**
* STATION RATING REPORT
*
*
*/
public function station_rating(Request $request)
{
$params = [
'search' => ($request->has('_search') ? $request->get('_search') : NULL),
'page_size' => ($request->has('page_size') ? $request->get('page_size') : 10),
'page' => ($request->has('page') ? $request->get('page') : 10),
'date_start' => ($request->has('date_start') ? $request->get('date_start') : null),
'date_end' => ($request->has('date_end') ? $request->get('date_end') : null),
'sorting' => ParameterHelper::prepareSortingParameter($request)
];
if(ParameterHelper::validateStartEndDate($params))
{
return $this->format->unprocessableEntity('Start date must not be greater than end date');
}
$list = $this->ratings->report_stationRatings($params);
if(count($list))
{
$additionals = $this->format->success("Success",[],false);
$data = ReportStationRatingsResource::collection($list)->additional($additionals);
return $data->response()->setStatusCode(200);
}
else
{
return $this->format->success("No records found",[]);
}
}
public function export_station_rating()
{
$filename = "reports_station_rating" . date("mdY") . ".csv";
$this->admin_logs->log(0,'REPORT_STATIONRATINGS','EXPORT',$filename);
return Excel::download(new ReportStationRatingsExport($this->ratings), $filename);
}
/**
* MOBILE USAGE REPORT
*
*
*/
public function mobile_usage(Request $request)
{
$params = [
'page_size' => ($request->has('page_size') ? $request->get('page_size') : 10),
'page' => ($request->has('page') ? $request->get('page') : 10),
'date_start' => ($request->has('date_start') ? $request->get('date_start') : null),
'date_end' => ($request->has('date_end') ? $request->get('date_end') : null),
'sorting' => ParameterHelper::prepareSortingParameter($request)
];
if(ParameterHelper::validateStartEndDate($params))
{
return $this->format->unprocessableEntity('Start date must not be greater than end date');
}
$list = $this->mobileAnalytics->report_mobileUsage($params);
if(count($list))
{
$additionals = $this->format->success("Success",[],false);
$data = ReportMobileUsageResource::collection($list)->additional($additionals);
return $data->response()->setStatusCode(200);
}
else
{
return $this->format->success("No records found",[]);
}
}
public function export_mobile_usage()
{
$filename = "reports_mobile_usage" . date("mdY") . ".csv";
$this->admin_logs->log(0,'REPORT_MOBILEUSAGE','EXPORT',$filename);
return Excel::download(new ReportMobileUsageExport($this->mobileAnalytics), $filename);
}
/**
* REGISTRATION
*
*
*/
public function registration(Request $request)
{
$params = [
'page_size' => ($request->has('page_size') ? $request->get('page_size') : 10),
'page' => ($request->has('page') ? $request->get('page') : 10),
'date_start' => ($request->has('date_start') ? $request->get('date_start') : null),
'date_end' => ($request->has('date_end') ? $request->get('date_end') : null),
'sorting' => ParameterHelper::prepareSortingParameter($request)
];
$list = $this->registration->report_registration($params);
if(count($list)){
$additionals = $this->format->success("Success",[],false);
$data = RegistrationResource::collection($list)->additional($additionals);
return $data->response()->setStatusCode(200);
}else{
return $this->format->success("No records found",[]);
}
}
public function export_registration()
{
$filename = "registration" . date("mdY") . ".csv";
$this->admin_logs->log(0,'REPORT_REGISTRATION','EXPORT',$filename);
return Excel::download(new ReportRegistrationExport($this->registration), $filename);
}
}