144 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
use App\Models\Team;
 | 
						|
use Illuminate\Support\Carbon;
 | 
						|
use Stripe\Stripe;
 | 
						|
 | 
						|
function getSubscriptionLink($type)
 | 
						|
{
 | 
						|
    $checkout_id = config("subscription.lemon_squeezy_checkout_id_$type");
 | 
						|
    if (!$checkout_id) {
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
    $user_id = auth()->user()->id;
 | 
						|
    $team_id = currentTeam()->id ?? null;
 | 
						|
    $email = auth()->user()->email ?? null;
 | 
						|
    $name = auth()->user()->name ?? null;
 | 
						|
    $url = "https://store.coollabs.io/checkout/buy/$checkout_id?";
 | 
						|
    if ($user_id) {
 | 
						|
        $url .= "&checkout[custom][user_id]={$user_id}";
 | 
						|
    }
 | 
						|
    if (isset($team_id)) {
 | 
						|
        $url .= "&checkout[custom][team_id]={$team_id}";
 | 
						|
    }
 | 
						|
    if ($email) {
 | 
						|
        $url .= "&checkout[email]={$email}";
 | 
						|
    }
 | 
						|
    if ($name) {
 | 
						|
        $url .= "&checkout[name]={$name}";
 | 
						|
    }
 | 
						|
    return $url;
 | 
						|
}
 | 
						|
 | 
						|
function getPaymentLink()
 | 
						|
{
 | 
						|
    return currentTeam()->subscription->lemon_update_payment_menthod_url;
 | 
						|
}
 | 
						|
 | 
						|
function getRenewDate()
 | 
						|
{
 | 
						|
    return Carbon::parse(currentTeam()->subscription->lemon_renews_at)->format('Y-M-d H:i:s');
 | 
						|
}
 | 
						|
 | 
						|
function getEndDate()
 | 
						|
{
 | 
						|
    return Carbon::parse(currentTeam()->subscription->lemon_renews_at)->format('Y-M-d H:i:s');
 | 
						|
}
 | 
						|
 | 
						|
function isSubscriptionActive()
 | 
						|
{
 | 
						|
    if (!isCloud()) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $team = currentTeam();
 | 
						|
    if (!$team) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $subscription = $team?->subscription;
 | 
						|
 | 
						|
    if (is_null($subscription)) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    if (isLemon()) {
 | 
						|
        return $subscription->lemon_status === 'active';
 | 
						|
    }
 | 
						|
    // if (isPaddle()) {
 | 
						|
    //     return $subscription->paddle_status === 'active';
 | 
						|
    // }
 | 
						|
    if (isStripe()) {
 | 
						|
        return $subscription->stripe_invoice_paid === true && $subscription->stripe_cancel_at_period_end === false;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
}
 | 
						|
function isSubscriptionOnGracePeriod()
 | 
						|
{
 | 
						|
    $team = currentTeam();
 | 
						|
    if (!$team) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $subscription = $team?->subscription;
 | 
						|
    if (!$subscription) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    if (isLemon()) {
 | 
						|
        $is_still_grace_period = $subscription->lemon_ends_at &&
 | 
						|
            Carbon::parse($subscription->lemon_ends_at) > Carbon::now();
 | 
						|
        return $is_still_grace_period;
 | 
						|
    }
 | 
						|
    if (isStripe()) {
 | 
						|
        return $subscription->stripe_cancel_at_period_end;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
}
 | 
						|
function subscriptionProvider()
 | 
						|
{
 | 
						|
    return config('subscription.provider');
 | 
						|
}
 | 
						|
function isLemon()
 | 
						|
{
 | 
						|
    return config('subscription.provider') === 'lemon';
 | 
						|
}
 | 
						|
function isStripe()
 | 
						|
{
 | 
						|
    return config('subscription.provider') === 'stripe';
 | 
						|
}
 | 
						|
function isPaddle()
 | 
						|
{
 | 
						|
    return config('subscription.provider') === 'paddle';
 | 
						|
}
 | 
						|
function getStripeCustomerPortalSession(Team $team)
 | 
						|
{
 | 
						|
    Stripe::setApiKey(config('subscription.stripe_api_key'));
 | 
						|
    $return_url = route('team.index');
 | 
						|
    $stripe_customer_id = $team->subscription->stripe_customer_id;
 | 
						|
    $session = \Stripe\BillingPortal\Session::create([
 | 
						|
        'customer' => $stripe_customer_id,
 | 
						|
        'return_url' => $return_url,
 | 
						|
    ]);
 | 
						|
    return $session;
 | 
						|
}
 | 
						|
function allowedPathsForUnsubscribedAccounts()
 | 
						|
{
 | 
						|
    return [
 | 
						|
        'subscription',
 | 
						|
        'login',
 | 
						|
        'register',
 | 
						|
        'waitlist',
 | 
						|
        'force-password-reset',
 | 
						|
        'logout',
 | 
						|
        'livewire/message/force-password-reset',
 | 
						|
        'livewire/message/check-license',
 | 
						|
        'livewire/message/switch-team',
 | 
						|
        'livewire/message/subscription.pricing-plans'
 | 
						|
    ];
 | 
						|
}
 | 
						|
function allowedPathsForBoardingAccounts()
 | 
						|
{
 | 
						|
    return [
 | 
						|
        ...allowedPathsForUnsubscribedAccounts(),
 | 
						|
        'boarding',
 | 
						|
        'livewire/message/boarding.index',
 | 
						|
        'livewire/message/activity-monitor'
 | 
						|
    ];
 | 
						|
}
 |