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
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')
|
|
|