Convert expense type to char, translations for ExpenseType

This commit is contained in:
Nabeel Shahzad 2018-04-01 22:26:20 -05:00
parent 2a01a935c0
commit cfd0853d79
12 changed files with 78 additions and 65 deletions

View File

@ -14,7 +14,7 @@ class CreateExpensesTable extends Migration
$table->string('name');
$table->unsignedInteger('amount');
$table->unsignedTinyInteger('type');
$table->char('type');
$table->boolean('charge_to_user')->nullable()->default(false);
$table->boolean('multiplier')->nullable()->default(0);
$table->boolean('active')->nullable()->default(true);

View File

@ -192,35 +192,35 @@ aircraft:
expenses:
- name: Per-Flight (no muliplier)
amount: 100
type: 0
type: F
active: 1
ref_model: App\Models\Expense
- name: Per-Flight (multiplier)
amount: 100
type: 0
type: F
multiplier: 1
active: 1
ref_model: App\Models\Expense
- name: Per-Flight (multiplier, on airline)
airline_id: 1
amount: 200
type: 0
type: F
multiplier: 1
active: 1
ref_model: App\Models\Expense
- name: A daily fee
amount: 800
type: 1
type: D
active: 1
ref_model: App\Models\Expense
- name: A monthly fee
amount: 5000
type: 2
type: M
active: 1
ref_model: App\Models\Expense
- name: Catering
amount: 1000
type: 0
type: F
active: 1
ref_model: App\Models\Subfleet
ref_model_id: 1
@ -228,7 +228,7 @@ expenses:
updated_at: now
- name: Catering Staff
amount: 1000
type: 1
type: D
active: 1
ref_model: App\Models\Subfleet
ref_model_id: 1
@ -236,7 +236,7 @@ expenses:
updated_at: now
- name: Maintenance
amount: 1000
type: 1
type: D
active: 1
ref_model: App\Models\Aircraft
ref_model_id: 1
@ -518,7 +518,7 @@ journal_transactions:
debit: null
currency: USD
memo: 'Pilot Payment @ 50'
tags: '"pilot_pay"'
tags: "pilot_pay"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -532,7 +532,7 @@ journal_transactions:
debit: 10000
currency: USD
memo: 'Expense: Per-Flight (no muliplier)'
tags: '"expense"'
tags: "expense"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -546,7 +546,7 @@ journal_transactions:
debit: 0
currency: USD
memo: 'Fares Y300; price: 200, cost: 0'
tags: '"fare"'
tags: "fare"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -560,7 +560,7 @@ journal_transactions:
debit: 20000
currency: USD
memo: 'Expense: Per-Flight (multiplier, on airline)'
tags: '"expense"'
tags: "expense"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -574,7 +574,7 @@ journal_transactions:
debit: 10000
currency: USD
memo: 'Expense: Per-Flight (multiplier)'
tags: '"expense"'
tags: "expense"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -588,7 +588,7 @@ journal_transactions:
debit: 100000
currency: USD
memo: 'Subfleet Expense: Catering (747-43X RB211-524G)'
tags: '"subfleet"'
tags: "subfleet"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -602,7 +602,7 @@ journal_transactions:
debit: 0
currency: USD
memo: 'Fares F10; price: 1000, cost: 0'
tags: '"fare"'
tags: "fare"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: '2018-03-06 12:34:15'
@ -616,7 +616,7 @@ journal_transactions:
debit: 15000
currency: USD
memo: 'Pilot Payment @ 50'
tags: '"pilot_pay"'
tags: "pilot_pay"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: now
@ -630,7 +630,7 @@ journal_transactions:
debit: 0
currency: USD
memo: 'Fares B10; price: 1100, cost: 0'
tags: '"fare"'
tags: "fare"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: now
@ -644,7 +644,7 @@ journal_transactions:
debit: 75000
currency: USD
memo: 'Ground Handling'
tags: '"ground_handling"'
tags: "ground_handling"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: now
@ -659,7 +659,7 @@ journal_transactions:
debit: 300000
currency: USD
memo: 'Subfleet 744-3X-RB211: Block Time Cost'
tags: '"subfleet"'
tags: "subfleet"
ref_model: App\Models\Pirep
ref_model_id: pirepid_1
created_at: now

View File

@ -14,7 +14,7 @@ class ActiveState extends Enum
public const ACTIVE = 1;
public static $labels = [
ActiveState::INACTIVE => 'Inactive',
ActiveState::ACTIVE => 'Active',
ActiveState::ACTIVE => 'system.global.active',
ActiveState::INACTIVE => 'system.global.inactive',
];
}

View File

