I understood what you meant.
Proration is a feature that I plan to implement in the future, it’s not in the current release. I have added your request as a vote towards this feature.
I understand you don’t give trials. I wasn’t suggesting that you do. It’s called trial or initial period, trial if free, initial if paid, but it’s basically a period different from the following regular ones. This period can have a different length and price than the regular ones. This flexibility lets you use it to charge a custom amount according to the time/money the customer had left from the previous subscription level. That’s what I meant earlier when I said that you’d use this trial period. Just wanted to clarify that.
Like I said, it can be done with a bit of code if you really want this to work for you now, instead of waiting for a possible feature in the future. It’d be something like this:
// Proration for level 1 subscription upgrade to level 2 subscription.
if (current_user_is('s2member_level1') {
$level1_price = 50; // Your level 1 price.
$level1_days = 365; // Your level 1 term in days.
$level1_day_price = $level1_price / $level1_days;
$level2_price = 80; // Your level 2 price.
$user_eot_npt = s2member_eot(); // https://s2member.com/kb-article/s2eot-shortcode-documentation/#toc-e00e3e46
$user_days_left = ceil(($user_eot_npt['time'] - time()) / DAY_IN_SECONDS);
$user_credit = ceil($user_days_left * level1_day_price);
$level2_1st_pay = $level2_price - $user_credit;
// Now configure your Shortcode with trial term same as regular term, but trial amount with what you calculated above.
// The Shortcode here has been abbreviated for clarity in this regard.
echo do_shortcode('[s2Member-Pro-PayPal-Form ... ta="'.$level2_1st_pay.'" ... /]');
}
I hope that helps.