Example #1
0
    def test_dependency(self):

        event = Event.objects.get(pk=2)
        user = SUser.objects.get(pk=1)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.SADMIN, event)

        form = OptionGroupSelectionsFormSet({
            'option_2': 'checked',
            'option_3': 'checked'
        }, user=user)

        self.assertTrue(form.is_valid())
        self.assertTrue('option_2' in form[0].cleaned_data)
        self.assertTrue('option_3' in form[0].cleaned_data)

        # We should remove dependent selections automatically - even in sadmin scope

        form = OptionGroupSelectionsFormSet({
            'option_3': 'checked'
        }, user=user)

        self.assertTrue(form.is_valid())
        self.assertFalse(form[0].cleaned_data.get('option_2', False))
        self.assertFalse(form[0].cleaned_data.get('option_3', False))
Example #2
0
    def test_option_scope(self):

        event = Event.objects.filter(pk=2)
        user = SUser.objects.get(pk=1)

        # Tests visibility in the different edit scopes.
        # The event has one group and 9 options, one for each possible visibility bit

        # SCOPE: SADMIN - all visible

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.SADMIN, event)
        form = OptionGroupSelectionsFormSet(user=user)

        self.assertEqual(len(form), 1)
        self.assertEqual(len(form[0].fields), 9)

        # SCOPE: EDIT_MANAGE_WAITING - show in_scope_edit_manage_waiting and in_scope_view_manage (readonly)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_MANAGE_WAITING, event)
        form = OptionGroupSelectionsFormSet(user=user)

        self.assertEqual(len(form), 1)
        self.assertEqual(len(form[0].fields), 2)

        # SCOPE: EDIT_MANAGE_ACCEPTED

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_MANAGE_ACCEPTED, event)
        form = OptionGroupSelectionsFormSet(user=user)

        self.assertEqual(len(form), 1)
        self.assertEqual(len(form[0].fields), 2)

        # SCOPE: EDIT_MANAGE_ATTENDED

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_MANAGE_ATTENDED, event)
        form = OptionGroupSelectionsFormSet(user=user)

        self.assertEqual(len(form), 1)
        self.assertEqual(len(form[0].fields), 2)

        # SCOPE: EDIT_REGISTRATION

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_REGISTRATION, event)
        form = OptionGroupSelectionsFormSet(user=user)

        self.assertEqual(len(form), 1)
        self.assertEqual(len(form[0].fields), 2)
Example #3
0
def event_register(request,
                   event,
                   template='eventportal/event_register.html',
                   extra_context=None):

    # TODO This method should be merged with the nearly identical registration method in eventsingle

    if extra_context is None:
        extra_context = {}

    EventSelectionFormSet = dynamic_selections_formset_factory(
        SCOPE.EDIT_REGISTRATION,
        event,
        helper_factory=attendee_selection_helper_factory
    )

    if event.is_attendee(request.user):
        return HttpResponseRedirect(
            reverse('eventportal_event_status',
                    kwargs={'event_pk': event.pk}))

    if request.method == 'POST':
        options_form = EventSelectionFormSet(request.POST, user=request.user)

        if options_form.is_valid():

            attendee = Attend.objects.create(event=event, user=request.user, price=0)
            options_form.save(attendee=attendee)

            attendee.recalculate_price()

            attendee.event.send_notification_on_registration(attendee)

            # If the user has paid fully, and the event policy is to move paid members to the attended state, then do it
            if event.move_to_accepted_policy == AttendeeAcceptPolicy.on_payment and attendee.is_paid():
                attendee.state = AttendState.accepted
                attendee.save()

            messages.success(request, _(u'You are now registered for this event.'))

            attendee_updated_signal.send(event_register, attendee=attendee)

            return HttpResponseRedirect(
                reverse('eventportal_event', kwargs={'event_pk': event.pk}) + '?signup=1')

    else:
        options_form = EventSelectionFormSet(user=request.user)

    context = {
        'event': event,
        'formset': options_form,
    }
    context.update(extra_context)

    return render(request,
                  template,
                  context)
