def edit_event(request, event_id, template_name='localsite/edit_event.html'): event = Event.objects.get(product=event_id) formsets = [] if request.method == 'POST': form = ProductForm(request.POST, instance=event.product) formsets.append(EventFormInline(request.POST, instance=event.product)) formsets.append(AnnouncementFormInline(request.POST, instance=event)) formsets.append(EventDateFormInline(request.POST, instance=event)) formsets.append(ProductImageFormInline(request.POST, request.FILES, instance=event.product)) all_valid = form.is_valid() for formset in formsets: all_valid = all_valid and formset.is_valid() if all_valid: form.save() formsets[0].save() formsets[1].save() formsets[2].save() images = formsets[3].save() for image in images: default.kvstore.delete_thumbnails(ImageFile(image.picture.name)) return HttpResponseRedirect(event.get_absolute_url()) else: form = ProductForm(instance=event.product) formsets.append(EventFormInline(instance=event.product)) formsets.append(AnnouncementFormInline(instance=event)) formsets.append(EventDateFormInline(instance=event)) formsets.append(ProductImageFormInline(instance=event.product)) ctx = RequestContext(request, { 'event': event, 'form': form, 'formsets': formsets, }) return render_to_response(template_name, context_instance=ctx)
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)