Skip to content

Commit

Permalink
Remove subfleet_expenses and combine into main expenses table; select…
Browse files Browse the repository at this point in the history
… expense type on subfleet #130 #136
  • Loading branch information
nabeelio committed Mar 6, 2018
1 parent 8c05ad1 commit 88a8fd2
Show file tree
Hide file tree
Showing 20 changed files with 160 additions and 138 deletions.
2 changes: 2 additions & 0 deletions app/Database/factories/ExpenseFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
'amount' => $faker->randomFloat(2, 100, 1000),
'type' => ExpenseType::FLIGHT,
'multiplier' => false,
'ref_class' => \App\Models\Expense::class,
'ref_class_id' => null,
'active' => true,
];
});
11 changes: 0 additions & 11 deletions app/Database/factories/SubfleetExpenseFactory.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

/**
* Class CreateSubfleetTables
*/
class CreateSubfleetTables extends Migration
{

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('subfleets', function (Blueprint $table) {
Expand All @@ -26,17 +23,6 @@ public function up()
$table->timestamps();
});

Schema::create('subfleet_expenses', function(Blueprint $table) {
$table->increments('id');
$table->unsignedBigInteger('subfleet_id');
$table->string('name', 50);
$table->unsignedTinyInteger('type'); # ExpenseType
$table->unsignedDecimal('amount');
$table->timestamps();

$table->index('subfleet_id');
});

Schema::create('subfleet_fare', function (Blueprint $table) {
$table->unsignedInteger('subfleet_id');
$table->unsignedInteger('fare_id');
Expand Down Expand Up @@ -76,7 +62,6 @@ public function up()
public function down()
{
Schema::dropIfExists('subfleets');
Schema::dropIfExists('subfleet_expenses');
Schema::dropIfExists('subfleet_fare');
Schema::dropIfExists('subfleet_flight');
Schema::dropIfExists('subfleet_rank');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ public function up()
Schema::create('expenses', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('airline_id')->nullable();

$table->string('name');
$table->unsignedInteger('amount');
$table->unsignedTinyInteger('type');
$table->boolean('multiplier')->nullable()->default(0);
$table->boolean('active')->nullable()->default(true);

# Internal fields are expenses tied to some system object
# ref fields are expenses tied to some model object
# EG, the airports has an internal expense for gate costs
$table->nullableMorphs('expensable');
$table->string('ref_class')->nullable();
$table->string('ref_class_id', 36)->nullable();
$table->index(['ref_class', 'ref_class_id']);

$table->timestamps();
});
}
Expand Down
28 changes: 21 additions & 7 deletions app/Database/seeds/sample.yml
Original file line number Diff line number Diff line change
Expand Up @@ -184,25 +184,38 @@ expenses:
amount: 100
type: 0
active: 1
ref_class: App\Models\Expense
- name: Per-Flight (multiplier)
amount: 100
type: 0
multiplier: 1
active: 1
ref_class: App\Models\Expense
- name: Per-Flight (multiplier, on airline)
airline_id: 1
amount: 200
type: 0
multiplier: 1
active: 1
ref_class: App\Models\Expense
- name: A daily fee
amount: 800
type: 1
active: 1
ref_class: App\Models\Expense
- name: A monthly fee
amount: 5000
type: 2
active: 1
ref_class: App\Models\Expense
- name: Catering
amount: 1000
type: 0
active: 1
ref_class: App\Models\Subfleet
ref_class_id: 1
created_at: now
updated_at: now

fares:
- id: 1
Expand Down Expand Up @@ -238,13 +251,14 @@ subfleets:
type: 772-36ER-GE90-115B
ground_handling_multiplier: 150

subfleet_expenses:
- id: 1
subfleet_id: 1
name: Catering
amount: 1000
created_at: now
updated_at: now
#subfleet_expenses:
# - id: 1
# subfleet_id: 1
# name: Catering
# amount: 1000
# type: 0
# created_at: now
# updated_at: now

# add a few mods to aircraft and fares
subfleet_fare:
Expand Down
6 changes: 5 additions & 1 deletion app/Http/Controllers/Admin/ExpenseController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Http\Requests\CreateAirlineRequest;
use App\Http\Requests\UpdateAirlineRequest;
use App\Models\Enums\ExpenseType;
use App\Models\Expense;
use App\Repositories\AirlineRepository;
use App\Repositories\ExpenseRepository;
use Flash;
Expand Down Expand Up @@ -39,7 +40,9 @@ public function __construct(
public function index(Request $request)
{
$this->expenseRepo->pushCriteria(new RequestCriteria($request));
$expenses = $this->expenseRepo->all();
$expenses = $this->expenseRepo->findWhere([
'ref_class' => Expense::class
]);

return view('admin.expenses.index', [
'expenses' => $expenses
Expand All @@ -66,6 +69,7 @@ public function create()
public function store(Request $request)
{
$input = $request->all();
$input['ref_class'] = Expense::class;
$this->expenseRepo->create($input);

Flash::success('Expense saved successfully.');
Expand Down
11 changes: 6 additions & 5 deletions app/Http/Controllers/Admin/SubfleetController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
use App\Http\Requests\UpdateSubfleetRequest;
use App\Models\Airline;
use App\Models\Enums\FuelType;
use App\Models\Expense;
use App\Models\Subfleet;
use App\Models\SubfleetExpense;
use App\Repositories\AircraftRepository;
use App\Repositories\FareRepository;
use App\Repositories\RankRepository;
Expand Down Expand Up @@ -338,17 +338,18 @@ public function expenses($id, Request $request)
* update specific rank data
*/
if ($request->isMethod('post')) {
$expense = new SubfleetExpense($request->post());
$expense->subfleet_id = $subfleet->id;
$expense = new Expense($request->post());
$expense->ref_class = Subfleet::class;
$expense->ref_class_id = $subfleet->id;
$expense->save();
$subfleet->refresh();
} elseif ($request->isMethod('put')) {
$expense = SubfleetExpense::findOrFail($request->input('expense_id'));
$expense = Expense::findOrFail($request->input('expense_id'));
$expense->{$request->name} = $request->value;
$expense->save();
} // dissassociate fare from teh aircraft
elseif ($request->isMethod('delete')) {
$expense = SubfleetExpense::findOrFail($request->input('expense_id'));
$expense = Expense::findOrFail($request->input('expense_id'));
$expense->delete();
}

Expand Down
4 changes: 2 additions & 2 deletions app/Models/Airport.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace App\Models;

use App\Models\Traits\ExpensableTrait;
use App\Models\Traits\Expensable;
use Illuminate\Notifications\Notifiable;

/**
Expand All @@ -12,7 +12,7 @@
*/
class Airport extends BaseModel
{
use ExpensableTrait;
use Expensable;
use Notifiable;

public $table = 'airports';
Expand Down
2 changes: 2 additions & 0 deletions app/Models/Expense.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ class Expense extends BaseModel
'amount',
'type',
'multiplier',
'ref_class',
'ref_class_id',
'active',
];

Expand Down
11 changes: 3 additions & 8 deletions app/Models/Subfleet.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
namespace App\Models;

use App\Models\Enums\AircraftStatus;
use App\Models\Traits\Expensable;

/**
* Class Subfleet
* @package App\Models
*/
class Subfleet extends BaseModel
{
use Expensable;

public $table = 'subfleets';

public $fillable = [
Expand Down Expand Up @@ -88,14 +91,6 @@ public function airline()
return $this->belongsTo(Airline::class, 'airline_id');
}

/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function expenses()
{
return $this->hasMany(SubfleetExpense::class, 'subfleet_id');
}

public function fares()
{
return $this->belongsToMany(Fare::class, 'subfleet_fare')
Expand Down
47 changes: 0 additions & 47 deletions app/Models/SubfleetExpense.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@

use App\Models\Expense;

trait ExpensableTrait
trait Expensable
{

/**
* Initialize a new journal when a new record is created
*/
public static function bootExpensableTrait()
public static function bootExpensable()
{
/*static::created(function ($model) {
$model->initJournal(config('phpvms.currency'));
Expand All @@ -23,6 +22,7 @@ public static function bootExpensableTrait()
*/
public function expenses()
{
return $this->morphToMany(Expense::class, 'expensable');
return $this->hasMany(Expense::class, 'ref_class_id')
->where('ref_class', __CLASS__);
}
}
29 changes: 24 additions & 5 deletions app/Repositories/ExpenseRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,39 @@ public function model()
* Get all of the expenses for a given type, and also
* include expenses for a given airline ID
* @param $type
* @param null $airline_id
* @param null $ref_class
* @return Collection
*/
public function getAllForType($type, $airline_id=null)
public function getAllForType($type, $airline_id=null, $ref_class=null)
{
$expenses = $this->findWhere([
$where = [
'type' => $type,
['airline_id', '=', null]
]);
];

if($ref_class) {
$where['ref_class'] = $ref_class;
} else {
$where[] = ['ref_class', '=', null];
}

$expenses = $this->findWhere($where);

if($airline_id) {
$airline_expenses = $this->findWhere([

$where = [
'type' => $type,
'airline_id' => $airline_id
]);
];

if ($ref_class) {
$where['ref_class'] = $ref_class;
} else {
$where[] = ['ref_class', '=', null];
}

$airline_expenses = $this->findWhere($where);

$expenses = $expenses->concat($airline_expenses);
}
Expand Down
Loading

0 comments on commit 88a8fd2

Please sign in to comment.