Add sub-events and relative date settings (#503)

* Data model

* little crud

* SubEventItemForm etc

* Drop SubEventItem.active, quota editor

* Fix failing tests

* First frontend stuff

* Addons form stuff

* Quota calculation

* net price display on EventIndex

* Add tests, solve some bugs

* Correct quota selection in more places, consolidate pricing logic

* Fix failing quota tests

* Fix TypeError

* Add tests for checkout

* Fixed a bug in QuotaForm

* Prevent immutable cart if a quota was removed from an item

* Add tests for pricing

* Handle waiting list

* Filter in check-in list

* Fixed import lost in rebase

* Fix waiting list widget

* Voucher management

* Voucher redemption

* Fix broken tests

* Add subevents to OrderChangeManager

* Create a subevent during event creation

* Fix bulk voucher creation

* Introduce subevent.active

* Copy from for subevents

* Show active in list

* ICal download for subevents

* Check start and end of presale

* Failing tests / show cart logic

* Test

* Rebase migrations

* REST API integration of sub-events

* Integrate quota calculation into the traditional quota form

* Make subevent argument to add_position optional

* Log-display foo

* pretixdroid and subevents

* Filter by subevent

* Add more tests

* Some mor tests

* Rebase fixes

* More tests

* Relative dates

* Restrict selection in relative datetime widgets

* Filter subevent list

* Re-label has_subevents

* Rebase fixes, subevents in calendar view

* Performance and caching issues

* Refactor calendar templates

* Permission tests

* Calendar fixes and month selection

* subevent selection

* Rename subevents to dates

* Add tests for calendar views
This commit is contained in:
Raphael Michel
2017-07-11 13:56:00 +02:00
committed by GitHub
parent 554800c06f
commit 8123effa65
141 changed files with 5920 additions and 1012 deletions

View File

@@ -45,3 +45,11 @@ def token_client(client, team):
t = team.tokens.create(name='Foo')
client.credentials(HTTP_AUTHORIZATION='Token ' + t.token)
return client
@pytest.fixture
def subevent(event):
event.has_subevents = True
event.save()
return event.subevents.create(name="Foobar",
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))

View File

@@ -12,6 +12,7 @@ TEST_EVENT_RES = {
"presale_end": None,
"location": None,
"slug": "dummy",
"has_subevents": False,
}

View File

@@ -192,12 +192,13 @@ TEST_QUOTA_RES = {
"name": "Budget Quota",
"size": 200,
"items": [],
"variations": []
"variations": [],
"subevent": None
}
@pytest.mark.django_db
def test_quota_list(token_client, organizer, event, quota, item):
def test_quota_list(token_client, organizer, event, quota, item, subevent):
res = dict(TEST_QUOTA_RES)
res["id"] = quota.pk
res["items"] = [item.pk]
@@ -206,6 +207,16 @@ def test_quota_list(token_client, organizer, event, quota, item):
assert resp.status_code == 200
assert [res] == resp.data['results']
quota.subevent = subevent
quota.save()
res["subevent"] = subevent.pk
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk + 1))
assert [] == resp.data['results']
@pytest.mark.django_db
def test_quota_detail(token_client, organizer, event, quota, item):

View File

@@ -57,7 +57,8 @@ TEST_ORDERPOSITION_RES = {
"addon_to": None,
"checkins": [],
"downloads": [],
"answers": []
"answers": [],
"subevent": None
}
TEST_ORDER_RES = {
"code": "FOO",
@@ -142,7 +143,7 @@ def test_order_detail(token_client, organizer, event, order, item):
@pytest.mark.django_db
def test_orderposition_list(token_client, organizer, event, order, item):
def test_orderposition_list(token_client, organizer, event, order, item, subevent):
var = item.variations.create(value="Children")
res = dict(TEST_ORDERPOSITION_RES)
op = order.positions.first()
@@ -206,12 +207,24 @@ def test_orderposition_list(token_client, organizer, event, order, item):
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug))
assert [] == resp.data['results']
order.positions.first().checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC))
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC))
res['checkins'] = [{'datetime': '2017-12-26T10:00:00Z'}]
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug))
assert [res] == resp.data['results']
op.subevent = subevent
op.save()
res['subevent'] = subevent.pk
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?subevent={}'.format(organizer.slug, event.slug,
subevent.pk + 1))
assert [] == resp.data['results']
@pytest.mark.django_db
def test_orderposition_detail(token_client, organizer, event, order, item):

View File

@@ -0,0 +1,42 @@
import pytest
TEST_SUBEVENT_RES = {
'active': False,
'presale_start': None,
'date_to': None,
'date_admission': None,
'name': {'en': 'Foobar'},
'date_from': '2017-12-27T10:00:00Z',
'presale_end': None,
'id': 1,
'variation_price_overrides': [],
'location': None,
'item_price_overrides': []
}
@pytest.mark.django_db
def test_subevent_list(token_client, organizer, event, subevent):
res = dict(TEST_SUBEVENT_RES)
res["id"] = subevent.pk
resp = token_client.get('/api/v1/organizers/{}/events/{}/subevents/'.format(organizer.slug, event.slug))
assert resp.status_code == 200
print(dict(resp.data['results'][0]))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/subevents/?active=false'.format(organizer.slug, event.slug))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/subevents/?active=true'.format(organizer.slug, event.slug))
assert [] == resp.data['results']
@pytest.mark.django_db
def test_subevent_detail(token_client, organizer, event, subevent):
res = dict(TEST_SUBEVENT_RES)
res["id"] = subevent.pk
resp = token_client.get('/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug,
subevent.pk))
assert resp.status_code == 200
assert res == resp.data

View File

@@ -35,12 +35,13 @@ TEST_VOUCHER_RES = {
'variation': None,
'quota': None,
'tag': 'Foo',
'comment': ''
'comment': '',
'subevent': None
}
@pytest.mark.django_db
def test_voucher_list(token_client, organizer, event, voucher, item, quota):
def test_voucher_list(token_client, organizer, event, voucher, item, quota, subevent):
res = dict(TEST_VOUCHER_RES)
res['item'] = item.pk
res['id'] = voucher.pk
@@ -187,6 +188,18 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota):
)
assert [res] == resp.data['results']
voucher.subevent = subevent
voucher.save()
res['subevent'] = subevent.pk
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug,
subevent.pk + 1))
assert [] == resp.data['results']
@pytest.mark.django_db
def test_voucher_detail(token_client, organizer, event, voucher, item):

View File

@@ -28,12 +28,13 @@ TEST_WLE_RES = {
"voucher": None,
"item": 2,
"variation": None,
"locale": "en"
"locale": "en",
"subevent": None,
}
@pytest.mark.django_db
def test_wle_list(token_client, organizer, event, wle, item):
def test_wle_list(token_client, organizer, event, wle, item, subevent):
var = item.variations.create(value="Children")
res = dict(TEST_WLE_RES)
wle.variation = var
@@ -91,6 +92,18 @@ def test_wle_list(token_client, organizer, event, wle, item):
'/api/v1/organizers/{}/events/{}/waitinglistentries/?has_voucher=true'.format(organizer.slug, event.slug))
assert [res] == resp.data['results']
wle.subevent = subevent
wle.save()
res['subevent'] = subevent.pk
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
assert [res] == resp.data['results']
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug,
subevent.pk + 1))
assert [] == resp.data['results']
@pytest.mark.django_db
def test_wle_detail(token_client, organizer, event, wle, item):