123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # -*- 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 django.db.models import Max
- 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)
- members = Member.objects.annotate(end_date_membership=Max(
- 'membership_fees__end_date')).filter(end_date_membership__in=call_dates)
- cpt = 0
- with respect_language(settings.LANGUAGE_CODE):
- for member in members:
- if member.send_call_for_membership_fees_email():
- self.stdout.write(
- 'Call for membership fees email was sent to %s' % member)
- cpt=cpt+1
- self.stdout.write('%d call for membership fees emails were sent' % cpt)
|