mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Fix #273 -- Set correct all order expiry times to the end of the day
This commit is contained in:
23
src/pretix/base/migrations/0041_auto_20161019_1757.py
Normal file
23
src/pretix/base/migrations/0041_auto_20161019_1757.py
Normal 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)
|
||||
]
|
||||
@@ -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)
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user