|
@@ -0,0 +1,48 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+from __future__ import unicode_literals
|
|
|
+
|
|
|
+import datetime
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
+from django.core.management.base import BaseCommand, CommandError
|
|
|
+from django.conf import settings
|
|
|
+
|
|
|
+from coin.utils import respect_language
|
|
|
+from coin.members.models import Member, MembershipFee
|
|
|
+
|
|
|
+class Command(BaseCommand):
|
|
|
+ args = '[date=2011-07-04]'
|
|
|
+ help = """Send a call for membership email to members.
|
|
|
+ A mail is sent when end date of membership
|
|
|
+ reach the anniversary date, 1 month before and once a month
|
|
|
+ for 3 months.
|
|
|
+ By default, today is used to compute relative dates, but a date
|
|
|
+ can be passed as argument."""
|
|
|
+
|
|
|
+ def handle(self, *args, **options):
|
|
|
+ try:
|
|
|
+ date = datetime.datetime.strptime(args[0], '%Y-%m-%d').date()
|
|
|
+ except IndexError:
|
|
|
+ date = datetime.date.today()
|
|
|
+ except ValueError:
|
|
|
+ raise CommandError(
|
|
|
+ 'Please enter a valid date : YYYY-mm-dd (ex: 2011-07-04)')
|
|
|
+
|
|
|
+ # Get membership_fees filtered by end date of membership at specific date relative to today
|
|
|
+ call_dates = [date + relativedelta(months=-3),
|
|
|
+ date + relativedelta(months=-2),
|
|
|
+ date + relativedelta(months=-1),
|
|
|
+ date,
|
|
|
+ date + relativedelta(months=+1)]
|
|
|
+
|
|
|
+ self.stdout.write(
|
|
|
+ 'Select membership fees for following end dates : %s' % call_dates)
|
|
|
+
|
|
|
+ fees = MembershipFee.objects.filter(end_date__in=call_dates)
|
|
|
+
|
|
|
+ with respect_language(settings.LANGUAGE_CODE):
|
|
|
+ for fee in fees:
|
|
|
+ # Don't send if member is paid up 1 month and 1 day after today.
|
|
|
+ if not fee.member.is_paid_up(date + relativedelta(months=+1, days=+1)):
|
|
|
+ self.stdout.write(
|
|
|
+ 'Send call for membership fees email to %s' % fee.member)
|
|
|
+ fee.member.send_call_for_membership_fees_email()
|