Fixed expiration date on membership setting

14 replies [Last post]
bkbetts
Offline
Joined: 03/29/2010
Status: 
Answered

I would like to suggest a feature to allow memberships to always expire at a certain date, kind of relative to the start date.

My client currently handles memberships as such:

User signs up, say, in April 2010.
In November 2010, a staff person from my client's organization contacts the user and reminds them to send their membership dues for 2011.
If user never responds, their membership expires Dec 31, 2010.
If user sends a payment, their membership is renewed and expires Dec 31, 2011.
If a user signs up for a membership late in the year, say, November 2010, then their membership will be considered as paid for the following year, and expires on Dec 31, 2011.

I imagine the membership edit plan admin form being modified to display as follows:

-> Period Settings
-> Expiration Settings
( ) Relative expiration date: (default Membership Suite behavior, whatever it should be named)
Membership Length (select list): [Never Expire, 1, 2, ...]
Unit (select list): [Days, ..., Years]

( ) Fixed expiration date: (again, whatever makes sense to name this)
Date Spec (select list): [First of, End of, Day N of]
Unit (select list): [Day, Month, Year]

So in my case, I'd select Fixed expiration date, then select 'End of', then select 'Year'. This would be relative to the membership sign up date. When the user signs up, say, in June 2010, their membership end date gets set, relatively, and according to this membership's plan settings, to Dec 31, 2010 (end of year, referencing sign-up date of June 2010).

Of course, if the user registers in November of 2010, the staff will still get the "user ____ has purchased new membership" email, and it would be nice if the staff could go in and change that particular user's expiration date manually. The next time the user pays for the membership, the membership gets the current year that the user signs up, and the expiration date gets set to the end of that year.

Thoughts?

Leighton Whiting
Offline
Joined: 06/02/2009
Bkbetts, I've given this

Bkbetts,
I've given this scenario some thought in the past as well, and I think that if the 'fixed expiration date' functionality is to work, we will also need to provide support for pro-rated costs of membership, so if they user purchases half-way through a cycle, they will only have to pay half the price.

In order to calculate the pro-rated amount, there will need to be a 'fixed start date' as well so that it can calculate the prorated amount as (end - current)/(end - start). There are a lot of things to consider when trying to implement functionality like this...

Sincerely,
Leighton Whiting

bkbetts
Offline
Joined: 03/29/2010
Agreed. I don't know that

Agreed.

I don't know that this would be a popular feature anyway. I just know in my situation, my client wants the memberships to be defined as such, so I'll probably make myself a patch to implement this and apply it when things get upgraded.

Thanks!

bkbetts
Offline
Joined: 03/29/2010
Leighton, Because of your

Leighton,

Because of your ms_membership API design, I think this change should be pretty easy. I was just looking at the code today, and although I haven't looked at everything, here is my basic strategy to make the changes:

1) Add an optional expiration argument to ms_membership_insert_new_membership().
2) Add a conditional for ms_membership_insert_new_membership() to set either the expiration from argument or by lookup using ms_membership_get_expiration_date().
3) Add extra form fields for "fixed expiration" to membership admin form. This would require adding extra database fields for the additional form values. I'd assume a module .install file update function would handle this. I think only ms_membership.install would need the extra fields, but I have to look at the orders and other stuff.
4) Possibly add extra form fields for "fixed expiration" to manual membership assignment.

I was relieved to see a per-user expiration value stored in the database. It makes this feature easier to implement.

As for prorating, I don't need it. It would need more admin form additions too. I would have to add or modify existing db schema as well. I could probably add prorating in, but I am not sure how it should work. Should it be a percentage-based or fixed-amount-based?

For example, if percentage-based, I would think if someone signed up in June (month 6), then that's only 6/12 (e.g., reduced to a 1/2 membership term), which would be 50% off of the full year's membership price. If I were to use prorating, I would probably use this type. It also requires the least schema modification, as it can be calculated.

Otherwise, maybe someone shouldn't be allowed to get that much off, then a fixed prorate amount would be, say, $50 at most, off of the full membership price, no matter when the user signed up for the year membership. I would not prefer this type.

A prorate could also work on what I would call a fixed table. So 1/2 through the membership, they get $50 off, 3/4 of the way through the membership, the user gets $150 off. The prices wouldn't have to be linear, just something to encourage someone to get a membership no matter how far into the membership timeline the user wants to sign up. I would not prefer this type.

EDIT:
It seems there is information stored in the Drupal users table in the data field that is referenced from ms_memberships. Such fields as ms_membership_start_date and ms_membership_expiration that confuse me as I thought similar information was already stored in the ms_memberships table. I have a bit more research to do. :)

