diff --git a/app/Console/Commands/ServiceList.php b/app/Console/Commands/ServiceList.php index 90b9864..939e8c2 100644 --- a/app/Console/Commands/ServiceList.php +++ b/app/Console/Commands/ServiceList.php @@ -49,7 +49,7 @@ class ServiceList extends Command )); foreach (Service::cursor() as $o) { - if ((! $this->option('inactive')) && (! $o->isActive())) + if ((! $this->option('inactive')) && (! $o->is_active)) continue; if ($this->option('type') && ($o->product->getCategoryAttribute() !== $this->option('type'))) diff --git a/app/Models/Service.php b/app/Models/Service.php index db0b5e6..6a44702 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -43,14 +43,20 @@ use App\Traits\{ScopeAccountUserAuthorised,ScopeServiceActive,SiteID}; * + billing_cost_orig_taxed : Cost for this service before being overridden by $this->cost (with Account TAX) * + billing_interval : The period that this service is billed * + billing_interval_name : The period that this service is billed as a name + * + contract_term : The term that this service must be active + * + is_active : Is this service active. It is active, if active=true, or the order_status is not in self::INACTIVE_STATUS[] * + is_billed : Does this service generate an invoice + * + is_cancelled : Service that has been cancelled or never provisioned * + is_charge_overridden : Has the price been overridden + * + is_contracted : Is this service on a contract * + is_cost_overridden : Has the cost been overridden + * + is_pending_active : Has this service been ordered, waiting to be active + * + is_pending_change : Is this service changing + * + is_pending_cancel : Is this active service being cancelled + * + status : Service status (inactive/active) * * Attributes for services (OLD): - * + additional_cost : Pending additional charges for this service (excluding setup) //@todo check all these are still valid * + invoiced_to : When this service has been billed to - * + contract_term : The term that this service must be active * + contract_end : The date that the contract ends for this service * + name : Service short name with service address * + name_short : Service Product short name, eg: phone number, domain name, certificate CN @@ -58,12 +64,6 @@ use App\Traits\{ScopeAccountUserAuthorised,ScopeServiceActive,SiteID}; * + product : Our product that is providing this service * + sid : System ID for service * + supplied : The model of the supplier's product used for this service. - * - * Methods: - * + isPending : Is this a pending active service - * - * @package App\Models - * @todo Add min_charge */ class Service extends Model implements IDs { @@ -301,9 +301,22 @@ class Service extends Model implements IDs 'billing_interval' => $this->recur_schedule ?: $this->product->billing_interval, 'billing_interval_name' => Invoice::billing_name($this->billing_interval), + 'contract_term' => max($this->supplied->contract_term,$this->product->type->contract_term), + + 'is_active' => $this->active || ($this->order_status && (! in_array($this->order_status,self::INACTIVE_STATUS))), 'is_billed' => (! ($this->external_billing || $this->suspend_billing || ($this->price === 0))), + 'is_cancelled' => in_array($this->order_status,self::INACTIVE_STATUS), 'is_charge_overridden' => (! is_null($this->price)), + 'is_contracted' => $this->getContractEndAttribute() && $this->getContractEndAttribute()->greaterThan(Carbon::now()), 'is_cost_overridden' => (! is_null($this->cost)), + 'is_pending_active' => (! $this->active) && (! is_null($this->order_status)) && (! in_array($this->order_status,array_merge(self::INACTIVE_STATUS,['INACTIVE']))), + 'is_pending_change' => $this->active && $this->changes()->where('service__change.active',TRUE)->where('complete',FALSE)->count(), + 'is_pending_cancel' => $this->active && in_array(strtolower($this->order_status),['cancel-request','cancel-pending']), + + 'status' => $this->active + ? strtolower($this->order_status) + : ((strtolower($this->order_status) === 'cancelled') ? 'cancelled' : 'inactive'), + default => parent::__get($key), }; } @@ -571,7 +584,7 @@ class Service extends Model implements IDs if (! $this->start_at) return $this->type->expire_at; - $end = $this->start_at->clone()->addMonths($this->getContractTermAttribute()); + $end = $this->start_at->clone()->addMonths($this->contract_term); // If we dont have an expire date, use the start date + contract_term if (! $this->type->expire_at) @@ -581,17 +594,6 @@ class Service extends Model implements IDs return ($end < $this->type->expire_at) ? $this->type->expire_at : $end; } - /** - * This function will determine the minimum contract term for a service, which is the maximum of - * supplied->contract_term, or the product->type->contract_term; - * - * @return int - */ - public function getContractTermAttribute(): int - { - return max($this->supplied->contract_term,$this->product->type->contract_term); - } - /** * Return the date for the next invoice * @@ -645,9 +647,7 @@ class Service extends Model implements IDs */ public function getNameShortAttribute() { - return $this->type->getServiceNameAttribute() - ? $this->type->getServiceNameAttribute() - : 'SID:'.$this->sid; + return $this->type->getServiceNameAttribute() ?: 'SID:'.$this->sid; } /** @@ -708,18 +708,6 @@ class Service extends Model implements IDs : NULL; } - /** - * Return the Service Status - * - * @return string - */ - public function getStatusAttribute(): string - { - return $this->active - ? strtolower($this->order_status) - : ((strtolower($this->order_status) === 'cancelled') ? 'cancelled' : 'inactive'); - } - /** * Return the product that supplies this service * ie: product/* @@ -898,7 +886,7 @@ class Service extends Model implements IDs $max = max($date,$this->getCancelDateAttribute())->clone(); if (! $this->getPaidToAttribute()) - return $this->getContractTermAttribute()*$this->billing_charge_normalised_taxed; + return $this->contract_term*$this->billing_charge_normalised_taxed; if ($this->getPaidToAttribute()->lessThan($max)) { $d = $this->getPaidToAttribute()->diffInDays($max); @@ -938,7 +926,7 @@ class Service extends Model implements IDs $max = max($date,$this->getCancelDateAttribute())->clone(); if (! $this->getInvoicedToAttribute()) - return $this->getContractTermAttribute()*$this->billing_cost_normalised_taxed; + return $this->contract_term*$this->billing_cost_normalised_taxed; if ($this->getInvoicedToAttribute()->lessThan($max)) { $d = $this->getInvoicedToAttribute()->diffInDays($max); @@ -1000,17 +988,6 @@ class Service extends Model implements IDs ->get(); } - /** - * Determine if a service is active. It is active, if active=1, or the order_status is not in self::INACTIVE_STATUS[] - * - * @return bool - */ - public function isActive(): bool - { - return $this->attributes['active'] - || ($this->order_status && (! in_array($this->order_status,self::INACTIVE_STATUS))); - } - /** * Determine if the current user has the role for this service * @@ -1060,28 +1037,6 @@ class Service extends Model implements IDs return FALSE; } - public function isContract(): bool - { - return $this->getContractEndAttribute() && $this->getContractEndAttribute()->greaterThan(Carbon::now()); - } - - /** - * Identify if a service is being ordered, ie: not active yet nor cancelled - * - * @return bool - */ - public function isPending(): bool - { - return (! $this->active) - && (! is_null($this->order_status)) - && (! in_array($this->order_status,array_merge(self::INACTIVE_STATUS,['INACTIVE']))); - } - - public function isPendingCancel(): bool - { - return in_array(strtolower($this->order_status),['cancel-request','cancel-pending']); - } - /** * Generate a collection of invoice_item objects that will be billed for the next invoice * @@ -1091,7 +1046,7 @@ class Service extends Model implements IDs */ public function next_invoice_items(Carbon $billdate=NULL): Collection { - if ($this->wasCancelled() || (! $this->is_billed)) + if ($this->is_cancelled || (! $this->is_billed)) return collect(); $o = collect(); @@ -1180,14 +1135,4 @@ class Service extends Model implements IDs { return $this->order_info ? $this->order_info->get($key) : NULL; } - - /** - * Service that was cancelled or never provisioned - * - * @return bool - */ - public function wasCancelled(): bool - { - return in_array($this->order_status,self::INACTIVE_STATUS); - } } \ No newline at end of file diff --git a/resources/views/components/ribbons/change.blade.php b/resources/views/components/ribbons/change.blade.php new file mode 100644 index 0000000..440cec0 --- /dev/null +++ b/resources/views/components/ribbons/change.blade.php @@ -0,0 +1,7 @@ +@if($change) +
+
+ Change +
+
+@endif \ No newline at end of file diff --git a/resources/views/components/ribbons/pending.blade.php b/resources/views/components/ribbons/pending.blade.php new file mode 100644 index 0000000..131e44c --- /dev/null +++ b/resources/views/components/ribbons/pending.blade.php @@ -0,0 +1,7 @@ +@if($pending) +
+
+ Pending +
+
+@endif \ No newline at end of file diff --git a/resources/views/theme/backend/adminlte/service/change_request.blade.php b/resources/views/theme/backend/adminlte/service/change_request.blade.php index 47b0b5f..60e0459 100644 --- a/resources/views/theme/backend/adminlte/service/change_request.blade.php +++ b/resources/views/theme/backend/adminlte/service/change_request.blade.php @@ -32,7 +32,7 @@
- @if($so->isContract()) + @if($so->is_contracted)
NOTE: This service is in a contract until {{ $so->contract_end->format('Y-m-d') }}, thus it may not be able to change plans.
diff --git a/resources/views/theme/backend/adminlte/service/home.blade.php b/resources/views/theme/backend/adminlte/service/home.blade.php index 8c6a2e6..eb6d81f 100644 --- a/resources/views/theme/backend/adminlte/service/home.blade.php +++ b/resources/views/theme/backend/adminlte/service/home.blade.php @@ -40,7 +40,7 @@ - @if($o->active || $o->isPending()) + @if($o->active || $o->is_pending_active) @endif @endcan @@ -95,7 +95,7 @@ @include('theme.backend.adminlte.service.widget.update') - @if($o->active || $o->isPending()) + @if($o->active || $o->is_pending_active)
session()->pull('charge_add')]) id="charge"> @include('theme.backend.adminlte.service.widget.charge')
diff --git a/resources/views/theme/backend/adminlte/service/widget/broadband/details.blade.php b/resources/views/theme/backend/adminlte/service/widget/broadband/details.blade.php index 61c4ad3..2c3d21e 100644 --- a/resources/views/theme/backend/adminlte/service/widget/broadband/details.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/broadband/details.blade.php @@ -1,13 +1,8 @@
- @if($o->service->isPending()) -
-
- Pending -
-
- @endif + +

