mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 02:07:30 -04:00 
			
		
		
		
	Fixes for subscriptions
This commit is contained in:
		
							parent
							
								
									39ab665ce8
								
							
						
					
					
						commit
						2c289bbe4e
					
				| @ -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'); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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') | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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(); | ||||
|  | ||||
| @ -61,7 +61,7 @@ | ||||
|                 @endif | ||||
|             </div> | ||||
|         </div> | ||||
|         @elseif($amount < 0) | ||||
|         @elseif($amount <= 0) | ||||
|             <div class="relative flex justify-center text-sm leading-5"> | ||||
|                 <h1 class="text-2xl font-bold tracking-wide bg-gray-100 px-6 py-0"> | ||||
|                     {{ ctrans('texts.total') }}: {{ \App\Utils\Number::formatMoney($amount, $subscription->company) }} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user