def test_checkout(self): request = FakeRequest() PaymentsEventMeta.get_or_create_dummy() order, unused = Order.get_or_create_dummy() # TODO write better tests # now we just check it doesn't throw order.checkout_mac(request) order.checkout_return_url(request)
def setup_payments(self): from payments.models import PaymentsEventMeta PaymentsEventMeta.get_or_create_dummy(event=self.event)
def handle(self, *args, **opts): from core.models import Event, Organization, Venue from enrollment.models import EnrollmentEventMeta from payments.models import PaymentsEventMeta from tickets.models import TicketsEventMeta, LimitGroup, Product, ShirtType, ShirtSize tz = tzlocal() organization = Organization.objects.get(slug='tracon-ry') venue, unused = Venue.objects.get_or_create( name='Ilmoitetaan myöhemmin') event, unused = Event.objects.get_or_create( slug='traconpaidat2019', defaults=dict( public=False, name='Traconin edustuspaitatilaus 2019', name_genitive='Traconin edustuspaitatilauksen', name_illative='Traconin edustuspaitatilaukseen', name_inessive='Traconin edustuspaitatilauksen', homepage_url='http://ry.tracon.fi/', organization=organization, start_time=datetime(2019, 9, 6, 10, 0, tzinfo=tz), end_time=datetime(2019, 9, 8, 22, 0, tzinfo=tz), venue=venue, )) tickets_admin_group, pos_access_group = TicketsEventMeta.get_or_create_groups( event, ['admins', 'pos']) payments_admin_group, = PaymentsEventMeta.get_or_create_groups( event, ['admins']) tracon_payments = PaymentsEventMeta.objects.get( event__slug='tracon2019') PaymentsEventMeta.objects.get_or_create( event=event, defaults=dict( admin_group=payments_admin_group, checkout_delivery_date='20190906', checkout_merchant=tracon_payments.checkout_merchant, checkout_password=tracon_payments.checkout_password, ), ) defaults = dict( admin_group=tickets_admin_group, pos_access_group=pos_access_group, due_days=14, shipping_and_handling_cents=0, reference_number_template="2019{:06d}", contact_email='Traconin lipunmyynti <*****@*****.**>', front_page_text= ("<h2>Tervetuloa tilaamaan Traconin edustustuotteita!</h2>" "<p>Omavastuuosuus maksetaan suomalaisilla verkkopankkitunnuksilla heti tilauksen yhteydessä.</p>" "<p>Huomaathan, että vaikka Toimitusosoite-vaiheessa kysytään postiosoitetta, edustustuotteita ei pääsääntöisesti postiteta. Edustustuotteita jaetaan conitean tilaisuuksissa kuten workshopeissa, ja voit sopia noudosta myös muiden tapahtumien edustuspöydiltä. Viimeistään saat edustustuotteesi Traconissa.</p>" "<p><strong>TÄRKEÄÄ:</strong> Lue kaikki ohjeet huolellisesti, sillä sovellamme verkkokauppaa sellaiseen käyttötarkoitukseen johon sitä ei ole suunniteltu. Erityisesti nimikoinnin ohjeet seuraavalla sivulla ovat epäintuitiiviset. Sori siitä.</p>" ), ) if settings.DEBUG: t = now() defaults.update( ticket_sales_starts=t - timedelta(days=60), ticket_sales_ends=t + timedelta(days=60), ) meta, unused = TicketsEventMeta.objects.get_or_create( event=event, defaults=defaults) def limit_group(description, limit): limit_group, unused = LimitGroup.objects.get_or_create( event=event, description=description, defaults=dict(limit=limit), ) return limit_group def limit_group(description, limit): limit_group, unused = LimitGroup.objects.get_or_create( event=event, description=description, defaults=dict(limit=limit), ) return limit_group for index, product_info in enumerate([ dict( name='Kauluspaita tai huppari', description= ('Teknisistä syistä kauluspaidat ja hupparit on tässä niputettu samaan tuotteeseen. ' 'Syötä tässä lukumääräksi haluamiesi paitojen ja hupparien yhteenlaskettu määrä. ' 'Pääset seuraavassa vaiheessa valitsemaan, tilaatko paidan, hupparin vai molemmat, ' 'sekä valitsemaan värit ja koot.</p>' '<p><strong>TÄRKEÄÄ:</strong> Tilattavien tuotteiden enimmäismäärä on 3 kpl per hlö,' 'mutta verkkokauppa ei valvo tätä. Jos tilaat yli 3 kpl, aiheuttaa tilauksesi peruminen ' 'ja rahojen palautus vaivalloista käsityötä.'), limit_groups=[ limit_group('Edustustuotteet', 9999), ], price_cents=1500, requires_shipping=False, electronic_ticket=False, requires_shirt_size=True, available=True, ), dict( name='Nimikointi', description= ('Jos haluat kauluspaitasi tai hupparisi nimikoituna, lisää tilaukseesi yhtä monta tätä tuotetta kuin tilaat huppareita tai kauluspaitoja.</p>' '<p><strong>TÄRKEÄÄ:</strong> Jos tilaat nimikointeja, nimikointien määrän täytyy olla sama kuin tilattujen hupparien/kauluspaitojen määrän. ' 'Verkkokauppa ei tarkista tätä automaattisesti, joten ole huolellinen tai aiheutat lisätyötä. ' 'Jos haluat tilata sekä nimikoituja että nimikoimattomia tuotteita, tee niistä erilliset tilaukset. </p>' '<p><strong>Syötä nimikointiteksti Toimitusosoite-vaiheessa Etunimi-kenttään, vaikkei se olisi oikea etunimesi.</strong>' ), limit_groups=[ limit_group('Nimikoinnit', 9999), ], price_cents=500, requires_shipping=False, electronic_ticket=False, requires_shirt_size=False, available=True, ), ]): name = product_info.pop('name') limit_groups = product_info.pop('limit_groups') product, unused = Product.objects.get_or_create( event=event, name=name, defaults=dict(product_info, ordering=index * 10), ) if not product.limit_groups.exists(): product.limit_groups.set(limit_groups) product.save() for shirt_type_slug, shirt_type_name, shirt_size_names in [ ('huppari-musta', 'Huppari, musta', ['XS', 'S', 'M', 'L', 'XL', '2XL', '3XL']), ('huppari-punainen', 'Huppari, punainen', ['XS', 'S', 'M', 'L', 'XL', '2XL', '3XL']), ('kauluspaita-miehet', 'Miesten kauluspaita, musta', ['S', 'M', 'L', 'XL', '2XL', '3XL', '4XL']), ('kauluspaita-naiset', 'Naisten kauluspaita, musta', ['S', 'M', 'L', 'XL', '2XL', '3XL', '4XL']), ]: shirt_type, created = ShirtType.objects.get_or_create( event=event, slug=shirt_type_slug, defaults=dict(name=shirt_type_name, ), ) if created: for shirt_size_name in shirt_size_names: ShirtSize.objects.get_or_create( type=shirt_type, slug=shirt_size_name, defaults=dict(name=shirt_size_name, ), )
def handle(self, *args, **opts): from core.models import Event, Organization, Venue from enrollment.models import EnrollmentEventMeta from payments.models import PaymentsEventMeta from tickets.models import TicketsEventMeta, LimitGroup, Product, ShirtType, ShirtSize tz = tzlocal() organization = Organization.objects.get(slug='tracon-ry') venue, unused = Venue.objects.get_or_create(name='Ilmoitetaan myöhemmin') event, unused = Event.objects.get_or_create( slug='traconpaidat2019', defaults=dict( public=False, name='Traconin edustuspaitatilaus 2019', name_genitive='Traconin edustuspaitatilauksen', name_illative='Traconin edustuspaitatilaukseen', name_inessive='Traconin edustuspaitatilauksen', homepage_url='http://ry.tracon.fi/', organization=organization, start_time=datetime(2019, 9, 6, 10, 0, tzinfo=tz), end_time=datetime(2019, 9, 8, 22, 0, tzinfo=tz), venue=venue, ) ) tickets_admin_group, pos_access_group = TicketsEventMeta.get_or_create_groups(event, ['admins', 'pos']) payments_admin_group, = PaymentsEventMeta.get_or_create_groups(event, ['admins']) tracon_payments = PaymentsEventMeta.objects.get(event__slug='tracon2019') PaymentsEventMeta.objects.get_or_create( event=event, defaults=dict( admin_group=payments_admin_group, checkout_delivery_date='20190906', checkout_merchant=tracon_payments.checkout_merchant, checkout_password=tracon_payments.checkout_password, ), ) defaults = dict( admin_group=tickets_admin_group, pos_access_group=pos_access_group, due_days=14, shipping_and_handling_cents=0, reference_number_template="2019{:06d}", contact_email='Traconin lipunmyynti <*****@*****.**>', front_page_text=( "<h2>Tervetuloa tilaamaan Traconin edustustuotteita!</h2>" "<p>Omavastuuosuus maksetaan suomalaisilla verkkopankkitunnuksilla heti tilauksen yhteydessä.</p>" "<p>Huomaathan, että vaikka Toimitusosoite-vaiheessa kysytään postiosoitetta, edustustuotteita ei pääsääntöisesti postiteta. Edustustuotteita jaetaan conitean tilaisuuksissa kuten workshopeissa, ja voit sopia noudosta myös muiden tapahtumien edustuspöydiltä. Viimeistään saat edustustuotteesi Traconissa.</p>" "<p><strong>TÄRKEÄÄ:</strong> Lue kaikki ohjeet huolellisesti, sillä sovellamme verkkokauppaa sellaiseen käyttötarkoitukseen johon sitä ei ole suunniteltu. Erityisesti nimikoinnin ohjeet seuraavalla sivulla ovat epäintuitiiviset. Sori siitä.</p>" ), ) if settings.DEBUG: t = now() defaults.update( ticket_sales_starts=t - timedelta(days=60), ticket_sales_ends=t + timedelta(days=60), ) meta, unused = TicketsEventMeta.objects.get_or_create(event=event, defaults=defaults) def limit_group(description, limit): limit_group, unused = LimitGroup.objects.get_or_create( event=event, description=description, defaults=dict(limit=limit), ) return limit_group def limit_group(description, limit): limit_group, unused = LimitGroup.objects.get_or_create( event=event, description=description, defaults=dict(limit=limit), ) return limit_group for index, product_info in enumerate([ dict( name='Kauluspaita tai huppari', description=( 'Teknisistä syistä kauluspaidat ja hupparit on tässä niputettu samaan tuotteeseen. ' 'Syötä tässä lukumääräksi haluamiesi paitojen ja hupparien yhteenlaskettu määrä. ' 'Pääset seuraavassa vaiheessa valitsemaan, tilaatko paidan, hupparin vai molemmat, ' 'sekä valitsemaan värit ja koot.</p>' '<p><strong>TÄRKEÄÄ:</strong> Tilattavien tuotteiden enimmäismäärä on 3 kpl per hlö,' 'mutta verkkokauppa ei valvo tätä. Jos tilaat yli 3 kpl, aiheuttaa tilauksesi peruminen ' 'ja rahojen palautus vaivalloista käsityötä.' ), limit_groups=[ limit_group('Edustustuotteet', 9999), ], price_cents=1500, requires_shipping=False, electronic_ticket=False, requires_shirt_size=True, available=True, ), dict( name='Nimikointi', description=( 'Jos haluat kauluspaitasi tai hupparisi nimikoituna, lisää tilaukseesi yhtä monta tätä tuotetta kuin tilaat huppareita tai kauluspaitoja.</p>' '<p><strong>TÄRKEÄÄ:</strong> Jos tilaat nimikointeja, nimikointien määrän täytyy olla sama kuin tilattujen hupparien/kauluspaitojen määrän. ' 'Verkkokauppa ei tarkista tätä automaattisesti, joten ole huolellinen tai aiheutat lisätyötä. ' 'Jos haluat tilata sekä nimikoituja että nimikoimattomia tuotteita, tee niistä erilliset tilaukset. </p>' '<p><strong>Syötä nimikointiteksti Toimitusosoite-vaiheessa Etunimi-kenttään, vaikkei se olisi oikea etunimesi.</strong>' ), limit_groups=[ limit_group('Nimikoinnit', 9999), ], price_cents=500, requires_shipping=False, electronic_ticket=False, requires_shirt_size=False, available=True, ), ]): name = product_info.pop('name') limit_groups = product_info.pop('limit_groups') product, unused = Product.objects.get_or_create( event=event, name=name, defaults=dict(product_info, ordering=index * 10), ) if not product.limit_groups.exists(): product.limit_groups.set(limit_groups) product.save() for shirt_type_slug, shirt_type_name, shirt_size_names in [ ('huppari-musta', 'Huppari, musta', ['XS', 'S', 'M', 'L', 'XL', '2XL', '3XL']), ('huppari-punainen', 'Huppari, punainen', ['XS', 'S', 'M', 'L', 'XL', '2XL', '3XL']), ('kauluspaita-miehet', 'Miesten kauluspaita, musta', ['S', 'M', 'L', 'XL', '2XL', '3XL', '4XL']), ('kauluspaita-naiset', 'Naisten kauluspaita, musta', ['S', 'M', 'L', 'XL', '2XL', '3XL', '4XL']), ]: shirt_type, created = ShirtType.objects.get_or_create( event=event, slug=shirt_type_slug, defaults=dict( name=shirt_type_name, ), ) if created: for shirt_size_name in shirt_size_names: ShirtSize.objects.get_or_create( type=shirt_type, slug=shirt_size_name, defaults=dict( name=shirt_size_name, ), )