From d4f79b13316ad0b814ed83861d25673cc802a27d Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Thu, 22 Mar 2018 12:55:56 -0500 Subject: [PATCH] Add aircraft export --- .../Controllers/Admin/AircraftController.php | 20 +++++++++ app/Routes/admin.php | 1 + app/Services/ExportService.php | 20 +++++++-- .../ImportExport/AircraftExporter.php | 43 +++++++++++++++++++ .../views/admin/aircraft/index.blade.php | 1 + 5 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 app/Services/ImportExport/AircraftExporter.php diff --git a/app/Http/Controllers/Admin/AircraftController.php b/app/Http/Controllers/Admin/AircraftController.php index ba92a773..e095502a 100644 --- a/app/Http/Controllers/Admin/AircraftController.php +++ b/app/Http/Controllers/Admin/AircraftController.php @@ -10,6 +10,7 @@ use App\Models\Enums\AircraftStatus; use App\Models\Expense; use App\Models\Subfleet; use App\Repositories\AircraftRepository; +use App\Services\ExportService; use App\Services\ImportService; use Flash; use Illuminate\Http\Request; @@ -152,6 +153,25 @@ class AircraftController extends Controller return redirect(route('admin.aircraft.index')); } + /** + * Run the flight exporter + * @param Request $request + * @return \Symfony\Component\HttpFoundation\BinaryFileResponse + * @throws \League\Csv\Exception + */ + public function export(Request $request) + { + $exporter = app(ExportService::class); + $aircraft = $this->aircraftRepo->all(); + + $path = $exporter->exportAircraft($aircraft); + return response() + ->download($path, 'aircraft.csv', [ + 'content-type' => 'text/csv', + ]) + ->deleteFileAfterSend(true); + } + /** * * @param Request $request diff --git a/app/Routes/admin.php b/app/Routes/admin.php index c5d5dce6..23b891dd 100644 --- a/app/Routes/admin.php +++ b/app/Routes/admin.php @@ -18,6 +18,7 @@ Route::group([ Route::resource('awards', 'AwardController'); # aircraft and fare associations + Route::get('aircraft/export', 'AircraftController@export')->name('aircraft.export'); Route::match(['get', 'post'], 'aircraft/import', 'AircraftController@import')->name('aircraft.import'); Route::match(['get', 'post', 'put', 'delete'], 'aircraft/{id}/expenses', 'AircraftController@expenses'); Route::resource('aircraft', 'AircraftController'); diff --git a/app/Services/ExportService.php b/app/Services/ExportService.php index 30178b84..7de96096 100644 --- a/app/Services/ExportService.php +++ b/app/Services/ExportService.php @@ -5,6 +5,7 @@ namespace App\Services; use App\Interfaces\ImportExport; use App\Interfaces\Service; use App\Repositories\FlightRepository; +use App\Services\ImportExport\AircraftExporter; use App\Services\ImportExport\FlightExporter; use Illuminate\Support\Collection; use League\Csv\CharsetConverter; @@ -68,11 +69,22 @@ class ExportService extends Service } /** - * Export all of the flights - * @param Collection $flights - * @param string $csv_file + * Export all of the aircraft + * @param Collection $aircraft * @return mixed - * @throws \League\Csv\Exception + * @throws \League\Csv\CannotInsertRecord + */ + public function exportAircraft($aircraft) + { + $exporter = new AircraftExporter(); + return $this->runExport($aircraft, $exporter); + } + + /** + * Export all of the flights + * @param Collection $flights + * @return mixed + * @throws \League\Csv\CannotInsertRecord */ public function exportFlights($flights) { diff --git a/app/Services/ImportExport/AircraftExporter.php b/app/Services/ImportExport/AircraftExporter.php new file mode 100644 index 00000000..906de930 --- /dev/null +++ b/app/Services/ImportExport/AircraftExporter.php @@ -0,0 +1,43 @@ +{$column}; + } + + # Modify special fields + $ret['subfleet'] = $aircraft->subfleet->type; + + return $ret; + } +} diff --git a/resources/views/admin/aircraft/index.blade.php b/resources/views/admin/aircraft/index.blade.php index 0cf7cc58..7b99af5e 100644 --- a/resources/views/admin/aircraft/index.blade.php +++ b/resources/views/admin/aircraft/index.blade.php @@ -2,6 +2,7 @@ @section('title', 'Aircraft') @section('actions') +
  • Export to CSV
  • Import from CSV
  • Subfleets
  • New Aircraft