Fix #978 -- Allow to split names (#1049)

- [x] attendee names
- [x] Invoice address names
- [x] Data migration
- [x] API serializers
  - [x] orderposition
  - [x] cartposition
  - [x] invoiceaddress
  - [x] checkinlistposition
- [x] position API search
- [x] invoice API search
- [x] business/individual required toggle
- [x] Split columns in CSV exports
- [x] ticket editor
- [x] shredder
- [x] ticket/invoice sample data
- [x] order search
- [x] Handle changed naming scheme
- [x] tests
- [x] make use in:
  - [x] Boabee
  - [x] Certificate download order
  - [x] Badge download order
  - [x] Ticket download order
- [x] Document new MySQL requirement
- [x] Plugins
This commit is contained in:
Raphael Michel
2018-11-05 15:43:21 +01:00
committed by GitHub
parent 7039374588
commit 94be46ffdb
71 changed files with 1219 additions and 244 deletions

View File

@@ -45,7 +45,7 @@ def dashboard_env():
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="Peter"
attendee_name_parts={"full_name": "Peter"}
)
OrderPosition.objects.create(
order=order_paid,
@@ -77,7 +77,7 @@ def test_dashboard_pending_not_count(dashboard_env):
item=dashboard_env[4],
variation=None,
price=Decimal("23"),
attendee_name="NotPaid"
attendee_name_parts={'full_name': "NotPaid"}
)
assert '0/2' in c[0]['content']
@@ -149,14 +149,14 @@ def checkin_list_env():
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="Pending"
attendee_name_parts={'full_name': "Pending"}
)
op_a1_ticket = OrderPosition.objects.create(
order=order_a1,
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="A1"
attendee_name_parts={'full_name': "A1"}
)
op_a1_mascot = OrderPosition.objects.create(
order=order_a1,
@@ -169,14 +169,14 @@ def checkin_list_env():
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="A2"
attendee_name_parts={'full_name': "A2"}
)
op_a3_ticket = OrderPosition.objects.create(
order=order_a3,
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="a4", # a3 attendee is a4
attendee_name_parts={'full_name': "a4"}, # a3 attendee is a4
attendee_email="a3company@dummy.test"
)
@@ -339,14 +339,14 @@ def checkin_list_with_addon_env():
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="Pending"
attendee_name_parts={'full_name': "Pending"}
)
op_a1_ticket = OrderPosition.objects.create(
order=order_a1,
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="A1"
attendee_name_parts={'full_name': "A1"}
)
op_a1_workshop = OrderPosition.objects.create(
order=order_a1,
@@ -360,7 +360,7 @@ def checkin_list_with_addon_env():
item=item_ticket,
variation=None,
price=Decimal("23"),
attendee_name="A2"
attendee_name_parts={'full_name': "A2"}
)
# checkin

View File

@@ -187,13 +187,13 @@ class QuestionsTest(ItemFormTest):
expires=now() + datetime.timedelta(days=10),
total=14, locale='en')
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
attendee_name="Peter")
attendee_name_parts={'full_name': "Peter"})
op.answers.create(question=c, answer='42')
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
attendee_name="Michael")
attendee_name_parts={'full_name': "Michael"})
op.answers.create(question=c, answer='42')
op = OrderPosition.objects.create(order=o, item=item1, variation=None, price=Decimal("14"),
attendee_name="Petra")
attendee_name_parts={'full_name': "Petra"})
op.answers.create(question=c, answer='39')
doc = self.get_doc('/control/event/%s/%s/questions/%s/' % (self.orga1.slug, self.event1.slug, c.id))
@@ -414,7 +414,7 @@ class ItemsTest(ItemFormTest):
item=self.item1,
variation=None,
price=Decimal("14"),
attendee_name="Peter"
attendee_name_parts={'full_name': "Peter"}
)
self.client.post('/control/event/%s/%s/items/%d/delete' % (self.orga1.slug, self.event1.slug, self.item1.id),
{})

