Skip to content
This repository has been archived by the owner on May 26, 2023. It is now read-only.

Method isInGrace() + scope scopeFindInGracePeriod() #102

Closed
boryn opened this issue Oct 4, 2021 · 2 comments · Fixed by #108
Closed

Method isInGrace() + scope scopeFindInGracePeriod() #102

boryn opened this issue Oct 4, 2021 · 2 comments · Fixed by #108
Labels
enhancement New feature or request minor Minor change
Milestone

Comments

@boryn
Copy link
Contributor

boryn commented Oct 4, 2021

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.

@bpuig bpuig added the enhancement New feature or request label Oct 4, 2021
@bpuig bpuig modified the milestone: v5.0.0 Oct 4, 2021
@bpuig bpuig added the minor Minor change label Oct 4, 2021
@bpuig bpuig added this to the v5.x milestone Oct 4, 2021
@bpuig bpuig mentioned this issue Oct 15, 2021
2 tasks
@bpuig bpuig linked a pull request Oct 15, 2021 that will close this issue
2 tasks
@bpuig
Copy link
Owner

bpuig commented Oct 15, 2021

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());
    }

@boryn
Copy link
Contributor Author

boryn commented Jan 19, 2022

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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request minor Minor change
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants