forked from CGM_Public/pretix_original
Allow to modify answers for pending orders
This commit is contained in:
25
src/pretix/base/migrations/0018_auto_20150314_1232.py
Normal file
25
src/pretix/base/migrations/0018_auto_20150314_1232.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import versions.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pretixbase', '0017_auto_20150308_1507'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='order',
|
||||
name='status',
|
||||
field=models.CharField(verbose_name='Status', choices=[('p', 'pending'), ('n', 'paid'), ('e', 'expired'), ('c', 'cancelled'), ('r', 'refunded')], max_length=3),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='orderposition',
|
||||
name='order',
|
||||
field=versions.models.VersionedForeignKey(verbose_name='Order', to='pretixbase.Order', related_name='positions'),
|
||||
),
|
||||
]
|
||||
@@ -1,3 +1,4 @@
|
||||
from datetime import datetime
|
||||
from itertools import product
|
||||
import copy
|
||||
import uuid
|
||||
@@ -1327,6 +1328,19 @@ class Order(Versionable):
|
||||
self.code = code
|
||||
return
|
||||
|
||||
@property
|
||||
def can_modify_answers(self):
|
||||
if self.status not in (Order.STATUS_PENDING, Order.STATUS_PAID, Order.STATUS_EXPIRED):
|
||||
return False
|
||||
modify_deadline = self.event.settings.get('last_order_modification_date', as_type=datetime)
|
||||
if modify_deadline is not None and now() > modify_deadline:
|
||||
return False
|
||||
ask_names = self.event.settings.get('attendee_names_asked', as_type=bool)
|
||||
for cp in self.positions.all().prefetch_related('item__questions'):
|
||||
if (cp.item.admission and ask_names) or cp.item.questions.all():
|
||||
return True
|
||||
return False # nothing there to modify
|
||||
|
||||
|
||||
class QuestionAnswer(Versionable):
|
||||
"""
|
||||
@@ -1376,7 +1390,8 @@ class OrderPosition(ObjectWithAnswers, Versionable):
|
||||
"""
|
||||
order = VersionedForeignKey(
|
||||
Order,
|
||||
verbose_name=_("Order")
|
||||
verbose_name=_("Order"),
|
||||
related_name='positions'
|
||||
)
|
||||
item = VersionedForeignKey(
|
||||
Item,
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from datetime import datetime, date, time
|
||||
import json
|
||||
import decimal
|
||||
|
||||
import dateutil.parser
|
||||
from django.db.models import Model
|
||||
from versions.models import Versionable
|
||||
|
||||
@@ -11,6 +13,7 @@ DEFAULTS = {
|
||||
'attendee_names_asked': 'True',
|
||||
'attendee_names_required': 'False',
|
||||
'reservation_time': '30',
|
||||
'last_order_modification_date': None,
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +54,12 @@ class SettingsProxy:
|
||||
return json.loads(value)
|
||||
elif as_type == bool:
|
||||
return value == 'True'
|
||||
elif as_type == datetime:
|
||||
return dateutil.parser.parse(value)
|
||||
elif as_type == date:
|
||||
return dateutil.parser.parse(value).date()
|
||||
elif as_type == time:
|
||||
return dateutil.parser.parse(value).time()
|
||||
elif as_type == decimal.Decimal:
|
||||
return decimal.Decimal(value)
|
||||
elif issubclass(as_type, Versionable):
|
||||
@@ -67,6 +76,8 @@ class SettingsProxy:
|
||||
return str(value)
|
||||
elif isinstance(value, list) or isinstance(value, dict):
|
||||
return json.dumps(value)
|
||||
elif isinstance(value, datetime) or isinstance(value, date) or isinstance(value, time):
|
||||
return value.isoformat()
|
||||
elif isinstance(value, Versionable):
|
||||
return value.identity
|
||||
elif isinstance(value, Model):
|
||||
|
||||
Reference in New Issue
Block a user