Remove hack for gift card exporters, it's not required

This commit is contained in:
Raphael Michel
2022-10-05 09:39:07 +02:00
parent 8f56ab54a4
commit 74e14285ee

View File

@@ -884,76 +884,74 @@ class QuotaListExporter(ListExporter):
return '{}_quotas'.format(self.event.slug) return '{}_quotas'.format(self.event.slug)
def generate_GiftCardTransactionListExporter(organizer): # hackhack class GiftcardTransactionListExporter(ListExporter):
class GiftcardTransactionListExporter(ListExporter): identifier = 'giftcardtransactionlist'
identifier = 'giftcardtransactionlist' verbose_name = gettext_lazy('Gift card transactions')
verbose_name = gettext_lazy('Gift card transactions')
@property @property
def additional_form_fields(self): def additional_form_fields(self):
d = [ d = [
('date_from', ('date_from',
forms.DateField( forms.DateField(
label=_('Start date'), label=_('Start date'),
widget=forms.DateInput(attrs={'class': 'datepickerfield'}), widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
required=False, required=False,
)), )),
('date_to', ('date_to',
forms.DateField( forms.DateField(
label=_('End date'), label=_('End date'),
widget=forms.DateInput(attrs={'class': 'datepickerfield'}), widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
required=False, required=False,
)), )),
]
d = OrderedDict(d)
return d
def iterate_list(self, form_data):
qs = GiftCardTransaction.objects.filter(
card__issuer=self.organizer,
).order_by('datetime').select_related('card', 'order', 'order__event')
if form_data.get('date_from'):
date_value = form_data.get('date_from')
if isinstance(date_value, str):
date_value = dateutil.parser.parse(date_value).date()
qs = qs.filter(
datetime__gte=make_aware(datetime.combine(date_value, time(0, 0, 0)), self.timezone)
)
if form_data.get('date_to'):
date_value = form_data.get('date_to')
if isinstance(date_value, str):
date_value = dateutil.parser.parse(date_value).date()
qs = qs.filter(
datetime__lte=make_aware(datetime.combine(date_value, time(23, 59, 59, 999999)), self.timezone)
)
headers = [
_('Gift card code'),
_('Test mode'),
_('Date'),
_('Amount'),
_('Currency'),
_('Order'),
]
yield headers
for obj in qs:
row = [
obj.card.secret,
_('TEST MODE') if obj.card.testmode else '',
obj.datetime.astimezone(self.timezone).strftime('%Y-%m-%d %H:%M:%S'),
obj.value,
obj.card.currency,
obj.order.full_code if obj.order else None,
] ]
d = OrderedDict(d) yield row
return d
def iterate_list(self, form_data): def get_filename(self):
qs = GiftCardTransaction.objects.filter( return '{}_giftcardtransactions'.format(self.organizer.slug)
card__issuer=organizer,
).order_by('datetime').select_related('card', 'order', 'order__event')
if form_data.get('date_from'):
date_value = form_data.get('date_from')
if isinstance(date_value, str):
date_value = dateutil.parser.parse(date_value).date()
qs = qs.filter(
datetime__gte=make_aware(datetime.combine(date_value, time(0, 0, 0)), self.timezone)
)
if form_data.get('date_to'):
date_value = form_data.get('date_to')
if isinstance(date_value, str):
date_value = dateutil.parser.parse(date_value).date()
qs = qs.filter(
datetime__lte=make_aware(datetime.combine(date_value, time(23, 59, 59, 999999)), self.timezone)
)
headers = [
_('Gift card code'),
_('Test mode'),
_('Date'),
_('Amount'),
_('Currency'),
_('Order'),
]
yield headers
for obj in qs:
row = [
obj.card.secret,
_('TEST MODE') if obj.card.testmode else '',
obj.datetime.astimezone(self.timezone).strftime('%Y-%m-%d %H:%M:%S'),
obj.value,
obj.card.currency,
obj.order.full_code if obj.order else None,
]
yield row
def get_filename(self):
return '{}_giftcardtransactions'.format(organizer.slug)
return GiftcardTransactionListExporter
class GiftcardRedemptionListExporter(ListExporter): class GiftcardRedemptionListExporter(ListExporter):
@@ -1000,114 +998,111 @@ class GiftcardRedemptionListExporter(ListExporter):
return '{}_giftcardredemptions'.format(self.event.slug) return '{}_giftcardredemptions'.format(self.event.slug)
def generate_GiftCardListExporter(organizer): # hackhack class GiftcardListExporter(ListExporter):
class GiftcardListExporter(ListExporter): identifier = 'giftcardlist'
identifier = 'giftcardlist' verbose_name = gettext_lazy('Gift cards')
verbose_name = gettext_lazy('Gift cards')
@property @property
def additional_form_fields(self): def additional_form_fields(self):
return OrderedDict( return OrderedDict(
[ [
('date', forms.DateTimeField( ('date', forms.DateTimeField(
label=_('Show value at'), label=_('Show value at'),
initial=now(), initial=now(),
)), )),
('testmode', forms.ChoiceField( ('testmode', forms.ChoiceField(
label=_('Test mode'), label=_('Test mode'),
choices=( choices=(
('', _('All')), ('', _('All')),
('yes', _('Test mode')), ('yes', _('Test mode')),
('no', _('Live')), ('no', _('Live')),
), ),
initial='no', initial='no',
required=False required=False
)), )),
('state', forms.ChoiceField( ('state', forms.ChoiceField(
label=_('Status'), label=_('Status'),
choices=( choices=(
('', _('All')), ('', _('All')),
('empty', _('Empty')), ('empty', _('Empty')),
('valid_value', _('Valid and with value')), ('valid_value', _('Valid and with value')),
('expired_value', _('Expired and with value')), ('expired_value', _('Expired and with value')),
('expired', _('Expired')), ('expired', _('Expired')),
), ),
initial='valid_value', initial='valid_value',
required=False required=False
)) ))
]
)
def iterate_list(self, form_data):
s = GiftCardTransaction.objects.filter(
card=OuterRef('pk'),
datetime__lte=form_data['date']
).order_by().values('card').annotate(s=Sum('value')).values('s')
qs = organizer.issued_gift_cards.filter(
issuance__lte=form_data['date']
).annotate(
cached_value=Coalesce(Subquery(s), Decimal('0.00')),
).order_by('issuance').prefetch_related(
'transactions', 'transactions__order', 'transactions__order__event', 'transactions__order__invoices'
)
if form_data.get('testmode') == 'yes':
qs = qs.filter(testmode=True)
elif form_data.get('testmode') == 'no':
qs = qs.filter(testmode=False)
if form_data.get('state') == 'empty':
qs = qs.filter(cached_value=0)
elif form_data.get('state') == 'valid_value':
qs = qs.exclude(cached_value=0).filter(Q(expires__isnull=True) | Q(expires__gte=form_data['date']))
elif form_data.get('state') == 'expired_value':
qs = qs.exclude(cached_value=0).filter(expires__lt=form_data['date'])
elif form_data.get('state') == 'expired':
qs = qs.filter(expires__lt=form_data['date'])
headers = [
_('Gift card code'),
_('Test mode card'),
_('Creation date'),
_('Expiry date'),
_('Special terms and conditions'),
_('Currency'),
_('Current value'),
_('Created in order'),
_('Last invoice number of order'),
_('Last invoice date of order'),
] ]
yield headers )
tz = get_current_timezone() def iterate_list(self, form_data):
for obj in qs: s = GiftCardTransaction.objects.filter(
o = None card=OuterRef('pk'),
i = None datetime__lte=form_data['date']
trans = list(obj.transactions.all()) ).order_by().values('card').annotate(s=Sum('value')).values('s')
if trans: qs = self.organizer.issued_gift_cards.filter(
o = trans[0].order issuance__lte=form_data['date']
if o: ).annotate(
invs = list(o.invoices.all()) cached_value=Coalesce(Subquery(s), Decimal('0.00')),
if invs: ).order_by('issuance').prefetch_related(
i = invs[-1] 'transactions', 'transactions__order', 'transactions__order__event', 'transactions__order__invoices'
row = [ )
obj.secret,
_('Yes') if obj.testmode else _('No'),
obj.issuance.astimezone(tz).date().strftime('%Y-%m-%d'),
obj.expires.astimezone(tz).date().strftime('%Y-%m-%d') if obj.expires else '',
obj.conditions or '',
obj.currency,
obj.cached_value,
o.full_code if o else '',
i.number if i else '',
i.date.strftime('%Y-%m-%d') if i else '',
]
yield row
def get_filename(self): if form_data.get('testmode') == 'yes':
return '{}_giftcards'.format(organizer.slug) qs = qs.filter(testmode=True)
elif form_data.get('testmode') == 'no':
qs = qs.filter(testmode=False)
return GiftcardListExporter if form_data.get('state') == 'empty':
qs = qs.filter(cached_value=0)
elif form_data.get('state') == 'valid_value':
qs = qs.exclude(cached_value=0).filter(Q(expires__isnull=True) | Q(expires__gte=form_data['date']))
elif form_data.get('state') == 'expired_value':
qs = qs.exclude(cached_value=0).filter(expires__lt=form_data['date'])
elif form_data.get('state') == 'expired':
qs = qs.filter(expires__lt=form_data['date'])
headers = [
_('Gift card code'),
_('Test mode card'),
_('Creation date'),
_('Expiry date'),
_('Special terms and conditions'),
_('Currency'),
_('Current value'),
_('Created in order'),
_('Last invoice number of order'),
_('Last invoice date of order'),
]
yield headers
tz = get_current_timezone()
for obj in qs:
o = None
i = None
trans = list(obj.transactions.all())
if trans:
o = trans[0].order
if o:
invs = list(o.invoices.all())
if invs:
i = invs[-1]
row = [
obj.secret,
_('Yes') if obj.testmode else _('No'),
obj.issuance.astimezone(tz).date().strftime('%Y-%m-%d'),
obj.expires.astimezone(tz).date().strftime('%Y-%m-%d') if obj.expires else '',
obj.conditions or '',
obj.currency,
obj.cached_value,
o.full_code if o else '',
i.number if i else '',
i.date.strftime('%Y-%m-%d') if i else '',
]
yield row
def get_filename(self):
return '{}_giftcards'.format(self.organizer.slug)
@receiver(register_data_exporters, dispatch_uid="exporter_orderlist") @receiver(register_data_exporters, dispatch_uid="exporter_orderlist")
@@ -1147,9 +1142,9 @@ def register_multievent_i_giftcardredemptionlist_exporter(sender, **kwargs):
@receiver(register_multievent_data_exporters, dispatch_uid="multiexporter_giftcardlist") @receiver(register_multievent_data_exporters, dispatch_uid="multiexporter_giftcardlist")
def register_multievent_i_giftcardlist_exporter(sender, **kwargs): def register_multievent_i_giftcardlist_exporter(sender, **kwargs):
return generate_GiftCardListExporter(sender) return GiftcardListExporter
@receiver(register_multievent_data_exporters, dispatch_uid="multiexporter_giftcardtransactionlist") @receiver(register_multievent_data_exporters, dispatch_uid="multiexporter_giftcardtransactionlist")
def register_multievent_i_giftcardtransactionlist_exporter(sender, **kwargs): def register_multievent_i_giftcardtransactionlist_exporter(sender, **kwargs):
return generate_GiftCardTransactionListExporter(sender) return GiftcardTransactionListExporter