Fix venueless token creation
Do not generate token or checkin if user does not have a ticket. Clear existing token if user no longer has a ticket.
This commit is contained in:
parent
0a6d53162f
commit
bf46c82fe4
4 changed files with 24 additions and 7 deletions
|
@ -41,8 +41,10 @@
|
|||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if purchased %}
|
||||
|
||||
{% flag "venueless_dashboard" %}
|
||||
{% venueless_login_url as venueless_url %}
|
||||
{% if venueless_url %}
|
||||
<div class="row">
|
||||
<div class="col-12 mb-3">
|
||||
<h3>Join the Conference</h3>
|
||||
|
@ -52,8 +54,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endflag %}
|
||||
{% endif %}
|
||||
{% endflag %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
|
|
|
@ -163,6 +163,14 @@ def ticket_type(context):
|
|||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def venueless_login_url(context):
|
||||
# Check that they have a ticket first (only item from category 1)
|
||||
items = registrasion_tags.items_purchased(context, 1)
|
||||
if not items:
|
||||
return ''
|
||||
|
||||
# Get token from checkin
|
||||
user=context.request.user
|
||||
checkin = CheckIn.objects.get_or_create(user=user)[0]
|
||||
if checkin.venueless_token:
|
||||
return f'{settings.VENUELESS_URL}/#token={checkin.venueless_token}'
|
||||
return ''
|
||||
|
|
11
vendor/regidesk/regidesk/models.py
vendored
11
vendor/regidesk/regidesk/models.py
vendored
|
@ -167,7 +167,7 @@ class CheckIn(models.Model):
|
|||
self.venueless_traits = ",".join(traits)
|
||||
updated = True
|
||||
|
||||
if not self._venueless_token:
|
||||
if not self.venueless_traits or not self._venueless_token:
|
||||
self._venueless_token = self._generate_venueless_token()
|
||||
updated = True
|
||||
|
||||
|
@ -177,9 +177,12 @@ class CheckIn(models.Model):
|
|||
return self._venueless_token
|
||||
|
||||
def _get_venueless_traits(self):
|
||||
traits = ["attendee"]
|
||||
|
||||
""" Returns a list of traits based on the user's ticket """
|
||||
ticket_type = self.user.attendee.ticket_type
|
||||
if not ticket_type:
|
||||
return []
|
||||
|
||||
traits = ["attendee"]
|
||||
|
||||
if ticket_type == "Conference Volunteer":
|
||||
traits.append("volunteer")
|
||||
|
@ -207,6 +210,8 @@ class CheckIn(models.Model):
|
|||
|
||||
def _generate_venueless_token(self):
|
||||
""" Generate token for Venueless login """
|
||||
if not self.venueless_traits:
|
||||
return ""
|
||||
|
||||
issued_at = datetime.datetime.utcnow()
|
||||
expiry = settings.LCA_END + datetime.timedelta(days=1)
|
||||
|
|
|
@ -60,8 +60,10 @@ class Attendee(models.Model):
|
|||
cart__invoice__status=Invoice.STATUS_PAID,
|
||||
cart__invoice__user=self.user
|
||||
)
|
||||
if len(tickets) >1:
|
||||
if len(tickets) > 1:
|
||||
raise ValueError("Too many tickets for attendee %s", self)
|
||||
if len(tickets) == 0:
|
||||
return ""
|
||||
return tickets[0].product.name
|
||||
|
||||
class AttendeeProfileBase(models.Model):
|
||||
|
|
Loading…
Reference in a new issue