From a325470b8fa755cb6c4a79372397e2a6ea3e6066 Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Tue, 6 Mar 2018 17:32:56 -0600 Subject: [PATCH] Aircraft can have its own expenses #130 --- .../Controllers/Admin/AircraftController.php | 72 +++++++++++++++--- .../Controllers/Admin/AirportController.php | 3 - app/Models/Aircraft.php | 3 + app/Routes/admin.php | 1 + app/Services/Finance/PirepFinanceService.php | 8 +- resources/views/admin/aircraft/edit.blade.php | 8 ++ .../views/admin/aircraft/expenses.blade.php | 75 +++++++++++++++++++ .../views/admin/aircraft/script.blade.php | 53 +++++++++++++ 8 files changed, 206 insertions(+), 17 deletions(-) create mode 100644 resources/views/admin/aircraft/expenses.blade.php create mode 100644 resources/views/admin/aircraft/script.blade.php diff --git a/app/Http/Controllers/Admin/AircraftController.php b/app/Http/Controllers/Admin/AircraftController.php index 9bd22c95..dda98c9d 100644 --- a/app/Http/Controllers/Admin/AircraftController.php +++ b/app/Http/Controllers/Admin/AircraftController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers\Admin; use App\Http\Requests\CreateAircraftRequest; use App\Http\Requests\UpdateAircraftRequest; +use App\Models\Aircraft; use App\Models\Enums\AircraftStatus; +use App\Models\Expense; use App\Models\Subfleet; use App\Repositories\AircraftRepository; use Flash; @@ -14,7 +16,7 @@ use Prettus\Repository\Criteria\RequestCriteria; class AircraftController extends BaseController { - private $aircraftRepository; + private $aircraftRepo; /** * AircraftController constructor. @@ -23,7 +25,7 @@ class AircraftController extends BaseController public function __construct( AircraftRepository $aircraftRepo ) { - $this->aircraftRepository = $aircraftRepo; + $this->aircraftRepo = $aircraftRepo; } /** @@ -32,8 +34,8 @@ class AircraftController extends BaseController */ public function index(Request $request) { - $this->aircraftRepository->pushCriteria(new RequestCriteria($request)); - $aircraft = $this->aircraftRepository->orderBy('name', 'asc')->all(); + $this->aircraftRepo->pushCriteria(new RequestCriteria($request)); + $aircraft = $this->aircraftRepo->orderBy('name', 'asc')->all(); return view('admin.aircraft.index', [ 'aircraft' => $aircraft @@ -58,7 +60,7 @@ class AircraftController extends BaseController public function store(CreateAircraftRequest $request) { $attrs = $request->all(); - $aircraft = $this->aircraftRepository->create($attrs); + $aircraft = $this->aircraftRepo->create($attrs); Flash::success('Aircraft saved successfully.'); return redirect(route('admin.aircraft.edit', ['id' => $aircraft->id])); @@ -69,7 +71,7 @@ class AircraftController extends BaseController */ public function show($id) { - $aircraft = $this->aircraftRepository->findWithoutFail($id); + $aircraft = $this->aircraftRepo->findWithoutFail($id); if (empty($aircraft)) { Flash::error('Aircraft not found'); @@ -86,7 +88,7 @@ class AircraftController extends BaseController */ public function edit($id) { - $aircraft = $this->aircraftRepository->findWithoutFail($id); + $aircraft = $this->aircraftRepo->findWithoutFail($id); if (empty($aircraft)) { Flash::error('Aircraft not found'); @@ -106,7 +108,7 @@ class AircraftController extends BaseController */ public function update($id, UpdateAircraftRequest $request) { - $aircraft = $this->aircraftRepository->findWithoutFail($id); + $aircraft = $this->aircraftRepo->findWithoutFail($id); if (empty($aircraft)) { Flash::error('Aircraft not found'); @@ -114,7 +116,7 @@ class AircraftController extends BaseController } $attrs = $request->all(); - $this->aircraftRepository->update($attrs, $id); + $this->aircraftRepo->update($attrs, $id); Flash::success('Aircraft updated successfully.'); return redirect(route('admin.aircraft.index')); @@ -125,16 +127,64 @@ class AircraftController extends BaseController */ public function destroy($id) { - $aircraft = $this->aircraftRepository->findWithoutFail($id); + $aircraft = $this->aircraftRepo->findWithoutFail($id); if (empty($aircraft)) { Flash::error('Aircraft not found'); return redirect(route('admin.aircraft.index')); } - $this->aircraftRepository->delete($id); + $this->aircraftRepo->delete($id); Flash::success('Aircraft deleted successfully.'); return redirect(route('admin.aircraft.index')); } + + /** + * @param Aircraft|null $aircraft + * @return mixed + */ + protected function return_expenses_view(?Aircraft $aircraft) + { + $aircraft->refresh(); + return view('admin.aircraft.expenses', [ + 'aircraft' => $aircraft, + ]); + } + + /** + * Operations for associating ranks to the subfleet + * @param $id + * @param Request $request + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @throws \Exception + */ + public function expenses($id, Request $request) + { + $aircraft = $this->aircraftRepo->findWithoutFail($id); + if (empty($aircraft)) { + return $this->return_expenses_view($aircraft); + } + + if ($request->isMethod('get')) { + return $this->return_expenses_view($aircraft); + } + + if ($request->isMethod('post')) { + $expense = new Expense($request->post()); + $expense->ref_class = Aircraft::class; + $expense->ref_class_id = $aircraft->id; + $expense->save(); + } elseif ($request->isMethod('put')) { + $expense = Expense::findOrFail($request->input('expense_id')); + $expense->{$request->name} = $request->value; + $expense->save(); + } // dissassociate fare from teh aircraft + elseif ($request->isMethod('delete')) { + $expense = Expense::findOrFail($request->input('expense_id')); + $expense->delete(); + } + + return $this->return_expenses_view($aircraft); + } } diff --git a/app/Http/Controllers/Admin/AirportController.php b/app/Http/Controllers/Admin/AirportController.php index 7cf2af7d..fe413b34 100644 --- a/app/Http/Controllers/Admin/AirportController.php +++ b/app/Http/Controllers/Admin/AirportController.php @@ -194,9 +194,6 @@ class AirportController extends BaseController return $this->return_expenses_view($airport); } - /** - * update specific rank data - */ if ($request->isMethod('post')) { $expense = new Expense($request->post()); $expense->ref_class = Airport::class; diff --git a/app/Models/Aircraft.php b/app/Models/Aircraft.php index d7a4d545..95e68ddd 100644 --- a/app/Models/Aircraft.php +++ b/app/Models/Aircraft.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Models\Enums\AircraftStatus; +use App\Models\Traits\Expensable; use App\Support\ICAO; /** @@ -18,6 +19,8 @@ use App\Support\ICAO; */ class Aircraft extends BaseModel { + use Expensable; + public $table = 'aircraft'; public $fillable = [ diff --git a/app/Routes/admin.php b/app/Routes/admin.php index 9dc419cf..2b6fa164 100644 --- a/app/Routes/admin.php +++ b/app/Routes/admin.php @@ -15,6 +15,7 @@ Route::group([ # aircraft and fare associations Route::resource('aircraft', 'AircraftController'); + Route::match(['get', 'post', 'put', 'delete'], 'aircraft/{id}/expenses', 'AircraftController@expenses'); # expenses Route::resource('expenses', 'ExpenseController'); diff --git a/app/Services/Finance/PirepFinanceService.php b/app/Services/Finance/PirepFinanceService.php index e45012ef..6a5c04ac 100644 --- a/app/Services/Finance/PirepFinanceService.php +++ b/app/Services/Finance/PirepFinanceService.php @@ -127,6 +127,7 @@ class PirepFinanceService extends BaseService /** * Collect all of the expenses and apply those to the journal * @param Pirep $pirep + * @throws \Prettus\Validator\Exceptions\ValidatorException * @throws \UnexpectedValueException * @throws \InvalidArgumentException */ @@ -142,9 +143,9 @@ class PirepFinanceService extends BaseService */ $expenses->map(function ($expense, $i) use ($pirep) { - if ($expense->multiplier) { + /*if ($expense->multiplier) { # TODO: Modify the amount - } + }*/ Log::info('Finance: PIREP: '.$pirep->id.', expense:', $expense->toArray()); @@ -166,7 +167,8 @@ class PirepFinanceService extends BaseService $transaction_group = "Subfleet: {$expense->name} ({$pirep->aircraft->subfleet->name})"; } elseif ($klass === 'Aircraft') { $memo = "Aircraft Expense: {$expense->name} ({$pirep->aircraft->name})"; - $transaction_group = "Aircraft: {$expense->name} ({$pirep->aircraft->name})"; + $transaction_group = "Aircraft: {$expense->name} " + ."({$pirep->aircraft->name}-{$pirep->aircraft->registration})"; } else { $memo = "Expense: {$expense->name}"; $transaction_group = "Expense: {$expense->name}"; diff --git a/resources/views/admin/aircraft/edit.blade.php b/resources/views/admin/aircraft/edit.blade.php index 70a1ce3c..dcdc2179 100644 --- a/resources/views/admin/aircraft/edit.blade.php +++ b/resources/views/admin/aircraft/edit.blade.php @@ -8,4 +8,12 @@ {!! Form::close() !!} + +
+
+ @include('admin.aircraft.expenses') +
+
@endsection + +@include('admin.aircraft.script') diff --git a/resources/views/admin/aircraft/expenses.blade.php b/resources/views/admin/aircraft/expenses.blade.php new file mode 100644 index 00000000..0b83d41a --- /dev/null +++ b/resources/views/admin/aircraft/expenses.blade.php @@ -0,0 +1,75 @@ +
+
+

