diff --git a/accounts/models.py b/accounts/models.py index 02317219..7cad192d 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -7,6 +7,8 @@ from django.utils import timezone from django.db.models.signals import post_save #custom functions from functions.form_check import translit_with_separator +from functions.translate import fill_trans_fields_all, populate_all + """ from django.contrib.auth.hashers import check_password from hashlib import md5 @@ -48,6 +50,7 @@ class UserManager(BaseUserManager): user.is_active = True user.is_superuser = True user.is_admin = True + user.is_organiser = True user.save(using=self._db) return user @@ -157,23 +160,54 @@ class TranslatorProfile(models.Model): def __unicode__(self): return self.user.email +#need import after User Model, because User imported in "organiser.models" +from organiser.models import Organiser -def create_translator_profile(sender, **kw): +def create_profiles(sender, **kw): """ create Translator profile if "is_translator" field in User model true if it's false delete Translator profile connected to User + + create Organiser profile if "is_organiser" field in User model true + if it's false delete Organiser profile connected to User """ user = kw["instance"] - if user.is_translator: + + if user.is_translator and not user.translator.all(): + #check flag is_translator and if translator profile already exist translator = TranslatorProfile(user=user) translator.save() - else: - try: - TranslatorProfile.objects.get(user = user).delete() - except: pass + if not user.is_translator: + TranslatorProfile.objects.filter(user = user).delete() + + + if user.is_organiser and not user.organiser.all(): + #check flag is_organiser and if organiser profile already exist + organiser = Organiser(user=user) + + if user.country: + organiser.country = user.country + + if user.city: + organiser.city = user.city -post_save.connect(create_translator_profile, sender=User) + organiser.save() + + + data = {'name_ru':user.get_full_name()} + + zero_fields = {} + fill_trans_fields_all(Organiser, organiser, data, None, zero_fields) + #populate empty fields and fields which was already populated + organiser_id = getattr(organiser, 'id') + populate_all(Organiser, data, organiser_id, zero_fields) + + if not user.is_organiser: + Organiser.objects.filter(user = user).delete() + + +post_save.connect(create_profiles, sender=User) """ @@ -205,4 +239,4 @@ class MyUserAuthBackend(object): return UserModel._default_manager.get(pk=user_id) except UserModel.DoesNotExist: return None -""" +""" \ No newline at end of file diff --git a/article/forms.py b/article/forms.py index e96fbc0d..441501d3 100644 --- a/article/forms.py +++ b/article/forms.py @@ -10,6 +10,7 @@ from functions.files import check_tmp_files from functions.form_check import translit_with_separator #models from models import Article +from organiser.models import Organiser from theme.models import Theme, Tag @@ -21,7 +22,7 @@ class ArticleForm(forms.Form): save function saves data in Article object. If it doesnt exist create new object """ - author = forms.CharField(label='Автор', required=False) + author = forms.ModelChoiceField(label='Автор',queryset=Organiser.objects.all()) key = forms.CharField(required=False, widget=forms.HiddenInput()) theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all()) #creates select input with empty choices cause it will be filled with ajax @@ -69,7 +70,10 @@ class ArticleForm(forms.Form): article.theme.clear() article.tag.clear() - article.author = data['author'] + + if data.get('author'): + article.organiser = Organiser.objects.get(id=data['author'].id)#.id cause select uses queryset + #create slug field from russian language article.url = translit_with_separator(data['main_title_ru']).lower() @@ -106,4 +110,12 @@ class ArticleForm(forms.Form): self._errors['main_title_ru'] = ErrorList([msg]) del self.cleaned_data['main_title_ru'] - return self.cleaned_data \ No newline at end of file + return self.cleaned_data + + +class ArticleDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Article + fields = ('url',) \ No newline at end of file diff --git a/article/urls.py b/article/urls.py index 020d9d9f..49bec39f 100644 --- a/article/urls.py +++ b/article/urls.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, url -urlpatterns = patterns('', - url(r'^add/$', 'article.views.article_add'), - url(r'^change/(.*)/$', 'article.views.article_change'), - url(r'^all/$', 'article.views.article_all'), +urlpatterns = patterns('article.views', + url(r'^add/$', 'article_add'), + url(r'^delete/(?P.*)/$', 'article_delete'), + url(r'^change/(.*)/$', 'article_change'), + url(r'^all/$', 'article_all'), ) \ No newline at end of file diff --git a/article/views.py b/article/views.py index 58623c9e..f879951d 100644 --- a/article/views.py +++ b/article/views.py @@ -6,12 +6,13 @@ from django.conf import settings from django.contrib.auth.decorators import login_required from django.contrib.contenttypes.models import ContentType #models and forms -from forms import ArticleForm, Article +from forms import ArticleForm, ArticleDeleteForm, Article from theme.models import Tag from file.models import FileModel, TmpFile from file.forms import FileModelForm +from organiser.models import Organiser #custom views -from functions.custom_views import objects_list, add_object_with_file +from functions.custom_views import objects_list, add_object_with_file, delete_object def article_all(request): @@ -20,15 +21,22 @@ def article_all(request): """ return objects_list(request, Article, 'article_all.html') - def article_add(request): """ Return form of article and post it on the server. If form is posted redirect on the page of all articles. """ + #get organiser from current user + init_data = {'author':request.user.organiser.all()[0]} + #choices field which will be filled by ajax + choices = {'tag': Tag} return add_object_with_file(request, ArticleForm, 'article_add.html', '/article/all', - {'tag': Tag}) + choices, init_data) + + +def article_delete(request, url): + return delete_object(request, Article, ArticleDeleteForm, url, '/article/all') @login_required @@ -57,7 +65,7 @@ def article_change(request, url): else: data = {} #fill form with data from database - data['author'] = article.author + data['author'] = article.organiser data['theme'] = [item.id for item in article.theme.all()] data['tag'] = [item.id for item in article.tag.all()] #hidden field diff --git a/company/forms.py b/company/forms.py index facbc121..a5655626 100644 --- a/company/forms.py +++ b/company/forms.py @@ -194,4 +194,11 @@ class CompanyForm(forms.Form): if fax.isdigit(): return fax else: - raise ValidationError('Введите правильный факс') \ No newline at end of file + raise ValidationError('Введите правильный факс') + +class CompanyDeleteForm(forms.ModelForm): + id = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Company + fields = ('id',) \ No newline at end of file diff --git a/company/urls.py b/company/urls.py index 11c1a184..765d3e13 100644 --- a/company/urls.py +++ b/company/urls.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'company.views.company_add'), - url(r'^change/(?P\d+).*/$', 'company.views.company_change'), - url(r'^all/$', 'company.views.company_all'), +urlpatterns = patterns('company.views', + url(r'^add.*/$', 'company_add'), + url(r'^delete/(?P\d+)/$', 'company_delete'), + url(r'^change/(?P\d+).*/$', 'company_change'), + url(r'^all/$', 'company_all'), ) \ No newline at end of file diff --git a/company/views.py b/company/views.py index e2d5b82b..706f3f69 100644 --- a/company/views.py +++ b/company/views.py @@ -7,13 +7,13 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required #models and forms from models import Company -from forms import CompanyForm +from forms import CompanyForm, CompanyDeleteForm from theme.models import Tag from city.models import City from file.models import FileModel, TmpFile from file.forms import FileModelForm #custom views -from functions.custom_views import objects_list, add_object_with_file +from functions.custom_views import objects_list, add_object_with_file, delete_object def company_all(request): @@ -23,7 +23,6 @@ def company_all(request): return objects_list(request, Company, 'company_all.html') -@login_required def company_add(request): """ Return form of company and post it on the server. @@ -32,6 +31,9 @@ def company_add(request): return add_object_with_file(request, CompanyForm, 'company_add.html', '/company/all/', {'city': City, 'tag': Tag}) +def company_delete(request, company_id): + return delete_object(request, Company, CompanyDeleteForm, company_id, '/company/all') + @login_required def company_change(request, company_id): diff --git a/conference/forms.py b/conference/forms.py index 332bf70f..0cc64a21 100644 --- a/conference/forms.py +++ b/conference/forms.py @@ -236,6 +236,14 @@ class ConferenceChangeForm(ConferenceCreateForm): users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) +class ConferenceDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput) + + class Meta: + model = Conference + fields = ('url',) + + class TimeTableForm(forms.Form): """ Create TimeTable form diff --git a/conference/urls.py b/conference/urls.py index c08c0631..2a4d7813 100644 --- a/conference/urls.py +++ b/conference/urls.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'conference.views.conference_add'), - url(r'^change/(.*)/$', 'conference.views.conference_change'), - url(r'^all/$', 'conference.views.conference_all'), +urlpatterns = patterns('conference.views', + url(r'^add.*/$', 'conference_add'), + url(r'^delete/(?P.*)$', 'conference_delete'), + url(r'^change/(?P.*)/$', 'conference_change'), + url(r'^all/$', 'conference_all'), ) \ No newline at end of file diff --git a/conference/views.py b/conference/views.py index a95bfdd7..68022754 100644 --- a/conference/views.py +++ b/conference/views.py @@ -9,7 +9,7 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required #models and forms from models import Conference, TimeTable -from forms import ConferenceChangeForm, ConferenceCreateForm, TimeTableForm +from forms import ConferenceChangeForm, ConferenceCreateForm, ConferenceDeleteForm, TimeTableForm from theme.models import Tag from city.models import City from file.models import FileModel, TmpFile @@ -17,7 +17,7 @@ from file.forms import FileModelForm #python import random #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def conference_all(request): @@ -65,6 +65,10 @@ def conference_add(request): return render_to_response('conference_add.html', args) +def conference_delete(request, url): + return delete_object(request, Conference, ConferenceDeleteForm, url, '/conference/all') + + @login_required def conference_change(request, url): """ diff --git a/exposition/forms.py b/exposition/forms.py index 44e4fc2d..7e0fbd08 100644 --- a/exposition/forms.py +++ b/exposition/forms.py @@ -281,6 +281,14 @@ class ExpositionChangeForm(ExpositionCreateForm): users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) +class ExpositionDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Exposition + fields = ('url',) + + class TimeTableForm(forms.Form): begin = forms.DateTimeField(label='Время начала', widget=forms.TextInput(attrs={'style':'width: 150px'})) end = forms.DateTimeField(label='Время окончания', widget=forms.TextInput(attrs={'style':'width: 150px'})) diff --git a/exposition/urls.py b/exposition/urls.py index bbdda312..375e09d8 100644 --- a/exposition/urls.py +++ b/exposition/urls.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'exposition.views.exposition_add'), - url(r'^change/(.*)/$', 'exposition.views.exposition_change'), - url(r'^all/$', 'exposition.views.exposition_all'), +urlpatterns = patterns('exposition.views', + url(r'^add.*/$', 'exposition_add'), + url(r'^delete/(?P.*)/$', 'exposition_delete'), + url(r'^change/(?P.*)/$', 'exposition_change'), + url(r'^all/$', 'exposition_all'), ) diff --git a/exposition/views.py b/exposition/views.py index 56a346e3..516b8bd3 100644 --- a/exposition/views.py +++ b/exposition/views.py @@ -9,7 +9,7 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required #models and forms from models import Exposition, TimeTable -from forms import ExpositionChangeForm, ExpositionCreateForm, TimeTableForm +from forms import ExpositionChangeForm, ExpositionCreateForm, ExpositionDeleteForm, TimeTableForm from theme.models import Tag from city.models import City from file.models import FileModel, TmpFile @@ -17,7 +17,7 @@ from file.forms import FileModelForm #python import random #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def exposition_all(request): @@ -64,6 +64,10 @@ def exposition_add(request): return render_to_response('exposition_add.html', args) +def exposition_delete(request, url): + return delete_object(request, Exposition, ExpositionDeleteForm, url, '/exposition/all') + + @login_required def exposition_change(request, url): """ diff --git a/functions/custom_views.py b/functions/custom_views.py index 6b874f9b..5a084825 100644 --- a/functions/custom_views.py +++ b/functions/custom_views.py @@ -56,8 +56,8 @@ def filtered_list(request, objects, template, item_per_page=10): @login_required -def add_object(request, Form, template_string, redirect_string, - choices={}): +def add_object(request, Form, template_string, redirect_string, #required values + choices={}, init_data ={}): if request.POST: form = Form(request.POST) #set choices filled by ajax @@ -70,7 +70,7 @@ def add_object(request, Form, template_string, redirect_string, form.save() return HttpResponseRedirect(redirect_string) else: - form = Form() + form = Form(initial=init_data) args = {} args.update(csrf(request)) @@ -81,7 +81,8 @@ def add_object(request, Form, template_string, redirect_string, @login_required -def add_object_with_file(request, Form, template, redirect_string, choices={}): +def add_object_with_file(request, Form, template, redirect_string, #required values + choices={}, init_data ={}): """ Return form and FileForm and post it on the server. @@ -113,7 +114,8 @@ def add_object_with_file(request, Form, template, redirect_string, choices={}): form.save() return HttpResponseRedirect(redirect_string) else: - form = Form(initial={'key':key}) + init_data['key'] = key + form = Form(initial=init_data) args = {} args.update(csrf(request)) @@ -128,9 +130,17 @@ def add_object_with_file(request, Form, template, redirect_string, choices={}): @login_required def delete_object(request, Model, Form, url, prev_page,): + """ + Form must have 1 parameter url or id + """ if request.GET: url = request.GET.get('url') - object = Model.objects.get(url=url) + id = request.GET.get('id') + if url: + object = Model.objects.get(url=url) + else: + object = Model.objects.get(id=id) + try: object.delete() return HttpResponseRedirect(prev_page) @@ -139,14 +149,17 @@ def delete_object(request, Model, Form, url, prev_page,): return render_to_response('delete.html', {'msg':msg, 'prev_page':prev_page}) else: - object = Model.objects.get(url=url) + try: + object = Model.objects.get(url=url) + except: + object = Model.objects.get(id=url) form = Form(instance=object) args = {} args.update(csrf(request)) args['form'] = form - args['country'] = object + args['object'] = object args['prev_page'] = prev_page return render_to_response('delete.html', args) \ No newline at end of file diff --git a/organiser/models.py b/organiser/models.py index 476e0d77..b7313d6f 100644 --- a/organiser/models.py +++ b/organiser/models.py @@ -60,6 +60,7 @@ class Organiser(TranslatableModel): def __unicode__(self): return self.lazy_translation_getter('name', self.pk) +''' def create_organiser(sender, **kw): """ create Organiser profile if "is_organiser" field in User model true @@ -76,3 +77,4 @@ def create_organiser(sender, **kw): post_save.connect(create_organiser, sender=User) +''' \ No newline at end of file diff --git a/organiser/views.py b/organiser/views.py index 02f959f7..30aa060f 100644 --- a/organiser/views.py +++ b/organiser/views.py @@ -76,7 +76,7 @@ def organiser_change(request, organiser_id): data['place_exposition'] = [item.id for item in organiser.place_exposition.all()] data['place_conference'] = [item.id for item in organiser.place_conference.all()] #data from translated fields - """ + for code, name in settings.LANGUAGES: obj = Organiser._meta.translations_model.objects.get(language_code = code,master__id=organiser_id) #access to translated fields data['name_%s' % code] = obj.name @@ -87,12 +87,12 @@ def organiser_change(request, organiser_id): data['title_%s' % code] = obj.title data['keywords_%s' % code] = obj.keywords data['descriptions_%s' % code] = obj.descriptions - """ + #fill form form = OrganiserForm(initial=data) #set choices filled by ajax - #form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])] - #form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] + form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])] + form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] args = {} args.update(csrf(request)) diff --git a/place/__init__.py b/place/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/place/admin.py b/place/admin.py deleted file mode 100644 index 638b8d18..00000000 --- a/place/admin.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -from django.contrib import admin -from hvad.admin import TranslatableAdmin -from models import PlaceConference, PlaceExposition - -class PlaceConferenceAdmin(TranslatableAdmin): - pass - -class PlaceExpositionAdmin(TranslatableAdmin): - pass - -admin.site.register(PlaceConference, PlaceConferenceAdmin) -admin.site.register(PlaceExposition, PlaceExpositionAdmin) diff --git a/place/forms.py b/place/forms.py deleted file mode 100644 index eb25e59d..00000000 --- a/place/forms.py +++ /dev/null @@ -1,541 +0,0 @@ -# -*- coding: utf-8 -*- -from django import forms -from django.conf import settings -from ckeditor.widgets import CKEditorWidget -from django.core.exceptions import ValidationError -from django.core.validators import validate_email, URLValidator -#models -from models import PlaceConference, PlaceExposition, Hall, EXPOSITION_TYPE, CONFERENCE_TYPE -from file.models import FileModel, TmpFile -from country.models import Country -from city.models import City -from proj.models import Settings -#functions -from functions.translate import populate_all, fill_trans_fields_all -from functions.files import check_tmp_files -from functions.form_check import is_positive_integer - - - - -class ConferenceForm(forms.Form): - types = [(item1, item2) for item1, item2 in CONFERENCE_TYPE] - type = forms.ChoiceField(label='Краткое описание', required=False, choices=types)#2 - #city = forms.ChoiceField(label='Город',choices=((None, 'Выберите страну'),)) - city = forms.CharField(label='Город', - widget=forms.Select(choices=[('','')])) - - latitude = forms.CharField(label='Широта')#7 - longitude = forms.CharField(label='Долгота')#7 - phone = forms.CharField(label='Телефон', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'}))#8 - fax = forms.CharField(label='Факс', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите факс'}))#9 - web_page = forms.CharField(label='Веб-сайт', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))#10 - email = forms.CharField(label='Email', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))#11 - total_capacity = forms.CharField(label='Общая вместимость', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Общая вместимость'}))#12 - amount_halls = forms.CharField(label='Количество залов', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Количество залов'}))#13 - - #halls information - hall_name = forms.CharField(label='Название зала', required=False) - hall_number = forms.IntegerField(label='Номер зала', min_value=1, initial='1', required=False) - hall_capacity = forms.IntegerField(label='Вместимость зала', min_value='1', required=False) - # - exposition_hall = forms.BooleanField(label='Выставочный зал', required=False)#14 - exp_hall_area = forms.CharField(label='Площадь выст. зала', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Площадь выст. зала'}))#15 - # - wifi = forms.BooleanField(label='Wi-fi', required=False) - multimedia_equipment = forms.BooleanField(label='Мультимедийное оборудование', required=False) - conference_call = forms.BooleanField(label='Конференц-связь', required=False) - translate_equipment = forms.BooleanField(label='Оборудование для синхронного перевода', required=False) - banquet_hall = forms.BooleanField(label='Банкетный зал', required=False) - catering = forms.BooleanField(label='Кейтеринг', required=False) - hotel = forms.BooleanField(label='Гостиница', required=False) - # - key = forms.CharField(required=False, widget=forms.HiddenInput()) - - def __init__(self, *args, **kwargs): - super(ConferenceForm, self).__init__(*args, **kwargs) - # creates translated form fields, example: name_ru, name_en - # len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs - if len(settings.LANGUAGES) in range(10): - for lid, (code, name) in enumerate(settings.LANGUAGES): - # using enumerate for detect iteration number - # first iteration is a default lang so it required fields - required = True if lid == 0 else False - self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) #1 - self.fields['description_%s' % code] = forms.CharField(label='Полное описание', required=False, widget=CKEditorWidget)#5 - self.fields['adress_%s' % code] = forms.CharField(label='Адрес', required=False, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - capacity_tmpl = Settings.objects.get(key='hall_template') - self.fields['hall_capacity_%s' % code] = forms.CharField(label='Шаблон вместимости', initial= capacity_tmpl.get_value(code), - widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False) - #meta data - self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=required, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=required, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=required, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - - countries = [(item.id, item.name) for item in Country.objects.all()] - - self.fields['country'] = forms.ChoiceField(label='Страна', choices=countries)#3 - - - - - def save(self, id=None): - - data = self.cleaned_data - - if not id: - place_conference = PlaceConference() - else: - place_conference = PlaceConference.objects.get(id=id) - - #simple fields - place_conference.type = data['type'] - place_conference.google_latitude = data['latitude'] - place_conference.google_longitude = data['longitude'] - place_conference.phone = data['phone'] - place_conference.fax = data['fax'] - place_conference.web_page = data['web_page'] - place_conference.email = data['email'] - place_conference.total_capacity = data['total_capacity'] - place_conference.amount_halls = data['amount_halls'] - place_conference.exposition_hall = data['exposition_hall'] - place_conference.exp_hall_area = data['exp_hall_area'] - place_conference.wifi = data['wifi'] - place_conference.multimedia_equipment = data['multimedia_equipment'] - place_conference.conference_call = data['conference_call'] - place_conference.translate_equipment = data['translate_equipment'] - place_conference.banquet_hall = data['banquet_hall'] - place_conference.catering = data['catering'] - place_conference.hotel = data['hotel'] - if data.get('country'): - place_conference.country = Country.objects.get(id=data['country']) - if data.get('city'): - place_conference.city = City.objects.get(id=data['city']) - - # uses because in the next loop data will be overwritten - place_conference.save() - #will be saved populated fields - zero_fields = {} - #fills all translated fields with data - #if saves new object, will fill city object. otherwise existing object of City model - fill_trans_fields_all(PlaceConference, place_conference, data, id, zero_fields) - #autopopulate - #populate empty fields and fields which was already populated - place_conference_id = getattr(place_conference, 'id') - populate_all(PlaceConference, data, place_conference_id, zero_fields) - #save files - check_tmp_files(place_conference, data['key']) - - - return PlaceConference.objects.get(id=place_conference_id) - - - - def clean_latitude(self): - """ - latitude checking - """ - cleaned_data = super(ConferenceForm, self).clean() - latitude = cleaned_data.get('latitude') - latitude = latitude.replace(',', '.') - return latitude - - def clean_longitude(self): - """ - longitude checking - """ - cleaned_data = super(ConferenceForm, self).clean() - longitude = cleaned_data.get('longitude') - longitude = longitude.replace(',', '.') - return longitude - - def clean_web_page(self): - """ - web_page checking - """ - cleaned_data = super(ConferenceForm, self).clean() - web_page = cleaned_data.get('web_page') - if not web_page: - return '' - - validate = URLValidator() - try: - validate(web_page) - except(ValidationError),e: - raise ValidationError(e.messages[0]) - return web_page - - def clean_email(self): - """ - email checking - """ - cleaned_data = super(ConferenceForm, self).clean() - email = cleaned_data.get('email') - if not email: - return '' - try: - validate_email(email) - except(ValidationError),e: - raise ValidationError(e.messages[0]) - return email - - def clean_phone(self): - """ - phone checking - """ - cleaned_data = super(ConferenceForm, self).clean() - phone = cleaned_data.get('phone') - if not phone: - return - - deduct = ('-','(',')','.',' ') - - for elem in deduct: - phone = phone.replace(elem, '') - - if phone.isdigit(): - return phone - else: - raise ValidationError('Введите правильный телефон') - - def clean_fax(self): - """ - fax checking - """ - cleaned_data = super(ConferenceForm, self).clean() - fax = cleaned_data.get('fax') - if not fax: - return - - deduct = ('-','(',')','.',' ') - - for elem in deduct: - fax = fax.replace(elem, '') - - if fax.isdigit(): - return fax - else: - raise ValidationError('Введите правильный факс') - - def clean_total_capacity(self): - """ - checking total_capacity - """ - cleaned_data = super(ConferenceForm, self).clean() - total_capacity = cleaned_data.get('total_capacity').strip() - return is_positive_integer(total_capacity) - - def clean_amount_halls(self): - """ - checking amount_halls - """ - cleaned_data = super(ConferenceForm, self).clean() - amount_halls = cleaned_data.get('amount_halls').strip() - return is_positive_integer(amount_halls) - - def clean_exp_hall_area(self): - """ - checking exp_hall_area - """ - cleaned_data = super(ConferenceForm, self).clean() - exp_hall_area = cleaned_data.get('exp_hall_area').strip() - return is_positive_integer(exp_hall_area) - -class HallForm(forms.ModelForm): - """ - form for Hall model - """ - number = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:30px'}),required=False) - capacity = forms.CharField(widget=forms.TextInput(attrs={'style': 'width:60px'}), required=False) - name = forms.CharField(required=False) - class Meta: - model = Hall - exclude = ('place_conference',) - - def clean_number(self): - cleaned_data = super(HallForm, self).clean() - number = cleaned_data.get('number').strip() - return is_positive_integer(number) - - def clean_capacity(self): - cleaned_data = super(HallForm, self).clean() - capacity = cleaned_data.get('capacity').strip() - return is_positive_integer(capacity) - - - -class ExpositionForm(forms.Form): - types = [(item1, item2) for item1, item2 in EXPOSITION_TYPE] - type = forms.ChoiceField(required=False, choices=types) - - latitude = forms.CharField(label='Широта') - longitude = forms.CharField(label='Долгота') - - phone = forms.CharField(label='Телефон', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите телефон'})) - fax = forms.CharField(label='Факс', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите факс'})) - web_page = forms.CharField(label='Веб-сайт', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите адрес сайта'}))# - email = forms.CharField(label='Email', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Введите email'}))# - # - foundation_year = forms.CharField(label='Год основания', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Год основания'})) - total_area = forms.CharField(label='Общая выставочная площадь', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Общая выст. площадь'})) - closed_area = forms.CharField(label='Закрытая выствочная площадь', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Закр. выст. площадь'})) - open_area = forms.CharField(label='Открытая выставочная площадь', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Откр. выст. площадь'})) - total_pavilions = forms.CharField(label='Количество павильонов', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Количество павильонов'})) - total_halls = forms.CharField(label='Количество конференц залов', required=False, - widget=forms.TextInput(attrs={'placeholder': 'Конференц залы'})) - # - wifi = forms.BooleanField(label='Wi-fi', required=False) - bank = forms.BooleanField(label='Банк/Банкоматы', required=False) - children_room = forms.BooleanField(label='Детская комната', required=False) - disabled_service = forms.BooleanField(label='Сервис для инвалидов', required=False) - conference_centre = forms.BooleanField(label='Конгресс-центр', required=False) - business_centre = forms.BooleanField(label='Бизнес центр', required=False) - online_registration = forms.BooleanField(label='Онлайн регистрация', required=False) - cafe = forms.BooleanField(label='Кафе', required=False) - terminals = forms.BooleanField(label='Информационые терминалы', required=False) - parking = forms.BooleanField(label='Парковка', required=False) - press_centre = forms.BooleanField(label='Пресс-центр', required=False) - mobile_application = forms.BooleanField(label='Мобильное приложение', required=False) - # - key = forms.CharField(required=False, widget=forms.HiddenInput()) - - def __init__(self, *args, **kwargs): - super(ExpositionForm, self).__init__(*args, **kwargs) - # creates translated form fields, example: name_ru, name_en - # len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs - if len(settings.LANGUAGES) in range(10): - for lid, (code, name) in enumerate(settings.LANGUAGES): - # using enumerate for detect iteration number - # first iteration is a default lang so it required fields - required = True if lid == 0 else False - self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) - self.fields['description_%s' % code] = forms.CharField(label='Полное описание', required=False, widget=CKEditorWidget) - self.fields['adress_%s' % code] = forms.CharField(label='Адрес', required=False, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - # - self.fields['total_year_action_%s' % code] = forms.CharField(label='Количество мероприятий в год', required=False, widget=CKEditorWidget) - #meta data - self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=required, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=required, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=required, max_length=255, - widget=forms.TextInput(attrs={'style':'width: 550px'})) - - countries = [(item.id, item.name) for item in Country.objects.all()] - self.fields['country'] = forms.ChoiceField(label='Страна', choices=countries)#3 - - cities = [(item.id, item.name) for item in City.objects.all()] - self.fields['city'] = forms.ChoiceField(label='Город', choices=cities) - - def save(self, id=None): - data = self.cleaned_data - - if not id: - place_exposition = PlaceExposition() - else: - place_exposition = PlaceExposition.objects.get(id=id) - - place_exposition.type = data['type'] - place_exposition.google_latitude = data['latitude'] - place_exposition.google_longitude = data['longitude'] - place_exposition.phone = data['phone'] - place_exposition.fax = data['fax'] - place_exposition.web_page = data['web_page'] - place_exposition.email = data['email'] - place_exposition.foundation_year = data['foundation_year'] - place_exposition.total_area = data['total_area'] - place_exposition.closed_area = data['closed_area'] - place_exposition.open_area = data['open_area'] - place_exposition.total_pavilions = data['total_pavilions'] - place_exposition.total_halls = data['total_halls'] - place_exposition.wifi = data['wifi'] - place_exposition.bank = data['bank'] - place_exposition.children_room = data['children_room'] - place_exposition.disabled_service = data['disabled_service'] - place_exposition.conference_centre = data['conference_centre'] - place_exposition.business_centre = data['business_centre'] - place_exposition.online_registration = data['online_registration'] - place_exposition.cafe = data['cafe'] - place_exposition.terminals = data['terminals'] - place_exposition.parking = data['parking'] - place_exposition.press_centre = data['press_centre'] - place_exposition.mobile_application = data['mobile_application'] - - if data.get('country'): - place_exposition.country = Country.objects.get(id=data['country']) - if data.get('city'): - place_exposition.city = City.objects.get(id=data['city']) - - # uses because in the next loop data will be overwritten - place_exposition.save() - #will be saved populated fields - zero_fields = {} - #fills all translated fields with data - #if saves new object, will fill city object. otherwise existing object of City model - fill_trans_fields_all(PlaceExposition, place_exposition, data, id, zero_fields) - #autopopulate - #populate empty fields and fields which was already populated - place_exposition_id = getattr(place_exposition, 'id') - populate_all(PlaceConference, data, place_exposition_id, zero_fields) - #save files - check_tmp_files(place_exposition, data['key']) - - return PlaceExposition.objects.get(id=place_exposition_id) - - - def clean_latitude(self): - """ - latitude checking - """ - cleaned_data = super(ExpositionForm, self).clean() - latitude = cleaned_data.get('latitude') - latitude = latitude.replace(',', '.') - return latitude - - def clean_longitude(self): - """ - longitude checking - """ - cleaned_data = super(ExpositionForm, self).clean() - longitude = cleaned_data.get('longitude') - longitude = longitude.replace(',', '.') - return longitude - - def clean_web_page(self): - """ - web_page checking - """ - cleaned_data = super(ExpositionForm, self).clean() - web_page = cleaned_data.get('web_page') - if not web_page: - return '' - - validate = URLValidator() - try: - validate(web_page) - except(ValidationError),e: - raise ValidationError(e.messages[0]) - return web_page - - def clean_email(self): - """ - email checking - """ - cleaned_data = super(ExpositionForm, self).clean() - email = cleaned_data.get('email') - if not email: - return '' - try: - validate_email(email) - except(ValidationError),e: - raise ValidationError(e.messages[0]) - return email - - def clean_phone(self): - """ - phone checking - """ - cleaned_data = super(ExpositionForm, self).clean() - phone = cleaned_data.get('phone') - if not phone: - return - - deduct = ('-','(',')','.',' ') - - for elem in deduct: - phone = phone.replace(elem, '') - - if phone.isdigit(): - return phone - else: - raise ValidationError('Введите правильный телефон') - - def clean_fax(self): - """ - fax checking - """ - cleaned_data = super(ExpositionForm, self).clean() - fax = cleaned_data.get('fax') - if not fax: - return - - deduct = ('-','(',')','.',' ') - - for elem in deduct: - fax = fax.replace(elem, '') - - if fax.isdigit(): - return fax - else: - raise ValidationError('Введите правильный факс') - - - - def clean_foundation_year(self): - """ - checking foundation_year - """ - cleaned_data = super(ExpositionForm, self).clean() - foundation_year = cleaned_data.get('foundation_year').strip() - return is_positive_integer(foundation_year) - - def clean_total_area(self): - """ - checking foundation_year - """ - cleaned_data = super(ExpositionForm, self).clean() - total_area = cleaned_data.get('total_area').strip() - return is_positive_integer(total_area) - - def clean_closed_area(self): - """ - checking closed_area - """ - cleaned_data = super(ExpositionForm, self).clean() - closed_area = cleaned_data.get('closed_area').strip() - return is_positive_integer(closed_area) - - def clean_open_area(self): - """ - checking open_area - """ - cleaned_data = super(ExpositionForm, self).clean() - open_area = cleaned_data.get('open_area').strip() - return is_positive_integer(open_area) - - def clean_total_pavilions(self): - """ - checking total_pavilions - """ - cleaned_data = super(ExpositionForm, self).clean() - total_pavilions = cleaned_data.get('total_pavilions').strip() - return is_positive_integer(total_pavilions) - - def clean_total_halls(self): - """ - checking total_halls - """ - cleaned_data = super(ExpositionForm, self).clean() - total_halls = cleaned_data.get('total_halls').strip() - return is_positive_integer(total_halls) \ No newline at end of file diff --git a/place/models.py b/place/models.py deleted file mode 100644 index d8b0a232..00000000 --- a/place/models.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -from django.db import models -from django.contrib.contenttypes import generic -from hvad.models import TranslatableModel, TranslatedFields -from functions.custom_fields import EnumField - - - - -CONFERENCE_TYPE = (('Convention centre', 'Конгресс-центр'), ('Exposition centre', 'Конференц зал'),) - -class PlaceConference(TranslatableModel): - country = models.ForeignKey('country.Country', null=True) - city = models.ForeignKey('city.City', null=True) - #type uses EnumField for creating Enum type field in Mysql database - type = EnumField(values = [item1 for item1, item2 in CONFERENCE_TYPE]) - #information - google_latitude = models.FloatField() - google_longitude = models.FloatField() - phone = models.PositiveIntegerField(blank=True, null=True) - fax = models.PositiveIntegerField(blank=True, null=True) - # - web_page = models.URLField(blank=True) - email = models.EmailField(blank=True) - # - total_capacity = models.PositiveIntegerField(blank=True, null=True) - amount_halls = models.PositiveIntegerField(blank=True, null=True) - - exposition_hall = models.NullBooleanField() - exp_hall_area = models.PositiveIntegerField(blank=True, null=True) - # - wifi = models.NullBooleanField() - multimedia_equipment = models.NullBooleanField() - conference_call = models.NullBooleanField() - translate_equipment = models.NullBooleanField() - banquet_hall = models.NullBooleanField() - catering = models.NullBooleanField() - hotel = models.NullBooleanField() - # - files = generic.GenericRelation('file.FileModel',content_type_field='content_type', object_id_field='object_id') - # - created = models.DateTimeField(auto_now_add=True) - modified = models.DateTimeField(auto_now=True) - - #translations is translated fields - translations = TranslatedFields( - name = models.CharField(max_length=100), - description = models.TextField(blank=True), - adress = models.TextField(blank=True), - # - hall_capacity = models.CharField(max_length=255, blank=True), - #-----meta data - title = models.CharField(max_length=250), - descriptions = models.CharField(max_length=250), - keywords = models.CharField(max_length=250), - ) - - def __unicode__(self): - return self.lazy_translation_getter('name', unicode(self.pk)) - -class Hall(models.Model): - place_conference = models.ForeignKey(PlaceConference) - name = models.CharField(max_length=100, blank=True) - number = models.PositiveIntegerField(blank=True, null=True) - capacity = models.PositiveIntegerField(blank=True, null=True) - -EXPOSITION_TYPE = (('Exposition complex', 'Выставочный комплекс'), ('Convention centre', 'Конгессо-выставочный центр'), - ('Exposition centre', 'Выставочный центр'),) - -class PlaceExposition(TranslatableModel): - # - country = models.ForeignKey('country.Country') - city = models.ForeignKey('city.City') - #type uses EnumField for creating Enum type field in Mysql database - type = EnumField(values = [item1 for item1, item2 in EXPOSITION_TYPE]) - #information - google_latitude = models.FloatField() - google_longitude = models.FloatField() - phone = models.PositiveIntegerField(blank=True, null=True) - fax = models.PositiveIntegerField(blank=True, null=True) - # - web_page = models.URLField(blank=True) - email = models.EmailField(blank=True) - # - # - foundation_year = models.PositiveIntegerField(blank=True, null=True) - total_area = models.PositiveIntegerField(blank=True, null=True) - closed_area = models.PositiveIntegerField(blank=True, null=True) - open_area = models.PositiveIntegerField(blank=True, null=True) - total_pavilions = models.PositiveIntegerField(blank=True, null=True) - total_halls = models.PositiveIntegerField(blank=True, null=True) - # - wifi = models.NullBooleanField() - bank = models.NullBooleanField() - children_room = models.NullBooleanField() - disabled_service = models.NullBooleanField() - conference_centre = models.NullBooleanField() #change name here, in form, in template - business_centre = models.NullBooleanField() - online_registration = models.NullBooleanField() - cafe = models.NullBooleanField() - terminals = models.NullBooleanField() - parking = models.NullBooleanField() - press_centre = models.NullBooleanField() - mobile_application = models.NullBooleanField() - # - files = generic.GenericRelation('file.FileModel',content_type_field='content_type', object_id_field='object_id') - # - created = models.DateTimeField(auto_now_add=True) - modified = models.DateTimeField(auto_now=True) - - #translations is translated fields - translations = TranslatedFields( - name = models.CharField(max_length=100), - description = models.TextField(blank=True), - adress = models.TextField(blank=True), - #-----meta data - title = models.CharField(max_length=250), - descriptions = models.CharField(max_length=250), - keywords = models.CharField(max_length=250), - # - total_year_action = models.TextField(blank=True), - ) - - def __unicode__(self): - return self.lazy_translation_getter('name', unicode(self.pk)) - diff --git a/place/templates/place_conference_add.html b/place/templates/place_conference_add.html deleted file mode 100644 index 7678acfc..00000000 --- a/place/templates/place_conference_add.html +++ /dev/null @@ -1,379 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block scripts %} - - - {# selects #} - - - - - - - -{% endblock %} - -{% block body %} - -
{% csrf_token %} -
- {% if conference_id %} Изменить {% else %} Добавить {% endif %}конференц зал - -
-
-

