Skip to Content Skip to Menu

Handling "A La Carte" Plan Upgrades/Changes with CBSubs Options & Family Plans

7 hours 55 minutes ago #343493 by okp-medezide
Hi everyone,We are building a sophisticated B2B subscription model using CBSubs Options, CBSubs Family Plans, and CBSubs CB Fields. While the initial registration works, we are hitting a wall regarding how to handle mid-term changes (upgrades/downgrades) to our "A La Carte" plan.Our Current Setup:We have a single "Custom Plan" where the price is driven entirely by user selection:
  • Duration & Renewal: We currently exclusively offer 1-year memberships. The plan is configured to allow renewals 30 days before expiration.
  • Dynamic Categories: Users select multiple categories via checkboxes. These are mapped to a custom field
    Code:
    cb_category_access
    using CBSubs CB Fields. We use this field for custom ACL overrides to show/hide content.
  • Additional Licenses (B2B): Users select a number of additional seats. This integer is pushed to custom field 
    Code:
    cb_amountofadditionallicenses
    , which powers CBSubs Family Plans to allow the buyer to manage B2B license-sharing.
  • Pricing: The base plan is 0€, and all value is added via the checkboxes (fixed costs) and the seat counter (multiplicative:
    Code:
    *[value]
    ).
The Challenge: Mid-Term Option ChangesWe want users to be able to log in to "My Account" at any point during their year-long subscription and add/remove categories or seats. We are currently facing a "catch-22" with the CBSubs Options display settings:
  • Scenario A: If we set "Require Options Change Renewal" to Yes, the "Change Options" button disappears from the user's active subscription view unless they are within that 30-day renewal window. This forces them to wait until the end of the year to make any changes.
  • Scenario B: If we set it to No, the user can change their options mid-term, but the system does not trigger a payment for the added features. It simply updates the database/user fields, effectively giving them the extra categories/seats for free for the remainder of the term.
What we need to achieve:We need a way for the user to "upgrade" their existing subscription to the same plan ID but with new options selected. Ideally, the system should:
  1. Calculate the price difference between the current selection and the new selection.
  2. Apply pro-rating based on the remaining time in the current 1-year cycle.
  3. Generate an invoice for the difference without creating a duplicate subscription or extending the expiration date (unless they are in the renewal window).
We plan to expand into Monthly and Quarterly options soon, so a scalable solution is vital.Our Questions:
  1. Is there a specific configuration in the Pricing or Workflows tabs that allows a "Self-Upgrade" (Upgrading to the same plan with different options) to trigger a pro-rated invoice mid-term?
  2. We considered "Campaign Codes" as a manual workaround for re-subscriptions, but this is not sustainable for a self-service UX.
  3. Is our "All-in-one" plan approach the best way to handle an "A La Carte" model, or is there a better architectural pattern in CBSubs for this?
We would appreciate any advice or suggestions for building the custom plan / A la carte option, as it has been a big challenge.
Attachments:

Please Log in or Create an account to join the conversation.

  • krileon
  • krileon
  • ONLINE
  • Posts: 50237
  • Thanks: 8598
  • Karma: 1470
3 hours 26 minutes ago #343496 by krileon
There is currently no way to do a mid-term options change without doing a renewal or first cancelling then resubscribing. There are plans to eventually allow for a partial payment to upgrade to the new options selection, but that's not available yet. The feature to change options without a renewal simply changes the options then will apply those options at next renewal, but in the future that will be the partial payment feature.

The only way I can think of to escape this requirement is basically break your options out into a dozen different plans so they can mix and match them as they please whenever they please, but that brings a set of its own potential usability issues. Additional seats for example would need to stop being a free standing integer and instead be static amounts.


Kyle (Krileon)
Community Builder Team Member
Before posting on forums: Read FAQ thoroughly + Read our Documentation + Search the forums
CB links: Documentation - Localization - CB Quickstart - CB Paid Subscriptions - Add-Ons - Forge
--
If you are a Professional, Developer, or CB Paid Subscriptions subscriber and have a support issue please always post in your respective support forums for best results!
--
If I've missed your support post with a delay of 3 days or greater and are a Professional, Developer, or CBSubs subscriber please send me a private message with your thread and will reply when possible!
--
Please note I am available Monday - Friday from 8:00 AM CST to 4:00 PM CST. I am away on weekends (Saturday and Sunday) and if I've missed your post on or before a weekend after business hours please wait for the next following business day (Monday) and will get to your issue as soon as possible, thank you.
--
My role here is to provide guidance and assistance. I cannot provide custom code for each custom requirement. Please do not inquire me about custom development.

Please Log in or Create an account to join the conversation.

Moderators: beatnantkrileon
Powered by Kunena Forum