Organizer-level override for giftcard code length

This commit is contained in:
Martin Gross
2019-12-09 13:55:26 +01:00
parent 2a929200b5
commit cf5ac6af4b
4 changed files with 19 additions and 3 deletions

View File

@@ -10,10 +10,10 @@ from pretix.base.banlist import banned
from pretix.base.models import LoggedModel
def gen_giftcard_secret():
def gen_giftcard_secret(length):
charset = list('ABCDEFGHJKLMNPQRSTUVWXYZ3789')
while True:
code = get_random_string(length=settings.ENTROPY['giftcard_secret'], allowed_chars=charset)
code = get_random_string(length=length, allowed_chars=charset)
if not banned(code) and not GiftCard.objects.filter(secret=code).exists():
return code
@@ -48,7 +48,6 @@ class GiftCard(LoggedModel):
)
secret = models.CharField(
max_length=190,
default=gen_giftcard_secret,
db_index=True,
verbose_name=_('Gift card code'),
)
@@ -69,6 +68,12 @@ class GiftCard(LoggedModel):
def accepted_by(self, organizer):
return self.issuer == organizer or GiftCardAcceptance.objects.filter(issuer=self.issuer, collector=organizer).exists()
def save(self, *args, **kwargs):
if not self.secret:
self.secret = gen_giftcard_secret(self.issuer.settings.giftcard_length)
super().save(*args, **kwargs)
class Meta:
unique_together = (('secret', 'issuer'),)

View File

@@ -746,6 +746,10 @@ Your {event} team"""))
'name_scheme': {
'default': 'full',
'type': str
},
'giftcard_length': {
'default': settings.ENTROPY['giftcard_secret'],
'type': int
}
}
PERSON_NAME_TITLE_GROUPS = OrderedDict([

View File

@@ -302,6 +302,12 @@ class OrganizerSettingsForm(SettingsForm):
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
'We recommend a size of at least 200x200px to accomodate most devices.')
)
giftcard_length = forms.IntegerField(
label=_('Length of gift card codes'),
help_text=_('The system generates by default {}-character long gift card codes. However, if a different length '
'is required, it can be set here.'.format(settings.ENTROPY['giftcard_secret'])),
required=False
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

View File

@@ -32,6 +32,7 @@
{% endif %}
{% bootstrap_field sform.organizer_info_text layout="control" %}
{% bootstrap_field sform.event_team_provisioning layout="control" %}
{% bootstrap_field sform.giftcard_length layout="control" %}
</fieldset>
<fieldset>
<legend>{% trans "Organizer page" %}</legend>