Example #4
0
    def test_required_checkbox_sadmin(self):

        event = Event.objects.get(pk=1)
        user = SUser.objects.get(pk=1)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.SADMIN, event)

        form = OptionGroupSelectionsFormSet({

        }, user=user)

        self.assertTrue(form.is_valid())
Example #5
0
    def test_dependency_required_dependency_dependency_selected(self):

        event = Event.objects.get(pk=3)
        user = SUser.objects.get(pk=1)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_REGISTRATION, event)

        # Fail if the dependency is checked, but the required child is not

        form = OptionGroupSelectionsFormSet({
            'option_4': 'checked'
        }, user=user)

        self.assertFalse(form.is_valid())
Example #6
0
    def test_dependency_required_dependency_none_selected(self):

        event = Event.objects.get(pk=3)
        user = SUser.objects.get(pk=1)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_REGISTRATION, event)

        # None selected, but still valid

        form = OptionGroupSelectionsFormSet({
        }, user=user)

        self.assertTrue(form.is_valid())
        self.assertFalse(form[0].cleaned_data.get('option_4', False))
        self.assertFalse(form[0].cleaned_data.get('option_5', False))
Example #7
0
    def test_dependency_required_dependency_not_selected(self):

        event = Event.objects.get(pk=3)
        user = SUser.objects.get(pk=1)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_REGISTRATION, event)

        # Dependency not selected, so both should be deselected

        form = OptionGroupSelectionsFormSet({
            'option_5': 'checked'
        }, user=user)

        self.assertTrue(form.is_valid())
        self.assertFalse(form[0].cleaned_data.get('option_4', False))
        self.assertFalse(form[0].cleaned_data.get('option_5', False))
Example #8
0
def event_status_update(request, event):

    attendee = Attend.objects.get(user=request.user, event=event)

    if attendee.state == AttendState.waiting:
        scope = SCOPE.EDIT_MANAGE_WAITING
    elif attendee.state == AttendState.accepted:
        scope = SCOPE.EDIT_MANAGE_ACCEPTED
    else:
        scope = SCOPE.EDIT_MANAGE_ATTENDED

    EventSelectionFormSet = dynamic_selections_formset_factory(
        scope,
        event,
        helper_factory=attendee_selection_helper_factory
    )

    if request.method == 'POST':

        form = EventSelectionFormSet(request.POST, user=request.user, attendee=attendee)

        if form.is_valid():
            form.save()
            attendee.recalculate_price()

            # If the user has paid fully, and the event policy is to move paid members to the attended state, then do it
            if event.move_to_accepted_policy == AttendeeAcceptPolicy.on_payment and attendee.is_paid():
                attendee.state = AttendState.accepted
                attendee.save()

            attendee.event.send_notification_on_registration_update(attendee)

            attendee_updated_signal.send(event_status_update, attendee=attendee)

            return HttpResponseRedirect(
                reverse('eventportal_event_status',
                        kwargs={'event_pk': event.id}))

    else:
        form = EventSelectionFormSet(user=request.user, attendee=attendee)

    return render(request,
                  'eventportal/status_update.html',
                  {
                      'event': event,
                      'formset': form
                  })
Example #9
0
    def test_required_checkbox(self):

        event = Event.objects.get(pk=1)
        user = SUser.objects.get(pk=1)

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_REGISTRATION, event)

        form = OptionGroupSelectionsFormSet({

        }, user=user)

        self.assertFalse(form.is_valid())

        form = OptionGroupSelectionsFormSet({
            'option_1': 'checked'
        }, user=user)

        self.assertTrue(form.is_valid())
