Refs #273 -- Fix broken migration tree and timezone issues

This commit is contained in:
Raphael Michel
2016-10-20 15:10:55 +02:00
parent e5aa337e41
commit 32d00e4313
3 changed files with 45 additions and 28 deletions

View File

@@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2016-10-19 17:57
from __future__ import unicode_literals
from django.db import migrations
def forwards(apps, schema_editor):
Order = apps.get_model('pretixbase', 'Order')
for order in Order.objects.all():
order.expires = order.expires.replace(hour=23, minute=59, second=59)
order.save()
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0040_u2fdevice'),
]
operations = [
migrations.RunPython(forwards)
]

View File

@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2016-10-19 17:57
from __future__ import unicode_literals
import pytz
from django.db import migrations
from django.utils import timezone
def forwards(apps, schema_editor):
Order = apps.get_model('pretixbase', 'Order')
EventSetting = apps.get_model('pretixbase', 'EventSetting')
etz = {
s['object_id']: s['value']
for s in EventSetting.objects.filter(key='timezone').values('object_id', 'value')
}
for order in Order.objects.all():
tz = pytz.timezone(etz.get(order.event_id, 'UTC'))
order.expires = order.expires.astimezone(tz).replace(hour=23, minute=59, second=59)
order.save()
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0041_auto_20161018_1654'),
]
operations = [
migrations.RunPython(forwards)
]

View File

@@ -264,28 +264,37 @@ def _check_positions(event: Event, now_dt: datetime, positions: List[CartPositio
@transaction.atomic
def _create_order(event: Event, email: str, positions: List[CartPosition], now_dt: datetime,
payment_provider: BasePaymentProvider, locale: str=None, address: int=None):
from datetime import date, time
total = sum([c.price for c in positions])
payment_fee = payment_provider.calculate_fee(total)
total += payment_fee
exp_by_date = now_dt + timedelta(days=event.settings.get('payment_term_days', as_type=int))
tz = pytz.timezone(event.settings.timezone)
exp_by_date = now_dt.astimezone(tz) + timedelta(days=event.settings.get('payment_term_days', as_type=int))
exp_by_date = exp_by_date.replace(hour=23, minute=59, second=59, microsecond=0)
if event.settings.get('payment_term_weekdays'):
if exp_by_date.weekday() == 5:
exp_by_date += timedelta(days=2)
elif exp_by_date.weekday() == 6:
exp_by_date += timedelta(days=1)
expires = [exp_by_date]
expires = exp_by_date
if event.settings.get('payment_term_last'):
last_date = event.settings.get('payment_term_last', as_type=datetime)
expires.append(make_aware(last_date, pytz.timezone(event.settings.timezone)))
last_date = make_aware(datetime.combine(
event.settings.get('payment_term_last', as_type=date),
time(hour=23, minute=59, second=59)
), tz)
if last_date < expires:
expires = last_date
order = Order.objects.create(
status=Order.STATUS_PENDING,
event=event,
email=email,
datetime=now_dt,
expires=min(expires).replace(hour=23, minute=59, second=59),
expires=expires,
locale=locale,
total=total,
payment_fee=payment_fee,