Exemplo n.º 1
0
 class Meta:
     model = Event
     localized_fields = '__all__'
     fields = [
         'name',
         'slug',
         'currency',
         'date_from',
         'date_to',
         'date_admission',
         'is_public',
         'presale_start',
         'presale_end',
         'location',
     ]
     field_classes = {
         'date_from': SplitDateTimeField,
         'date_to': SplitDateTimeField,
         'date_admission': SplitDateTimeField,
         'presale_start': SplitDateTimeField,
         'presale_end': SplitDateTimeField,
     }
     widgets = {
         'date_from': SplitDateTimePickerWidget(),
         'date_to': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_date_from_0'}),
         'date_admission': SplitDateTimePickerWidget(attrs={'data-date-default': '#id_date_from_0'}),
         'presale_start': SplitDateTimePickerWidget(),
         'presale_end': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_presale_start_0'}),
     }
Exemplo n.º 2
0
 class Meta:
     model = Event
     fields = [
         'name',
         'slug',
         'currency',
         'date_from',
         'date_to',
         'presale_start',
         'presale_end',
         'location',
     ]
     field_classes = {
         'date_from': forms.SplitDateTimeField,
         'date_to': forms.SplitDateTimeField,
         'presale_start': forms.SplitDateTimeField,
         'presale_end': forms.SplitDateTimeField,
     }
     widgets = {
         'date_from':
         SplitDateTimePickerWidget(),
         'date_to':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_basics-date_from_0'}),
         'presale_start':
         SplitDateTimePickerWidget(),
         'presale_end':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_basics-presale_start_0'}),
         'slug':
         SlugWidget,
     }
Exemplo n.º 3
0
 class Meta:
     model = SubEvent
     localized_fields = '__all__'
     fields = [
         'name', 'active', 'date_from', 'date_to', 'date_admission',
         'presale_start', 'presale_end', 'location', 'frontpage_text'
     ]
     field_classes = {
         'date_from': forms.SplitDateTimeField,
         'date_to': forms.SplitDateTimeField,
         'date_admission': forms.SplitDateTimeField,
         'presale_start': forms.SplitDateTimeField,
         'presale_end': forms.SplitDateTimeField,
     }
     widgets = {
         'date_from':
         SplitDateTimePickerWidget(),
         'date_to':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_date_from_0'}),
         'date_admission':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_date_from_0'}),
         'presale_start':
         SplitDateTimePickerWidget(),
         'presale_end':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_presale_start_0'}),
     }
Exemplo n.º 4
0
 class Meta:
     model = Item
     localized_fields = '__all__'
     fields = [
         'category', 'name', 'internal_name', 'active', 'sales_channels',
         'admission', 'description', 'picture', 'default_price',
         'free_price', 'tax_rule', 'available_from', 'available_until',
         'require_voucher', 'require_approval', 'hide_without_voucher',
         'allow_cancel', 'max_per_order', 'min_per_order',
         'checkin_attention', 'generate_tickets', 'original_price',
         'require_bundling', 'show_quota_left'
     ]
     field_classes = {
         'available_from': SplitDateTimeField,
         'available_until': SplitDateTimeField,
     }
     widgets = {
         'available_from':
         SplitDateTimePickerWidget(),
         'available_until':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_available_from_0'}),
         'generate_tickets':
         TicketNullBooleanSelect(),
         'show_quota_left':
         ShowQuotaNullBooleanSelect()
     }
Exemplo n.º 5
0
 class Meta:
     model = ItemVariation
     localized_fields = '__all__'
     fields = [
         'value',
         'active',
         'default_price',
         'original_price',
         'description',
         'require_membership',
         'require_membership_types',
         'available_from',
         'available_until',
         'sales_channels',
         'hide_without_voucher',
     ]
     field_classes = {
         'available_from': SplitDateTimeField,
         'available_until': SplitDateTimeField,
     }
     widgets = {
         'available_from':
         SplitDateTimePickerWidget(),
         'available_until':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_available_from_0'}),
         'require_membership_types':
         forms.CheckboxSelectMultiple(
             attrs={'class': 'scrolling-multiple-choice'}),
     }
Exemplo n.º 6
0
Arquivo: item.py Projeto: oocf/pretix
 class Meta:
     model = Item
     localized_fields = '__all__'
     fields = [
         'category',
         'name',
         'internal_name',
         'active',
         'admission',
         'description',
         'picture',
         'default_price',
         'free_price',
         'tax_rule',
         'available_from',
         'available_until',
         'require_voucher',
         'require_approval',
         'hide_without_voucher',
         'allow_cancel',
         'max_per_order',
         'min_per_order',
         'checkin_attention',
         'original_price'
     ]
     field_classes = {
         'available_from': forms.SplitDateTimeField,
         'available_until': forms.SplitDateTimeField,
     }
     widgets = {
         'available_from': SplitDateTimePickerWidget(),
         'available_until': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_available_from_0'}),
     }
