def handle(self, *args, **options): groups = Group.objects.all() for group in groups: subject = 'Statistics for group "%s"' % group.name body = [] body.append('These are the member statistics for the group "%s"' % group.name) body.append('Member count: %d' % group.members.count()) sys.stdout.write('Sending member statistics for group \'%s\'...' % group.techname) quick_mail(group.email, subject, '\n'.join(body)) sys.stdout.write(' done\n')
def register_member(self, reg): random_string = generate_random_string() while Member.objects.filter(temporary_web_id=random_string).count() > 0: # Preventing duplication errors random_string = generate_random_string() # Make the 'added' date timezone-aware. added_date = datetime.strptime(reg['date'], '%Y-%m-%d %H:%M:%S') # Create and configure member member = Member() member.added = pytz.timezone(settings.TIME_ZONE).localize(added_date) member.ssn = reg['ssn'] member.name = reg['name'] member.email = reg['email'] merge_national_registry_info(member, reg['national'], timezone.now()) member.temporary_web_id = random_string member.temporary_web_id_timing = timezone.now() # Save member to database stdout.write('* Registering member...') stdout.flush() member.save() stdout.write(' done\n') self.process_groups(reg, member) # Send confirmation message message = InteractiveMessage.objects.get(interactive_type='registration_received', active=True) body = message.produce_links(member.temporary_web_id) # Save the start of the delivery attempt delivery = InteractiveMessageDelivery() delivery.interactive_message = message delivery.member = member delivery.email = member.email delivery.timing_start = timezone.now() delivery.save() # Actually send the message stdout.write('* Sending confirmation email...') stdout.flush() quick_mail(member.email, message.subject, body) stdout.write(' done\n') # Update the delivery delivery.timing_end = timezone.now() delivery.save()
def notify_name_mismatch(self, reg): stdout.write('* Notifying admins...') stdout.flush() admins = User.objects.filter(is_staff=True) for admin in admins: body = 'The following registration contains a name inconsistency.\n' body += 'Name given by user: %s\n' % reg['name'] body += 'Name found in national database: %s\n' % reg['national']['name'] body += '\n' body += 'SSN: %s\n' % reg['ssn'] body += '\n' body += 'The member was still registered as usual.\n' body += 'If no further action is needed, ignore this message.\n' body += 'Otherwise, act as considered appropriate.\n' quick_mail(admin.email, u'Registration name inconsistent', body) stdout.write(' done\n')
def _process_message(self, message): stdout.write( "Starting processing of message with ID %d\n" % message.id) recipients = self._get_message_recipients(message) recipient_count = len(recipients) for i, recipient in enumerate(recipients): try: stdout.write( "- (%d/%d) Mailing message with ID %d to %s..." % ( i+1, recipient_count, message.id, recipient.email)) # Note: This may have the side effect of setting the # recipient's temporary_web_id attribute. body, html_body = message.get_bodies(recipient) stdout.write('.') delivery = MessageDelivery() delivery.member = recipient delivery.message = message delivery.save() stdout.write('.') quick_mail( to=recipient.email, subject=message.subject, body=body, html_body=html_body, from_email=message.from_address, subject_prefix=None) stdout.write('.') delivery.timing_end = timezone.now() delivery.save() stdout.write(" done.\n") except: stdout.write(" FAILED!\n") traceback.print_exc(file=sys.stderr) time.sleep(10) message.sending_complete = timezone.now() message.save()
def check_if_emails_differ(self, reg): member = Member.objects.get(ssn=reg['ssn']) stdout.write('- Checking if email addresses differ...') stdout.flush() if member.email.lower() != reg['email'].lower(): stdout.write(' yes\n') if self.recently_mailed_about(reg): stdout.write('* Already notified admins, ignoring.') stdout.flush() else: stdout.write('* Notifying admins...') stdout.flush() for admin in User.objects.filter(is_staff=True): body = 'IMPORTANT!\n' body += 'Someone who is already a member registered again, but they used a different email.\n' body += '\n' body += 'Please contact the member through both email addresses and resolve the issue.\n' body += '\n' body += 'Prior email address: %s\n' % member.email body += 'New email address: %s\n' % reg['email'] body += '\n' body += 'SSN: %s\n' % reg['ssn'] body += 'Name in registration: %s\n' % reg['name'] if reg['name'] != member.name: body += 'Name in database: %s\n' % member.name body += '\n' body += 'NOTE: The member has NOT been modified in the database. Please modify manually after investigating the matter.\n' quick_mail(admin.email, 'IMPORTANT! New email address in registration!', body) stdout.write(' done\n') return True else: stdout.write(' no\n') return False