Initial refactoring work

This commit is contained in:
Deon George
2018-05-20 22:53:14 +10:00
parent d6cb505e1c
commit feda44db8a
121 changed files with 6601 additions and 602 deletions

View File

@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
protected $table = 'ab_country';
public $timestamps = FALSE;
/**
@@ -13,7 +14,7 @@ class Country extends Model
*/
public function currency()
{
return $this->belongsTo('App\Models\Currency');
return $this->belongsTo(Currency::class);
}
/**
@@ -21,6 +22,6 @@ class Country extends Model
*/
public function users()
{
return $this->hasMany('App\User');
return $this->hasMany(\App\User::class);
}
}

View File

@@ -6,13 +6,26 @@ use Illuminate\Database\Eloquent\Model;
class Currency extends Model
{
// @todo - temp Until Implemented
protected $fillable = ['rounding'];
protected $table = 'ab_currency';
public $timestamps = FALSE;
const ROUND_HALF_UP = 1;
const ROUND_HALF_DOWN = 2;
const ROUND_HALF_EVEN = 3;
const ROUND_HALF_ODD = 4;
/**
* The accounts in this country
*/
public function countries()
{
return $this->hasMany('App\Models\Country');
return $this->hasMany(Country::class);
}
public function round($value,$mode=self::ROUND_HALF_UP)
{
return round($value,$this->rounding,$mode);
}
}

15
app/Models/DomainTld.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class DomainTld extends Model
{
protected $table = 'ab_domain_tld';
public function services()
{
return $this->hasMany(Service::class);
}
}