Exemplo n.º 7
0
 class Meta:
     model = Item
     localized_fields = '__all__'
     fields = [
         'category',
         'name',
         'internal_name',
         'active',
         'sales_channels',
         'admission',
         'description',
         'picture',
         'default_price',
         'free_price',
         'tax_rule',
         'available_from',
         'available_until',
         'require_voucher',
         'require_approval',
         'hide_without_voucher',
         'allow_cancel',
         'allow_waitinglist',
         'max_per_order',
         'min_per_order',
         'checkin_attention',
         'generate_tickets',
         'original_price',
         'require_bundling',
         'show_quota_left',
         'hidden_if_available',
         'issue_giftcard',
         'require_membership',
         'require_membership_types',
         'require_membership_hidden',
         'grant_membership_type',
         'grant_membership_duration_like_event',
         'grant_membership_duration_days',
         'grant_membership_duration_months',
     ]
     field_classes = {
         'available_from': SplitDateTimeField,
         'available_until': SplitDateTimeField,
         'hidden_if_available': SafeModelChoiceField,
         'grant_membership_type': SafeModelChoiceField,
         'require_membership_types': SafeModelMultipleChoiceField,
     }
     widgets = {
         'available_from':
         SplitDateTimePickerWidget(),
         'available_until':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_available_from_0'}),
         'require_membership_types':
         forms.CheckboxSelectMultiple(
             attrs={'class': 'scrolling-multiple-choice'}),
         'generate_tickets':
         TicketNullBooleanSelect(),
         'show_quota_left':
         ShowQuotaNullBooleanSelect()
     }
Exemplo n.º 8
0
 class Meta:
     model = SubEventItemVariation
     fields = ['price', 'disabled', 'available_from', 'available_until']
     widgets = {
         'available_from': SplitDateTimePickerWidget(),
         'available_until': SplitDateTimePickerWidget(),
         'price': forms.TextInput
     }
     field_classes = {
         'available_from': SplitDateTimeField,
         'available_until': SplitDateTimeField,
     }
Exemplo n.º 9
0
 class Meta:
     model = SubEvent
     localized_fields = '__all__'
     fields = [
         'name',
         'active',
         'is_public',
         'date_from',
         'date_to',
         'date_admission',
         'presale_start',
         'presale_end',
         'location',
         'frontpage_text',
         'geo_lat',
         'geo_lon',
     ]
     field_classes = {
         'date_from': SplitDateTimeField,
         'date_to': SplitDateTimeField,
         'date_admission': SplitDateTimeField,
         'presale_start': SplitDateTimeField,
         'presale_end': SplitDateTimeField,
     }
     widgets = {
         'date_from':
         SplitDateTimePickerWidget(),
         'date_to':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_date_from_0'}),
         'date_admission':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_date_from_0'}),
         'presale_start':
         SplitDateTimePickerWidget(),
         'presale_end':
         SplitDateTimePickerWidget(
             attrs={'data-date-after': '#id_presale_start_0'}),
         'geo_lat':
         forms.NumberInput(attrs={
             'min': '-90',
             'max': '90'
         }),
         'geo_lon':
         forms.NumberInput(attrs={
             'min': '-180',
             'max': '180'
         }),
     }
Exemplo n.º 10
0
 class Meta:
     model = Question
     localized_fields = '__all__'
     fields = [
         'question',
         'help_text',
         'type',
         'required',
         'ask_during_checkin',
         'hidden',
         'identifier',
         'items',
         'dependency_question',
         'dependency_values',
         'print_on_invoice',
         'valid_number_min',
         'valid_number_max',
         'valid_datetime_min',
         'valid_datetime_max',
         'valid_date_min',
         'valid_date_max',
         'valid_file_portrait',
     ]
     widgets = {
         'valid_datetime_min':
         SplitDateTimePickerWidget(),
         'valid_datetime_max':
         SplitDateTimePickerWidget(),
         'valid_date_min':
         DatePickerWidget(),
         'valid_date_max':
         DatePickerWidget(),
         'items':
         forms.CheckboxSelectMultiple(
             attrs={'class': 'scrolling-multiple-choice'}),
         'dependency_values':
         forms.SelectMultiple,
     }
     field_classes = {
         'valid_datetime_min': SplitDateTimeField,
         'valid_datetime_max': SplitDateTimeField,
         'items': ItemMultipleChoiceField,
         'dependency_question': SafeModelChoiceField,
     }
Exemplo n.º 11
0
 class Meta:
     model = Voucher
     localized_fields = '__all__'
     fields = [
         'code', 'valid_until', 'block_quota', 'allow_ignore_quota',
         'value', 'tag', 'comment', 'max_usages', 'price_mode', 'subevent'
     ]
     field_classes = {
         'valid_until': forms.SplitDateTimeField,
     }
     widgets = {
         'valid_until': SplitDateTimePickerWidget(),
     }
