Esempio n. 1
0
    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')
Esempio n. 4
0
    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