68
app/Models/Invoice.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Invoice extends Model
{
protected $table = 'ab_invoice';
protected $dates = ['due_date'];
protected $with = ['invoiceitems.taxes','account.country.currency','paymentitems'];
private $_total = 0;
public function account()
{
return $this->belongsTo(\App\User::class);
}
public function invoiceitems()
{
return $this->hasMany(InvoiceItem::class);
}
public function paymentitems()
{
return $this->hasMany(PaymentItem::class);
}
public function getDueAttribute()
{
return $this->currency()->round($this->total - $this->paid);
}
public function getDateDueAttribute()
{
return $this->due_date->format('Y-m-d');
}
public function getInvoiceNumberAttribute()
{
return sprintf('%02s-%04s-%04s',$this->site_id,$this->account_id,$this->id);
}
public function getPaidAttribute()
{
return $this->currency()->round($this->paymentitems->sum('alloc_amt'));
}
public function getTotalAttribute()
{
if (! $this->_total)
{
foreach ($this->invoiceitems as $o)
{
//if ($o->active)
$this->_total += $this->currency()->round($o->total);
}
}
return $this->_total;
}
public function currency()
{
return $this->account->country->currency;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class InvoiceItem extends Model
{
protected $table = 'ab_invoice_item';
protected $with = ['taxes'];
private $_tax = 0;
public function invoice()
{
return $this->belongsTo(Invoice::class);
}
public function taxes()
{
return $this->hasMany(InvoiceItemTax::class);
}
public function getSubTotalAttribute()
{
return $this->quantity * $this->price_base;
}
public function getTaxAttribute()
{
if (! $this->_tax)
{
foreach ($this->taxes as $o)
{
$this->_tax += $o->amount;
}
}
return $this->_tax;
}
public function getTotalAttribute()
{
return $this->tax + $this->sub_total;
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class InvoiceItemTax extends Model
{
protected $table = 'ab_invoice_item_tax';
public function invoice_item()
{
return $this->belongsTo(InvoiceItem::class);
}
}

10
app/Models/Language.php Normal file
View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Language extends Model
{
protected $table = 'ab_language';
}

16
app/Models/Payment.php Normal file
View File

@@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Payment extends Model
{
protected $table = 'ab_payment';
protected $dates = ['date_payment'];
public function getPaymentDateAttribute()
{
return $this->date_payment->format('Y-m-d');
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PaymentItem extends Model
{
protected $table = 'ab_payment_item';
}

31
app/Models/Product.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $table = 'ab_product';
protected $with = ['descriptions'];
public function descriptions()
{
return $this->hasMany(ProductTranslate::class);
}
public function services()
{
return $this->hasMany(Service::class);
}
/**
* Get the language name
*
* @param Language $lo
*/
public function name(Language $lo)
{
return $this->descriptions->where('language_id',$lo->id)->first()->name;
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProductTranslate extends Model
{
protected $table = 'ab_product_translate';
}

73
app/Models/Service.php Normal file
View File

@@ -0,0 +1,73 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
protected $table = 'ab_service';
protected $dates = ['date_last_invoice','date_next_invoice'];
protected $with = ['product.descriptions','account.language','service_adsl','service_domain.tld','service_ssl'];
public function account()
{
return $this->belongsTo(\App\User::class);
}
public function service_adsl()
{
return $this->belongsTo(ServiceAdsl::class,'id','service_id');
}
public function service_domain()
{
return $this->belongsTo(ServiceDomain::class,'id','service_id');
}
public function service_ssl()
{
return $this->belongsTo(ServiceSsl::class,'id','service_id');
}
public function product()
{
return $this->belongsTo(Product::class);
}
/**
* This function will return the associated service model for the product type
*/
public function getServiceDetail()
{
switch ($this->product->prod_plugin_file)
{
case 'ADSL': return $this->service_adsl;
case 'DOMAIN': return $this->service_domain;
case 'SSL': return $this->service_ssl;
default: abort(500,'Havent handled case for: '.$this->product->prod_plugin_file);
}
}
public function getServiceExpireAttribute()
{
return 'TBA';
}
public function getNextInvoiceAttribute()
{
return $this->date_next_invoice->format('Y-m-d');
}
public function getServiceNameAttribute()
{
if (! isset($this->getServiceDetail()->name)) dd($this,$this->product,$this->getServiceDetail());
return sprintf('%s: %s',$this->product->name($this->account->language),$this->getServiceDetail()->name);
}
public function getServiceNumberAttribute()
{
return sprintf('%02s.%04s.%04s',$this->site_id,$this->account_id,$this->id);
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ServiceAdsl extends Model
{
protected $table = 'ab_service__adsl';
public function service()
{
return $this->belongsTo(Service::class);
}
public function getNameAttribute()
{
return $this->service_number;
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ServiceDomain extends Model
{
protected $table = 'ab_service__domain';
public function service()
{
return $this->belongsTo(Service::class);
}
public function tld()
{
return $this->belongsTo(DomainTld::class,'domain_tld_id');
}
public function getNameAttribute()
{
return sprintf('%s.%s',$this->domain_name,$this->tld->name);
}
}

26
app/Models/ServiceSsl.php Normal file
View File

@@ -0,0 +1,26 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ServiceSsl extends Model
{
protected $table = 'ab_service__ssl';
public function service()
{
return $this->belongsTo(Service::class);
}
public function tld()
{
return $this->belongsTo(DomainTld::class,'domain_tld_id');
}
public function getNameAttribute()
{
// @todo Merge in SSL functions from old site
return 'SSL';
}
}

View File

@@ -6,6 +6,8 @@ use Illuminate\Database\Eloquent\Model;
class Site extends Model
{
protected $table = 'ab_setup';
protected $casts = [
'address'=>'array',
];
@@ -24,7 +26,95 @@ class Site extends Model
['title'=>'Project 4','description'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.','subtitle'=>'Lorem ipsum dolor sit amet','image_small'=>'/image/generic/150/75/d00','image_large'=>'/image/generic/500/400/a00'],
],
'activity_intro'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'blockquote'=>[['title'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.','image'=>'/image/generic/150/75/1A3AAA']],
'block_quotes'=>[
[
'title'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'image'=>'/image/generic/150/75/1A3AAA'
],
],
'clients'=>[
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/399',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/499',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/599',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/699',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/689',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/679',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/669',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/659',
],
[
'image'=>'/image/generic/200/100/999',
'hover'=>'/image/generic/200/100/649',
],
],
'clients_intro'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore',
'main_slider'=>[
[
'title'=>'Header <br/><span class="carousel-title-normal">and Title</span>',
'text'=>'This is what you were looking for',
'style'=>1,
'image'=>'url(/image/generic/300/300/eee)',
'button'=>['text'=>'Purchase Now','url'=>'#'],
],
[
'title'=>'Header and Title',
'text'=>'This is what you were looking for',
'text2'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br/>Sed est nunc, sagittis at consectetur id.',
'style'=>2,
'image'=>'url(/image/generic/400/400/ddd)',
'button'=>['text'=>'Purchase Now','url'=>'#'],
],
[
'title'=>'Header and Title',
'text'=>'This is what you were looking for',
'text2'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br/>Sed est nunc, sagittis at consectetur id.',
'style'=>2,
'image'=>'url(/image/generic/500/500/eee)',
//'button'=>['text'=>'Purchase Now','url'=>'#'],
],
],
'page_tabs'=>[
[
'title'=>'Title 1',
'image'=>'/image/generic/200/100/999',
'text'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
],
[
'title'=>'Title 2',
'image'=>'/image/generic/200/100/799',
'text'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
],
[
'title'=>'Title 3',
'image'=>'/image/generic/200/100/979',
'text'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
],
],
'site'=>[
'id'=>NULL,
'address'=>json_decode('{"address1":"PO Box 149","address2":"7 Woodlands Court","city":"Bendigo","state":"VIC","postcode":"3550"}'),
@@ -45,12 +135,38 @@ class Site extends Model
['title'=>'Title 2','text'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.','icon'=>'fa fa-compress green','image'=>NULL],
['title'=>'Title 3','text'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.','icon'=>'fa fa-check red','image'=>'/image/generic/200/100/999'],
],
'social'=>['facebook','linkedin','googleplus','twitter'],
'social'=>[
[
'name'=>'facebook',
'url'=>'http://www.facebook.com',
],
[
'name'=>'linkedin',
'url'=>'http://www.linkedin.com',
],
[ 'name'=>'twitter',
'url'=>'http://www.twitter.com',
],
],
'steps'=>[
['title'=>'Title 1','description'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud'],
['title'=>'Title 2','description'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud'],
['title'=>'Title 3','description'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud'],
],
'testimonials'=>[
[
'title'=>'Title 1',
'name'=>'Bart Simpson',
'quote'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud',
'photo'=>'/image/generic/200/100/999',
],
[
'title'=>'Title 2',
'name'=>'Lisa Simpson',
'quote'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud',
'photo'=>'/image/generic/200/100/499',
],
],
'top_menu'=>[
'Home'=>['name'=>'Home','url'=>'/','children'=>[
['name'=>'Link 1','url'=>'#/l2', 'children'=>[]],
@@ -65,6 +181,66 @@ class Site extends Model
];
}
public function getActivitiesAttribute()
{
return array_get($this->_sampledata(),'activity');
}
public function getActivityIntroAttribute()
{
return array_get($this->_sampledata(),'activity_intro');
}
public function getClientsAttribute()
{
return array_get($this->_sampledata(),'clients');
}
public function getCLientsIntoAttribute()
{
return array_get($this->_sampledata(),'clients_info');
}
public function getServicesAttribute()
{
return array_get($this->_sampledata(),'services');
}
public function getBlockQuotesAttribute()
{
return array_get($this->_sampledata(),'block_quotes');
}
public function getPageTabsAttribute()
{
return array_get($this->_sampledata(),'page_tabs');
}
public function getSiteSliderAttribute()
{
return array_get($this->_sampledata(),'main_slider');
}
public function getSocialAttribute()
{
return array_get($this->_sampledata(),'social');
}
public function getStepsAttribute()
{
return array_get($this->_sampledata(),'steps');
}
public function getTestimonialsAttribute()
{
return array_get($this->_sampledata(),'testimonials');
}
public function getTopMenuAttribute()
{
return array_get($this->_sampledata(),'top_menu');
}
public function sample()
{
return $this->forceFill(array_get($this->_sampledata(),'site'));
@@ -93,18 +269,6 @@ class Site extends Model
return $return;
}
public function activity()
{
// @todo To be implemented
return array_get($this->_sampledata(),'activity');
}
public function activity_intro()
{
// @todo To be implemented
return array_get($this->_sampledata(),'activity_intro');
}
public function address($type='plain')
{
switch ($type)
@@ -117,44 +281,12 @@ class Site extends Model
}
}
public function blockquote()
{
// @todo To be implemented
return array_get($this->_sampledata(),'blockquote');
}
// @todo
public function fax()
{
return '@todo';
}
public function logo_url()
{
return url($this->logo ? $this->logo : '/image/generic/150/20/fff');
}
public function services()
{
// @todo To be implemented
return array_get($this->_sampledata(),'services');
}
public function social()
{
// @todo To be implemented
return array_get($this->_sampledata(),'social');
}
public function steps()
{
// @todo To be implemented
return array_get($this->_sampledata(),'steps');
}
public function top_menu()
{
// @todo To be implemented
return array_get($this->_sampledata(),'top_menu');
}
}