vector84
Offline
Joined: 04/01/2010
Prior to v6.8 there was a

Prior to v6.8 there was a great deal of extraneous data that ended up in the users table in the data field...

Most of it gets cleaned up in 6.8 when additions or updates are made to the users table via the appropriate forms, but I don't think there was an Update routine to remove the extraneous data, so some of it may still be lingering.

Not sure if this is precisely related to the extra information you are seeing there, but it very well may be.

The vast majority of it wasn't particularly harmful, just stuff leftover from not cleaning up the forms after they've been processed - the only place I found where it causing trouble was in the Affiliates module, but I'm pretty sure that's all fixed.

bkbetts
Offline
Joined: 03/29/2010
That clears things up.

That clears things up. Thanks!

Luckily, I have convinced the client to take advantage of the way the MS Membership Suite system currently works. Once they realized how much easier it was having the system do things instead of the original, manual way, they agreed to switch their membership setup.

daniz
Offline
Joined: 09/10/2010
I'd need the fixed expiration date too

Hi Leighton and thanks for your module.

I was searching for a "fixed expiration date" feature and i found this topic.

My client needs membership expiration to be the end of the year (31/12) whahtever the start date, and he doesn't care about pro-rating at all.

I'd need something like the feature "Ability to set the start and expiration date import fields when using the User Import module" available in 6.12, but directly in membership settings.

Is it possible to achieve somehow?

Regards

Daniele

dthiessen
Offline
Joined: 07/09/2010
I also agree that this

I also agree that this feature would be really nice. Pro-rated memberships would be a bonus but I could live without it as well. Right now I manually change all the memberships to expire on a certain date after people sign up. Having a fixed expiration date would make things a lot simpler.

Leighton Whiting
Offline
Joined: 06/02/2009
I agree that this would be a

I agree that this would be a good feature to add. I've added this to the feature requests list.

Sincerely,
Leighton Whiting

Bob Newby
Offline
Joined: 10/26/2010
Fixed expiration date a HIGH priority for my site

Hi Leighton,

Having installed and explored your fabulous product today, I can say this is the one missing feature I need as soon as possible. Preferably yesterday, to be honest... :)

My site is in a soft-launch period, through the end of 2010. During this fixed period, users can sign up for one of two membership levels at no cost for 2010. After this, they will need to purchase a recurring paid membership at one or the other level. It will be extremely helpful to me if I can establish free trials that all have a common fixed expiration date of either this 31 December or January 1, regardless of when the trial was initiated.

Is this coming in the very near term? I hope so.

(I will email you offline regarding CyberSource gateway support. It is of interest to me.)

Thank you and best regards,

Bob

Founder, LuthierBuilt.net

Leighton Whiting
Offline
Joined: 06/02/2009
Bob, This actually is going

Bob,
This actually is going to be possible with the next release of the module, using Rules. I have created a tutorial here that illustrates the process with screenshots: http://www.moneyscripts.net/tutorials/membership-suite/creating-fixed-ex...

The new version will be released tomorrow.

Sincerely,
Leighton Whiting

Bob Newby
Offline
Joined: 10/26/2010
This appears to be exactly

This appears to be exactly what I was looking for.

Thanks,

Bob

Abilnet
Offline
Joined: 12/07/2009
Thank you so much Leighton!

Thank you so much Leighton!

Tamela
Offline
Joined: 11/30/2011
Fixed Date Memberships - Annually

 

I posted this on the comments under the Rules tutorial, then realized that might not be the right place to post it if I wanted help/feedback.  So here it is again.  Many apologies about the duplication.

 

Hi,

So I'm guessing that the Rules instruction above is for Drupal 7 because my Rules is not organized that way.  I'm on Drupal 6.  I think I've figured out how to do it in 6, but instructions would be great.

 

I'm having one problem.  Setting this up with rules would require that someone change the date in rules every year.  My client is is no way capable of doing that.  Unfortunately, she is one of my last clients, because I will be going into a different business.

 

How can I set it up to annually adjust?  I tried to create a triggered rule that was specific by date.  

For example:

If payment or membership in 2012

then expire Dec. 31 2012

 

I'd just create 10 or so of those, from 2011 - 2021.

If payment or membership in 2013

then expire Dec. 31 2013

ETC.

But I can't find a way to select the payment or memberships by year.

 

Any suggestions?

Tamela

 

Leighton Whiting
Offline
Joined: 06/02/2009
Tamela, You would need to use

Tamela,

You would need to use PHP code for something like that. I suggest making a custom module that implements a hook to manually set the expiration date, similar to what you are doing in Rules. This would allow you to have more flexibility. If you want to try that, I can help you with the code. Let me know.

-Leighton

Twitter Feed