Files
shipping-portal/app/Http/Controllers/Exports/ExportController.php
T

74 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers\Exports;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Excel;
use Illuminate\Support\Facades\Storage;
use App\Classes\General\AWSS3Helper;
use App\Classes\Modules\Exports\Services\ExportsCompanies;
use App\Classes\Modules\Exports\Services\ExportsSalesInvoicesReport;
use Carbon\Carbon;
class ExportController
{
public function companies(Request $request){
[$startDate, $endDate] = $this->getValidatedDates($request);
$exporter = new ExportsCompanies($startDate, $endDate);
return $this->handleExport($exporter, 'IZYIM - Customers Data Report.xls');
}
public function salesInvoices(Request $request){
[$startDate, $endDate] = $this->getValidatedDates($request);
$exporter = new ExportsSalesInvoicesReport($startDate, $endDate);
return $this->handleExport($exporter, 'IZYIM - Sales Invoice Report.xls');
}
private function getValidatedDates(Request $request): array
{
$validated = $request->validate([
'startDate' => 'nullable|date_format:d-m-Y',
'endDate' => 'nullable|date_format:d-m-Y|after_or_equal:startDate',
]);
// $startDate = isset($validated['startDate']) && $validated['startDate']
// ? Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay()
// : Carbon::now()->subMonth()->startOfDay();
// $endDate = isset($validated['endDate']) && $validated['endDate']
// ? Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay()
// : Carbon::now()->endOfDay();
$startDate = isset($validated['startDate']) && $validated['startDate']
? Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay()
: Carbon::now()->startOfMonth()->startOfDay();
$endDate = isset($validated['endDate']) && $validated['endDate']
? Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay()
: Carbon::now()->endOfMonth()->endOfDay();
return [$startDate, $endDate];
}
private function handleExport($exporter, string $exportFileName)
{
$filesystemDriver = Storage::getDefaultDriver();
if ($filesystemDriver === 's3') {
return response([
'src' => AWSS3Helper::S3Exportable($exportFileName, $exporter)
]);
}
$response = $exporter->download(
$exportFileName,
Excel::XLS,
['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']
);
ob_end_clean(); // prevent corrupt download in some environments
return $response;
}
}