2

I'm using Laravel Cashier with Stripe.

In my account panel I want to show users how much their monthly subscription is costing them.

Users can have a normal plan without a coupon or the same plan with a coupon that makes it half price.

Is there anyway Cashier can tell me how much the monthly subscription is costing them or if they signed up using a coupon? Or is this something I have to store in my own database at the time they subscribe?

Mr J
  • 2,655
  • 4
  • 37
  • 58

1 Answers1

1

I created a coupon trait that I use on my User Model. Hope that helps.

<?php

namespace App\Traits;

use Carbon\Carbon;

trait Coupon 
{
    public function getSubscriptions()
    {
        return $this->asStripeCustomer()->subscriptions->data;
    }

    public function getSubscription()
    {
        foreach ($this->getSubscriptions() as $subscription) {
            if ($subscription->status === 'active') {
                return $subscription;
            }
        }
    }

    public function discount()
    {
        return $this->getSubscription()->discount;
    }

    public function discountCustomerId()
    {
        return $this->discount()->customer;
    }

    public function discountSubscriptionId()
    {
        return $this->discount()->subscription;
    }

    public function discountStartDate()
    {
        return Carbon::createFromTimestamp($this->discount()->start);
    }

    public function discountEndDate()
    {
         return Carbon::createFromTimestamp($this->discount()->end);
    }

    public function discountDaysLeft()
    {
        return $this->discountEndDate()
            ->diffInDays($this->discountStartDate());
    }

    public function coupon()
    {
        return $this->discount()->coupon;
    }

    public function couponIsValid()
    {
         return $this->coupon()->valid;
    }
}
Jonathon
  • 312
  • 2
  • 10