registration. This is typically used for things like informing people of special
requirements such as a student ID to access student discounts.
+Check-in message
+: This message is shown when the attendee is [checked in](tickets#checkin),
+either using the web app or the native app. It
+is shown only to the person making the check-in. This cam typically be
+used to alert the check-in operator that they should verify the
+attendees eligibility for the registration type, for example by
+checking a student or corporate id.
+
Autocancel invoices
: If registrations with this registration type should override the value for
autocancel from the [conference](configuring). The lowest value of
(based on current confirmed attendees) which letters to send to which
queue.
-## Check-in
+## Check-in <a name="checkin"></a>
The check-in system is designed for those working the registration
desk at the event. It's a small web app designed specifically to be
if (typeof(val) == 'string') {
let e = $('<dd/>').text(val).addClass('found_dyn');
- if (val.includes(' NOT ')) {
+ if (reg['highlight'].includes(a[0])) {
e = $(e).addClass('found_dyn_warn');
}
elements.push(e);
class Meta:
model = RegistrationType
- fields = ['regtype', 'regclass', 'cost', 'active', 'activeuntil', 'days', 'sortkey', 'specialtype', 'require_phone', 'alertmessage', 'invoice_autocancel_hours', 'requires_option', 'upsell_target']
+ fields = ['regtype', 'regclass', 'cost', 'active', 'activeuntil', 'days', 'sortkey', 'specialtype', 'require_phone', 'alertmessage', 'checkinmessage', 'invoice_autocancel_hours', 'requires_option', 'upsell_target']
@classmethod
def get_column_filters(cls, conference):
specialtype=source.specialtype,
# Not copying days
alertmessage=source.alertmessage,
+ checkinmessage=source.checkinmessage,
upsell_target=source.upsell_target,
# Not copying invoice_autocancel_hours
# Not copying requires_option
'scanfields': [
["name", "Name"],
["type", "Registration type"],
+ ["checkinmessage", "Check-in message"],
["policyconfirmed", "Policy confirmed"],
["photoconsent", "Photo consent"],
["tshirt", "T-Shirt size"],
'tshirt': r.shirtsize and r.shirtsize.shirtsize,
'additional': [a.name for a in r.additionaloptions.all()],
'token': r.publictoken if fieldscan else r.idtoken,
+ 'highlight': [],
}
if r.conference.askphotoconsent:
d['photoconsent'] = r.photoconsent and "Photos OK" or "Photos NOT OK"
if r.conference.confirmpolicy:
d['policyconfirmed'] = r.policyconfirmedat and "Policy confirmed" or "Policy NOT confirmed"
+ if not r.policyconfirmedat:
+ d['highlight'].append('policyconfirmed')
+ if r.regtype.checkinmessage:
+ d['checkinmessage'] = r.regtype.checkinmessage
+ d['highlight'].append('checkinmessage')
if r.checkedinat and not fieldscan:
d['already'] = {
'title': 'Attendee already checked in',
--- /dev/null
+# Generated by Django 4.2.11 on 2025-08-10 12:32
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('confreg', '0117_pronouns'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='registrationtype',
+ name='checkinmessage',
+ field=models.TextField(blank=True, help_text='Message shown when the attendee is checked in', verbose_name='Check-in message'),
+ ),
+ ]
require_phone = models.BooleanField(null=False, blank=False, default=False, help_text="Require phone number to be entered")
days = models.ManyToManyField(RegistrationDay, blank=True)
alertmessage = models.TextField(null=False, blank=True, verbose_name="Alert message", help_text="Message shown in popup to user when completing the registration")
+ checkinmessage = models.TextField(null=False, blank=True, verbose_name='Check-in message', help_text='Message shown when the attendee is checked in')
upsell_target = models.BooleanField(null=False, blank=False, default=False, help_text='Is target registration type for upselling in order to add additional options')
invoice_autocancel_hours = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(1), ], verbose_name="Autocancel invoices", help_text="Automatically cancel invoices after this many hours")
requires_option = models.ManyToManyField('ConferenceAdditionalOption', blank=True, help_text='Requires at least one of the selected additional options to be picked')