Example #10
0
def event_attendee_selections(request, event_pk, attendee_pk):

    event = get_object_or_404(Event, pk=event_pk)
    attendee = get_object_or_404(event.attendees, pk=attendee_pk)

    DynamicSelectionsFormSet = dynamic_selections_formset_factory(
        SCOPE.SADMIN,
        event,
        helper_factory=attendee_selection_helper_factory
    )

    if request.method == 'POST':
        formset = DynamicSelectionsFormSet(request.POST, user=attendee.user, attendee=attendee)

        if formset.is_valid():

            formset.save()

            messages.success(request, 'Saved selections')

            attendee_updated_signal.send(event_attendee_selections, attendee=attendee)

            return HttpResponseRedirect(reverse('sadmin2:event_attendee', kwargs={'event_pk': event.pk,
                                                                                  'attendee_pk': attendee.pk}))
    else:
        formset = DynamicSelectionsFormSet(user=attendee.user, attendee=attendee)

    return render(request,
                  'sadmin2/event/attendee_selections.html',
                  {
                      'sadmin2_menu_main_active': 'events',
                      'sadmin2_breadcrumbs_active': 'event_attendees_attendee_selections',
                      'sadmin2_menu_tab': menu.sadmin2_menu_tab_attendee,
                      'sadmin2_menu_tab_active': 'selections',

                      'event': event,
                      'attendee': attendee,

                      'formset': formset
                  })
Example #11
0
    def test_maximum_selected(self):

        event = Event.objects.get(pk=2)
        user = SUser.objects.get(pk=1)

        group = OptionGroup.objects.get(pk=2)
        group.maximum_selected = 1
        group.save()

        OptionGroupSelectionsFormSet = dynamic_selections_formset_factory(SCOPE.EDIT_REGISTRATION, event)

        form = OptionGroupSelectionsFormSet({
            'option_2': 'checked',
            'option_3': 'checked'
        }, user=user)

        self.assertFalse(form.is_valid())

        form = OptionGroupSelectionsFormSet({
            'option_2': 'checked'
        }, user=user)

        self.assertTrue(form.is_valid())
Example #12
0
def step2(request,
          event,
          template=None):

    # TODO This method should be merged with the nearly identical registration method in eventportal

    step, edit_profile, edit_selections = _get_step(request, event.pk)

    if step < 2:
        # we have not arrived at this step yet
        return HttpResponseRedirect(
            reverse('eventsingle_steps', kwargs={'event_pk': event.pk})
        )

    try:
        attendee = Attend.objects.get(event=event, user=request.user)
        instance_kwargs = {
            'instance': attendee,
            'user': request.user
        }

        if attendee.state == AttendState.waiting:
            scope = SCOPE.EDIT_MANAGE_WAITING
        elif attendee.state == AttendState.accepted:
            scope = SCOPE.EDIT_MANAGE_ACCEPTED
        else:
            scope = SCOPE.EDIT_MANAGE_ATTENDED

    except Attend.DoesNotExist:
        attendee = None
        instance_kwargs = {
            'user': request.user
        }

        scope = SCOPE.EDIT_REGISTRATION

    EventSelectionFormSet = dynamic_selections_formset_factory(
        scope,
        event,
        helper_factory=frontend_selection_helper_factory
    )

    if request.method == 'POST' and \
        (('quick_register' in request.POST and EventSelectionFormSet.is_empty()) or
            'quick_register' not in request.POST):

        options_form = EventSelectionFormSet(request.POST, **instance_kwargs)

        if options_form.is_valid():

            if attendee is None:
                attendee = Attend.objects.create(event=event, user=request.user, price=0)
            else:
                messages.success(request, _('Selections updated'))

            options_form.save(attendee=attendee)

            attendee.recalculate_price()

            # If the user has paid fully, and the event policy is to move paid members to the attended state, then do it
            if event.move_to_accepted_policy == AttendeeAcceptPolicy.on_payment and attendee.is_paid():
                attendee.state = AttendState.accepted
                attendee.save()

            if scope == SCOPE.EDIT_REGISTRATION:
                attendee.event.send_notification_on_registration(attendee)
            else:
                attendee.event.send_notification_on_registration_update(attendee)

            attendee_updated_signal.send(step2, attendee=attendee)

            return HttpResponseRedirect(
                reverse('eventsingle_steps', kwargs={'event_pk': event.pk})
            )

    else:
        options_form = EventSelectionFormSet(**instance_kwargs)

    return render(request,
                  template if template is not None else 'eventsingle/step2.html',
                  {
                      'formset': options_form,

                      'step': step,
                      'current_step': 2,
                      'can_edit_profile': edit_profile,
                      'can_edit_selections': edit_selections,
                      'edit_mode': step > 2
                  })