b59e47dcf9
fix: prepare customer initiated tier change fix: separate view for subscriptions
150 lines
3.5 KiB
PHP
150 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('subscription.show');
|
|
$stripe_customer_id = data_get($team,'subscription.stripe_customer_id');
|
|
if (!$stripe_customer_id) {
|
|
return null;
|
|
}
|
|
$session = \Stripe\BillingPortal\Session::create([
|
|
'customer' => $stripe_customer_id,
|
|
'return_url' => $return_url,
|
|
]);
|
|
return $session;
|
|
}
|
|
function allowedPathsForUnsubscribedAccounts()
|
|
{
|
|
return [
|
|
'subscription/new',
|
|
'login',
|
|
'logout',
|
|
'waitlist',
|
|
'force-password-reset',
|
|
'livewire/update'
|
|
];
|
|
}
|
|
function allowedPathsForBoardingAccounts()
|
|
{
|
|
return [
|
|
...allowedPathsForUnsubscribedAccounts(),
|
|
'boarding',
|
|
'livewire/update'
|
|
];
|
|
}
|
|
function allowedPathsForInvalidAccounts() {
|
|
return [
|
|
'logout',
|
|
'verify',
|
|
'force-password-reset',
|
|
'livewire/update'
|
|
];
|
|
}
|