Skip to content

Commit

Permalink
Merge branch '12.x'
Browse files Browse the repository at this point in the history
# Conflicts:
#	CHANGELOG.md
#	src/Cashier.php
  • Loading branch information
driesvints committed Feb 23, 2021
2 parents fb5b653 + 3dbe65d commit 382e53a
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 7 deletions.
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
# Release Notes

## [Unreleased](https://github.com/laravel/cashier/compare/v12.8.1...master)
## [Unreleased](https://github.com/laravel/cashier/compare/v12.9.1...master)


## [v12.9.1 (2021-02-23)](https://github.com/laravel/cashier/compare/v12.9.0...v12.9.1)

### Changed
- Allow model swapping ([#1067](https://github.com/laravel/cashier-stripe/pull/1067))

### Fixed
- Fix styles overwriting checkout button when class is set ([#1070](https://github.com/laravel/cashier-stripe/pull/1070))


## [v12.9.0 (2021-02-19)](https://github.com/laravel/cashier/compare/v12.8.1...v12.9.0)

### Added
- Add `endTrial` method ([#1062](https://github.com/laravel/cashier-stripe/pull/1062))

### Fixed
- Fix removing tax rates ([d803ae5](https://github.com/laravel/cashier-stripe/commit/d803ae57ae20ee1e38ff8bf47484dfada7eef79d))


## [v12.8.1 (2021-02-16)](https://github.com/laravel/cashier/compare/v12.8.0...v12.8.1)
Expand Down
2 changes: 1 addition & 1 deletion resources/views/checkout.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<button
id="checkout-{{ $sessionId }}"
role="link"
style="{{ isset($style) && ! isset($class) ? $style : 'background-color:#6772E5;color:#FFF;padding:8px 12px;border:0;border-radius:4px;font-size:1em' }}"
@isset($style) style="{{ $style }}" @elseif (! isset($style) && ! isset($class)) style="background-color:#6772E5;color:#FFF;padding:8px 12px;border:0;border-radius:4px;font-size:1em" @endisset
@isset($class) class="{{ $class }}" @endisset
>
{{ $label }}
Expand Down
36 changes: 36 additions & 0 deletions src/Cashier.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,20 @@ class Cashier
*/
public static $deactivatePastDue = true;

/**
* The subscription model class name.
*
* @var string
*/
public static $subscriptionModel = Subscription::class;

/**
* The subscription item model class name.
*
* @var string
*/
public static $subscriptionItemModel = SubscriptionItem::class;

/**
* Get the billable entity instance by Stripe ID.
*
Expand Down Expand Up @@ -153,4 +167,26 @@ public static function keepPastDueSubscriptionsActive()

return new static;
}

/**
* Set the subscription model class name.
*
* @param string $subscriptionModel
* @return void
*/
public static function useSubscriptionModel($subscriptionModel)
{
static::$subscriptionModel = $subscriptionModel;
}

/**
* Set the subscription item model class name.
*
* @param string $subscriptionItemModel
* @return void
*/
public static function useSubscriptionItemModel($subscriptionItemModel)
{
static::$subscriptionItemModel = $subscriptionItemModel;
}
}
3 changes: 2 additions & 1 deletion src/Concerns/ManagesSubscriptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Laravel\Cashier\Concerns;

use Laravel\Cashier\Cashier;
use Laravel\Cashier\Subscription;
use Laravel\Cashier\SubscriptionBuilder;

Expand Down Expand Up @@ -102,7 +103,7 @@ public function subscription($name = 'default')
*/
public function subscriptions()
{
return $this->hasMany(Subscription::class, $this->getForeignKey())->orderBy('created_at', 'desc');
return $this->hasMany(Cashier::$subscriptionModel, $this->getForeignKey())->orderBy('created_at', 'desc');
}

/**
Expand Down
30 changes: 27 additions & 3 deletions src/Subscription.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public function owner()
*/
public function items()
{
return $this->hasMany(SubscriptionItem::class);
return $this->hasMany(Cashier::$subscriptionItemModel);
}

/**
Expand Down Expand Up @@ -576,6 +576,30 @@ public function skipTrial()
return $this;
}

/**
* Force the subscription's trial to end immediately.
*
* @return $this
*/
public function endTrial()
{
if (is_null($this->trial_ends_at)) {
return $this;
}

$subscription = $this->asStripeSubscription();

$subscription->trial_end = 'now';

$subscription->save();

$this->trial_ends_at = null;

$this->save();

return $this;
}

/**
* Extend an existing subscription's trial period.
*
Expand Down Expand Up @@ -1027,7 +1051,7 @@ public function syncTaxRates()
{
$stripeSubscription = $this->asStripeSubscription();

$stripeSubscription->default_tax_rates = $this->user->taxRates() ?: '';
$stripeSubscription->default_tax_rates = $this->user->taxRates() ?: null;

$stripeSubscription->proration_behavior = $this->prorateBehavior();

Expand All @@ -1036,7 +1060,7 @@ public function syncTaxRates()
foreach ($this->items as $item) {
$stripeSubscriptionItem = $item->asStripeSubscriptionItem();

$stripeSubscriptionItem->tax_rates = $this->getPlanTaxRatesForPayload($item->stripe_plan) ?: '';
$stripeSubscriptionItem->tax_rates = $this->getPlanTaxRatesForPayload($item->stripe_plan) ?: null;

$stripeSubscriptionItem->proration_behavior = $this->prorateBehavior();

Expand Down
2 changes: 1 addition & 1 deletion src/SubscriptionItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class SubscriptionItem extends Model
*/
public function subscription()
{
return $this->belongsTo(Subscription::class);
return $this->belongsTo(Cashier::$subscriptionModel);
}

/**
Expand Down
44 changes: 44 additions & 0 deletions tests/Feature/SubscriptionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,37 @@ public function test_subscription_changes_can_be_prorated()
$this->assertEquals(0, $user->upcomingInvoice()->rawTotal());
}

public function test_trial_remains_when_customer_is_invoiced_immediately_on_swap()
{
$user = $this->createCustomer('trial_remains_when_customer_is_invoiced_immediately_on_swap');

$subscription = $user->newSubscription('main', static::$planId)
->trialDays(5)
->create('pm_card_visa');

$this->assertTrue($subscription->onTrial());

$subscription = $subscription->swapAndInvoice(static::$otherPlanId);

$this->assertTrue($subscription->onTrial());
}

/** @group FOO */
public function test_trial_on_swap_is_skipped_when_explicitly_asked_to()
{
$user = $this->createCustomer('trial_on_swap_is_skipped_when_explicitly_asked_to');

$subscription = $user->newSubscription('main', static::$planId)
->trialDays(5)
->create('pm_card_visa');

$this->assertTrue($subscription->onTrial());

$subscription = $subscription->skipTrial()->swapAndInvoice(static::$otherPlanId);

$this->assertFalse($subscription->onTrial());
}

public function test_no_prorate_on_subscription_create()
{
$user = $this->createCustomer('no_prorate_on_subscription_create');
Expand Down Expand Up @@ -602,6 +633,19 @@ public function test_trials_can_be_extended()
$this->assertEquals($subscription->asStripeSubscription()->trial_end, $trialEndsAt->getTimestamp());
}

public function test_trials_can_be_ended()
{
$user = $this->createCustomer('trials_can_be_ended');

$subscription = $user->newSubscription('main', static::$planId)
->trialDays(10)
->create('pm_card_visa');

$subscription->endTrial();

$this->assertNull($subscription->trial_ends_at);
}

public function test_applying_coupons_to_existing_customers()
{
$user = $this->createCustomer('applying_coupons_to_existing_customers');
Expand Down

0 comments on commit 382e53a

Please sign in to comment.