diff --git a/app/Console/Commands/CreateSingleAccount.php b/app/Console/Commands/CreateSingleAccount.php index d037bcf64b01..080a95b2ceaa 100644 --- a/app/Console/Commands/CreateSingleAccount.php +++ b/app/Console/Commands/CreateSingleAccount.php @@ -244,6 +244,7 @@ class CreateSingleAccount extends Command $sub->group_id = $gs->id; $sub->recurring_product_ids = "{$p1->hashed_id}"; $sub->webhook_configuration = $webhook_config; + $sub->allow_plan_changes = true; $sub->save(); $sub = SubscriptionFactory::create($company->id, $user->id); @@ -251,6 +252,7 @@ class CreateSingleAccount extends Command $sub->group_id = $gs->id; $sub->recurring_product_ids = "{$p2->hashed_id}"; $sub->webhook_configuration = $webhook_config; + $sub->allow_plan_changes = true; $sub->save(); } diff --git a/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php b/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php index 1dbe98ca4b18..d745f61630b3 100644 --- a/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php +++ b/app/Http/Controllers/ClientPortal/SubscriptionPlanSwitchController.php @@ -30,15 +30,20 @@ class SubscriptionPlanSwitchController extends Controller */ public function index(ShowPlanSwitchRequest $request, RecurringInvoice $recurring_invoice, Subscription $target) { - //calculate whether a payment is required or whether we pass through a credit for this. - $amount = $recurring_invoice->subscription->service()->calculateUpgradePrice($recurring_invoice, $target); + $amount = $recurring_invoice->subscription + ->service() + ->calculateUpgradePrice($recurring_invoice, $target); -nlog($amount); + /** + * + * Null value here is a proxy for + * denying the user a change plan option + * + */ + if(is_null($amount)) + render('subscriptions.denied'); - //if($amount == null) - //please show account upgrade unavailable - //@ben return render('subscriptions.switch', [ 'subscription' => $recurring_invoice->subscription, diff --git a/app/Http/Livewire/SubscriptionPlanSwitch.php b/app/Http/Livewire/SubscriptionPlanSwitch.php index b6a07279dfda..b08ebb24617c 100644 --- a/app/Http/Livewire/SubscriptionPlanSwitch.php +++ b/app/Http/Livewire/SubscriptionPlanSwitch.php @@ -72,8 +72,6 @@ class SubscriptionPlanSwitch extends Component public function mount() { - // $this->total = $this->subscription->service()->getPriceBetweenSubscriptions($this->subscription, $this->target); - $this->total = $this->amount; $this->methods = $this->contact->client->service()->getPaymentMethods(100); @@ -86,6 +84,7 @@ class SubscriptionPlanSwitch extends Component $this->state['show_loading_bar'] = true; $this->state['invoice'] = $this->subscription->service()->createChangePlanInvoice([ + 'recurring_invoice' => $this->recurring_invoice, 'subscription' => $this->subscription, 'target' => $this->target, ]); diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php index 6727e0285c5c..3790ca91cfbf 100644 --- a/app/Models/RecurringInvoice.php +++ b/app/Models/RecurringInvoice.php @@ -184,7 +184,7 @@ class RecurringInvoice extends BaseModel public function invoices() { - return $this->hasMany(Invoice::class, 'id', 'recurring_id')->withTrashed(); + return $this->hasMany(Invoice::class, 'recurring_id', 'id')->withTrashed(); } public function invitations() diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index 0a6fc384e339..651d4a8b84a1 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -190,7 +190,7 @@ class SubscriptionService $current_amount = $recurring_invoice->amount; $currency_frequency = $recurring_invoice->frequency_id; - $outstanding = $recurring_invoice->invoices + $outstanding = $recurring_invoice->invoices() ->where('is_deleted', 0) ->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL]) ->where('balance', '>', 0); @@ -238,11 +238,25 @@ class SubscriptionService //Data array structure /** * [ + * 'recurring_invoice' => RecurringInvoice::class, * 'subscription' => Subscription::class, * 'target' => Subscription::class * ] */ + $outstanding_invoice = $recurring_invoice->invoices() + ->where('is_deleted', 0) + ->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL]) + ->where('balance', '>', 0) + ->first(); + + + // we calculate the pro rata refund for this invoice. + if($outstanding_invoice) + { + + } + //logic // Is the user paid up to date? ie are there any outstanding invoices for this subscription diff --git a/resources/views/portal/ninja2020/subscriptions/denied.blade.php b/resources/views/portal/ninja2020/subscriptions/denied.blade.php new file mode 100644 index 000000000000..e7bc71bee704 --- /dev/null +++ b/resources/views/portal/ninja2020/subscriptions/denied.blade.php @@ -0,0 +1,25 @@ +@extends('portal.ninja2020.layout.app') +@section('meta_title', ctrans('texts.subscriptions')) + +@section('body') +
{{ $subscription->name }}
+Cannot upgrade / downgrade as you have one of more invoices outstanding
+