Closed boryn closed 2 years ago
I'm unable to make the scope, because it would need very a specific mysql raw select with mysql date calculation methods. Since laravel installation accepts mysql, postgres and others I'm afraid i can't put it in the package.
I have not tested, but I think it would be something like:
/**
* Scope subscriptions in grace period.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeInGrace($query)
{
return $query->select(DB::raw('CASE grace_interval
WHEN "hour" THEN date_add(ends_at, INTERVAL grace_period HOUR)
WHEN "day" THEN date_add(ends_at, INTERVAL grace_period DAY)
WHEN "week" THEN date_add(ends_at, INTERVAL grace_period WEEK)
WHEN "month" THEN date_add(ends_at, INTERVAL grace_period MONTH)
END
AS grace_ends_at'))
->where('grace_period', '>', 0)
->where('grace_ends_at', '>=', Carbon::now());
}
Hi @bpuig!
Maybe we could have a separate column grace_ends_at
just as there is trial_ends_at
?
Then for the scope we would just need a check if now()
is greater than ends_at
and lower than grace_ends_at
? Similarly isInGrace()
would be very easy to calculate.
I thought that we could need
isInGrace()
method?And as well a scope
scopeFindInGracePeriod()
for getting the subscribers during the grace period ending in X days?The both methods would be very helpful for displaying appropriate information to the user in the front or to send them email reminders.