Broadband Details

diff --git a/resources/views/theme/backend/adminlte/service/widget/domain/details.blade.php b/resources/views/theme/backend/adminlte/service/widget/domain/details.blade.php index 514ca0f..b5bac27 100644 --- a/resources/views/theme/backend/adminlte/service/widget/domain/details.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/domain/details.blade.php @@ -1,13 +1,8 @@
- @if($o->service->isPending()) -
-
- Pending -
-
- @endif + +

Domain Details

diff --git a/resources/views/theme/backend/adminlte/service/widget/email/details.blade.php b/resources/views/theme/backend/adminlte/service/widget/email/details.blade.php index 101af91..94bc343 100644 --- a/resources/views/theme/backend/adminlte/service/widget/email/details.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/email/details.blade.php @@ -1,13 +1,8 @@
- @if($o->service->isPending()) -
-
- Pending -
-
- @endif + +

Email Hosting Details

diff --git a/resources/views/theme/backend/adminlte/service/widget/hosting/details.blade.php b/resources/views/theme/backend/adminlte/service/widget/hosting/details.blade.php index 8dd9621..fd00fa5 100644 --- a/resources/views/theme/backend/adminlte/service/widget/hosting/details.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/hosting/details.blade.php @@ -1,13 +1,8 @@
- @if($o->service->isPending()) -
-
- Pending -
-
- @endif + +

