Fix #273 -- Set correct all order expiry times to the end of the day

This commit is contained in:
Raphael Michel
2016-10-20 11:39:22 +02:00
parent bbca4e3d64
commit f22596a5a5
7 changed files with 40 additions and 16 deletions

View File

@@ -0,0 +1,23 @@
# -*- 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

@@ -4,19 +4,20 @@ from datetime import datetime, timedelta
from decimal import Decimal
from typing import List, Optional
import pytz
from celery.exceptions import MaxRetriesExceededError
from django.db import transaction
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.timezone import now
from django.utils.timezone import make_aware, now
from django.utils.translation import ugettext as _
from pretix.base.i18n import (
LazyDate, LazyLocaleException, LazyNumber, language,
)
from pretix.base.models import (
CartPosition, Event, Item, ItemVariation, Order, OrderPosition,
Quota, User,
CartPosition, Event, Item, ItemVariation, Order, OrderPosition, Quota,
User,
)
from pretix.base.models.orders import InvoiceAddress
from pretix.base.payment import BasePaymentProvider
@@ -276,13 +277,15 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
expires = [exp_by_date]
if event.settings.get('payment_term_last'):
expires.append(event.settings.get('payment_term_last', as_type=datetime))
last_date = event.settings.get('payment_term_last', as_type=datetime)
expires.append(make_aware(last_date, pytz.timezone(event.settings.timezone)))
order = Order.objects.create(
status=Order.STATUS_PENDING,
event=event,
email=email,
datetime=now_dt,
expires=min(expires),
expires=min(expires).replace(hour=23, minute=59, second=59),
locale=locale,
total=total,
payment_fee=payment_fee,
@@ -361,9 +364,8 @@ def _perform_order(event: str, payment_provider: str, position_ids: List[str],
@receiver(signal=periodic_task)
def expire_orders(sender, **kwargs):
eventcache = {}
today = now().replace(hour=0, minute=0, second=0)
for o in Order.objects.filter(expires__lt=today, status=Order.STATUS_PENDING).select_related('event'):
for o in Order.objects.filter(expires__lt=now(), status=Order.STATUS_PENDING).select_related('event'):
expire = eventcache.get(o.event.pk, None)
if expire is None:
expire = o.event.settings.get('payment_term_expire_automatically', as_type=bool)

View File

@@ -197,12 +197,12 @@ class PaymentSettingsForm(SettingsForm):
label=_('Payment term in days'),
help_text=_("The number of days after placing an order the user has to pay to preserve his reservation."),
)
payment_term_last = forms.DateTimeField(
payment_term_last = forms.DateField(
label=_('Last date of payments'),
help_text=_("The last date any payments are accepted. This has precedence over the number of "
"days configured above."),
required=False,
widget=forms.DateTimeInput(attrs={'class': 'datetimepicker'})
widget=forms.DateInput(attrs={'class': 'datepickerfield'})
)
payment_term_weekdays = forms.BooleanField(
label=_('Only end payment terms on weekdays'),

View File

@@ -13,13 +13,14 @@ class ExtendForm(I18nModelForm):
model = Order
fields = ['expires']
widgets = {
'expires': forms.DateTimeInput(attrs={'class': 'datetimepicker'}),
'expires': forms.DateInput(attrs={'class': 'datepickerfield'}),
}
def clean(self):
data = super().clean()
if data['expires'] < now():
raise ValidationError(_('The new expiry date needs to be in the future.'))
data['expires'] = data['expires'].replace(hour=23, minute=59, second=59)
return data

View File

@@ -1,8 +1,8 @@
from django.conf.urls import include, url
from pretix.control.views import (
auth, dashboards, event, help, item, main, orders, organizer,
user, vouchers,
auth, dashboards, event, help, item, main, orders, organizer, user,
vouchers,
)
urlpatterns = [

View File

@@ -13,8 +13,7 @@ from django.views.generic import DetailView, ListView, TemplateView, View
from pretix.base.i18n import language
from pretix.base.models import (
CachedFile, CachedTicket, Invoice, Item, ItemVariation, Order,
Quota,
CachedFile, CachedTicket, Invoice, Item, ItemVariation, Order, Quota,
)
from pretix.base.services import tickets
from pretix.base.services.export import export

View File

@@ -6,8 +6,7 @@ from tests.base import SoupTest, extract_form_fields
from pretix.base.models import (
Event, EventPermission, Item, ItemCategory, ItemVariation, Order,
OrderPosition, Organizer, OrganizerPermission, Question,
Quota, User,
OrderPosition, Organizer, OrganizerPermission, Question, Quota, User,
)