View File

@@ -51,7 +51,7 @@ def env():
item=ticket,
variation=None,
price=Decimal("14"),
attendee_name="Peter"
attendee_name_parts={'full_name': "Peter", "_scheme": "full"}
)
return event, user, o, ticket
@@ -333,7 +333,7 @@ def test_order_invoice_create_ok(client, env):
def test_order_invoice_regenerate(client, env):
client.login(email='dummy@dummy.dummy', password='dummy')
i = generate_invoice(env[2])
InvoiceAddress.objects.create(name='Foo', order=env[2])
InvoiceAddress.objects.create(name_parts={'full_name': 'Foo', "_scheme": "full"}, order=env[2])
env[0].settings.set('invoice_generate', 'admin')
response = client.post('/control/event/dummy/dummy/orders/FOO/invoices/%d/regenerate' % i.pk, {}, follow=True)
assert 'alert-success' in response.rendered_content
@@ -362,7 +362,7 @@ def test_order_invoice_regenerate_unknown(client, env):
def test_order_invoice_reissue(client, env):
client.login(email='dummy@dummy.dummy', password='dummy')
i = generate_invoice(env[2])
InvoiceAddress.objects.create(name='Foo', order=env[2])
InvoiceAddress.objects.create(name_parts={'full_name': 'Foo', "_scheme": "full"}, order=env[2])
env[0].settings.set('invoice_generate', 'admin')
response = client.post('/control/event/dummy/dummy/orders/FOO/invoices/%d/reissue' % i.pk, {}, follow=True)
assert 'alert-success' in response.rendered_content
@@ -528,7 +528,7 @@ def test_order_extend_expired_quota_partial(client, env):
item=env[3],
variation=None,
price=Decimal("14"),
attendee_name="Peter"
attendee_name_parts={'full_name': "Peter", "_scheme": "full"}
)
o.expires = now() - timedelta(days=5)
o.status = Order.STATUS_EXPIRED
@@ -745,11 +745,11 @@ class OrderChangeTests(SoupTest):
default_price=Decimal('12.00'))
self.op1 = OrderPosition.objects.create(
order=self.order, item=self.ticket, variation=None,
price=Decimal("23.00"), attendee_name="Peter"
price=Decimal("23.00"), attendee_name_parts={'full_name': "Peter", "_scheme": "full"}
)
self.op2 = OrderPosition.objects.create(
order=self.order, item=self.ticket, variation=None,
price=Decimal("23.00"), attendee_name="Dieter"
price=Decimal("23.00"), attendee_name_parts={'full_name': "Dieter", "_scheme": "full"}
)
self.quota = self.event.quotas.create(name="All", size=100)
self.quota.items.add(self.ticket)

View File

@@ -30,7 +30,7 @@ class OrderSearchTest(SoupTest):
datetime=now(), expires=now() + datetime.timedelta(days=10),
total=14, locale='en'
)
InvoiceAddress.objects.create(order=o1, company="Test Ltd.", name="Peter Miller")
InvoiceAddress.objects.create(order=o1, company="Test Ltd.", name_parts={'full_name': "Peter Miller", "_scheme": "full"})
ticket1 = Item.objects.create(event=self.event1, name='Early-bird ticket',
category=None, default_price=23,
admission=True)
@@ -39,7 +39,7 @@ class OrderSearchTest(SoupTest):
item=ticket1,
variation=None,
price=Decimal("14"),
attendee_name="Peter",
attendee_name_parts={'full_name': "Peter", "_scheme": "full"},
attendee_email="att@att.com"
)
@@ -57,7 +57,7 @@ class OrderSearchTest(SoupTest):
item=ticket2,
variation=None,
price=Decimal("14"),
attendee_name="Mark"
attendee_name_parts={'full_name': "Mark", "_scheme": "full"}
)
self.team = Team.objects.create(organizer=self.orga1, can_view_orders=True)