예제 #1
0
    def test_block_type_queryset_for_new_form(self):
        """
        Block_type choices should not include blocktypes for which the user
        already has an active block
        """
        available_block_type = mommy.make_recipe('booking.blocktype',
                                                 _quantity=5)
        self.assertEquals(BlockType.objects.all().count(), 6)
        formset = UserBlockFormSet(instance=self.user, user=self.user)
        form = formset.forms[-1]
        block_type_queryset = form.fields['block_type'].queryset
        self.assertEquals(block_type_queryset.count(), 5)
        self.assertFalse(self.block_type in block_type_queryset)

        # blocktypes of unpaid blocks which are otherwise active are also not
        # included in the choices
        self.block.paid = False
        self.block.save()
        formset = UserBlockFormSet(instance=self.user, user=self.user)
        form = formset.forms[-1]
        block_type_queryset = form.fields['block_type'].queryset
        self.assertEquals(block_type_queryset.count(), 5)
        self.assertFalse(self.block_type in block_type_queryset)
        # blocktypes of expired blocks are included in the choices
        self.block.start_date = timezone.now() - timedelta(100)
        self.block_type.duration = 2
        self.block_type.save()
        self.block.save()
        self.assertTrue(self.block.expired)
        formset = UserBlockFormSet(instance=self.user, user=self.user)
        form = formset.forms[-1]
        block_type_queryset = form.fields['block_type'].queryset
        self.assertEquals(block_type_queryset.count(), 6)
        self.assertIn(self.block_type, block_type_queryset)
예제 #2
0
 def test_additional_data_in_form(self):
     event_type = mommy.make_recipe('booking.event_type_OE')
     available_block_type = mommy.make_recipe('booking.blocktype',
                                              event_type=event_type)
     formset = UserBlockFormSet(data=self.formset_data(),
                                instance=self.user,
                                user=self.user)
     form = formset.forms[0]
     self.assertTrue(form.can_buy_block)
     self.assertEquals(form.paid_id, 'paid_0')
예제 #3
0
    def test_delete_checkbox(self):
        """
        Delete checkbox should be active only for unpaid blocks, unused free
        blocks or unused transfer blocks
        """
        unpaid = mommy.make_recipe('booking.block', user=self.user, paid=False)
        free_block_type = mommy.make_recipe('booking.free_blocktype')
        free = mommy.make('booking.block',
                          user=self.user,
                          paid=True,
                          block_type=free_block_type)
        free_used = mommy.make_recipe('booking.block',
                                      user=self.user,
                                      paid=True,
                                      block_type=free_block_type)
        mommy.make_recipe('booking.booking', user=self.user, block=free_used)
        transfer = mommy.make_recipe('booking.block',
                                     user=self.user,
                                     paid=True,
                                     block_type__identifier='transferred')
        transfer_used = mommy.make_recipe('booking.block',
                                          user=self.user,
                                          paid=True,
                                          block_type__identifier='transferred')
        mommy.make_recipe('booking.booking',
                          user=self.user,
                          block=transfer_used)

        cannot_delete = [self.block, free_used, transfer_used]
        formset = UserBlockFormSet(instance=self.user, user=self.user)

        self.assertEqual(len(formset.forms), 7)  # 6 blocks plus new form

        for form in formset.forms[:-1]:
            disabled = form.fields['DELETE'].widget.attrs.get('disabled', None)
            if form.instance in cannot_delete:
                self.assertEqual(disabled, 'disabled')
            else:
                self.assertIsNone(disabled)
예제 #4
0
파일: users.py 프로젝트: judy2k/pipsevents
def user_blocks_view(request,  user_id):

    user = get_object_or_404(User,  id=user_id)
    if request.method == 'POST':
        userblockformset = UserBlockFormSet(
            request.POST, 
            instance=user, 
            user=user
        )
        if userblockformset.is_valid():
            if not userblockformset.has_changed():
                messages.info(request,  "No changes were made")
            else:
                for form in userblockformset:
                    if form.has_changed():

                        block = form.save(commit=False)

                        if 'DELETE' in form.changed_data:
                            messages.success(
                                request,  mark_safe(
                                    'Block <strong>{}</strong> has been '
                                    'deleted!  Any bookings made with this '
                                    'block have been changed to unpaid.  '
                                    'Please inform user {} ({})'.format(
                                        block,  block.user.username, 
                                        block.user.email
                                    )
                                )
                            )
                            ActivityLog.objects.create(
                                log='Block {} (id {}) deleted by admin user {}'.format(
                                form.instance,  form.instance.id,  request.user.username)
                            )
                            block.delete()
                        else:
                            new = False if form.instance.id else True
                            msg = 'created' if new else 'updated'

                            messages.success(
                                request, 
                                'Block for {} has been {}'.format(
                                    block.block_type.event_type,  msg
                                )
                            )
                            block.save()
                            ActivityLog.objects.create(
                                log='Block id {} ({}),  user {},  {}'
                                        ' by admin user {}'.format(
                                    block.id,  block.block_type, 
                                    block.user.username,  msg, 
                                    request.user.username
                                )
                            )

                userblockformset.save(commit=False)

            return HttpResponseRedirect(
                reverse('studioadmin:user_blocks_list', 
                        kwargs={'user_id': user.id}
                        )
            )
        else:
            messages.error(
                request, 
                mark_safe(
                    "There were errors in the following fields:\n{}".format(
                        '\n'.join(
                            ["{}".format(error) for error in userblockformset.errors]
                        )
                    )
                )
            )
    else:
        queryset = Block.objects.filter(
            user=user).order_by('-start_date')
        userblockformset = UserBlockFormSet(
            instance=user, 
            queryset=queryset, 
            user=user
        )

    template = 'studioadmin/user_block_list.html'
    return TemplateResponse(
        request,  template,  {
            'userblockformset': userblockformset,  'user': user, 
            'sidenav_selection': 'users'
        }
    )
