Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
gerardojbaez committed Nov 22, 2017
2 parents ae43c8f + 134bce3 commit 0c6331c
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ Alternatively you can use the following methods available in the subscription mo
```php
$user->subscription('main')->active();
$user->subscription('main')->canceled();
$user->subscription('main')->canceledImmediately();
$user->subscription('main')->ended();
$user->subscription('main')->onTrial();
```
Expand Down
23 changes: 21 additions & 2 deletions src/Laraplans/Models/PlanSubscription.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,15 @@ class PlanSubscription extends Model implements PlanSubscriptionInterface
'canceled_at', 'trial_ends_at', 'ends_at', 'starts_at'
];

/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'canceled_immediately' => 'boolean',
];

/**
* Subscription Ability Manager instance.
*
Expand Down Expand Up @@ -136,7 +145,7 @@ public function getStatusAttribute()
*/
public function isActive()
{
if (! $this->isEnded() or $this->onTrial()) {
if ((! $this->isEnded() or $this->onTrial()) and ! $this->isCanceledImmediately()) {
return true;
}

Expand Down Expand Up @@ -167,6 +176,16 @@ public function isCanceled()
return ! is_null($this->canceled_at);
}

/**
* Check if subscription is canceled immediately.
*
* @return bool
*/
public function isCanceledImmediately()
{
return (! is_null($this->canceled_at) and $this->canceled_immediately === true);
}

/**
* Check if subscription period has ended.
*
Expand All @@ -190,7 +209,7 @@ public function cancel($immediately = false)
$this->canceled_at = Carbon::now();

if ($immediately) {
$this->ends_at = $this->canceled_at;
$this->canceled_immediately = true;
}

if ($this->save()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public function up()
$table->string('subscribable_type')->index();
$table->integer('plan_id')->unsigned();
$table->string('name');
$table->boolean('canceled_immediately')->nullable();
$table->timestamp('trial_ends_at')->nullable();
$table->timestamp('starts_at')->nullable();
$table->timestamp('ends_at')->nullable();
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/Models/PlanSubscriptionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,15 @@ public function it_cancels()
$this->subscription->trial_ends_at = null;

$this->assertTrue($this->subscription->isCanceled());
$this->assertFalse($this->subscription->isCanceledImmediately());
$this->assertTrue($this->subscription->isActive());
$this->assertEquals(PlanSubscription::STATUS_ACTIVE, $this->subscription->status);

// Cancel subscription immediately...
$this->subscription->cancel(true);

$this->assertTrue($this->subscription->isCanceled());
$this->assertTrue($this->subscription->isCanceledImmediately());
$this->assertFalse($this->subscription->isActive());
$this->assertEquals(PlanSubscription::STATUS_CANCELED, $this->subscription->status);

Expand Down

0 comments on commit 0c6331c

Please sign in to comment.