示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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")
示例#4
0
    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()
示例#5
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
                  })
示例#6
0
    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)
示例#7
0
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)
示例#8
0
    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)
示例#9
0
    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