コード例 #1
0
ファイル: test_cron.py プロジェクト: dougcole/sjfnw
    def test_completed(self):
        """ overdue step in two memberships (different members) """
        now = timezone.now()
        step = models.Step(donor_id=self.donor1,
                           date=now - timedelta(days=3),
                           completed=now)
        step.save()
        step = models.Step(donor_id=self.donor3,
                           date=now - timedelta(days=9),
                           completed=now)
        step.save()

        self.assertEqual(len(mail.outbox), 0)
        response = self.client.get(self.url, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 0)
コード例 #2
0
ファイル: test_cron.py プロジェクト: dougcole/sjfnw
    def test_same_member(self):
        """ overdue step in two memberships for same member """
        donor = models.Donor(membership_id=self.post_id, firstname='Other')
        donor.save()

        step = models.Step(donor_id=self.donor1,
                           date=timezone.now() - timedelta(days=3))
        step.save()
        step = models.Step(donor=donor,
                           date=timezone.now() - timedelta(days=9))
        step.save()

        self.assertEqual(len(mail.outbox), 0)
        response = self.client.get(self.url, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 2)
コード例 #3
0
ファイル: test_cron.py プロジェクト: dougcole/sjfnw
    def test_several_per_donor(self):
        """ Two overdue steps for one membership; expect only one email """

        step = models.Step(donor_id=self.donor1,
                           date=timezone.now() - timedelta(days=3))
        step.save()
        step = models.Step(donor_id=self.donor2,
                           date=timezone.now() - timedelta(days=9))
        step.save()

        self.assertEqual(len(mail.outbox), 0)
        response = self.client.get(self.url, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 1)

        membership = models.Membership.objects.get(pk=self.pre_id)
        self.assertEqual(membership.emailed.day,
                         datetime.today().day)  # stored in UTC
コード例 #4
0
ファイル: test_cron.py プロジェクト: dougcole/sjfnw
    def test_several(self):
        """ overdue step in two memberships (different members) """
        step = models.Step(donor_id=self.donor1,
                           date=timezone.now() - timedelta(days=3))
        step.save()
        step = models.Step(donor_id=self.donor3,
                           date=timezone.now() - timedelta(days=9))
        step.save()

        self.assertEqual(len(mail.outbox), 0)
        response = self.client.get(self.url, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 2)

        # doesn't send emails again
        response = self.client.get(self.url, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 2)
コード例 #5
0
def add_mult_step(request):
    initial_form_data = []  # list of dicts for form initial
    donor_list = []  # list of donors for zipping to formset
    size = 0
    membership = request.membership
    suggested = membership.giving_project.get_suggested_steps()

    for donor in membership.donor_set.order_by('-added'):
        if donor.received(
        ) == 0 and donor.promised is None and donor.get_next_step() is None:
            initial_form_data.append({'donor': donor})
            donor_list.append(donor)
            size = size + 1
        if size > 9:
            break

    step_formset = formset_factory(forms.MassStep, extra=0)

    if request.method == 'POST':
        membership.last_activity = timezone.now()
        membership.save(skip=True)
        formset = step_formset(request.POST)
        logger.debug('Multiple steps - posted: ' + str(request.POST))
        if formset.is_valid():
            logger.debug(
                'Multiple steps - is_valid passed, cycling through forms')
            for form in formset.cleaned_data:
                if form:
                    step = models.Step(donor=form['donor'],
                                       date=form['date'],
                                       description=form['description'])
                    step.save()
                    logger.info('Multiple steps - step created')
            return HttpResponse("success")
        else:
            logger.info('Multiple steps invalid')

    else:  # GET
        formset = step_formset(initial=initial_form_data)
        logger.debug('Multiple steps - loading initial formset, size %s', size)

    formset_with_donors = zip(formset, donor_list)

    return render(
        request, 'fund/forms/add_mult_step.html', {
            'size': size,
            'formset': formset,
            'fd': formset_with_donors,
            'multi': True,
            'suggested': suggested
        })
コード例 #6
0
    def setup_member(self, member):
        self.member_id = member.pk

        post_gp = models.GivingProject.objects.get(title="Post training")
        post_ship = models.Membership(giving_project=post_gp,
                                      member=member,
                                      approved=True)
        post_ship.save()

        if member.first_name == 'current':
            self.ship_id = post_ship.pk
            member.current = post_ship.pk
            member.save()

            # create donor & step
            donor = models.Donor(membership=post_ship,
                                 firstname='Anna',
                                 amount=500,
                                 talked=True,
                                 likelihood=50)
            donor.save()
            step = models.Step(donor=donor,
                               description='Talk to about project',
                               created=timezone.now(),
                               date='2013-04-06')
            step.save()
            self.donor_id = donor.pk
            self.step_id = step.pk

        elif member.first_name == 'new':
            self.post_id = post_ship.pk

            pre_gp = models.GivingProject.objects.get(title='Pre training')
            pre_ship = models.Membership(giving_project=pre_gp,
                                         member=member,
                                         approved=True)
            pre_ship.save()
            self.pre_id = self.ship_id = pre_ship.pk

            member.current = pre_ship.pk
            member.save()

        else:
            raise Exception('setup_member got unexpected name: {}'.format(
                member.first_name))
コード例 #7
0
    def test_basic(self):
        # membership with a few donors, some progress
        self.login_as_member('new')
        ship_id = self.post_id

        # first donor
        donor = models.Donor(membership_id=ship_id,
                             firstname='Alice',
                             amount=240,
                             likelihood=75,
                             talked=True)
        donor.save()
        step = models.Step(donor=donor,
                           date='2015-04-01',
                           description='Talk',
                           completed='2015-04-01')
        step.save()
        step = models.Step(donor=donor, date='2015-5-25', description='Ask')
        step.save()

        # second donor
        donor = models.Donor(membership_id=ship_id,
                             firstname='Bab',
                             talked=True,
                             amount=300,
                             likelihood=50,
                             asked=True,
                             promised=300,
                             received_this=100,
                             received_next=100)
        donor.save()
        step = models.Step(donor=donor,
                           date='2015-04-01',
                           description='Ask',
                           completed='2015-04-01',
                           asked=True)
        step.save()
        step = models.Step(donor=donor,
                           date='2015-04-08',
                           description='Follow upt',
                           completed='2015-04-08',
                           promised=300)
        step.save()
        step = models.Step(donor=donor, date='2015-5-25', description='Thank')
        step.save()

        donors = models.Donor.objects.filter(
            membership_id=ship_id).prefetch_related('step_set')

        progress, incomplete_steps = _compile_membership_progress(donors)

        self.assertIsInstance(progress, dict)
        self.assertEqual(progress['estimated'], 330)
        self.assertEqual(progress['contacts'], 2)
        self.assertEqual(progress['asked'], 1)
        self.assertEqual(progress['talked'], 1)
        self.assertEqual(progress['promised'], 100)
        self.assertEqual(progress['received'], 200)

        self.assertEqual(progress['contacts_remaining'], 0)
        self.assertEqual(progress['togo'], 30)

        self.assertEqual(len(incomplete_steps), 2)
        for donor in donors:
            self.assertIsInstance(donor.next_step, models.Step)
            self.assertIs(type(donor.completed_steps), list)
            self.assertTrue(len(donor.completed_steps) > 0)