计算升级/降级时的新订阅费用

I am currently developing a subscription system for a web application. I need help regarding the approach for new subscription costs when a user decides to downgrade or upgrade their account.

I created a image to make an example of a user that keeps changing levels.

enter image description here

A user can choose to pay each month, quarter or year.

I want to add a discount when the user decides to downgrade. The discount is currently factored into the new cost using this formula:

[final plan cost] = [new plan cost] * 12 - [discount] / [12 - month / 3 - quarter / 1 - year]

If we have a user that keeps changing plans like this, how can I calculate the discount dynamically? It's easy for one change - I can take the difference between the two plans and multiply it for each payment that was made before. But I need some help regarding the approach for several changes, and how I can keep track of the discount.

I think you should put all that information in a database table and just call the cells. If the user it at the plan where they are getting the discount based on the sub; then eg if(price is this) discount is {discount value from the database} x price of subscription.. You will not have to worry if someone changes their subscription in the middle of the month, all you have to do is put that information in a different table and at the end of the month all the application would do is apply the new subscription and do the calculations. It is not hard just the approach..