From 4e3a9fd9eaba4262e59a9b64194f5ee6cb695a80 Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Thu, 22 Mar 2018 13:04:13 -0500 Subject: [PATCH] Export airports --- .../Controllers/Admin/AircraftController.php | 2 +- .../Controllers/Admin/AirportController.php | 20 ++++++++++ app/Routes/admin.php | 1 + app/Services/ExportService.php | 26 +++++++------ app/Services/ImportExport/AirportExporter.php | 39 +++++++++++++++++++ .../views/admin/airports/index.blade.php | 1 + 6 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 app/Services/ImportExport/AirportExporter.php diff --git a/app/Http/Controllers/Admin/AircraftController.php b/app/Http/Controllers/Admin/AircraftController.php index e095502a..190604e8 100644 --- a/app/Http/Controllers/Admin/AircraftController.php +++ b/app/Http/Controllers/Admin/AircraftController.php @@ -154,7 +154,7 @@ class AircraftController extends Controller } /** - * Run the flight exporter + * Run the aircraft exporter * @param Request $request * @return \Symfony\Component\HttpFoundation\BinaryFileResponse * @throws \League\Csv\Exception diff --git a/app/Http/Controllers/Admin/AirportController.php b/app/Http/Controllers/Admin/AirportController.php index f2fdd961..eeb0eaf8 100644 --- a/app/Http/Controllers/Admin/AirportController.php +++ b/app/Http/Controllers/Admin/AirportController.php @@ -9,6 +9,7 @@ use App\Models\Airport; use App\Models\Expense; use App\Repositories\AirportRepository; use App\Repositories\Criteria\WhereCriteria; +use App\Services\ExportService; use App\Services\ImportService; use Flash; use Illuminate\Http\Request; @@ -178,6 +179,25 @@ class AirportController extends Controller return redirect(route('admin.airports.index')); } + /** + * Run the airport exporter + * @param Request $request + * @return \Symfony\Component\HttpFoundation\BinaryFileResponse + * @throws \League\Csv\Exception + */ + public function export(Request $request) + { + $exporter = app(ExportService::class); + $airports = $this->airportRepo->all(); + + $path = $exporter->exportAirports($airports); + return response() + ->download($path, 'airports.csv', [ + 'content-type' => 'text/csv', + ]) + ->deleteFileAfterSend(true); + } + /** * * @param Request $request diff --git a/app/Routes/admin.php b/app/Routes/admin.php index 23b891dd..a4097bf4 100644 --- a/app/Routes/admin.php +++ b/app/Routes/admin.php @@ -9,6 +9,7 @@ Route::group([ ], function () { Route::resource('airlines', 'AirlinesController'); + Route::get('airports/export', 'AirportController@export')->name('airports.export'); Route::match(['get', 'post', 'put'], 'airports/fuel', 'AirportController@fuel'); Route::match(['get', 'post'], 'airports/import', 'AirportController@import')->name('airports.import'); Route::match(['get', 'post', 'put', 'delete'], 'airports/{id}/expenses', 'AirportController@expenses'); diff --git a/app/Services/ExportService.php b/app/Services/ExportService.php index 7de96096..fd3f202c 100644 --- a/app/Services/ExportService.php +++ b/app/Services/ExportService.php @@ -4,8 +4,8 @@ namespace App\Services; use App\Interfaces\ImportExport; use App\Interfaces\Service; -use App\Repositories\FlightRepository; use App\Services\ImportExport\AircraftExporter; +use App\Services\ImportExport\AirportExporter; use App\Services\ImportExport\FlightExporter; use Illuminate\Support\Collection; use League\Csv\CharsetConverter; @@ -19,16 +19,6 @@ use Log; */ class ExportService extends Service { - protected $flightRepo; - - /** - * ImporterService constructor. - * @param FlightRepository $flightRepo - */ - public function __construct(FlightRepository $flightRepo) { - $this->flightRepo = $flightRepo; - } - /** * @param string $path * @return Writer @@ -55,6 +45,8 @@ class ExportService extends Service Storage::makeDirectory('import'); $path = storage_path('/app/import/export_'.$filename.'.csv'); + Log::info('Exporting "'.$exporter->assetType.'" to ' . $path); + $writer = $this->openCsv($path); // Write out the header first @@ -80,6 +72,18 @@ class ExportService extends Service return $this->runExport($aircraft, $exporter); } + /** + * Export all of the airports + * @param Collection $airports + * @return mixed + * @throws \League\Csv\CannotInsertRecord + */ + public function exportAirports($airports) + { + $exporter = new AirportExporter(); + return $this->runExport($airports, $exporter); + } + /** * Export all of the flights * @param Collection $flights diff --git a/app/Services/ImportExport/AirportExporter.php b/app/Services/ImportExport/AirportExporter.php new file mode 100644 index 00000000..527d7d3d --- /dev/null +++ b/app/Services/ImportExport/AirportExporter.php @@ -0,0 +1,39 @@ +{$column}; + } + + return $ret; + } +} diff --git a/resources/views/admin/airports/index.blade.php b/resources/views/admin/airports/index.blade.php index b3bcd552..23838f94 100644 --- a/resources/views/admin/airports/index.blade.php +++ b/resources/views/admin/airports/index.blade.php @@ -2,6 +2,7 @@ @section('title', 'Airports') @section('actions') +
  • Export to CSV
  • Import from CSV
  • Add New
  • @endsection