Exemplo n.º 12
0
 class Meta:
     model = Voucher
     localized_fields = '__all__'
     fields = [
         'valid_until', 'block_quota', 'allow_ignore_quota', 'value', 'tag',
         'comment', 'max_usages', 'price_mode', 'subevent'
     ]
     field_classes = {
         'valid_until': forms.SplitDateTimeField,
     }
     widgets = {
         'valid_until': SplitDateTimePickerWidget(),
     }
     labels = {'max_usages': _('Maximum usages per voucher')}
     help_texts = {
         'max_usages':
         _('Number of times times EACH of these vouchers can be redeemed.')
     }
Exemplo n.º 13
0
    def __init__(self, *args, **kwargs):
        """
        Takes two additional keyword arguments:

        :param cartpos: The cart position the form should be for
        :param event: The event this belongs to
        """
        cartpos = self.cartpos = kwargs.pop('cartpos', None)
        orderpos = self.orderpos = kwargs.pop('orderpos', None)
        pos = cartpos or orderpos
        item = pos.item
        questions = list(item.questions.all())
        event = kwargs.pop('event')

        super().__init__(*args, **kwargs)

        if item.admission and event.settings.attendee_names_asked:
            self.fields['attendee_name'] = forms.CharField(
                max_length=255, required=event.settings.attendee_names_required,
                label=_('Attendee name'),
                initial=(cartpos.attendee_name if cartpos else orderpos.attendee_name),
            )
        if item.admission and event.settings.attendee_emails_asked:
            self.fields['attendee_email'] = forms.EmailField(
                required=event.settings.attendee_emails_required,
                label=_('Attendee email'),
                initial=(cartpos.attendee_email if cartpos else orderpos.attendee_email)
            )

        for q in questions:
            # Do we already have an answer? Provide it as the initial value
            answers = [
                a for a
                in (cartpos.answers.all() if cartpos else orderpos.answers.all())
                if a.question_id == q.id
            ]
            if answers:
                initial = answers[0]
            else:
                initial = None
            tz = pytz.timezone(event.settings.timezone)
            if q.type == Question.TYPE_BOOLEAN:
                if q.required:
                    # For some reason, django-bootstrap3 does not set the required attribute
                    # itself.
                    widget = forms.CheckboxInput(attrs={'required': 'required'})
                else:
                    widget = forms.CheckboxInput()

                if initial:
                    initialbool = (initial.answer == "True")
                else:
                    initialbool = False

                field = forms.BooleanField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=initialbool, widget=widget,
                )
            elif q.type == Question.TYPE_NUMBER:
                field = forms.DecimalField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=initial.answer if initial else None,
                    min_value=Decimal('0.00'),
                )
            elif q.type == Question.TYPE_STRING:
                field = forms.CharField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=initial.answer if initial else None,
                )
            elif q.type == Question.TYPE_TEXT:
                field = forms.CharField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    widget=forms.Textarea,
                    initial=initial.answer if initial else None,
                )
            elif q.type == Question.TYPE_CHOICE:
                field = forms.ModelChoiceField(
                    queryset=q.options.all(),
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    widget=forms.Select,
                    empty_label='',
                    initial=initial.options.first() if initial else None,
                )
            elif q.type == Question.TYPE_CHOICE_MULTIPLE:
                field = forms.ModelMultipleChoiceField(
                    queryset=q.options.all(),
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    widget=forms.CheckboxSelectMultiple,
                    initial=initial.options.all() if initial else None,
                )
            elif q.type == Question.TYPE_FILE:
                field = forms.FileField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=initial.file if initial else None,
                    widget=UploadedFileWidget(position=pos, event=event, answer=initial),
                )
            elif q.type == Question.TYPE_DATE:
                field = forms.DateField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=dateutil.parser.parse(initial.answer).date() if initial and initial.answer else None,
                    widget=DatePickerWidget(),
                )
            elif q.type == Question.TYPE_TIME:
                field = forms.TimeField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=dateutil.parser.parse(initial.answer).astimezone(tz).time() if initial and initial.answer else None,
                    widget=TimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')),
                )
            elif q.type == Question.TYPE_DATETIME:
                field = forms.SplitDateTimeField(
                    label=q.question, required=q.required,
                    help_text=q.help_text,
                    initial=dateutil.parser.parse(initial.answer).astimezone(tz) if initial and initial.answer else None,
                    widget=SplitDateTimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')),
                )
            field.question = q
            if answers:
                # Cache the answer object for later use
                field.answer = answers[0]
            self.fields['question_%s' % q.id] = field

        responses = question_form_fields.send(sender=event, position=pos)
        data = pos.meta_info_data
        for r, response in sorted(responses, key=lambda r: str(r[0])):
            for key, value in response.items():
                # We need to be this explicit, since OrderedDict.update does not retain ordering
                self.fields[key] = value
                value.initial = data.get('question_form_data', {}).get(key)