diff --git a/app/Models/Account.php b/app/Models/Account.php index f1d4d0c2e179..ed0a7484f26b 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -54,6 +54,7 @@ class Account extends BaseModel 'promo_expires', 'discount_expires', 'trial_started', + 'plan_expires' ]; const PLAN_FREE = 'free'; diff --git a/app/Models/Subscription.php b/app/Models/Subscription.php index 57ca3011ab06..6cb40b1a19cb 100644 --- a/app/Models/Subscription.php +++ b/app/Models/Subscription.php @@ -11,6 +11,7 @@ namespace App\Models; +use App\Models\RecurringInvoice; use App\Services\Subscription\SubscriptionService; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -77,4 +78,39 @@ class Subscription extends BaseModel { return $this->belongsTo(User::class); } + + public function nextDateByInterval($date, $frequency_id) + { + + switch ($frequency_id) { + + case RecurringInvoice::FREQUENCY_DAILY: + return $date->addDay(); + case RecurringInvoice::FREQUENCY_WEEKLY: + return $date->addWeek(); + case RecurringInvoice::FREQUENCY_TWO_WEEKS: + return $date->addWeeks(2); + case RecurringInvoice::FREQUENCY_FOUR_WEEKS: + return $date->addWeeks(4); + case RecurringInvoice::FREQUENCY_MONTHLY: + return $date->addMonthNoOverflow(); + case RecurringInvoice::FREQUENCY_TWO_MONTHS: + return $date->addMonthsNoOverflow(2); + case RecurringInvoice::FREQUENCY_THREE_MONTHS: + return $date->addMonthsNoOverflow(3); + case RecurringInvoice::FREQUENCY_FOUR_MONTHS: + return $date->addMonthsNoOverflow(4); + case RecurringInvoice::FREQUENCY_SIX_MONTHS: + return $date->addMonthsNoOverflow(6); + case RecurringInvoice::FREQUENCY_ANNUALLY: + return $date->addYear(); + case RecurringInvoice::FREQUENCY_TWO_YEARS: + return $date->addYears(2); + case RecurringInvoice::FREQUENCY_THREE_YEARS: + return $date->addYears(3); + default: + return null; + } + } + } diff --git a/tests/Feature/Ninja/PlanTest.php b/tests/Feature/Ninja/PlanTest.php index 1524500e8c72..a80d7f1567f3 100644 --- a/tests/Feature/Ninja/PlanTest.php +++ b/tests/Feature/Ninja/PlanTest.php @@ -10,13 +10,16 @@ */ namespace Tests\Feature\Ninja; +use App\Factory\SubscriptionFactory; use App\Models\Account; +use App\Models\RecurringInvoice; use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\Session; use Tests\MockAccountData; use Tests\TestCase; +use Carbon\Carbon; /** * @test @@ -72,4 +75,17 @@ class PlanTest extends TestCase $this->assertEquals($filtered_plans->count(), 2); } + public function testSubscriptionDateIncrement() + { + $subscription = SubscriptionFactory::create($this->company->id, $this->user->id); + $subscription->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; + $subscription->save(); + + $date = Carbon::parse('2020-01-01')->startOfDay(); + + $next_date = $subscription->nextDateByInterval($date, RecurringInvoice::FREQUENCY_MONTHLY); + + $this->assertEquals($date->addMonthNoOverflow()->startOfDay(), $next_date->startOfDay()); + } + }