diff --git a/app/Http/Controllers/ClientPortal/SubscriptionController.php b/app/Http/Controllers/ClientPortal/SubscriptionController.php index a60ee0c065d2..6e637d8223eb 100644 --- a/app/Http/Controllers/ClientPortal/SubscriptionController.php +++ b/app/Http/Controllers/ClientPortal/SubscriptionController.php @@ -13,12 +13,31 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; +use App\Models\RecurringInvoice; +use App\Utils\Ninja; use Illuminate\Http\Request; class SubscriptionController extends Controller { public function index() { + + if(Ninja::isHosted()){ + + + $count = RecurringInvoice::query() + ->where('client_id', auth('contact')->user()->client->id) + ->where('company_id', auth('contact')->user()->client->company_id) + ->where('status_id', RecurringInvoice::STATUS_ACTIVE) + ->whereNotNull('subscription_id') + ->count(); + + if($count == 0) + return redirect()->route('client.ninja_contact_login', ['contact_key' => auth('contact')->user()->contact_key, 'company_key' => auth('contact')->user()->company->company_key]); + + } + + return render('subscriptions.index'); } } diff --git a/app/Http/Livewire/RecurringInvoicesTable.php b/app/Http/Livewire/RecurringInvoicesTable.php index 0a8117e696ea..9eeda33d8582 100644 --- a/app/Http/Livewire/RecurringInvoicesTable.php +++ b/app/Http/Livewire/RecurringInvoicesTable.php @@ -42,7 +42,7 @@ class RecurringInvoicesTable extends Component $query = $query ->where('client_id', auth('contact')->user()->client->id) ->where('company_id', $this->company->id) - ->whereIn('status_id', [RecurringInvoice::STATUS_PENDING, RecurringInvoice::STATUS_ACTIVE, RecurringInvoice::STATUS_PAUSED,RecurringInvoice::STATUS_COMPLETED]) + ->whereIn('status_id', [RecurringInvoice::STATUS_ACTIVE]) ->orderBy('status_id', 'asc') ->with('client') ->orderBy($this->sort_field, $this->sort_asc ? 'asc' : 'desc') diff --git a/app/Http/Livewire/SubscriptionRecurringInvoicesTable.php b/app/Http/Livewire/SubscriptionRecurringInvoicesTable.php index 7993680ca2ed..f5ae39999f45 100644 --- a/app/Http/Livewire/SubscriptionRecurringInvoicesTable.php +++ b/app/Http/Livewire/SubscriptionRecurringInvoicesTable.php @@ -38,6 +38,7 @@ class SubscriptionRecurringInvoicesTable extends Component ->where('client_id', auth('contact')->user()->client->id) ->where('company_id', $this->company->id) ->whereNotNull('subscription_id') + ->where('status_id', RecurringInvoice::STATUS_ACTIVE) ->orderBy($this->sort_field, $this->sort_asc ? 'asc' : 'desc') ->withTrashed() ->paginate($this->per_page); diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index ef3f618d6c4c..178bdd25a9b3 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -290,6 +290,9 @@ class SubscriptionService $days_in_frequency = $this->getDaysInFrequency(); + if($days_of_subscription_used >= $days_in_frequency) + return 0; + $pro_rata_refund = round((($days_in_frequency - $days_of_subscription_used)/$days_in_frequency) * $invoice->amount ,2); // nlog("days in frequency = {$days_in_frequency} - days of subscription used {$days_of_subscription_used}"); @@ -322,7 +325,8 @@ class SubscriptionService $days_of_subscription_used = $start_date->diffInDays($current_date); - $days_in_frequency = $this->getDaysInFrequency(); + // $days_in_frequency = $this->getDaysInFrequency(); + $days_in_frequency = $invoice->subscription->service()->getDaysInFrequency(); $ratio = ($days_in_frequency - $days_of_subscription_used)/$days_in_frequency; @@ -427,6 +431,8 @@ class SubscriptionService nlog("total payable = {$total_payable}"); + $credit = false; + /* Only generate a credit if the previous invoice was paid in full. */ if($last_invoice->balance == 0) $credit = $this->createCredit($last_invoice, $target_subscription, $is_credit); @@ -436,7 +442,7 @@ class SubscriptionService $context = [ 'context' => 'change_plan', 'recurring_invoice' => $new_recurring_invoice->hashed_id, - 'credit' => $credit->hashed_id, + 'credit' => $credit ? $credit->hashed_id : null, 'client' => $new_recurring_invoice->client->hashed_id, 'subscription' => $target_subscription->hashed_id, 'contact' => auth('contact')->user()->hashed_id, @@ -446,7 +452,10 @@ class SubscriptionService nlog($response); - return $this->handleRedirect('/client/credits/'.$credit->hashed_id); + if($credit) + return $this->handleRedirect('/client/credits/'.$credit->hashed_id); + else + return $this->handleRedirect('/client/credits'); } @@ -545,6 +554,9 @@ class SubscriptionService $old_recurring_invoice = RecurringInvoice::find($payment_hash->data->billing_context->recurring_invoice); + if(!$old_recurring_invoice) + return $this->handleRedirect('/client/recurring_invoices/'); + $recurring_invoice = $this->createNewRecurringInvoice($old_recurring_invoice); $context = [ @@ -702,7 +714,7 @@ class SubscriptionService $recurring_invoice = RecurringInvoiceFactory::create($this->subscription->company_id, $this->subscription->user_id); $recurring_invoice->client_id = $client_id; - $recurring_invoice->line_items = $subscription_repo->generateLineItems($this->subscription, true); + $recurring_invoice->line_items = $subscription_repo->generateLineItems($this->subscription, true, false); $recurring_invoice->subscription_id = $this->subscription->id; $recurring_invoice->frequency_id = $this->subscription->frequency_id ?: RecurringInvoice::FREQUENCY_MONTHLY; $recurring_invoice->date = now(); diff --git a/composer.json b/composer.json index 07c4fc75daa7..b67486d54c99 100644 --- a/composer.json +++ b/composer.json @@ -150,4 +150,4 @@ }, "minimum-stability": "dev", "prefer-stable": true -} +} \ No newline at end of file diff --git a/resources/views/portal/ninja2020/components/livewire/subscription-plan-switch.blade.php b/resources/views/portal/ninja2020/components/livewire/subscription-plan-switch.blade.php index b71272ce0e88..7d53d6c5caf5 100644 --- a/resources/views/portal/ninja2020/components/livewire/subscription-plan-switch.blade.php +++ b/resources/views/portal/ninja2020/components/livewire/subscription-plan-switch.blade.php @@ -61,7 +61,7 @@ @endif - @elseif($amount < 0) + @elseif($amount <= 0)

{{ ctrans('texts.total') }}: {{ \App\Utils\Number::formatMoney($amount, $subscription->company) }}