From d9e8a72d140cc4f747ff29951f5452fe7f58bca0 2021-01-21 14:07:10 From: Joel Addison Date: 2021-01-21 14:07:10 Subject: [PATCH] Update Venueless tokens Determine traits based on ticket type. Set different expiry of token for miniconf only tickets. --- diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py index a7c32f96cf2cfacde1f77a360e68badbb63a8308..33a3344b8911cc692e2f8414d1ce53529ba1503b 100644 --- a/pinaxcon/settings.py +++ b/pinaxcon/settings.py @@ -517,6 +517,7 @@ class PenguinDinnerCat(Category): _TZINFO = pytz.timezone(TIME_ZONE) LCA_START = datetime(2021, 1, 23, tzinfo=_TZINFO) LCA_END = datetime(2021, 1, 25, tzinfo=_TZINFO) +LCA_MINICONF_END = datetime(2021, 1, 23, 23, 59, tzinfo=_TZINFO) EARLY_BIRD_DEADLINE = datetime(2020, 12, 1, tzinfo=_TZINFO) PENGUIN_DINNER_TICKET_DATE = date(2021, 1, 23) SPEAKER_DINNER_TICKET_DATE = date(2021, 1, 25) diff --git a/pinaxcon/templates/registrasion/badge.svg b/pinaxcon/templates/registrasion/badge.svg index 2fb119c49379f6a29645a9e6517ce244d0ad0c15..55f7c6f561725e0ff48ad67ad5c243d14c5a684c 100644 --- a/pinaxcon/templates/registrasion/badge.svg +++ b/pinaxcon/templates/registrasion/badge.svg @@ -10,137 +10,195 @@ {% total_items_purchased 5 as pdns_count %} {% ticket_type as ticket_type %} --> - - badge_preview - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Badge Preview + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + 0 + 21 + + + + - - + + {{ user.attendee.attendeeprofilebase.attendeeprofile.name }} - + {% if ticket_type == "Student" or ticket_type == "Hobbyist" or "Only" in ticket_type %}{% else %}{{ user.attendee.attendeeprofilebase.attendeeprofile.company }}{% endif %} - + {{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_1 }} - + {{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_2 }} - + {{ ticket_type|upper }} - {{ speakers_dinner_count }} - {{ penguin_dinner_count }} - {{ pdns_count }} - - {% if user.attendee.attendeeprofilebase.attendeeprofile.of_legal_age %}18+{% endif %} - diff --git a/pinaxcon/templatetags/lca2018_tags.py b/pinaxcon/templatetags/lca2018_tags.py index ee2ab073ba42694182471cb7b017c15f1045cf45..306b07fff2f1696e09a7c3050fbe2abf7303699d 100644 --- a/pinaxcon/templatetags/lca2018_tags.py +++ b/pinaxcon/templatetags/lca2018_tags.py @@ -133,7 +133,7 @@ def ticket_type(context): ticket_type = name - # Miniconfs are secion 2 + # Miniconfs are section 2 # General sessions are section 1 user = registrasion_tags.user_for_context(context) diff --git a/vendor/regidesk/regidesk/models.py b/vendor/regidesk/regidesk/models.py index 87cce9b0d6279272d3f01c1d03b5ec184a6ba83d..540ad5e7997b2ef0b701a1098e82262e26e48c2a 100644 --- a/vendor/regidesk/regidesk/models.py +++ b/vendor/regidesk/regidesk/models.py @@ -37,6 +37,7 @@ class BoardingPassTemplate(models.Model): verbose_name = ("Boarding Pass template") verbose_name_plural = ("Boarding Pass templates") + class BoardingPass(models.Model): template = models.ForeignKey(BoardingPassTemplate, null=True, blank=True, @@ -54,6 +55,8 @@ class BoardingPass(models.Model): ("view_boarding_pass", "Can view sent boarding passes"), ("send_boarding_pass", "Can send boarding passes"), ) + verbose_name = ("Boarding Pass") + verbose_name_plural = ("Boarding Passes") def __unicode__(self): return self.checkin.attendee.attendeeprofilebase.attendeeprofile.name + ' ' + self.timestamp.strftime('%Y-%m-%d %H:%M:%S') @@ -62,6 +65,7 @@ class BoardingPass(models.Model): def email_args(self): return (self.subject, self.body, self.from_address, self.user.email) + class CheckIn(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) @@ -159,7 +163,8 @@ class CheckIn(models.Model): updated = True if not self.venueless_traits: - self.venueless_traits = ".".join(("attendee",)) + traits = self._get_venueless_traits() + self.venueless_traits = ",".join(traits) updated = True if not self._venueless_token: @@ -171,11 +176,43 @@ class CheckIn(models.Model): return self._venueless_token + def _get_venueless_traits(self): + traits = ["attendee"] + + ticket_type = self.user.attendee.ticket_type + + if ticket_type == "Conference Volunteer": + traits.append("volunteer") + elif ticket_type == "Conference Organiser": + traits.append("organiser") + + if hasattr(self.user, "speaker_profile"): + best = 0 + for presentation in self.user.speaker_profile.presentations.all(): + if presentation.section.id == 1: + # Main Conference Speaker + best = 1 + if best == 0 and presentation.section.id == 2: + # Miniconf Organiser + best = 2 + + if best == 1: + traits.append("speaker") + elif best == 2: + traits.append("miniconf_org") + else: + traits.append("miniconf_speaker") + + return traits + def _generate_venueless_token(self): """ Generate token for Venueless login """ issued_at = datetime.datetime.utcnow() expiry = settings.LCA_END + datetime.timedelta(days=1) + if self.user.attendee.ticket_type == "Miniconf Only": + # Miniconf only ticket holders have limited access + expiry = settings.LCA_MINICONF_END payload = { "iss": settings.VENUELESS_TOKEN_ISSUER, diff --git a/vendor/regidesk/regidesk/views.py b/vendor/regidesk/regidesk/views.py index 008e4e5575df1e81200095adf7b465d13b63bddc..ca0ff88653587bff5dd744010a4c305e5e87f1ee 100644 --- a/vendor/regidesk/regidesk/views.py +++ b/vendor/regidesk/regidesk/views.py @@ -84,9 +84,9 @@ def boarding_overview(request, boarding_state="pending"): price__gte=0 ) - print(datetime.now()) + #print(datetime.now()) ticketholders = ( ticket.invoice.user for ticket in tickets ) - print(datetime.now()) + #print(datetime.now()) attendees = people.Attendee.objects.select_related( "attendeeprofilebase",