def test_saving_selections_to_existing_attendee(self): option_group = OptionGroup.objects.all()[0] attendee = Attend.objects.all()[0] OptionGroupSelectionsForm = dynamic_selections_form_factory(SCOPE.SADMIN, option_group) form = OptionGroupSelectionsForm({}, user=attendee.user, attendee=attendee) self.assertTrue(form.is_valid()) self.assertTrue(hasattr(form, 'cleaned_data')) form.save() for option, selected in dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee, option_group=option_group): self.assertFalse(selected) post = { _pack_id('option', 1): "1", _pack_id('option', 2): "1" } form = OptionGroupSelectionsForm(post, user=attendee.user, attendee=attendee) self.assertTrue(form.is_valid()) self.assertTrue(hasattr(form, 'cleaned_data')) self.assertTrue(form.cleaned_data[_pack_id('option', 1)]) self.assertTrue(form.cleaned_data[_pack_id('option', 2)]) form.save() for option, selected in dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee, option_group=option_group): self.assertTrue(selected)
def test_scopes(self): event = Event.objects.get(pk=1) attendee = Attend.objects.all()[0] self.assertEqual(len(dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee)), 4) self.assertEqual(len(dynamic_selections(SCOPE.EDIT_REGISTRATION, attendee)), 4)
def test_text_option_type(self): option_group = OptionGroup.objects.get(pk=2) attendee = Attend.objects.get(pk=2) post = { _pack_id("option", 3): "some text", } OptionGroupSelectionsForm = dynamic_selections_form_factory(SCOPE.SADMIN, option_group) form = OptionGroupSelectionsForm(post, user=attendee.user, attendee=attendee) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data[_pack_id('option', 3)], "some text") form.save() selections = dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee, option_group=option_group, as_dict=True) option, selection = selections[3] self.assertIsNotNone(selection) self.assertEqual(selection.text, "some text")
def handle(self, event_pk=None, target_file=None, **kwargs): from selvbetjening.core.events.models import Event from selvbetjening.core.events.models import Attend from selvbetjening.core.events.models import AttendState from selvbetjening.core.events.options.dynamic_selections import dynamic_options, dynamic_selections from selvbetjening.core.events.options.scope import SCOPE if event_pk is None: print 'Select an event pk:' for event in Event.objects.all(): print '%s (pk=%s)' % (event, event.pk) return fp = codecs.open(target_file, 'w', 'utf-8') event = Event.objects.get(pk=int(event_pk)) attendees = Attend.objects.filter(event=event).select_related().prefetch_related('selection_set') partial = [ 'checked_in', 'pk', 'username', 'name', 'email', 'price', 'paid' ] for option, selection in dynamic_options(SCOPE.VIEW_SYSTEM_INVOICE, event): partial.append(option.name) fp.write(u','.join(partial)) fp.write('\n') for attendee in attendees: if attendee.state == AttendState.attended: attended = 'x' elif attendee.state == AttendState.accepted: attended = '' else: attended = '!!!' partial = [ attended, str(attendee.pk), attendee.user.username, '%s %s' % (attendee.user.first_name, attendee.user.last_name), attendee.user.email, str(attendee.price), str(attendee.paid), ] for option, selection in dynamic_selections(SCOPE.VIEW_SYSTEM_INVOICE, attendee): partial.append('x' if selection is not None else '') fp.write(u','.join(partial)) fp.write('\n') fp.close()
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 test_delete_existing_selections(self): option_group = OptionGroup.objects.all()[0] attendee = Attend.objects.get(pk=2) for option, selection in dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee, option_group=option_group): self.assertIsNotNone(selection) OptionGroupSelectionsForm = dynamic_selections_form_factory(SCOPE.SADMIN, option_group) form = OptionGroupSelectionsForm({}, user=attendee.user) self.assertTrue(form.is_valid()) self.assertTrue(hasattr(form, 'cleaned_data')) self.assertFalse(form.cleaned_data[_pack_id('option', 1)]) self.assertFalse(form.cleaned_data[_pack_id('option', 2)]) form.save(attendee=attendee) for option, selected in dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee, option_group=option_group): self.assertFalse(selected)
def generic_event_status(request, event, template_name, extra_context=None): if extra_context is None: extra_context = {} attendee = Attend.objects.get(user=request.user, event=event) context = { 'event': event, 'user': attendee.user, 'attendee': attendee, 'invoice': dynamic_selections(SCOPE.VIEW_USER_INVOICE, attendee) } context = Context(context) # status text custom_status_page = None if event.show_custom_status_page: template = Template(event.custom_status_page) custom_status_page = template.render(context) custom_signup_message = None if event.show_custom_signup_message and request.GET.get('signup', False): template = Template(event.custom_signup_message) custom_signup_message = template.render(context) custom_change_message = None if event.show_custom_change_message and request.GET.get('change', False): template = Template(event.custom_change_message) custom_change_message = template.render(context) context['custom_status_page'] = custom_status_page context['custom_signup_message'] = custom_signup_message context['custom_change_message'] = custom_change_message context['show_signup_message'] = request.GET.get('signup', False) context['show_change_message'] = request.GET.get('change', False) context.update(extra_context) return render(request, template_name, context)
def test_ordering(self): event = Event.objects.get(pk=1) attendee = Attend.objects.get(pk=1) selections = dynamic_selections(SCOPE.VIEW_REGISTRATION, attendee) # correct ordering # option group 1 # option 1 # option 2 # option group 2 # option 3 # option 4 self.assertEqual(selections[0][0].group.pk, 1) self.assertEqual(selections[0][0].pk, 1) self.assertEqual(selections[1][0].pk, 2) self.assertEqual(selections[2][0].group.pk, 2) self.assertEqual(selections[2][0].pk, 3) self.assertEqual(selections[3][0].pk, 4)
def _get_context(self, user, attendee=None): # lazy import, prevent circular import in core.events from selvbetjening.core.events.options.dynamic_selections import SCOPE, dynamic_selections context = { # user context 'username': user.username, 'full_name': ('%s %s' % (user.first_name, user.last_name)).strip(), 'email': user.email } if attendee is not None: invoice = dynamic_selections(SCOPE.VIEW_USER_INVOICE, attendee) invoice_html = loader.render_to_string('events/parts/invoice.html', { 'attendee': attendee, 'invoice': invoice }) invoice_text = loader.render_to_string('events/parts/invoice_text.html', { 'attendee': attendee, 'invoice': invoice }) context.update({ # attendee.event context 'event_title': attendee.event.title, 'attendee': attendee, 'invoice_plain': invoice_text, 'invoice_html': invoice_html, }) for option, selection in invoice: context['selected_%s' % option.pk] = selection is not None return context