GrafiteInc/Scaffold

View on GitHub
app/Models/Concerns/HasSubscription.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Models\Concerns;

use Illuminate\Support\Facades\Cache;

trait HasSubscription
{
    /**
     * Check if the user has an active subscription
     * in any possible state.
     *
     * @return bool
     */
    public function hasActiveSubscription()
    {
        return Cache::remember($this->cacheIdentifier('subscription'), 300, function () {
            if ($this->subscription(config('billing.subscription_name')) && ! $this->subscription(config('billing.subscription_name'))->canceled()) {
                return true;
            }

            if (
                $this->subscription(config('billing.subscription_name')) &&
                $this->subscription(config('billing.subscription_name'))->canceled() &&
                $this->subscription(config('billing.subscription_name'))->onGracePeriod()
            ) {
                return true;
            }

            return false;
        });
    }

    /**
     * Check if the user subscription has been cancelled.
     *
     * @return bool
     */
    public function hasCanceledSubscription()
    {
        if ($this->subscription(config('billing.subscription_name'))) {
            return $this->subscription(config('billing.subscription_name'))->canceled();
        }

        return false;
    }

    /**
     * Get the users subscription plan.
     *
     * @param  string  $key
     * @return mixed
     */
    public function subscriptionPlan($key)
    {
        $plans = config('billing.plans');
        $plan = $this->subscription(config('billing.subscription_name'));

        if (! is_null($plan)) {
            $plan = $plan->stripe_price;

            return $plans[$plan][$key];
        }

        return null;
    }

    public function hasBillingInformation()
    {
        return
            ! is_null($this->billing_email)
            && ! is_null($this->state)
            && ! is_null($this->country);
    }

    public function clearSubscriptionCache()
    {
        Cache::forget($this->cacheIdentifier('subscription'));
    }
}