@ -10,14 +10,14 @@ use App\Interfaces\Enum;
*/
class ExpenseType extends Enum
{
public const FLIGHT = 0;
public const DAILY = 1;
public const MONTHLY = 2;
public const FLIGHT = 'F';
public const DAILY = 'D';
public const MONTHLY = 'M';
protected static $labels = [
ExpenseType::FLIGHT => 'Flight',
ExpenseType::DAILY => 'Daily',
ExpenseType::MONTHLY => 'Monthly',
ExpenseType::FLIGHT => 'system.expenses.type.flight',
ExpenseType::DAILY => 'system.expenses.type.daily',
ExpenseType::MONTHLY => 'system.expenses.type.monthly',
];
protected static $codes = [

View File

@ -2,6 +2,7 @@
namespace App\Models;
use App\Interfaces\Model;
use App\Models\Traits\ReferenceTrait;
/**
* Class Expense
@ -14,6 +15,8 @@ use App\Interfaces\Model;
*/
class Expense extends Model
{
use ReferenceTrait;
public $table = 'expenses';
protected $fillable = [
@ -32,33 +35,10 @@ class Expense extends Model
'active' => 'boolean',
'airline_id' => 'integer',
'amount' => 'float',
'type' => 'integer',
'multiplier' => 'bool',
'charge_to_user' => 'bool',
];
/**
* Get the referring object
*/
public function getReference()
{
if (!$this->ref_model || !$this->ref_model_id) {
return null;
}
if ($this->ref_model === __CLASS__) {
return $this;
}
try {
$klass = new $this->ref_model;
return $klass->find($this->ref_model_id);
} catch (\Exception $e) {
return null;
}
}
/**
* Foreign Keys
*/

View File

@ -5,7 +5,7 @@ namespace App\Models\Traits;
/**
* Trait ReferenceTrait
* @property \App\Interfaces\Model $ref_model
* @property mixed $ref_model_id
* @property mixed $ref_model_id
* @package App\Models\Traits
*/
trait ReferenceTrait
@ -29,12 +29,20 @@ trait ReferenceTrait
*/
public function getReferencedObject()
{
if ($classname = $this->ref_model) {
$klass = new $this->ref_model;
return $klass->find($this->ref_model_id);
if (!$this->ref_model || !$this->ref_model_id) {
return null;
}
return null;
if ($this->ref_model === __CLASS__) {
return $this;
}
try {
$klass = new $this->ref_model;
$obj = $klass->find($this->ref_model_id);
return $obj;
} catch (\Exception $e) {
return null;
}
}
}

View File

@ -37,7 +37,15 @@ class ExpenseRepository extends Repository implements CacheableInterface
];
if ($ref_model) {
$where['ref_model'] = $ref_model;
if (\is_object($ref_model)) {
$ref_model_type = \get_class($ref_model);
} else {
$ref_model_type = $ref_model;
}
if ($ref_model) {
$where['ref_model'] = $ref_model_type;
}
}
$expenses = $this->findWhere($where);
@ -49,7 +57,7 @@ class ExpenseRepository extends Repository implements CacheableInterface
];
if ($ref_model) {
$where['ref_model'] = $ref_model;
$where['ref_model'] = $ref_model_type;
}
$airline_expenses = $this->findWhere($where);

View File

@ -60,7 +60,7 @@ class RecurringFinanceService extends Service
if ($expense->ref_model) {
$ref = explode('\\', $expense->ref_model);
$klass = end($ref);
$obj = $expense->getReference();
$obj = $expense->getReferencedObject();
}
if ($klass === 'Airport') {

View File

@ -44,15 +44,13 @@ class ExpenseExporter extends ImportExport
$ret['airline'] = $expense->airline->icao;
}
$ret['type'] = ExpenseType::convertToCode($ret['type']);
// For the different expense types, instead of exporting
// the ID, export a specific column
if ($expense->ref_model === Expense::class) {
$ret['ref_model'] = '';
$ret['ref_model_id'] = '';
} else {
$obj = $expense->getReference();
$obj = $expense->getReferencedObject();
if(!$obj) { // bail out
return $ret;
}

View File

@ -49,7 +49,6 @@ class ExpenseImporter extends ImportExport
# Figure out what this is referring to
$row = $this->getRefClassInfo($row);
$row['type'] = ExpenseType::getFromCode($row['type']);
if(!$row['active']) {
$row['active'] = true;
}

View File

@ -2,6 +2,11 @@
return [
'global' => [
'active' => 'Active',
'inactive' => 'Inactive'
],
'aircraft' => [
'status' => [
'active' => 'Active',
@ -22,6 +27,14 @@ return [
'sun' => 'Sunday',
],
'expenses' => [
'type' => [
'flight' => 'Flight',
'daily' => 'Daily',
'monthly' => 'Monthly',
],
],
'flights' => [
'type' => [
'pass_scheduled' => 'Passenger - Scheduled',

View File

@ -603,18 +603,25 @@ class FinanceTest extends TestCase
* Test the subfleet class
*/
$subfleet = factory(App\Models\Subfleet::class)->create();
factory(App\Models\Expense::class)->create([
'airline_id' => null,
'ref_model' => \App\Models\Subfleet::class,
'ref_model_id' => $subfleet->id,
]);
$expenses = $this->expenseRepo->getAllForType(
ExpenseType::FLIGHT,
$airline->id,
\App\Models\Subfleet::class
$subfleet
);
$this->assertCount(1, $expenses);
$expense = $expenses->random();
$this->assertEquals(\App\Models\Subfleet::class, $expense->ref_model);
$obj = $expense->getReferencedObject();
$this->assertEquals($obj->id, $expense->ref_model_id);
}
/**