def timeline_for_event(event, subevent=None): tl = [] ev = subevent or event if subevent: ev_edit_url = reverse('control:event.subevent', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'subevent': subevent.pk }) else: ev_edit_url = reverse('control:event.settings', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }) tl.append( TimelineEvent(event=event, subevent=subevent, datetime=ev.date_from, description=pgettext_lazy('timeline', 'Your event starts'), edit_url=ev_edit_url)) if ev.date_to: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=ev.date_to, description=pgettext_lazy('timeline', 'Your event ends'), edit_url=ev_edit_url)) if ev.date_admission: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=ev.date_admission, description=pgettext_lazy( 'timeline', 'Admissions for your event start'), edit_url=ev_edit_url)) if ev.presale_start: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=ev.presale_start, description=pgettext_lazy('timeline', 'Start of ticket sales'), edit_url=ev_edit_url)) if ev.presale_end: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=ev.presale_end, description=pgettext_lazy('timeline', 'End of ticket sales'), edit_url=ev_edit_url)) rd = event.settings.get('last_order_modification_date', as_type=RelativeDateWrapper) if rd: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy( 'timeline', 'Customers can no longer modify their orders'), edit_url=ev_edit_url)) rd = event.settings.get('payment_term_last', as_type=RelativeDateWrapper) if rd: d = make_aware( datetime.combine(rd.date(ev), time(hour=23, minute=59, second=59)), event.timezone) tl.append( TimelineEvent(event=event, subevent=subevent, datetime=d, description=pgettext_lazy( 'timeline', 'No more payments can be completed'), edit_url=reverse('control:event.settings.payment', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }))) rd = event.settings.get('ticket_download_date', as_type=RelativeDateWrapper) if rd and event.settings.ticket_download: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy( 'timeline', 'Tickets can be downloaded'), edit_url=reverse('control:event.settings.tickets', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }))) rd = event.settings.get('cancel_allow_user_until', as_type=RelativeDateWrapper) if rd and event.settings.cancel_allow_user: tl.append( TimelineEvent( event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy( 'timeline', 'Customers can no longer cancel free or unpaid orders'), edit_url=reverse('control:event.settings.cancel', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }))) rd = event.settings.get('cancel_allow_user_paid_until', as_type=RelativeDateWrapper) if rd and event.settings.cancel_allow_user_paid: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy( 'timeline', 'Customers can no longer cancel paid orders'), edit_url=reverse('control:event.settings.cancel', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }))) if not event.has_subevents: days = event.settings.get('mail_days_download_reminder', as_type=int) if days is not None: reminder_date = (ev.date_from - timedelta(days=days)).replace( hour=0, minute=0, second=0, microsecond=0) tl.append( TimelineEvent(event=event, subevent=subevent, datetime=reminder_date, description=pgettext_lazy( 'timeline', 'Download reminders are being sent out'), edit_url=reverse('control:event.settings.mail', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }))) for p in event.items.filter( Q(available_from__isnull=False) | Q(available_until__isnull=False)): if p.available_from: tl.append( TimelineEvent(event=event, subevent=subevent, datetime=p.available_from, description=pgettext_lazy( 'timeline', 'Product "{name}" becomes available').format( name=str(p)), edit_url=reverse('control:event.item', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'item': p.pk, }))) if p.available_until: tl.append( TimelineEvent( event=event, subevent=subevent, datetime=p.available_until, description=pgettext_lazy( 'timeline', 'Product "{name}" becomes unavailable').format( name=str(p)), edit_url=reverse('control:event.item', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'item': p.pk, }))) pprovs = event.get_payment_providers() # This is a special case, depending on payment providers not overriding BasePaymentProvider by too much, but it's # preferrable to having all plugins implement this spearately. for pprov in pprovs.values(): if not pprov.settings.get('_enabled', as_type=bool): continue availability_date = pprov.settings.get('_availability_date', as_type=RelativeDateWrapper) if availability_date: d = make_aware( datetime.combine(availability_date.date(ev), time(hour=23, minute=59, second=59)), event.timezone) tl.append( TimelineEvent( event=event, subevent=subevent, datetime=d, description=pgettext_lazy( 'timeline', 'Payment provider "{name}" can no longer be selected'). format(name=str(pprov.verbose_name)), edit_url=reverse('control:event.settings.payment.provider', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'provider': pprov.identifier, }))) for recv, resp in timeline_events.send(sender=event, subevent=subevent): tl += resp return sorted(tl, key=lambda e: e.datetime)
def timeline_for_event(event, subevent=None): tl = [] ev = subevent or event if subevent: ev_edit_url = reverse( 'control:event.subevent', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'subevent': subevent.pk } ) else: ev_edit_url = reverse( 'control:event.settings', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug } ) tl.append(TimelineEvent( event=event, subevent=subevent, datetime=ev.date_from, description=pgettext_lazy('timeline', 'Your event starts'), edit_url=ev_edit_url )) if ev.date_to: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=ev.date_to, description=pgettext_lazy('timeline', 'Your event ends'), edit_url=ev_edit_url )) if ev.date_admission: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=ev.date_admission, description=pgettext_lazy('timeline', 'Admissions for your event start'), edit_url=ev_edit_url )) if ev.presale_start: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=ev.presale_start, description=pgettext_lazy('timeline', 'Start of ticket sales'), edit_url=ev_edit_url )) if ev.presale_end: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=ev.presale_end, description=pgettext_lazy('timeline', 'End of ticket sales'), edit_url=ev_edit_url )) rd = event.settings.get('last_order_modification_date', as_type=RelativeDateWrapper) if rd: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy('timeline', 'Customers can no longer modify their orders'), edit_url=ev_edit_url )) rd = event.settings.get('payment_term_last', as_type=RelativeDateWrapper) if rd: d = make_aware(datetime.combine( rd.date(ev), time(hour=23, minute=59, second=59) ), event.timezone) tl.append(TimelineEvent( event=event, subevent=subevent, datetime=d, description=pgettext_lazy('timeline', 'No more payments can be completed'), edit_url=reverse('control:event.settings.payment', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }) )) rd = event.settings.get('ticket_download_date', as_type=RelativeDateWrapper) if rd and event.settings.ticket_download: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy('timeline', 'Tickets can be downloaded'), edit_url=reverse('control:event.settings.tickets', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }) )) rd = event.settings.get('cancel_allow_user_until', as_type=RelativeDateWrapper) if rd and event.settings.cancel_allow_user: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy('timeline', 'Customers can no longer cancel free or unpaid orders'), edit_url=reverse('control:event.settings.tickets', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }) )) rd = event.settings.get('cancel_allow_user_paid_until', as_type=RelativeDateWrapper) if rd and event.settings.cancel_allow_user_paid: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=rd.datetime(ev), description=pgettext_lazy('timeline', 'Customers can no longer cancel paid orders'), edit_url=reverse('control:event.settings.tickets', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }) )) if not event.has_subevents: days = event.settings.get('mail_days_download_reminder', as_type=int) if days is not None: reminder_date = (ev.date_from - timedelta(days=days)).replace(hour=0, minute=0, second=0, microsecond=0) tl.append(TimelineEvent( event=event, subevent=subevent, datetime=reminder_date, description=pgettext_lazy('timeline', 'Download reminders are being sent out'), edit_url=reverse('control:event.settings.mail', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug }) )) for p in event.items.filter(Q(available_from__isnull=False) | Q(available_until__isnull=False)): if p.available_from: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=p.available_from, description=pgettext_lazy('timeline', 'Product "{name}" becomes available').format(name=str(p)), edit_url=reverse('control:event.item', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'item': p.pk, }) )) if p.available_until: tl.append(TimelineEvent( event=event, subevent=subevent, datetime=p.available_until, description=pgettext_lazy('timeline', 'Product "{name}" becomes unavailable').format(name=str(p)), edit_url=reverse('control:event.item', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'item': p.pk, }) )) pprovs = event.get_payment_providers() # This is a special case, depending on payment providers not overriding BasePaymentProvider by too much, but it's # preferrable to having all plugins implement this spearately. for pprov in pprovs.values(): if not pprov.settings.get('_enabled', as_type=bool): continue availability_date = pprov.settings.get('_availability_date', as_type=RelativeDateWrapper) if availability_date: d = make_aware(datetime.combine( availability_date.date(ev), time(hour=23, minute=59, second=59) ), event.timezone) tl.append(TimelineEvent( event=event, subevent=subevent, datetime=d, description=pgettext_lazy('timeline', 'Payment provider "{name}" can no longer be selected').format( name=str(pprov.verbose_name) ), edit_url=reverse('control:event.settings.payment.provider', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'provider': pprov.identifier, }) )) for recv, resp in timeline_events.send(sender=event, subevent=subevent): tl += resp return sorted(tl, key=lambda e: e.datetime)