def create_all_variations(self): myslug = self.product.slug myname=self.product.name site = self.product.site to_insert = {'variants':[]} for date in self.dates.all(): for group in self.hallscheme.groups.all(): for seat in group.seats.all(): slug = slugify(cyr2lat('%s_%s_%s' % (myslug, date.__unicode__(), seat.__unicode__()))) name=u"%s :: %s :: %s" % (myname, date.__unicode__(), seat.__unicode__()) to_insert['variants'].append({'name':name, 'slug':slug, 'date':date, 'seat':seat}) products = Product.objects.bulk_create([ Product( site=site, name=u"%s :: %s :: %s" % (myname, variant['date'].__unicode__(), variant['seat'].__unicode__()), items_in_stock=1, active=True, slug="%s" % slugify(cyr2lat('%s_%s_%s' % (myslug, variant['date'].__unicode__(), variant['seat'].__unicode__()))) ) for variant in to_insert['variants'] ]) to_insert['products'] = {p.slug: Product.objects.get(slug=p.slug) for p in products} Ticket.objects.bulk_create([ Ticket( product=to_insert['products'][variant['slug']], event=self, datetime=variant['date'], seat=variant['seat'] ) for variant in to_insert['variants'] ]) Price.objects.bulk_create([ Price( product=to_insert['products'][variant['slug']], quantity='1', price=self.prices.filter(group=variant['seat'].group).values('price')[0]['price'], ) for variant in to_insert['variants'] ]) for date in self.dates.all(): date.update_statuses()
def wizard_event(request, step='step0', template='localsite/wizard_event.html'): wizard = request.session.get('wizard') output = {} formsets = [] form = None if step == 'step0': if not wizard: wizard = {} product = Product() if request.method == 'POST': form = ProductForm(request.POST, instance=product) formsets.append(EventFormInline(request.POST, instance=product)) if form.is_valid() and formsets[0].is_valid(): product = form.save(commit=False) product.site = Site.objects.get(id=1) product.slug = slugify(cyr2lat(product.name)) product.save() form.save_m2m() formsets[0].save() event = formsets[0].instance.event wizard['event'] = event wizard['step'] = 1 request.session['wizard'] = wizard for group in event.hallscheme.groups.all(): price = SeatGroupPrice(event=event, group=group) price.save() return HttpResponseRedirect('/wizards/event/step1/') else: form = ProductForm(instance=product) formsets.append(EventFormInline(instance=product)) elif step == 'step1': if not wizard: return HttpResponseRedirect('/wizards/event/') event = wizard['event'] step = wizard['step'] if step != 1: return HttpResponseRedirect('/wizards/event/') if request.method == 'POST': form = SeatGroupPriceFormset(request.POST, queryset=event.prices.all()) if form.is_valid(): form.save() wizard['step'] = 2 request.session['wizard'] = wizard return HttpResponseRedirect('/wizards/event/step2/') else: form = SeatGroupPriceFormset(queryset=event.prices.all()) elif step == 'step2': template='localsite/wizard_event_dates.html' if not wizard: return HttpResponseRedirect('/wizards/event/') event = wizard['event'] step = wizard['step'] if step != 2: return HttpResponseRedirect('/wizards/event/') if request.method == 'POST': formsets.append(EventDateFormInline(request.POST, instance=event)) if formsets[0].is_valid(): formsets[0].save() wizard['step'] = 3 request.session['wizard'] = wizard return HttpResponseRedirect('/wizards/event/step3/') else: formsets.append(EventDateFormInline(instance=event)) elif step == 'step3': template='localsite/wizard_product_images.html' if not wizard: return HttpResponseRedirect('/wizards/event/') event = wizard['event'] step = wizard['step'] if step != 3: return HttpResponseRedirect('/wizards/event/') if request.method == 'POST': formsets.append(ProductImageFormInline(request.POST, request.FILES, instance=event.product)) if formsets[0].is_valid(): formsets[0].save() wizard['step'] = 4 request.session['wizard'] = wizard return HttpResponseRedirect('/wizards/event/step4/') else: formsets.append(ProductImageFormInline(instance=event.product)) elif step == 'step4': if not wizard: return HttpResponseRedirect('/wizards/event/') event = wizard['event'] step = wizard['step'] if step != 4: return HttpResponseRedirect('/wizards/event/') if request.method == 'POST': formsets.append(AnnouncementFormInline(request.POST, request.FILES, instance=event)) if formsets[0].is_valid(): formsets[0].save() wizard['step'] = 5 request.session['wizard'] = wizard return HttpResponseRedirect('/wizards/event/done/') else: formsets.append(AnnouncementFormInline(instance=event)) elif step == 'done': template='localsite/wizard_event_done.html' if not wizard: return HttpResponseRedirect('/wizards/event/') event = wizard['event'] output['event'] = event step = wizard['step'] if step != 5: return HttpResponseRedirect('/wizards/event/') event.create_all_variations() del request.session['wizard'] return HttpResponseRedirect(event.get_absolute_url()) if form: output['form'] = form if formsets: output['formsets'] = formsets ctx = RequestContext(request, output) return render_to_response(template, context_instance=ctx)