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.
 
 
 
 
 
 

126 lines
4.6 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
from exposition.models import Exposition, Statistic
from functions.form_check import translit_with_separator
from accounts.models import User
# 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'
}
class ExpoWizard(SessionWizardView):
"main view that handle all data from 3 forms(steps) and finally create an Exposition"
# storing temporary files during upload
location = os.path.join(settings.MEDIA_ROOT, 'temp')
file_storage = FileSystemStorage(location, settings.MEDIA_URL)
SUCCES_URL = "/"
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def done(self, form_list, **kwargs):
# getting data and files
upload_logo = form_list[0].cleaned_data.get('logo')
upload_images = self.request.FILES.getlist(u'2-attachments')
data = self.get_all_cleaned_data()
# creating new exposition
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,
creator = User.objects.get(id=self.request.user.id)
)
# adding photo to gallery
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)
# many to many relations saving
expo.tag = [data.get('tag')]
expo.theme = [data.get('theme')]
# setting bit fields audience and quality_label
self.set_flags(expo, data)
expo.save()
# ?
Statistic.objects.language(self.request.LANGUAGE_CODE).create(
exposition=expo,
year=data.get('statistic_year'),
visitors=data.get('visitors'),
members=data.get('partisipants'),
countries=data.get('countries'),
area=data.get('square')
)
# remove temporary files if it has any
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(self.SUCCES_URL)
def set_flags(self, expo, data):
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'))
from wizard.forms import formlist
wizard_view = ExpoWizard.as_view(formlist)