We recently switched to PayPal Pro to allow subscriptions/auto-renewal. We have a fiscal year membership so we only run demotions once a year. When we ran it this time it demoted people who had valid subscriptions in PayPal and were obviously not expired. Any ideas on why this happened and how to get it working right??
EOT/Demotion Process Demoting Valid Subscriptions-more info
s2Member doesn’t check PayPal for active subscriptions. If there is an EOT time set in that user’s profile, it’ll act on it without checking if the subscription exists in PayPal.
The EOT time is normally set for users with a subscription, when s2 gets a notification from the gateway (e.g. PayPal) that the subscription ended. https://s2member.com/kb-article/when-is-an-eot-time-set-for-each-user/
we only run demotions once a year. When we ran it this time it demoted people who had valid subscriptions in PayPal
When you say you ran the demotions, how did you do it? Did you edit the user’s in WordPress to set an EOT time?

We just enabled the EOT process. Because of the calendar year approach for these folks, it is normally disabled, then enabled once a year.
I see.
When we ran it this time it demoted people who had valid subscriptions in PayPal and were obviously not expired. Any ideas on why this happened and how to get it working right??
Did someone in the organization set an EOT time for those users? If the users had an EOT time in their profile, then the EOT handler would act on them.
s2 doesn’t check the subscription over at the gateway or why the EOT time was set for him. And the EOT handler doesn’t end the subscription, normally the subscription is ended and that notifies s2 to set the EOT time.
Does that help?

It turns out that an old hook we got from Jason to sync all EOTs to year end was also firing for the subscriptions and modifying the EOTs just slightly.
So we have found and fixed that so the hook does not act on subscriptions, but now we have to clean up the data.
Thanks for the update! Nice job finding that!
Yeah, cleaning the data will be annoying, but at least you got to the bottom of it and it won’t keep happening.
You could use the s2Member Pro users exporter, and edit those in the spreadsheet, if it makes it easier for you. You can delete most columns and leave only the user ID and EOT time ones to update the users, I think you wouln’t need more the reimporting for bulk updates. https://s2member.com/kb-article/advanced-importexport-tools/

I actually shared that hook code a few years ago in this forum. I will try to find and update it to say it does not work in environments that mix fixed membership terms and auto-renewing subscriptions.