Основная информация

-
-
- {# Hidden input uses for comparing with TmpFile objects #} - - {{ form.key }} - - {# name #} - {% with field='name' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# type #} -
- -
{{ form.type}} - {{ form.type.errors }} -
-
- {# country #} -
- -
{{ form.country}} - {{ form.country.errors }} -
-
- {# city #} -
- -
{{ form.city}} - {{ form.city.errors }} -
-
- {# total_capacity #} -
- -
{{ form.total_capacity}} - {{ form.total_capacity.errors }} -
-
- {# amount_halls #} -
- -
{{ form.amount_halls}} - {{ form.amount_halls.errors }} -
-
- - {# exposition_hall #} -
- -
{{ form.exposition_hall}} - {{ form.exposition_hall.errors }} -
-
- {# exp_hall_area #} -
- -
{{ form.exp_hall_area}} - {{ form.exp_hall_area.errors }} -
-
- - -
-
- -
-
-

Вместимость залов

-
-
- {# hall_capacity #} - {% with field='hall_capacity' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} -
-
-

%(name)s: Название зала

-

%(number)s: Номер зала

-

%(capacity)s: Вместимость зала

- -
-
-
- {# formset of halls #} - {{ formset.management_form }} -
- - - - - - - - - - - - {% for form in formset.forms %} - - - - - - - - - {% endfor %} - -
Название залаНомерВместимость
{{ form.name }}{{ form.number }}{{ form.capacity }} Удалить
-
-

Добавить зал

-
-
- -
-
-

Дополнительная информация

-
-
- {# description #} - {% with field='description' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# adress #} - {% with field='adress' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# latitude #} -
- -
{{ form.latitude}} - {{ form.latitude.errors }} -
-
- {# longitude #} -
- -
{{ form.longitude}} - {{ form.longitude.errors }} -
-
- {# phone #} -
- -
{{ form.phone}} - {{ form.phone.errors }} -
-
- {# fax #} -
- -
{{ form.fax}} - {{ form.fax.errors }} -
-
- {# web_page #} -
- -
{{ form.web_page}} - {{ form.web_page.errors }} -
-
- {# email #} -
- -
{{ form.email}} - {{ form.email.errors }} -
-
-
-
- -
-
-

Файлы

-
-
- - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - - {% for file in files %} - - - - - - - - - - {% endfor %} - -
idФайлИмяНазначениеТип
{{ file.id }}{{ file.file_name }}{{ file.purpose }}{{ file.file_type }}
-
- {# button that shows modal window with file form #} -

- Добавить файл

- -
-
- - -
-
-

Услуги

-
-
-
- {# wifi #} -
- -
{{ form.wifi}} - {{ form.wifi.errors }} -
-
- {# multimedia_equipment #} -
- -
{{ form.multimedia_equipment}} - {{ form.multimedia_equipment.errors }} -
-
- {# conference_call #} -
- -
{{ form.conference_call}} - {{ form.conference_call.errors }} -
-
- {# translate_equipment #} -
- -
{{ form.translate_equipment }} - {{ form.translate_equipment.errors }} -
-
-
-
- {# banquet_hall #} -
- -
{{ form.banquet_hall}} - {{ form.banquet_hall.errors }} -
-
- {# catering #} -
- -
{{ form.catering}} - {{ form.catering.errors }} -
-
- {# hotel #} -
- -
{{ form.hotel}} - {{ form.hotel.errors }} -
-
-
-
-
- -
-
-

Мета даные

-
-
- {# keywords #} - {% with field='keywords' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# title #} - {% with field='title' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# descriptions #} - {% with field='descriptions' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} -
-
- -
- - -
- -
-
- - {# modal window #} - - -{% endblock %} \ No newline at end of file diff --git a/place/templates/place_conference_all.html b/place/templates/place_conference_all.html deleted file mode 100644 index b3fea57f..00000000 --- a/place/templates/place_conference_all.html +++ /dev/null @@ -1,44 +0,0 @@ -{% extends 'base.html' %} - -{% block body %} - -
-
-

Места проведения конференций

-
-
- - - - - - - - - - - - - {% for item in conferences %} - - - - - - - - - {% endfor %} - -
idНазваниеКраткое описаниеСтранаГород 
{{ item.id }}{{ item.name }}{% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %}{% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %}{% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %} - - Изменить - -
- Добавить конферец зал -
- -
- - -{% endblock %} \ No newline at end of file diff --git a/place/templates/place_exposition_add.html b/place/templates/place_exposition_add.html deleted file mode 100644 index b9957c3f..00000000 --- a/place/templates/place_exposition_add.html +++ /dev/null @@ -1,406 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block scripts %} - - {# selects #} - - - - - - - - -{% endblock %} - -{% block body %} - -
{% csrf_token %} -
- {% if exposition_id %} Изменить {% else %} Добавить {% endif %}выставочный центр - -
-
-

Основная информация

-
-
- - {# Hidden input uses for comparing with TmpFile objects #} - {{ form.key }} - {# name #} - {% with field='name' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# type #} -
- -
{{ form.type}} - {{ form.type.errors }} -
-
- {# country #} -
- -
{{ form.country}} - {{ form.country.errors }} -
-
- {# city #} -
- -
{{ form.city}} - {{ form.city.errors }} -
-
- {# foundation_year #} -
- -
{{ form.foundation_year}} - {{ form.foundation_year.errors }} -
-
- {# total_year_action #} - {% with field='total_year_action' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# total_area #} -
- -
{{ form.total_area}} - {{ form.total_area.errors }} -
-
- {# closed_area #} -
- -
{{ form.closed_area}} - {{ form.closed_area.errors }} -
-
- {# open_area #} -
- -
{{ form.open_area}} - {{ form.open_area.errors }} -
-
- {# total_pavilions #} -
- -
{{ form.total_pavilions}} - {{ form.total_pavilions.errors }} -
-
- {# total_halls #} -
- -
{{ form.total_halls}} - {{ form.total_halls.errors }} -
-
- -
-
- -
-
-

Дополнительная информация

-
-
- - {# description #} - {% with field='description' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# adress #} - {% with field='adress' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# latitude #} -
- -
{{ form.latitude}} - {{ form.latitude.errors }} -
-
- {# longitude #} -
- -
{{ form.longitude}} - {{ form.longitude.errors }} -
-
- {# phone #} -
- -
{{ form.phone}} - {{ form.phone.errors }} -
-
- {# fax #} -
- -
{{ form.fax}} - {{ form.fax.errors }} -
-
- {# web_page #} -
- -
{{ form.web_page}} - {{ form.web_page.errors }} -
-
- {# email #} -
- -
{{ form.email}} - {{ form.email.errors }} -
-
- -
-
- -
-
-

Файлы

-
-
- {# button that shows modal window with file form #} - Добавить файл - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - - {% for file in files %} - - - - - - - - - - {% endfor %} - -
idФайлИмяНазначениеТип
{{ file.id }}{{ file.file_name }}{{ file.purpose }}{{ file.file_type }}
-
- -
-
- -
-
-

Услуги

-
-
-
- {# wifi #} -
- -
{{ form.wifi}} - {{ form.wifi.errors }} -
-
- {# bank #} -
- -
{{ form.bank}} - {{ form.bank.errors }} -
-
- {# children_room #} -
- -
{{ form.children_room}} - {{ form.children_room.errors }} -
-
- {# disabled_service #} -
- -
{{ form.disabled_service}} - {{ form.disabled_service.errors }} -
-
- {# conference_centre #} -
- -
{{ form.conference_centre}} - {{ form.conference_centre.errors }} -
-
- {# business_centre #} -
- -
{{ form.business_centre}} - {{ form.business_centre.errors }} -
-
-
-
- {# online_registration #} -
- -
{{ form.online_registration}} - {{ form.online_registration.errors }} -
-
- {# cafe #} -
- -
{{ form.cafe}} - {{ form.cafe.errors }} -
-
- {# terminals #} -
- -
{{ form.terminals}} - {{ form.terminals.errors }} -
-
- {# parking #} -
- -
{{ form.parking}} - {{ form.parking.errors }} -
-
- {# press_centre #} -
- -
{{ form.press_centre}} - {{ form.press_centre.errors }} -
-
- {# mobile_application #} -
- -
{{ form.mobile_application}} - {{ form.mobile_application.errors }} -
-
-
- -
-
- -
-
-

Мета даные

-
-
- - {# keywords #} - {% with field='keywords' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# title #} - {% with field='title' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - {# descriptions #} - {% with field='descriptions' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} - -
-
- - -
- - -
- -
-
- - {# modal window #} - -{% endblock %} \ No newline at end of file diff --git a/place/templates/place_exposition_all.html b/place/templates/place_exposition_all.html deleted file mode 100644 index 3dcc7139..00000000 --- a/place/templates/place_exposition_all.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends 'base.html' %} - -{% block body %} - -
-
-

Места проведения выставок

-
-
- - - - - - - - - - - - - {% for item in expositions %} - - - - - - - - - {% endfor %} - -
idНазваниеКраткое описаниеСтранаГород 
{{ item.id }}{{ item.name }}{% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %}{% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %}{% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %} - - Изменить - -
- Добавить выставочный центр -
- -
- -{% endblock %} \ No newline at end of file diff --git a/place/templates/select.html b/place/templates/select.html deleted file mode 100644 index 617dfeea..00000000 --- a/place/templates/select.html +++ /dev/null @@ -1,3 +0,0 @@ - {% for item in objects %} - -{% endfor %} \ No newline at end of file diff --git a/place/tests.py b/place/tests.py deleted file mode 100644 index 501deb77..00000000 --- a/place/tests.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -This file demonstrates writing tests using the unittest module. These will pass -when you run "manage.py test". - -Replace this with more appropriate tests for your application. -""" - -from django.test import TestCase - - -class SimpleTest(TestCase): - def test_basic_addition(self): - """ - Tests that 1 + 1 always equals 2. - """ - self.assertEqual(1 + 1, 2) diff --git a/place/urls.py b/place/urls.py deleted file mode 100644 index 6d7793d5..00000000 --- a/place/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -from django.conf.urls import patterns, include, url - -urlpatterns = patterns('', - url(r'^conference/add.*/$', 'place.views.conference_add'), - url(r'^exposition/add.*/$', 'place.views.exposition_add'), - url(r'^conference/change/(?P\d+).*/$', 'place.views.conference_change'), - url(r'^exposition/change/(?P\d+).*/$', 'place.views.exposition_change'), - url(r'^conference/all/$', 'place.views.conference_all'), - url(r'^exposition/all/$', 'place.views.exposition_all'), - url(r'^conference/ajax_city/$', 'place.views.ajax_city'), - -) \ No newline at end of file diff --git a/place/views.py b/place/views.py deleted file mode 100644 index 71fffdc8..00000000 --- a/place/views.py +++ /dev/null @@ -1,221 +0,0 @@ -# -*- coding: utf-8 -*- -from django.shortcuts import render_to_response -from django.http import HttpResponseRedirect, HttpResponse -from django.core.context_processors import csrf -from django.conf import settings -from django.forms.formsets import BaseFormSet, formset_factory -from django.forms.models import modelformset_factory -from django.contrib.contenttypes.models import ContentType -from django.contrib.auth.decorators import login_required -#models and forms -from forms import * -from models import PlaceConference, PlaceExposition, Hall -from city.models import City -from file.models import FileModel, TmpFile -from file.forms import FileModelForm -import random - - -# This class is used to make empty formset forms required -# See http://stackoverflow.com/questions/2406537/django-formsets-make-first-required/4951032#4951032 -class RequiredFormSet(BaseFormSet): - def __init__(self, *args, **kwargs): - super(RequiredFormSet, self).__init__(*args, **kwargs) - for form in self.forms: - form.empty_permitted = False - -@login_required -def conference_add(request): - HallFormSet = formset_factory(HallForm) - if request.POST.get('key'): - key = request.POST['key'] - else: - key = random.getrandbits(128) - file_form = FileModelForm(initial={'key': key}) - - if request.POST: - form = ConferenceForm(request.POST) - formset = HallFormSet(request.POST) - if form.is_valid() and formset.is_valid(): - place_conference = form.save() - - for item in formset.forms: - if item.is_valid() and item.has_changed(): - hall = item.save(commit=False) - hall.place_conference = place_conference - hall.save() - - return HttpResponseRedirect ('/place/conference/all') - else: - form = ConferenceForm(initial={'key': key}) - formset = HallFormSet() - - args = {} - args.update(csrf(request)) - - args['languages'] = settings.LANGUAGES - args['form'] = form - args['formset'] = formset - args['file_form'] = file_form - args['files'] = TmpFile.objects.filter(key=key) - - return render_to_response('place_conference_add.html', args) - -@login_required -def exposition_add(request): - if request.POST.get('key'): - key = request.POST['key'] - else: - key = random.getrandbits(128) - file_form = FileModelForm(initial={'key': key}) - - if request.POST: - form = ExpositionForm(request.POST) - if form.is_valid(): - form.save() - return HttpResponseRedirect('/place/exposition/all') - else: - form = ExpositionForm(initial={'key': key}) - - args = {} - args.update(csrf(request)) - - args['languages'] = settings.LANGUAGES - args['form'] = form - args['file_form'] = file_form - args['files'] = TmpFile.objects.filter(key=key) - - return render_to_response('place_exposition_add.html', args) - -@login_required -def conference_change(request, conference_id): - if request.POST: - HallFormSet = formset_factory(HallForm) - form = ConferenceForm(request.POST) - form.fields['city'].widget.choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])] - formset = HallFormSet(request.POST) - if form.is_valid() and formset.is_valid(): - place_conference = form.save(conference_id) - Hall.objects.filter(place_conference=conference_id).delete() - for item in formset.forms: - if item.is_valid() and item.has_changed(): - hall = item.save(commit=False) - hall.place_conference = place_conference - hall.save() - - return HttpResponseRedirect('/place/conference/all') - else: - #check if conference_id exists else redirect to the list of place of conference - #try: - HallFormSet = modelformset_factory(Hall, form=HallForm, exclude=('place_conference',)) - place = PlaceConference.objects.get(id=conference_id) - - #fill form with data from database - data = {'type': place.type, 'latitude': place.google_latitude, 'longitude': place.google_longitude, - 'phone': place.phone, 'fax': place.fax, 'web_page': place.web_page, 'email': place.email, - 'total_capacity': place.total_capacity, 'amount_halls': place.amount_halls, - 'exposition_hall': place.exposition_hall, 'exp_hall_area': place.exp_hall_area, - 'wifi': place.wifi, 'multimedia_equipment': place.multimedia_equipment, 'conference_call':place.conference_call, - 'translate_equipment': place.translate_equipment, 'banquet_hall': place.banquet_hall, - 'catering': place.catering, 'hotel': place.hotel} - - if place.country: - data['country'] = place.country.id - if place.city: - data['city'] = place.city.id - #data from translated fields - for code, name in settings.LANGUAGES: - obj = PlaceConference._meta.translations_model.objects.get(language_code = code,master__id=conference_id) #access to translated fields - data['name_%s'%code] = obj.name - data['description_%s'%code] = obj.description - data['adress_%s'%code] = obj.adress - data['hall_capacity_%s'%code] = obj.hall_capacity - data['title_%s'%code] = obj.title - data['keywords_%s'%code] = obj.keywords - data['descriptions_%s'%code] = obj.descriptions - - form = ConferenceForm(data) - form.fields['city'].widget.choices = [(item.id, item.name) for item in City.objects.filter(country=place.country.id)] - - halls = Hall.objects.filter(place_conference=conference_id) - formset = HallFormSet(queryset=halls) - - #except: - # return HttpResponseRedirect('/place/conference/all') - - args = {} - args.update(csrf(request)) - args['languages'] = settings.LANGUAGES - args['form'] = form - args['formset'] = formset - args['conference_id'] = conference_id - - return render_to_response('place_conference_add.html', args) - -@login_required -def exposition_change(request, exposition_id): - if request.POST: - form = ExpositionForm(request.POST) - if form.is_valid(): - form.save(exposition_id) - return HttpResponseRedirect('/place/exposition/all') - else: - #check if conference_id exists else redirect to the list of place of conference - try: - place = PlaceExposition.objects.get(id=exposition_id) - - #fill form with data from database - data= {'type': place.type, 'latitude': place.google_latitude, 'longitude': place.google_longitude, - 'phone': place.phone, 'fax': place.fax, 'web_page': place.web_page, 'email': place.email, - 'foundation_year': place.foundation_year, 'total_area': place.total_area, - 'closed_area': place.closed_area, 'open_area': place.open_area, - 'total_pavilions': place.total_pavilions, 'total_halls': place.total_halls, 'wifi':place.wifi, - 'bank': place.bank, 'children_room': place.children_room, - 'disabled_service': place.disabled_service, 'conference_centre': place.conference_centre, - 'business_centre': place.business_centre, 'online_registration': place.online_registration, - 'cafe': place.cafe, 'terminals': place.terminals, 'parking': place.parking, - 'press_centre': place.press_centre, 'mobile_application': place.mobile_application} - - if place.country: - data['country'] = place.country.id - if place.city: - data['city'] = place.city.id - #data from translated fields - for code, name in settings.LANGUAGES: - obj = PlaceExposition._meta.translations_model.objects.get(language_code = code,master__id=exposition_id) #access to translated fields - data['name_%s'%code] = obj.name - data['description_%s'%code] = obj.description - data['adress_%s'%code] = obj.adress - data['total_year_action_%s'%code] = obj.total_year_action - data['title_%s'%code] = obj.title - data['keywords_%s'%code] = obj.keywords - data['descriptions_%s'%code] = obj.descriptions - - form = ExpositionForm(data) - except: - return HttpResponseRedirect('/place/exposition/all') - - args = {} - args.update(csrf(request)) - - args['languages'] = settings.LANGUAGES - args['form'] = form - args['exposition_id'] = exposition_id - - return render_to_response('place_exposition_add.html', args) - -@login_required -def conference_all(request): - conferences = PlaceConference.objects.all() - return render_to_response('place_conference_all.html', {'conferences': conferences}) - -@login_required -def exposition_all(request): - expositions = PlaceExposition.objects.all() - return render_to_response('place_exposition_all.html', {'expositions': expositions}) - -@login_required -def ajax_city(request): - cities = City.objects.filter(country=request.GET['id']) - return render_to_response('select.html', {'cities': cities}) - diff --git a/place_conference/forms.py b/place_conference/forms.py index ae556959..816508f4 100644 --- a/place_conference/forms.py +++ b/place_conference/forms.py @@ -261,6 +261,14 @@ class ConferenceForm(forms.Form): return is_positive_integer(exp_hall_area) +class PlaceConferenceFormDelete(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = PlaceConference + fields = ('url',) + + class HallForm(forms.ModelForm): """ form for Hall model diff --git a/place_conference/urls.py b/place_conference/urls.py index 5b758619..32d042a3 100644 --- a/place_conference/urls.py +++ b/place_conference/urls.py @@ -1,12 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'place_conference.views.conference_add'), - url(r'^change/(.*)/$', 'place_conference.views.conference_change'), - url(r'^all/$', 'place_conference.views.conference_all'), - - - url(r'^conference/ajax_city/$', 'place.views.ajax_city'), - +urlpatterns = patterns('place_conference.views', + url(r'^add.*/$', 'conference_add'), + url(r'^delete/(?P.*)/$', 'conference_delete'), + url(r'^change/(?P.*)/$', 'conference_change'), + url(r'^all/$', 'conference_all'), ) \ No newline at end of file diff --git a/place_conference/views.py b/place_conference/views.py index 9611479c..12d83898 100644 --- a/place_conference/views.py +++ b/place_conference/views.py @@ -17,7 +17,7 @@ from file.forms import FileModelForm #python import random #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def conference_all(request): @@ -79,6 +79,10 @@ def conference_add(request): return render_to_response('place_conference_add.html', args) +def conference_delete(request, url): + return delete_object(request, PlaceConference, PlaceConferenceFormDelete, url, '/place_conference/all') + + @login_required def conference_change(request, url): """ diff --git a/place_exposition/forms.py b/place_exposition/forms.py index 9d8e1bf7..7f04e291 100644 --- a/place_exposition/forms.py +++ b/place_exposition/forms.py @@ -293,6 +293,14 @@ class ExpositionForm(forms.Form): return is_positive_integer(total_halls) +class PlaceExpositionFormDelete(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = PlaceExposition + fields = ('url',) + + class HallForm(forms.ModelForm): """ form for Hall model diff --git a/place_exposition/urls.py b/place_exposition/urls.py index 3f1999c6..ba07684d 100644 --- a/place_exposition/urls.py +++ b/place_exposition/urls.py @@ -1,12 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'place_exposition.views.exposition_add'), - url(r'^change/(.*)/$', 'place_exposition.views.exposition_change'), - url(r'^all/$', 'place_exposition.views.exposition_all'), - - - url(r'^conference/ajax_city/$', 'place.views.ajax_city'), - +urlpatterns = patterns('place_exposition.views', + url(r'^add.*/$', 'exposition_add'), + url(r'^delete/(?P.*)/$', 'exposition_delete'), + url(r'^change/(?P.*)/$', 'exposition_change'), + url(r'^all/$', 'exposition_all'), ) \ No newline at end of file diff --git a/place_exposition/views.py b/place_exposition/views.py index 25593f0a..07d91c30 100644 --- a/place_exposition/views.py +++ b/place_exposition/views.py @@ -10,7 +10,7 @@ from django.contrib.auth.decorators import login_required from django.forms.formsets import BaseFormSet, formset_factory from django.forms.models import modelformset_factory #models and forms -from forms import * +from forms import ExpositionForm, PlaceExpositionFormDelete, HallForm from models import PlaceExposition, Hall from city.models import City from file.models import FileModel, TmpFile @@ -18,7 +18,7 @@ from file.forms import FileModelForm #python import random #custom fields -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def exposition_all(request): @@ -78,6 +78,10 @@ def exposition_add(request): return render_to_response('place_exposition_add.html', args) +def exposition_delete(request, url): + return delete_object(request, PlaceExposition, PlaceExpositionFormDelete, url, '/place_exposition/all') + + @login_required def exposition_change(request, url): """ diff --git a/proj/urls.py b/proj/urls.py index f96a6bf2..edbc2d4f 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -28,22 +28,18 @@ urlpatterns = patterns('', url(r'^service/', include('service.urls')), url(r'^theme/', include('theme.urls')), url(r'^webinar/', include('webinar.urls')), - #url(r'^place/', include('place.urls')), - # - url(r'^test/', 'proj.views.test'), url(r'^settings/$', 'proj.views.settings'), url(r'^language/add/', 'directories.views.language_add'), url(r'^currency/add/', 'directories.views.currency_add'), + # + url(r'^test/', 'proj.views.test'), #ajax requests url(r'^ajax_post_file/(?P\d+)/$', 'proj.views.ajax_post_file'),#must be before /ajax_post_file/ url(r'^ajax_post_file/', 'proj.views.ajax_post_file'), url(r'^ajax_delete_file/', 'proj.views.ajax_delete_file'), - - url(r'^ajax_city/', 'proj.views.ajax_city'), url(r'^ajax_tag/', 'proj.views.ajax_tag'), - - + # url(r'^ckeditor/', include('ckeditor.urls')), #-------------------------- url(r'^admin/', include(admin.site.urls)), diff --git a/seminar/forms.py b/seminar/forms.py index 9bcf12bb..f3602823 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -223,4 +223,12 @@ class SeminarChangeForm(SeminarCreateForm): """ organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) - users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) \ No newline at end of file + users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) + + +class SeminarDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Seminar + fields = ('url',) \ No newline at end of file diff --git a/seminar/urls.py b/seminar/urls.py index c37d7c41..0170dcfa 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'seminar.views.seminar_add'), - url(r'^change/(.*)/$', 'seminar.views.seminar_change'), - url(r'^all/$', 'seminar.views.seminar_all'), +urlpatterns = patterns('seminar.views', + url(r'^add.*/$', 'seminar_add'), + url(r'^delete/(?P.*)/$', 'seminar_delete'), + url(r'^change/(?P.*)/$', 'seminar_change'), + url(r'^all/$', 'seminar_all'), ) \ No newline at end of file diff --git a/seminar/views.py b/seminar/views.py index 0fbf0679..67d02c41 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -7,7 +7,7 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required # from models import Seminar -from forms import SeminarCreateForm, SeminarChangeForm +from forms import SeminarCreateForm, SeminarChangeForm, SeminarDeleteForm from theme.models import Tag from city.models import City from file.models import FileModel, TmpFile @@ -15,7 +15,7 @@ from file.forms import FileModelForm #python import random #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def seminar_all(request): @@ -63,6 +63,10 @@ def seminar_add(request): return render_to_response('seminar_add.html', args) +def seminar_delete(request, url): + return delete_object(request, Seminar, SeminarDeleteForm, url, '/seminar/all') + + @login_required def seminar_change(request, url): """ diff --git a/service/forms.py b/service/forms.py index 1f278942..11f6e957 100644 --- a/service/forms.py +++ b/service/forms.py @@ -116,4 +116,11 @@ class ServiceForm(forms.Form): self._errors['url'] = ErrorList([msg]) del self.cleaned_data['url'] - return self.cleaned_data \ No newline at end of file + return self.cleaned_data + +class ServiceDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Service + fields = ('url',) \ No newline at end of file diff --git a/service/urls.py b/service/urls.py index 24865984..f041a3f1 100644 --- a/service/urls.py +++ b/service/urls.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'service.views.service_add'), - url(r'^change/(.*)/$', 'service.views.service_change'), - url(r'^all/$', 'service.views.service_all'), +urlpatterns = patterns('service.views', + url(r'^add.*/$', 'service_add'), + url(r'^delete/(?P.*)/$', 'service_delete'), + url(r'^change/(?P.*)/$', 'service_change'), + url(r'^all/$', 'service_all'), #ajax - url(r'^get_city/$', 'service.views.get_city'), - url(r'^get_country/$', 'service.views.get_country'), + url(r'^get_city/$', 'get_city'), + url(r'^get_country/$', 'get_country'), ) \ No newline at end of file diff --git a/service/views.py b/service/views.py index ae58f719..1a947292 100644 --- a/service/views.py +++ b/service/views.py @@ -6,11 +6,11 @@ from django.conf import settings from django.contrib.auth.decorators import login_required #models and forms from models import Service -from forms import ServiceForm +from forms import ServiceForm, ServiceDeleteForm from country.models import Country from city.models import City #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def service_all(request): @@ -19,6 +19,10 @@ def service_all(request): """ return objects_list(request, Service, 'service_all.html') +def service_delete(request, url): + return delete_object(request, Service, ServiceDeleteForm, url, '/service/all') + + @login_required def service_change(request, url): try: diff --git a/static/custom_js/place_city_ajax.js b/static/custom_js/place_city_ajax.js index 2f622426..25648fc4 100644 --- a/static/custom_js/place_city_ajax.js +++ b/static/custom_js/place_city_ajax.js @@ -1,30 +1,3 @@ -/*$(document).ready(function(){ - - - if ($('#id_city').val() == ""){ - $('#id_city').attr('disabled', 'disabled') - } - - $('#id_city').select2({ - width: 'element', - placeholder: 'Выберите страну', - allowClear: true - - }) - - $('#id_country').change(function(){ - $.get( - "/ajax_city/", {'id': $(this).val()}, function(j){ - //$(this).parent().select2("destroy"); - //$(this).parent().select2(); - // $('#id_city').find('option').remove(); - $('#id_city').html(j); - $('#id_city').attr('disabled', false); - }); - }); - });*/ - - $(document).ready(function(){ $.get( diff --git a/templates/admin/article/article_all.html b/templates/admin/article/article_all.html index 6b8bdfb0..816ade9b 100644 --- a/templates/admin/article/article_all.html +++ b/templates/admin/article/article_all.html @@ -29,6 +29,9 @@ Displays lists of all articles in the table Изменить + + Удалить + {% endfor %} diff --git a/templates/admin/company/company_all.html b/templates/admin/company/company_all.html index 2a0e32bf..fce83cfc 100644 --- a/templates/admin/company/company_all.html +++ b/templates/admin/company/company_all.html @@ -29,6 +29,10 @@ Displays lists of all companies in the table Изменить + + + Удалить + {% endfor %} diff --git a/templates/admin/conference/conference_all.html b/templates/admin/conference/conference_all.html index 1f22c102..57e9e767 100644 --- a/templates/admin/conference/conference_all.html +++ b/templates/admin/conference/conference_all.html @@ -28,6 +28,10 @@ Изменить + + + Удалить + diff --git a/templates/admin/exposition/exposition_all.html b/templates/admin/exposition/exposition_all.html index 8264820c..0d0a0638 100644 --- a/templates/admin/exposition/exposition_all.html +++ b/templates/admin/exposition/exposition_all.html @@ -28,6 +28,10 @@ Изменить + + + Удалить + diff --git a/templates/admin/organiser/organiser_all.html b/templates/admin/organiser/organiser_all.html index 948bcfa9..6c35be74 100644 --- a/templates/admin/organiser/organiser_all.html +++ b/templates/admin/organiser/organiser_all.html @@ -27,6 +27,10 @@ Displays lists of all organisers in the table Изменить + + + Удалить + {% endfor %} diff --git a/templates/admin/place_conference/place_conference_all.html b/templates/admin/place_conference/place_conference_all.html index f45c11de..3385b3a3 100644 --- a/templates/admin/place_conference/place_conference_all.html +++ b/templates/admin/place_conference/place_conference_all.html @@ -30,6 +30,10 @@ Изменить + + + Удалить + {% endfor %} diff --git a/templates/admin/place_exposition/place_exposition_all.html b/templates/admin/place_exposition/place_exposition_all.html index 192be6c2..0194cb04 100644 --- a/templates/admin/place_exposition/place_exposition_all.html +++ b/templates/admin/place_exposition/place_exposition_all.html @@ -30,6 +30,10 @@ Изменить + + + Удалить + {% endfor %} diff --git a/templates/admin/seminar/seminar_all.html b/templates/admin/seminar/seminar_all.html index 4e6c852b..93b45981 100644 --- a/templates/admin/seminar/seminar_all.html +++ b/templates/admin/seminar/seminar_all.html @@ -28,6 +28,10 @@ Изменить + + + Удалить + diff --git a/templates/admin/service/service_all.html b/templates/admin/service/service_all.html index c01636cf..3b635f91 100644 --- a/templates/admin/service/service_all.html +++ b/templates/admin/service/service_all.html @@ -26,6 +26,10 @@ Изменить + + + Удалить + {% endfor %} diff --git a/templates/admin/theme/tag_all.html b/templates/admin/theme/tag_all.html index 036edaa7..cddcb9c6 100644 --- a/templates/admin/theme/tag_all.html +++ b/templates/admin/theme/tag_all.html @@ -30,6 +30,10 @@ Изменить + + + Удалить + diff --git a/templates/admin/theme/theme_all.html b/templates/admin/theme/theme_all.html index d8fb2be3..e3e7d7c0 100644 --- a/templates/admin/theme/theme_all.html +++ b/templates/admin/theme/theme_all.html @@ -28,6 +28,10 @@ Изменить + + + Удалить + diff --git a/templates/admin/webinar/webinar_all.html b/templates/admin/webinar/webinar_all.html index 70a09105..475b9fc5 100644 --- a/templates/admin/webinar/webinar_all.html +++ b/templates/admin/webinar/webinar_all.html @@ -28,6 +28,10 @@ Изменить + + + Удалить + diff --git a/templates/delete.html b/templates/delete.html index ba475426..21c2ed10 100644 --- a/templates/delete.html +++ b/templates/delete.html @@ -4,7 +4,7 @@ {% if form %}

Вы действительно хотите удалить {{ object }}?


- {{ form.url }} + {{ form }} Нет diff --git a/theme/forms.py b/theme/forms.py index 55aeb688..c3c868ce 100644 --- a/theme/forms.py +++ b/theme/forms.py @@ -116,3 +116,19 @@ class TagForm(forms.Form): #populate empty fields and fields which was already populated tag_id = getattr(tag, 'id') populate_all(Tag, data, tag_id, zero_fields) + + +class ThemeDeleteForm(forms.ModelForm): + id = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Theme + fields = ('id',) + + +class TagDeleteForm(forms.ModelForm): + id = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Tag + fields = ('id',) \ No newline at end of file diff --git a/theme/urls.py b/theme/urls.py index 9efb6ff0..2e789bc8 100644 --- a/theme/urls.py +++ b/theme/urls.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^theme/add.*/$', 'theme.views.theme_add'), - url(r'^tag/add.*/$', 'theme.views.tag_add'), - url(r'^theme/change/(?P\d+).*/$', 'theme.views.theme_change'), - url(r'^tag/change/(?P\d+).*/$', 'theme.views.tag_change'), - url(r'^theme/all/$', 'theme.views.theme_all'), - url(r'^tag/all/$', 'theme.views.tag_all'), +urlpatterns = patterns('theme.views', + url(r'^theme/add.*/$', 'theme_add'), + url(r'^tag/add.*/$', 'tag_add'), + url(r'^theme/delete/(?P\d+)/$', 'theme_delete'), + url(r'^tag/delete/(?P\d+)/$', 'tag_delete'), + url(r'^theme/change/(?P\d+).*/$', 'theme_change'), + url(r'^tag/change/(?P\d+).*/$', 'tag_change'), + url(r'^theme/all/$', 'theme_all'), + url(r'^tag/all/$', 'tag_all'), ) \ No newline at end of file diff --git a/theme/views.py b/theme/views.py index f21f0209..54a963f2 100644 --- a/theme/views.py +++ b/theme/views.py @@ -8,10 +8,10 @@ from django.forms.models import modelformset_factory from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required #forms and models -from forms import ThemeForm, TagForm +from forms import ThemeForm, TagForm, ThemeDeleteForm, TagDeleteForm from models import Theme, Tag #custom views -from functions.custom_views import objects_list, add_object +from functions.custom_views import objects_list, add_object, delete_object def theme_all(request): @@ -25,10 +25,15 @@ def tag_all(request): def theme_add(request): return add_object(request, ThemeForm, 'theme_add.html', '/theme/theme/all') - def tag_add(request): return add_object(request, TagForm, 'tag_add.html', '/theme/tag/all') +def theme_delete(request, theme_id): + return delete_object(request, Theme, ThemeDeleteForm, theme_id, '/theme/theme/all') + +def tag_delete(request, tag_id): + return delete_object(request, Tag, TagDeleteForm, tag_id, '/theme/tag/all') + @login_required def theme_change(request, theme_id=None): diff --git a/webinar/forms.py b/webinar/forms.py index 4553a662..8cf6346b 100644 --- a/webinar/forms.py +++ b/webinar/forms.py @@ -198,4 +198,12 @@ class WebinarChangeForm(WebinarCreateForm): """ organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) - users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) \ No newline at end of file + users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) + + +class WebinarDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = Webinar + fields = ('url',) \ No newline at end of file diff --git a/webinar/urls.py b/webinar/urls.py index 6aeec217..63dcf9be 100644 --- a/webinar/urls.py +++ b/webinar/urls.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url -urlpatterns = patterns('', - url(r'^add.*/$', 'webinar.views.webinar_add'), - url(r'^change/(.*)/$', 'webinar.views.webinar_change'), - url(r'^all/$', 'webinar.views.webinar_all'), +urlpatterns = patterns('webinar.views', + url(r'^add.*/$', 'webinar_add'), + url(r'^delete/(?P.*)/$', 'webinar_delete'), + url(r'^change/(?P.*)/$', 'webinar_change'), + url(r'^all/$', 'webinar_all'), ) diff --git a/webinar/views.py b/webinar/views.py index 713d0fb7..f3b65ac7 100644 --- a/webinar/views.py +++ b/webinar/views.py @@ -8,13 +8,13 @@ from django.contrib.auth.decorators import login_required # from theme.models import Tag from models import Webinar -from forms import WebinarChangeForm, WebinarCreateForm +from forms import WebinarChangeForm, WebinarCreateForm, WebinarDeleteForm from file.models import FileModel, TmpFile from file.forms import FileModelForm #python import random #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object def webinar_all(request): @@ -59,6 +59,10 @@ def webinar_add(request): return render_to_response('webinar_add.html', args) +def webinar_delete(request, url): + return delete_object(request, Webinar, WebinarDeleteForm, url, '/webinar/delete') + + @login_required def webinar_change(request, url): """