Giter Site home page Giter Site logo

Comments (9)

cypreess avatar cypreess commented on July 21, 2024

Yes, freemium plan is very needed.

From the perspective of current django-plans architecture please consider following django models:

  • Plan model - here we keep basic information on a plan (basically a name, and if the plan is visible/available)
  • PlanPricing model - we keep here information how expensive is to buy X days of service within this plan
  • UserPlan - we keep here information about what plan is currently active on user account and when it expires.

So from this perspective of a free plan does not really diverse from any other plan. In fact this should be just a single Plan which DOES NOT have any PlanPricing definded (so in fact user cannot buy it directly, there will be no "buy" buttons generated for this plan).

The only difference in the business logic you should implement is to be sure that:

  • user is able to change a plan to the plan without PlanPricing (right now this will possibly raise some exception in calculating plan switching price)
  • when user changes a plan to the "free plan" (a plan without planpricing objects) his UserPlan.expire will be set None
  • when UserPlan.expire == None, rest of the system must works properly (e.g. all logic for expiring accounts and sending expiration notice e-mails) - possibly this should already work without a problem, but who knows ;-)

In terms of presentation layer, there is a question how to specially mark in a HTML pricing table that this plan is freemium? I would suggest to implement plans tagging as described here: #22

When you need something like that, you can just tag the plan with "freemium" tag and use it in you layout.

PS. I would also recommend not to provide a strict rule that there can be only one "freemium" plan. I can imagine that somebody would like to change freemium plan but leaving old clients with old usage quoatas (on the old freemium plan). This would lead to creating a "new" freemium plan, and setting old freemium plan as not available any more. Old users could use it, new one see only new freemium plan, but you end up with 2 freemium plans in the system :-)

from django-plans.

dulacp avatar dulacp commented on July 21, 2024

I will use the logic you've described that's a great way to handle that. And I'll fix and turn this issue into a PR with the necessary changes to avoid exception. Be back soon with some enhancements.

And you're right, no constrain on the number of free plan, that was a bad idea.

from django-plans.

brentc avatar brentc commented on July 21, 2024

Did anything come of this?

from django-plans.

andr0s avatar andr0s commented on July 21, 2024

+1 here - the free plan is a really important thing!

from django-plans.

brentc avatar brentc commented on July 21, 2024

So I've implemented most of the suggestions here for implementing a free plan. But I've run into an issue with the way the system implements plan changes.

When downgrading from a paid to a free plan, I'm setting UserPlan.expire to None, but when upgrading from a free plan to a different plan there's no good way to set the plan expiry because there is no pricing chosen during plan change, just the new target plan.

Was there a reason for this lock of explicit pricing choice during plan change?

from django-plans.

brentc avatar brentc commented on July 21, 2024

Perhaps if the user's current plan is one of these "free" plans, we shouldn't allow a standard plan-change, but rather force a normal plan-order.

from django-plans.

cypreess avatar cypreess commented on July 21, 2024

I think the most reasonable thing is to force user to purchase a paid plan in this case. The other way is maybe implementing some settings variable that says if user has free plan he can change plan and get X days for free , than he starts to pay. But It is rather a questiom does the second sollution have any business application. I would prefer first solution as it is elegant and obvious. You have free plan until you finally pay for some extra plan.

from django-plans.

brentc avatar brentc commented on July 21, 2024

I have a PR that implements the first option (I believe) incoming...

from django-plans.

Hedayet avatar Hedayet commented on July 21, 2024

FIxed now?

from django-plans.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.