Hosting Details

diff --git a/resources/views/theme/backend/adminlte/service/widget/information.blade.php b/resources/views/theme/backend/adminlte/service/widget/information.blade.php index 1701d85..955c9bf 100644 --- a/resources/views/theme/backend/adminlte/service/widget/information.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/information.blade.php @@ -22,7 +22,7 @@ Status - @if($o->isPendingCancel()) + @if($o->is_pending_cancel) Cancel Date {{ $o->stop_at->format('Y-m-d') }} @@ -34,13 +34,13 @@ {{ $o->order_info_reference ?? '' }} @endif - @if($o->start_at && $o->isPending()) + @if($o->start_at && $o->is_pending_active) Pending Connection {{ $o->start_at->format('Y-m-d') }} @endif - @if(($o->active || $o->isPending()) && (! $o->external_billing)) + @if(($o->active || $o->is_pending_active) && (! $o->external_billing)) Billed {{ $o->billing_interval_name }} @@ -53,7 +53,7 @@ ${{ number_format($o->billing_charge_taxed,2) }} @endif - @if($o->isActive() && $o->invoiced_to) + @if($o->is_active && $o->invoiced_to) Invoiced To {{ $o->invoiced_to->format('Y-m-d') }} @@ -83,7 +83,7 @@ @if($o->billing)Direct Debit @else Invoice @endif - @elseif($o->wasCancelled()) + @elseif($o->is_cancelled) Cancelled {{ ($o->stop_at ?: $o->paid_to)?->format('Y-m-d') }} @@ -92,7 +92,7 @@
- @if($o->active || $o->isPending()) + @if($o->active || $o->is_pending_active) diff --git a/resources/views/theme/backend/adminlte/service/widget/internal.blade.php b/resources/views/theme/backend/adminlte/service/widget/internal.blade.php index 53fd7bf..c5ba318 100644 --- a/resources/views/theme/backend/adminlte/service/widget/internal.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/internal.blade.php @@ -131,7 +131,7 @@ Contract Left - @if($o->isContract()) + @if($o->is_contracted) ${{ number_format($o->billing_charge_to($o->contract_end),2) }} ({{ $o->paid_to?->format('Y-m-d') }}) ${{ number_format($o->billing_cost_to($o->contract_end),2) }} ({{ $o->invoiced_to?->format('Y-m-d') }}) {{ $o->contract_end->format('Y-m-d') }}
({{ $o->contract_end->diffForHumans(now(),CarbonInterface::DIFF_RELATIVE_TO_OTHER,FALSE,2) }} today) diff --git a/resources/views/theme/backend/adminlte/service/widget/phone/details.blade.php b/resources/views/theme/backend/adminlte/service/widget/phone/details.blade.php index ec1184e..dbd7e03 100644 --- a/resources/views/theme/backend/adminlte/service/widget/phone/details.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/phone/details.blade.php @@ -1,13 +1,8 @@
- @if($o->service->isPending()) -
-
- Pending -
-
- @endif + +

Phone Details

diff --git a/resources/views/theme/backend/adminlte/service/widget/ssl/details.blade.php b/resources/views/theme/backend/adminlte/service/widget/ssl/details.blade.php index a4c7607..c65a78f 100644 --- a/resources/views/theme/backend/adminlte/service/widget/ssl/details.blade.php +++ b/resources/views/theme/backend/adminlte/service/widget/ssl/details.blade.php @@ -1,11 +1,6 @@
- @if($o->service->isPending()) -
-
- Pending -
-
- @endif + +

SSL Details