Removed redundant functions from Invoice, optimised Invoice tables
This commit is contained in:
@@ -5,9 +5,8 @@ namespace App\Models;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Arr;
|
||||
use Leenooks\Carbon;
|
||||
use Leenooks\Carbon as LeenooksCarbon;
|
||||
|
||||
use App\Traits\NextKey;
|
||||
use App\Traits\PushNew;
|
||||
|
||||
/**
|
||||
@@ -15,24 +14,18 @@ use App\Traits\PushNew;
|
||||
* Items that belong on an invoice
|
||||
*
|
||||
* Attributes for services:
|
||||
* + date_start : Start date
|
||||
* + date_stop : End date
|
||||
* + sub_total : Value of item
|
||||
* + tax : Total of all taxes
|
||||
* + total : Total including taxes
|
||||
*/
|
||||
class InvoiceItem extends Model
|
||||
{
|
||||
use NextKey,PushNew;
|
||||
const RECORD_ID = 'invoice_item';
|
||||
public $incrementing = FALSE;
|
||||
use PushNew;
|
||||
|
||||
protected $table = 'ab_invoice_item';
|
||||
const CREATED_AT = 'date_orig';
|
||||
const UPDATED_AT = 'date_last';
|
||||
|
||||
protected $dates = ['date_start','date_stop'];
|
||||
public $dateFormat = 'U';
|
||||
protected $dates = [
|
||||
'start_at',
|
||||
'stop_at',
|
||||
];
|
||||
|
||||
// Array of items that can be updated with PushNew
|
||||
protected $pushable = ['taxes'];
|
||||
@@ -60,11 +53,6 @@ class InvoiceItem extends Model
|
||||
return $this->belongsTo(Invoice::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Product for this item
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function product()
|
||||
{
|
||||
return $this->belongsTo(Product::class);
|
||||
@@ -82,73 +70,51 @@ class InvoiceItem extends Model
|
||||
|
||||
/* ATTRIBUTES */
|
||||
|
||||
/**
|
||||
* Start date for the invoice item line
|
||||
*
|
||||
* @param $value
|
||||
* @return Carbon
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getDateStartAttribute($value)
|
||||
{
|
||||
if (! is_null($value))
|
||||
return Carbon::createFromTimestamp($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* End date for the invoice item line
|
||||
*
|
||||
* @param $value
|
||||
* @return Carbon
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getDateStopAttribute($value)
|
||||
{
|
||||
if (! is_null($value))
|
||||
return Carbon::createFromTimestamp($value);
|
||||
}
|
||||
|
||||
public function getItemTypeNameAttribute()
|
||||
{
|
||||
// @todo use self::type
|
||||
$types = [
|
||||
1=>'Hardware', // *
|
||||
2=>'Service Relocation Fee', // * Must have corresponding SERVICE_ID
|
||||
3=>'Service Change', // * Must have corresponding SERVICE_ID
|
||||
4=>'Service Connection', // * Must have corresponding SERVICE_ID
|
||||
6=>'Service Cancellation', // * Must have corresponding SERVICE_ID
|
||||
7=>'Extra Product/Service Charge', // * Service Billing in advance, Must have corresponding SERVICE_ID
|
||||
8=>'Product Addition', // * Additional Product Customisation, Must have corresponding SERVICE_ID
|
||||
120=>'Credit/Debit Transfer', // * SERVICE_ID is NULL, MODULE_ID is NULL, MODULE_REF is NULL : INVOICE_ID is NOT NULL
|
||||
123=>'Shipping',
|
||||
124=>'Late Payment Fee', // * SERVICE_ID is NULL, MODULE_ID = CHECKOUT MODULE,
|
||||
125=>'Payment Fee', // * SERVICE_ID is NULL, MODULE_ID = CHECKOUT MODULE, MODULE_REF = CHECKOUT NAME
|
||||
126=>'Other', // * MODEL_ID should be a module
|
||||
127=>'Rounding', // * SERVICE_ID is NULL, MODULE_ID is NULL, MODULE_REF is NULL
|
||||
];
|
||||
|
||||
switch ($this->item_type)
|
||||
{
|
||||
switch ($this->item_type) {
|
||||
// * Line Charge Topic on Invoice.
|
||||
case 0:
|
||||
if ($this->date_start)
|
||||
if ($this->start_at)
|
||||
return sprintf('%s [%s]','Product/Service',
|
||||
(($this->date_start == $this->date_stop) || (! $this->date_stop)) ? $this->date_start->format('Y-m-d') : sprintf('%s -> %s',$this->date_start->format('Y-m-d'),$this->date_stop->format('Y-m-d')));
|
||||
(($this->start_at == $this->stop_at) || (! $this->stop_at)) ? $this->start_at->format('Y-m-d') : sprintf('%s -> %s',$this->start_at->format('Y-m-d'),$this->stop_at->format('Y-m-d')));
|
||||
else
|
||||
return 'Product/Service';
|
||||
|
||||
// * Excess Service Item, of item 0, must have corresponding SERVICE_ID
|
||||
case 5:
|
||||
return sprintf('%s [%s] (%s)','Excess Usage',
|
||||
$this->date_start == $this->date_stop ? $this->date_start->format('Y-m-d') : sprintf('%s -> %s',$this->date_start->format('Y-m-d'),$this->date_stop->format('Y-m-d')),
|
||||
$this->start_at == $this->stop_at ? $this->start_at->format('Y-m-d') : sprintf('%s -> %s',$this->start_at->format('Y-m-d'),$this->stop_at->format('Y-m-d')),
|
||||
$this->module_text()
|
||||
);
|
||||
|
||||
default:
|
||||
return ($this->module_id == 30 ? 'Additional Charge: ' : '').Arr::get($types,$this->item_type,'Unknown');
|
||||
return ($this->module_id == 30 ? 'Additional Charge: ' : '').Arr::get(self::type,$this->item_type,'Unknown');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* We need to cast some dates to LeenooksCarbon to get access to startOfHalf()/endOfHalf() methods
|
||||
*
|
||||
* @param $value
|
||||
* @return LeenooksCarbon
|
||||
*/
|
||||
public function getStartAtAttribute($value): LeenooksCarbon
|
||||
{
|
||||
return LeenooksCarbon::create($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* We need to cast some dates to LeenooksCarbon to get access to startOfHalf()/endOfHalf() methods
|
||||
*
|
||||
* @param $value
|
||||
* @return LeenooksCarbon
|
||||
*/
|
||||
public function getStopAtAttribute($value): LeenooksCarbon
|
||||
{
|
||||
return LeenooksCarbon::create($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sub total of item
|
||||
*
|
||||
@@ -190,8 +156,7 @@ class InvoiceItem extends Model
|
||||
if ($this->exists)
|
||||
throw new \Exception('Refusing to add Taxes to existing record');
|
||||
|
||||
foreach($taxes as $to)
|
||||
{
|
||||
foreach($taxes as $to) {
|
||||
$iit = new InvoiceItemTax;
|
||||
$iit->tax_id = $to->id;
|
||||
$iit->amount = round($this->quantity*$this->price_base*$to->rate,3);
|
||||
@@ -200,15 +165,12 @@ class InvoiceItem extends Model
|
||||
}
|
||||
}
|
||||
|
||||
public function module_text()
|
||||
{
|
||||
switch ($this->module_id)
|
||||
{
|
||||
public function module_text(){
|
||||
switch ($this->module_id) {
|
||||
// Charges Module
|
||||
case 30: return Charge::findOrFail($this->module_ref)->name;
|
||||
|
||||
default: abort(500,'Unable to handle '.$this->module_id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user