You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
4.4 KiB

from django.contrib.formtools.wizard.views import SessionWizardView
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponseRedirect
from django.conf import settings
import os
from photologue.models import Photo, Gallery
from exposition.models import Exposition, Statistic
from wizard.models import Attachment
from functions.form_check import translit_with_separator
# defining different template for every form
TEMPLATES = {
'0': 'client/wizard/first_step.html',
'1': 'client/wizard/second_step.html',
'2': 'client/wizard/third_step.html'
}
post = None
files = None
# main view that handle all data from 3 forms(steps) and finally create an Exposition
class ExpoWizard(SessionWizardView):
location = os.path.join(settings.MEDIA_ROOT, 'temp')
file_storage = FileSystemStorage(location, settings.MEDIA_URL)
def done(self, form_list, **kwargs):
upload_logo = form_list[0].cleaned_data.get('logo')
upload_images = self.request.FILES.getlist(u'2-attachments')
data = self.get_all_cleaned_data()
expo = Exposition.objects.language(self.request.LANGUAGE_CODE).create(
name=data.get('name'),
data_begin=data.get('date_start'),
data_end=data.get('date_end'),
main_title=data.get('main_title'),
description=data.get('description'),
products=data.get('products'),
country=data.get('country', 1),
city=data.get('city', 1),
place=data.get('place', 1),
periodic=data.get('periodic'),
web_page=data.get('web_site'),
logo=data.get('logo'),
foundation_year=data.get('found_year'),
area=data.get('square'),
price_day=data.get('one_day'),
price_all=data.get('all_days'),
price_day_bar=data.get('pre_one_day'),
price_all_bar=data.get('pre_all_days'),
min_area=data.get('min_square'),
registration_payment=data.get('registration_depos'),
application_deadline=data.get('deadline_date'),
min_closed_area=data.get('unequiped'),
min_open_area=data.get('open_square'),
min_closed_equipped_area=data.get('equiped'),
url=translit_with_separator(data.get('name')),
quality_label=0,
audience=0
)
photos = []
for i, photo in enumerate(upload_images):
photos.append(Photo.objects.language(self.request.LANGUAGE_CODE).create(
image=photo,
title=data.get(u'pdescr_%i' % i, photo.name))
)
for photo in photos:
expo.upload_photo(photo)
expo.tag = [data.get('tag')]
expo.theme = [data.get('theme')]
if data['membership1']:
expo.quality_label = (expo.quality_label | Exposition.quality_label.exporating)
if data['membership2']:
expo.quality_label = (expo.quality_label | Exposition.quality_label.rsva)
if data['membership3']:
expo.quality_label = (expo.quality_label | Exposition.quality_label.ufi)
if data['audience1']:
expo.audience = (expo.audience | Exposition.audience.experts)
if data['audience2']:
expo.audience = expo.audience | getattr(Exposition.audience, 'experts and consumers')
if data['audience3']:
expo.audience = expo.audience | (getattr(Exposition.audience, 'general public'))
expo.save()
Statistic.objects.language().create(
exposition=expo,
year=data.get('statistic_year'),
visitors=data.get('visitors'),
members=data.get('partisipants'),
countries=data.get('countries'),
area=data.get('square')
)
if upload_logo:
self.file_storage.delete(upload_logo.name)
if upload_images:
for f in upload_images:
self.file_storage.delete(f.name)
return HttpResponseRedirect('/')
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
from wizard.forms import formlist
wizard_view = ExpoWizard.as_view(formlist)
from django.contrib.formtools.wizard.storage.session import SessionStorage
from django.http import HttpResponse
import json
def ajax_view(request):
form = formlist[2](post, files, prefix='2')
return HttpResponse(json.dumps({'posts':post,'files':files}), content_type='application/json')