forked from CGM_Public/pretix_original
Waiting list: Add name and phone number (#1987)
* add name and phone to waitinglist
* add options whether to ask for name/phone in waitinglist
* changed rendermode to checkout and added required-css-class
* changed default to original behaviour to not ask name or phone at all
* add name and phone to list-view and export
* add name and phone to Meta-class so they automagically get saved
* update shredder
* fixed isort
* Translated on translate.pretix.eu (Slovenian)
Currently translated at 19.9% (799 of 3996 strings)
Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sl/
powered by weblate
* Translated on translate.pretix.eu (Slovenian)
Currently translated at 21.6% (865 of 3996 strings)
Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sl/
powered by weblate
* Translated on translate.pretix.eu (Slovenian)
Currently translated at 23.8% (955 of 3996 strings)
Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sl/
powered by weblate
* Translated on translate.pretix.eu (Slovenian)
Currently translated at 26.3% (1051 of 3996 strings)
Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sl/
powered by weblate
* add validation to WaitingListSerializer
* update API-description
* fixed test_waitinglist.py
* Revert more of de597ba86
* Paginate list of gift cards
* Change texts on order confirmation page if no attachments are sent
* Update locales
* Added translation on translate.pretix.eu (Sinhala)
* Added translation on translate.pretix.eu (Sinhala)
* Translated on translate.pretix.eu (Sinhala)
Currently translated at 0.4% (18 of 4002 strings)
Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/si/
powered by weblate
* Fix initial value of phone number
* add colon to enumeration in description
Co-authored-by: Raphael Michel <michel@rami.io>
* update API-description with null-fields
* add name and phone to waitinglist
* add options whether to ask for name/phone in waitinglist
* changed rendermode to checkout and added required-css-class
* changed default to original behaviour to not ask name or phone at all
* add name and phone to list-view and export
* add name and phone to Meta-class so they automagically get saved
* update shredder
* fixed isort
* add validation to WaitingListSerializer
* update API-description
* fixed test_waitinglist.py
* Fix initial value of phone number
* update API-description with null-fields
* add colon to enumeration in description
Co-authored-by: Raphael Michel <michel@rami.io>
* fixed isort on migration
Co-authored-by: lapor-kris <kristijan.tkalec@posteo.si>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
Co-authored-by: helabasa <R45XvezA@pm.me>
Co-authored-by: Raphael Michel <michel@rami.io>
This commit is contained in:
committed by
GitHub
parent
8ca2fe7707
commit
8e00970f04
@@ -5,11 +5,14 @@ from django.db import models, transaction
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||
from django_scopes import ScopedManager
|
||||
from jsonfallback.fields import FallbackJSONField
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
|
||||
from pretix.base.email import get_email_context
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import Voucher
|
||||
from pretix.base.services.mail import mail
|
||||
from pretix.base.settings import PERSON_NAME_SCHEMES
|
||||
|
||||
from .base import LoggedModel
|
||||
from .event import Event, SubEvent
|
||||
@@ -37,9 +40,21 @@ class WaitingListEntry(LoggedModel):
|
||||
verbose_name=_("On waiting list since"),
|
||||
auto_now_add=True
|
||||
)
|
||||
name_cached = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Name"),
|
||||
blank=True, null=True,
|
||||
)
|
||||
name_parts = FallbackJSONField(
|
||||
blank=True, default=dict
|
||||
)
|
||||
email = models.EmailField(
|
||||
verbose_name=_("E-mail address")
|
||||
)
|
||||
phone = PhoneNumberField(
|
||||
null=True, blank=True,
|
||||
verbose_name=_("Phone number")
|
||||
)
|
||||
voucher = models.ForeignKey(
|
||||
'Voucher',
|
||||
verbose_name=_("Assigned voucher"),
|
||||
@@ -83,6 +98,27 @@ class WaitingListEntry(LoggedModel):
|
||||
WaitingListEntry.clean_itemvar(self.event, self.item, self.variation)
|
||||
WaitingListEntry.clean_subevent(self.event, self.subevent)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
update_fields = kwargs.get('update_fields', [])
|
||||
if 'name_parts' in update_fields:
|
||||
update_fields.append('name_cached')
|
||||
self.name_cached = self.name
|
||||
if self.name_parts is None:
|
||||
self.name_parts = {}
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
if not self.name_parts:
|
||||
return None
|
||||
if '_legacy' in self.name_parts:
|
||||
return self.name_parts['_legacy']
|
||||
if '_scheme' in self.name_parts:
|
||||
scheme = PERSON_NAME_SCHEMES[self.name_parts['_scheme']]
|
||||
else:
|
||||
scheme = PERSON_NAME_SCHEMES[self.event.settings.name_scheme]
|
||||
return scheme['concatenation'](self.name_parts).strip()
|
||||
|
||||
def send_voucher(self, quota_cache=None, user=None, auth=None):
|
||||
availability = (
|
||||
self.variation.check_quotas(count_waitinglist=False, subevent=self.subevent, _cache=quota_cache)
|
||||
|
||||
Reference in New Issue
Block a user