expenses

+ @component('admin.components.info') + These expenses are only applied to this aircraft. + @endcomponent +
+
+ + + @if(count($aircraft->expenses)) + + + + + + + @endif + + + @foreach($aircraft->expenses as $expense) + + + + + + + @endforeach + +
NameCost {!! currency(config('phpvms.currency')) !!}Type
+

+ {!! $expense->name !!} +

+
+

+ {!! $expense->amount !!} +

+
+

+ {!! \App\Models\Enums\ExpenseType::label($expense->type) !!} +

+
+ {!! Form::open(['url' => url('/admin/aircraft/'.$aircraft->id.'/expenses'), + 'method' => 'delete', 'class' => 'modify_expense form-inline']) !!} + {!! Form::hidden('expense_id', $expense->id) !!} + {!! Form::button('', ['type' => 'submit', + 'class' => 'btn btn-sm btn-danger btn-icon', + 'onclick' => "return confirm('Are you sure?')", + ]) !!} + {!! Form::close() !!} +
+
+
+
+
+ {!! Form::open(['url' => url('/admin/aircraft/'.$aircraft->id.'/expenses'), + 'method' => 'post', 'class' => 'modify_expense form-inline']) !!} + {!! Form::input('text', 'name', null, ['class' => 'form-control input-sm', 'placeholder' => 'Name']) !!} + {!! Form::number('amount', null, ['class' => 'form-control input-sm', 'placeholder' => 'Amount']) !!} + {!! Form::select('type', \App\Models\Enums\ExpenseType::select(), null, ['class' => 'select2']) !!} + {!! Form::button(' Add', ['type' => 'submit', + 'class' => 'btn btn-success btn-small']) !!} + {!! Form::close() !!} + +

{{ $errors->first('name') }}

+

{{ $errors->first('amount') }}

+
+
+
+
diff --git a/resources/views/admin/aircraft/script.blade.php b/resources/views/admin/aircraft/script.blade.php new file mode 100644 index 00000000..8e458421 --- /dev/null +++ b/resources/views/admin/aircraft/script.blade.php @@ -0,0 +1,53 @@ +@section('scripts') + +@endsection