Example #1
0
    def save_callback(payment):
        payment.note = 'Manual payment'
        payment.signee = request.user
        payment.attendee = attendee
        payment.user = attendee.user
        payment.save()

        attendee_updated_signal.send(event_attendee_selections, attendee=attendee)
Example #2
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 #3
0
def register_payments(request):

    if request.method == 'POST':
        formset = RegisterPaymentFormSet(request.POST)

        if formset.is_valid():

            for form in formset:
                if form.cleaned_data is None:
                    continue

                result = form.cleaned_data

                if 'attendee' not in result:
                    continue  # skip this form, it is empty

                attendee = result['attendee']

                Payment.objects.create(
                    user=attendee.user,
                    attendee=attendee,
                    amount=result['payment'],
                    signee=request.user
                )

                attendee.event.send_notification_on_payment(attendee)

                attendee_updated_signal.send(register_payments, attendee=attendee)

                url = reverse('sadmin2:event_attendee_payments',
                    kwargs={'event_pk': attendee.event.pk,
                            'attendee_pk': attendee.pk})

                if attendee.in_balance():
                    messages.success(request, _('<a href="%s">Payment for %s has been registered successfully.</a>') % (url, attendee.user.username))
                else:
                    messages.error(request, _('<a href="%s">Payment for %s has been registered successfully. Note, payment does not match the payment due (link).</a>') % (url, attendee.user.username))

            return HttpResponseRedirect(reverse('sadmin2:events_register_payments'))

    else:
        formset = RegisterPaymentFormSet()

    return render(request,
                  'sadmin2/generic/formset.html',
                  {
                      'sadmin2_menu_main_active': 'events',
                      'sadmin2_breadcrumbs_active': 'events_register_payments',
                      'sadmin2_menu_tab': menu.sadmin2_menu_tab_events,
                      'sadmin2_menu_tab_active': 'events_register_payments',

                      'formset': formset
                  })
Example #4
0
def event_attendee(request, event_pk, attendee_pk):

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

    comments = attendee.comments.filter(check_in_announce=True)
    selections = dynamic_selections(SCOPE.VIEW_SYSTEM_INVOICE, attendee)

    if request.method == 'POST':

        action = request.POST.get('action', '')

        if action == 'to-state-waiting':
            attendee.state = AttendState.waiting
            attendee.save()

        if action == 'to-state-accepted':
            attendee.state = AttendState.accepted
            attendee.save()

        if action == 'to-state-attended':
            attendee.state = AttendState.attended
            attendee.save()

        if action == 'pay':

            Payment.objects.create(
                user=attendee.user,
                attendee=attendee,
                amount=attendee.unpaid,
                note='Manual payment',
                signee=request.user
            )

            attendee_updated_signal.send(event_attendee, attendee=attendee)

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

    return render(request,
                  'sadmin2/event/attendee.html',
                  {
                      'sadmin2_menu_main_active': 'events',
                      'sadmin2_breadcrumbs_active': 'event_attendees_attendee',
                      'sadmin2_menu_tab': menu.sadmin2_menu_tab_attendee,
                      'sadmin2_menu_tab_active': 'registration',

                      'event': event,
                      'attendee': attendee,
                      'comments': comments,
                      'selections': selections
                  })
Example #5
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 #6
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 #7
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
                  })