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)
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)
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 })
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 })
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 })
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 })
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 })