예제 #5
0
 def test_form_valid(self):
     formset = UserBlockFormSet(
         data=self.formset_data(),
         initial=[{'user': self.user.id, 'block': self.block.id}]
     )
     self.assertTrue(formset.is_valid(), formset.errors)
예제 #6
0
파일: users.py 프로젝트: rebkwok/flexibeast
def block_bookings_view(request):

    userblocks = []
    for block in Block.objects.all():
        users = set([booking.user for booking in block.bookings.all()])
        [userblocks.append({'user': user.id, 'block': block.id}) for user in users]

    if request.method == 'POST':
        userblocksformset = UserBlockFormSet(request.POST, initial=userblocks)

        if userblocksformset.is_valid():
            if not userblocksformset.has_changed():
                # don't report this message if form is empty
                messages.info(request, 'No changes made')

            else:
                for form in userblocksformset:
                    if form.is_valid() and form.has_changed():
                        if form.changed_data == ['send_confirmation']:
                            messages.info(
                                request,
                                "'Send confirmation' checked for '{}' "
                               "but no changes were made; email has not "
                               "been sent to user." .format(
                                    form.instance.event
                                )
                            )
                        else:
                            block = form.cleaned_data['block']
                            user = form.cleaned_data['user']

                            if form.cleaned_data['DELETE']:
                                bookings = [
                                    bk for bk in user.bookings.all()
                                    if bk.block == block
                                    and bk.event.date > timezone.now()
                                    ]
                                for booking in bookings:
                                    was_full = booking.event.spaces_left() == 0
                                    booking.status = 'CANCELLED'
                                    booking.save()
                                    if was_full:
                                        _process_waiting_list(booking, request)

                                messages.success(
                                    request,
                                    mark_safe(
                                        'Remaining bookings in block {} have '
                                        'been cancelled for user {}: '
                                        '<ul>{}</ul>'.format(
                                            block.name, user.username,
                                            ''.join(['<li>{}</li>'.format(bk.event)
                                                 for bk in bookings])
                                            )
                                        )
                                    )
                                ActivityLog.objects.create(
                                    log='Block {} for user {} cancelled by admin'
                                        'user {} (booking ids {})'.format(
                                        block.name, user.username,
                                        request.user.username,
                                        ', '.join([str(bk.id) for bk in bookings])
                                    )
                                )
                                _process_block_confirmation_email(
                                    request, user, form, block, 'cancelled'
                                )
                            else:
                                for event in block.events.all():
                                    Booking.objects.create(
                                        event=event, user=user, block=block,
                                        paid=True, payment_confirmed=True
                                    )
                                    try:
                                        waiting_list_user = WaitingListUser.objects.get(
                                            user=user, event=event
                                        )
                                        waiting_list_user.delete()
                                        ActivityLog.objects.create(
                                            log='User {} has been removed '
                                                'from the waiting list for {}'
                                                .format(user.username, event)
                                            )
                                    except WaitingListUser.DoesNotExist:
                                        pass

                                messages.success(
                                    request,
                                    'Block {} booked for user {}. Bookings for '
                                    'classes in this block are marked as paid and'
                                    ' confirmed'.format(
                                        block.name, user.username
                                    )
                                )
                                ActivityLog.objects.create(
                                    log='Block {} booked for user {} by admin '
                                        'user {}'.format(
                                        block.name, user.username,
                                        request.user.username
                                        )
                                    )
                                _process_block_confirmation_email(
                                    request, user, form, block, 'created'
                                )
                    else:
                        for error in form.errors:
                            messages.error(request, mark_safe("{}".format(error)))
            return HttpResponseRedirect(reverse('studioadmin:block_bookings'))

        else:
            messages.error(
                request, mark_safe(
                    "There were errors in the following fields:\n{}".format(
                        '\n'.join(
                            ["{}".format(error) for error in
                             userblocksformset.errors]
                        )
                    )
                )
            )

    # initial data for UserBlockFormSet needs to be a list of dictionaries
    # with user and block info

    userblocksformset = UserBlockFormSet(initial=userblocks)

    return TemplateResponse(
        request,
        'studioadmin/block_bookings_list.html',
        {
            'userblocksformset': userblocksformset,
            'sidenav_selection': 'block_bookings'
        }
    )
예제 #7
0
 def test_form_valid(self):
     formset = UserBlockFormSet(data=self.formset_data(),
                                  instance=self.user,
                                  user=self.user)
     self.assertTrue(formset.is_valid(), formset.errors)
예제 #8
0
 def test_form_valid(self):
     formset = UserBlockFormSet(data=self.formset_data(),
                                instance=self.user,
                                user=self.user)
     self.assertTrue(formset.is_valid(), formset.errors)