trnsafer scropts

remotes/origin/1203
Nazar Kotyuk 12 years ago
parent e5cf228a4b
commit 69494f6742
  1. 538
      accounts/migrations/0001_initial.py
  2. 3
      city/models.py
  3. 1
      company/management/__init__.py
  4. 1
      company/management/commands/__init__.py
  5. 95
      company/management/commands/company_from_old_db.py
  6. 10
      company/models.py
  7. 19
      company/search_indexes.py
  8. 4
      conference/models.py
  9. 20
      conference/search_indexes.py
  10. 30
      core/views.py
  11. 3
      country/models.py
  12. 8
      exposition/models.py
  13. 15
      exposition/search_indexes.py
  14. 3
      functions/custom_fields.py
  15. 21
      functions/forms.py
  16. 5
      functions/model_mixin.py
  17. 32
      functions/search_forms.py
  18. 2
      functions/signal_handlers.py
  19. 80
      import_xls/excel_settings.py
  20. 0
      organiser/management/__init__.py
  21. 0
      organiser/management/commands/__init__.py
  22. 108
      organiser/management/commands/organiser_from_old_db.py
  23. 8
      organiser/models.py
  24. 4
      place_conference/models.py
  25. 20
      place_conference/search_indexes.py
  26. 3
      place_exposition/models.py
  27. 11
      place_exposition/search_indexes.py
  28. 2
      proj/settings.py
  29. 4
      proj/urls.py
  30. 11
      proj/views.py
  31. 4
      seminar/models.py
  32. 20
      seminar/search_indexes.py
  33. 6
      settings/settings.py
  34. 44
      static/client/css/main.css
  35. 341
      static/client/js/main.js
  36. 3
      templates/client/blank.html
  37. 30
      templates/client/exposition/search.html
  38. 120
      templates/client/includes/exposition/search_result.html
  39. 45
      templates/client/includes/search_paginator.html
  40. 18
      templates/client/index.html
  41. 45
      templates/client/place/search.html
  42. 65
      templates/client/popups/place.html
  43. 3
      templates/client/popups/theme.html
  44. 3
      templates/client/search/indexes/company/company_text.txt
  45. 3
      templates/client/search/indexes/conference/conference_text.txt
  46. 3
      templates/client/search/indexes/exposition/exposition_text.txt
  47. 3
      templates/client/search/seminar/seminar_text.txt
  48. 3
      templates/client/search/webinar/webinar_text.txt
  49. 0
      theme/management/__init__.py
  50. 0
      theme/management/commands/__init__.py
  51. 55
      theme/management/commands/tag_from_old_db.py
  52. 47
      theme/management/commands/theme_from_old_db.py
  53. 34
      theme/models.py
  54. 4
      webinar/models.py
  55. 20
      webinar/search_indexes.py

@ -1,538 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'User'
db.create_table(u'accounts_user', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)),
('email', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=255, db_index=True)),
('first_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
('last_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
('url', self.gf('django.db.models.fields.SlugField')(max_length=50, blank=True)),
('is_active', self.gf('django.db.models.fields.BooleanField')(default=False)),
('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)),
('is_admin', self.gf('django.db.models.fields.BooleanField')(default=False)),
('date_joined', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('date_registered', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
('date_modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
('organiser', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['organiser.Organiser'], unique=True, null=True, on_delete=models.PROTECT, blank=True)),
('translator', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user', null=True, on_delete=models.PROTECT, to=orm['translator.Translator'], blank=True, unique=True)),
('country', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='users', null=True, on_delete=models.PROTECT, to=orm['country.Country'])),
('city', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['city.City'], null=True, on_delete=models.PROTECT, blank=True)),
('company', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='users', null=True, on_delete=models.PROTECT, to=orm['company.Company'])),
('phone', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
('position', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('about', self.gf('django.db.models.fields.TextField')(blank=True)),
('avatar', self.gf('django.db.models.fields.files.ImageField')(max_length=100, blank=True)),
('web_page', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('social', self.gf('django.db.models.fields.TextField')(blank=True)),
('skype', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('descriptions', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('keywords', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
))
db.send_create_signal(u'accounts', ['User'])
# Adding M2M table for field groups on 'User'
m2m_table_name = db.shorten_name(u'accounts_user_groups')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('user', models.ForeignKey(orm[u'accounts.user'], null=False)),
('group', models.ForeignKey(orm[u'auth.group'], null=False))
))
db.create_unique(m2m_table_name, ['user_id', 'group_id'])
# Adding M2M table for field user_permissions on 'User'
m2m_table_name = db.shorten_name(u'accounts_user_user_permissions')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('user', models.ForeignKey(orm[u'accounts.user'], null=False)),
('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
))
db.create_unique(m2m_table_name, ['user_id', 'permission_id'])
# Adding model 'Calendar'
db.create_table(u'accounts_calendar', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['accounts.User'], unique=True)),
))
db.send_create_signal(u'accounts', ['Calendar'])
# Adding M2M table for field expositions on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_expositions')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('exposition', models.ForeignKey(orm[u'exposition.exposition'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'exposition_id'])
# Adding M2M table for field conferences on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_conferences')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('conference', models.ForeignKey(orm[u'conference.conference'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'conference_id'])
# Adding M2M table for field seminars on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_seminars')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('seminar', models.ForeignKey(orm[u'seminar.seminar'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'seminar_id'])
# Adding M2M table for field webinars on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_webinars')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('webinar', models.ForeignKey(orm[u'webinar.webinar'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'webinar_id'])
def backwards(self, orm):
# Deleting model 'User'
db.delete_table(u'accounts_user')
# Removing M2M table for field groups on 'User'
db.delete_table(db.shorten_name(u'accounts_user_groups'))
# Removing M2M table for field user_permissions on 'User'
db.delete_table(db.shorten_name(u'accounts_user_user_permissions'))
# Deleting model 'Calendar'
db.delete_table(u'accounts_calendar')
# Removing M2M table for field expositions on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_expositions'))
# Removing M2M table for field conferences on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_conferences'))
# Removing M2M table for field seminars on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_seminars'))
# Removing M2M table for field webinars on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_webinars'))
models = {
u'accounts.calendar': {
'Meta': {'object_name': 'Calendar'},
'conferences': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['conference.Conference']", 'null': 'True', 'symmetrical': 'False'}),
'expositions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['exposition.Exposition']", 'null': 'True', 'symmetrical': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'seminars': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['seminar.Seminar']", 'null': 'True', 'symmetrical': 'False'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['accounts.User']", 'unique': 'True'}),
'webinars': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['webinar.Webinar']", 'null': 'True', 'symmetrical': 'False'})
},
u'accounts.user': {
'Meta': {'object_name': 'User'},
'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'avatar': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'company': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}),
'date_joined': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'date_registered': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'descriptions': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'keywords': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'organiser': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['organiser.Organiser']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'position': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'skype': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
'social': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'translator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['translator.Translator']", 'blank': 'True', 'unique': 'True'}),
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'city.city': {
'Meta': {'object_name': 'City'},
'code_IATA': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['directories.Iata']", 'null': 'True', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cities'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'})
},
u'company.company': {
'Meta': {'object_name': 'Company'},
'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'created_company'", 'null': 'True', 'to': u"orm['accounts.User']"}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'social': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'staff_number': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'conference.conference': {
'Meta': {'object_name': 'Conference'},
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateField', [], {}),
'data_end': ('django.db.models.fields.DateField', [], {}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'max_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'place': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference_place'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['place_conference.PlaceConference']"}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'conference_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'country.area': {
'Meta': {'object_name': 'Area'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'country.country': {
'Meta': {'object_name': 'Country'},
'area': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Area']"}),
'big_cities': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'cities'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['city.City']"}),
'capital': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'capital'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}),
'country_code': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Currency']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Language']", 'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'teritory': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'time_delivery': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'timezone': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'})
},
u'directories.currency': {
'Meta': {'object_name': 'Currency'},
'currency': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'directories.iata': {
'Meta': {'object_name': 'Iata'},
'airport': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'code': ('django.db.models.fields.CharField', [], {'max_length': '5'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'directories.language': {
'Meta': {'object_name': 'Language'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'exposition.exposition': {
'Meta': {'object_name': 'Exposition'},
'application_deadline': ('django.db.models.fields.DateField', [], {'null': 'True'}),
'audience': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateField', [], {}),
'data_end': ('django.db.models.fields.DateField', [], {}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'max_closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'max_closed_equipped_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'max_open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_closed_equipped_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_stand_size': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'periodic': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'place': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'exposition_place'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['place_exposition.PlaceExposition']"}),
'price_all': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_all_bar': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_catalog': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_day': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_day_bar': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'registration_payment': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'exposition_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'file.filemodel': {
'Meta': {'object_name': 'FileModel'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'file_path': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
'file_type': ('functions.custom_fields.EnumField', [], {'default': "'PDF'", 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'img_height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'img_width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'purpose': ('functions.custom_fields.EnumField', [], {'default': "'photo'"})
},
u'organiser.organiser': {
'Meta': {'object_name': 'Organiser'},
'address': ('functions.custom_fields.LocationField', [], {'null': 'True', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'events_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'place_conference': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_conference'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_conference.PlaceConference']"}),
'place_exposition': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_exposition'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_exposition.PlaceExposition']"}),
'social': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'staff_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Tag']", 'null': 'True', 'blank': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}),
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'place_conference.placeconference': {
'Meta': {'object_name': 'PlaceConference'},
'address': ('functions.custom_fields.LocationField', [], {}),
'amount_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'banquet_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'catering': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'conference_call': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'exp_hall_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'exposition_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'hotel': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'multimedia_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'total_capacity': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'translate_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'type': ('functions.custom_fields.EnumField', [], {'default': "'Convention centre'"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'video_link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'})
},
u'place_exposition.placeexposition': {
'Meta': {'ordering': "['translations__name']", 'object_name': 'PlaceExposition'},
'address': ('functions.custom_fields.LocationField', [], {}),
'bank': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'business_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'cafe': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'children_room': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'conference_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'disabled_service': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile_application': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'online_registration': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'parking': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'press_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'terminals': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'total_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'total_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'total_pavilions': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'type': ('functions.custom_fields.EnumField', [], {'default': "'Exposition complex'"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'video_link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'})
},
u'seminar.seminar': {
'Meta': {'object_name': 'Seminar'},
'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}),
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateTimeField', [], {}),
'data_end': ('django.db.models.fields.DateTimeField', [], {}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'max_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'seminar_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'theme.tag': {
'Meta': {'object_name': 'Tag'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'theme': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'on_delete': 'models.PROTECT', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'})
},
u'theme.theme': {
'Meta': {'ordering': "['translations__name']", 'object_name': 'Theme'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'types': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'})
},
u'translator.translator': {
'Meta': {'object_name': 'Translator'},
'birth': ('django.db.models.fields.DateField', [], {}),
'car': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'gender': ('functions.custom_fields.EnumField', [], {'default': "'male'"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'webinar.webinar': {
'Meta': {'object_name': 'Webinar'},
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'max_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'webinar_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
}
}
complete_apps = ['accounts']

@ -15,8 +15,6 @@ from functions.models_methods import ExpoManager
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else [] flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
class City(TranslatableModel): class City(TranslatableModel):
""" """
Create City model Create City model
@ -25,7 +23,6 @@ class City(TranslatableModel):
""" """
objects = ExpoManager() objects = ExpoManager()
services = BitField(flags=flags) services = BitField(flags=flags)
url = models.SlugField(unique=True) url = models.SlugField(unique=True)

@ -0,0 +1,95 @@
from django.core.management.base import BaseCommand, CommandError
from company.models import Company
from theme.models import Theme, Tag
from accounts.models import User
from functions.form_check import translit_with_separator
import datetime
import MySQLdb
from MySQLdb.cursors import DictCursor
def convert_to_int(st):
if not st:
return None
deduct = ('-','(',')','.',' ')
for elem in deduct:
st = st.replace(elem, '')
if st.isdigit():
return int(st)
else:
return None
class Command(BaseCommand):
def handle(self, *args, **options):
db = MySQLdb.connect(host="localhost",
user="root",
passwd="qazedc",
db="expomap_ru",
charset='utf8',
cursorclass=DictCursor)
cursor = db.cursor()
sql = "select * from customers_company"
cursor.execute(sql)
res = cursor.fetchall()
for c in res:
phone = convert_to_int(c.get('phone'))
fax = convert_to_int(c.get('fax'))
url = c['url']
if not url:
url = translit_with_separator(c.get('title'))
company = Company(id=c['company_id'], url=url, phone=phone, fax=fax,
email=c.get('email'), web_page=c.get('website'), twitter=c.get('twitter', ''))
company.translate('ru')
company.name = c.get('title')
company.specialization = c.get('specialize')
company.description = c.get('about')
company.address_inf = c.get('adress')
print('not_saved: %s'%c['title'])
company.save()
user_id = c['customers_id']
print('saved: %s'%str(company))
user = User.objects.safe_get(id=user_id)
if user:
user.company = company
if not user.last_login:
now = datetime.datetime.now()
user.last_login = now
user.save()
theme = None
theme_id = c.get('theme')
if theme_id:
try:
theme = Theme.objects.get(id=theme_id)
except Theme.DoesNotExist:
continue
company.theme.add(theme)
if not theme:
continue
tags = c.get('tags')
if tags:
tags = tags.split(',')
if tags:
for tag_id in tags:
try:
tag = Tag.objects.get(id=tag_id)
except Tag.DoesNotExist:
continue
if tag.theme == theme:
company.tag.add(tag)
else:
continue
#print(str(type(res[0]['phone'])))
print('success')

@ -3,13 +3,12 @@ from django.db import models
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
# #
from django.utils.translation import ugettext as _
from functions.custom_fields import LocationField from functions.custom_fields import LocationField
from functions.models_methods import ExpoManager from functions.models_methods import ExpoManager
from functions.model_mixin import ExpoMixin from functions.model_mixin import ExpoMixin
class Company(TranslatableModel, ExpoMixin): class Company(TranslatableModel, ExpoMixin):
""" """
Create Company model Create Company model
@ -20,7 +19,7 @@ class Company(TranslatableModel, ExpoMixin):
objects = ExpoManager() objects = ExpoManager()
files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id') files = generic.GenericRelation('file.FileModel', content_type_field='content_type', object_id_field='object_id')
url = models.SlugField() url = models.SlugField(max_length=255)
#relations #relations
creator = models.ForeignKey('accounts.User', verbose_name='Создатель', related_name='created_company', creator = models.ForeignKey('accounts.User', verbose_name='Создатель', related_name='created_company',
blank=True, null=True) blank=True, null=True)
@ -39,7 +38,10 @@ class Company(TranslatableModel, ExpoMixin):
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True) fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True) web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True)
email = models.EmailField(verbose_name='Email', blank=True) email = models.EmailField(verbose_name='Email', blank=True)
social = models.TextField(verbose_name='Социальные страници', blank=True) facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True)
#translation fields #translation fields
translations = TranslatedFields( translations = TranslatedFields(

@ -0,0 +1,19 @@
from haystack import indexes
from models import Company
class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
where = indexes.MultiValueField()
def prepare_where(self, obj):
country = [tr.name for tr in obj.country.translations.all()]
city = [tr.name for tr in obj.city.translations.all()]
return country + city
def get_model(self):
return Company
def index_queryset(self, using=None):
return self.get_model().objects.filter()

@ -11,14 +11,14 @@ from functions.db import db_table_exists
#custom functions #custom functions
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
from functions.models_methods import ExpoManager from functions.models_methods import ExpoManager
from functions.model_mixin import EventMixin from functions.model_mixin import EventMixin, ExpoMixin
# check if table exist and create flags if true # check if table exist and create flags if true
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else [] flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
CURRENCY = ('RUB', 'USD', 'EUR') CURRENCY = ('RUB', 'USD', 'EUR')
class Conference(TranslatableModel, EventMixin): class Conference(TranslatableModel, EventMixin, ExpoMixin):
""" """
Create Conference model Create Conference model

@ -0,0 +1,20 @@
from haystack import indexes
from models import Conference
class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
where = indexes.MultiValueField()
def prepare_where(self, obj):
country = [tr.name for tr in obj.country.translations.all()]
city = [tr.name for tr in obj.city.translations.all()]
return country + city
def get_model(self):
return Conference
def index_queryset(self, using=None):
return self.get_model().objects.filter(is_published=True)

@ -10,6 +10,36 @@ from django.utils.translation import ugettext as _
from forms import PlaceSearchForm from forms import PlaceSearchForm
from functions.search_forms import EventSearchForm
from haystack.query import EmptySearchQuerySet
class EventSearchView(ListView):
paginate_by = 2
template_name = 'exposition/search.html'
search_form = EventSearchForm
def get_queryset(self):
if self.request.GET:
form = self.search_form(self.request.GET)
if form.is_valid():
return form.search()
else:
return EmptySearchQuerySet()
else:
return EmptySearchQuerySet()
def get_context_data(self, **kwargs):
context = super(EventSearchView, self).get_context_data(**kwargs)
context['search_form'] = EventSearchForm(self.request.GET)
queries = self.request.GET.copy()
if queries.has_key('page'):
del queries['page']
context['queries'] = queries
context['search_action'] = '/events/search/'
return context
class PlaceSearchView(ListView): class PlaceSearchView(ListView):
paginate_by = 2 paginate_by = 2

@ -37,6 +37,9 @@ class Area(TranslatableModel):
name = models.CharField(max_length=255), name = models.CharField(max_length=255),
) )
def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk))
class Country(TranslatableModel): class Country(TranslatableModel):
""" """
Create Country model Create Country model

@ -13,7 +13,7 @@ from organiser.models import Organiser
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
from functions.signal_handlers import post_save_handler, pre_save_handler from functions.signal_handlers import post_save_handler, pre_save_handler
from functions.models_methods import ExpoManager from functions.models_methods import ExpoManager
from functions.model_mixin import EventMixin from functions.model_mixin import EventMixin, ExpoMixin
AUDIENCE1 = ((None,_(u'Не выбрано')), AUDIENCE1 = ((None,_(u'Не выбрано')),
('experts', _(u'Специалисты')), ('experts', _(u'Специалисты')),
@ -33,7 +33,7 @@ CURRENCY = ('RUB', 'USD', 'EUR')
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else [] flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
class Exposition(TranslatableModel, EventMixin): class Exposition(TranslatableModel, EventMixin, ExpoMixin):
""" """
Create Exposition model Create Exposition model
@ -137,6 +137,10 @@ class Exposition(TranslatableModel, EventMixin):
def __unicode__(self): def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk)) return self.lazy_translation_getter('name', unicode(self.pk))
def get_index_text(self):
names = [tr.name for tr in self.translations.all()]
return names
def get_audience(self): def get_audience(self):
checked = [item for item, bool in self.audience if bool==True] checked = [item for item, bool in self.audience if bool==True]
audience = [] audience = []

@ -1,15 +1,20 @@
"""
from haystack import indexes from haystack import indexes
from models import Exposition from models import Exposition
class ExpositionIndex(indexes.SearchIndex, indexes.Indexable): class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True) text = indexes.CharField(document=True, use_template=True)
where = indexes.MultiValueField()
def prepare_where(self, obj):
country = [tr.name for tr in obj.country.translations.all()]
city = [tr.name for tr in obj.city.translations.all()]
return country + city
def get_model(self): def get_model(self):
return Exposition return Exposition
def index_queryset(self, using=None): def index_queryset(self, using=None):
return self.get_model().objects.filter()
""" return self.get_model().objects.filter(is_published=True)

@ -20,6 +20,9 @@ from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^functions\.custom_fields\.EnumField", "^functions\.custom_fields\.LocationField"]) add_introspection_rules([], ["^functions\.custom_fields\.EnumField", "^functions\.custom_fields\.LocationField"])
# dont delete
class EnumField(models.Field): class EnumField(models.Field):
""" """
A field class that maps to MySQL's ENUM type. A field class that maps to MySQL's ENUM type.

@ -2,7 +2,6 @@
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from theme.models import Theme from theme.models import Theme
from haystack.query import SearchQuerySet from haystack.query import SearchQuerySet
class AdminSearchForm(forms.Form): class AdminSearchForm(forms.Form):
@ -10,15 +9,25 @@ class AdminSearchForm(forms.Form):
class ThemeSearch(forms.Form): class ThemeSearch(forms.Form):
event = forms.MultipleChoiceField(required=False,widget=forms.CheckboxSelectMultiple, choices=[(0, _(u'выставки')), event = forms.MultipleChoiceField(required=False,
(1, _(u'конференции')), widget=forms.CheckboxSelectMultiple(attrs={'class': 'topicChecks'}),
(2, _(u'семинары')), choices=[('exposition', _(u'выставки')),
(3, _(u'вебинары'))]) ('conference', _(u'конференции')),
theme = forms.ModelMultipleChoiceField(required=False, queryset=Theme.objects.all(), ('seminar', _(u'семинары')),
('webinar', _(u'вебинары'))])
theme = forms.ModelMultipleChoiceField(required=False, queryset=[],
widget=forms.CheckboxSelectMultiple) widget=forms.CheckboxSelectMultiple)
from country.models import Area
class PlaceSearch(forms.Form):
r = forms.ModelMultipleChoiceField(queryset=Area.objects.all(), required=False,
widget=forms.CheckboxSelectMultiple())
c = forms.CharField(widget=forms.CheckboxSelectMultiple(), required=False)
t = forms.CharField(widget=forms.CheckboxSelectMultiple())
class AbstractSearch(forms.Form): class AbstractSearch(forms.Form):
q = forms.CharField(label=_(u'Поиск'), required=False) q = forms.CharField(label=_(u'Поиск'), required=False)
w = forms.CharField(label=_(u'Где'), required=False) w = forms.CharField(label=_(u'Где'), required=False)

@ -2,6 +2,11 @@ from service.models import Service
import calendar as python_calendar import calendar as python_calendar
class ExpoMixin(object): class ExpoMixin(object):
def get_index_text(self):
names = [tr.name for tr in self.translations.all()]
return names
def get_logo(self): def get_logo(self):
logo = self.files.filter(purpose='logo') logo = self.files.filter(purpose='logo')

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
from django import forms
from django.utils.translation import ugettext_lazy as _
from haystack.query import EmptySearchQuerySet, SearchQuerySet
from exposition.models import Exposition
from conference.models import Conference
from seminar.models import Seminar
from webinar.models import Webinar
class EventSearchForm(forms.Form):
q = forms.CharField(label=_(u'Поиск'), required=False)
w = forms.CharField(label=_(u'Где'), required=False)
def search(self):
if not self.is_valid():
return EmptySearchQuerySet()
q = self.cleaned_data.get('q')
w = self.cleaned_data.get('w')
if not q and not w:
return EmptySearchQuerySet()
sqs = SearchQuerySet().models(Exposition, Conference, Seminar, Webinar)
if q:
sqs = sqs.auto_query(q)
if w:
sqs = sqs.filter(where__contains=w)
return sqs

@ -5,6 +5,7 @@ from functions.form_check import translit_with_separator
def pre_save_handler(sender, **kwargs): def pre_save_handler(sender, **kwargs):
obj = kwargs['instance'] obj = kwargs['instance']
if obj.language_code =='en': if obj.language_code =='en':
try: try:
name = getattr(obj, 'name') name = getattr(obj, 'name')
@ -12,6 +13,7 @@ def pre_save_handler(sender, **kwargs):
except AttributeError: except AttributeError:
pass pass
if not obj.url: if not obj.url:
obj.url = ''.join([random.choice(string.ascii_lowercase) for n in xrange(8)]) obj.url = ''.join([random.choice(string.ascii_lowercase) for n in xrange(8)])

@ -402,11 +402,11 @@ place_exp_sett = {
u'Адрес':{u'field': u'adress', u'func': unicode}, u'Адрес':{u'field': u'adress', u'func': unicode},
u'Тел.':{u'field': u'phone', u'func': to_phone}, u'Тел.':{u'field': u'phone', u'func': to_phone},
u'Факс':{u'field': u'fax', u'func': to_phone}, u'Факс':{u'field': u'fax', u'func': to_phone},
u'Фото':{u'field': u'photo', u'func': save_photo, u'method': True},#сделать u'Фото':{u'field': u'photo', u'func': save_photo, u'method': True},
u'Лого':{u'field': u'logo', u'func': save_file, u'method': True, u'purpose': 'logo'},#сделать u'Лого':{u'field': u'logo', u'func': save_file, u'method': True, u'purpose': 'logo'},
u'Веб-сайт':{u'field': u'web_page', u'func': unicode}, u'Веб-сайт':{u'field': u'web_page', u'func': unicode},
u'Email':{u'field': u'email', u'func': unicode}, u'Email':{u'field': u'email', u'func': unicode},
u'Карта проезда':{u'field': u'map', u'func': save_file, u'method': True, u'purpose': 'map'},#сделать u'Карта проезда':{u'field': u'map', u'func': save_file, u'method': True, u'purpose': 'map'},
u'Виртуальный тур':{u'field': u'virtual_tour', u'func': to_url}, u'Виртуальный тур':{u'field': u'virtual_tour', u'func': to_url},
u'Год основания':{u'field': u'foundation_year', u'func': to_int}, u'Год основания':{u'field': u'foundation_year', u'func': to_int},
u'Количество мероприятий в год':{u'field': u'event_in_year', u'func': to_int}, u'Количество мероприятий в год':{u'field': u'event_in_year', u'func': to_int},
@ -414,7 +414,7 @@ place_exp_sett = {
u'Закрытая выставочная площадь, кв. м.':{u'field': u'closed_area', u'func': to_int}, u'Закрытая выставочная площадь, кв. м.':{u'field': u'closed_area', u'func': to_int},
u'Открытая выставочная площадь, кв. м.':{u'field': u'open_area', u'func': to_int}, u'Открытая выставочная площадь, кв. м.':{u'field': u'open_area', u'func': to_int},
u'Количество павильонов':{u'field': u'total_pavilions', u'func': to_int}, u'Количество павильонов':{u'field': u'total_pavilions', u'func': to_int},
u'Площадь павильонов/залов (по номерам)':{u'field': u'halls', u'func': save_halls, u'method': True},#!!! u'Площадь павильонов/залов (по номерам)':{u'field': u'halls', u'func': save_halls, u'method': True},
u'Конференц-залы':{u'field': u'total_halls', u'func': to_int}, u'Конференц-залы':{u'field': u'total_halls', u'func': to_int},
u'Схема территории':{u'field': u'scheme', u'func': save_file, u'method': True, u'purpose': 'scheme teritory'},#сделать u'Схема территории':{u'field': u'scheme', u'func': save_file, u'method': True, u'purpose': 'scheme teritory'},#сделать
u'Банк/Банкоматы/Обмен валюты':{u'field': u'bank', u'func': bool}, u'Банк/Банкоматы/Обмен валюты':{u'field': u'bank', u'func': bool},
@ -431,6 +431,78 @@ place_exp_sett = {
u'Мобильное приложение':{u'field': u'mobile_application', u'func': bool}, u'Мобильное приложение':{u'field': u'mobile_application', u'func': bool},
} }
event_sett = {
u'ID':{u'field': u'id', u'func': to_int},
u'Название':{u'field': u'name', u'func': unicode},
u'Краткое описание':{u'field': u'main_title', u'func': unicode},
u'Дата начала:(YYYY-MM-DD)':{u'field': u'data_begin', u'func': to_date},
u'Дата окончания:(YYYY-MM-DD)':{u'field': u'data_end', u'func': to_date},
u'Страна':{u'field': u'country', u'func': to_country},
u'Город':{u'field': u'city', u'func': to_city, 'extra_values': 'country'},
u'Место проведения':{u'field': u'place', u'func': unicode},#####
u'ID Тематики':{u'field': u'theme', u'func': to_theme},
u'Теги':{u'field': u'tag', u'func': to_tag},
u'Организатор №1':{u'field': u'organiser', u'func': to_tag},####
u'Организатор №2':{u'field': u'organiser', u'func': to_tag},####
u'Описание события':{u'field': u'description', u'func': unicode},
u'Периодичность':{u'field': u'periodic', u'func': unicode},###
u'Аудитория':{u'field': u'audience', u'func': to_audience},
u'Логотип':{u'field': u'logo', u'func': save_file, u'method': True, u'purpose': 'logo'},
u'Официальный веб-сайт':{u'field': u'web_page', u'func': to_url},
u'Экспонируемые продукты':{u'field': u'products', u'func': unicode},
u'Время работы':{u'field': u'time', u'func': unicode},
u'Валюта':{u'field': u'currency', u'func': unicode},
#
u'Посетители_билет (1 день)':{u'field': u'price_day', u'func': to_int},
u'Посетители_билет (все дни)':{u'field': u'price_all', u'func': to_int},
u'Условия':{u'field': u'periodic', u'func': unicode},
#u'Посетители_билет (1 день)':{u'field': u'price_day_bar', u'func': to_int},##??
#u'Посетители_билет (все дни)':{u'field': u'price_all_bar', u'func': to_int},##??
#u'Условия':{u'field': u'periodic', u'func': unicode},##??
#u'Примечание':{u'field': u'periodic', u'func': unicode},
u'Каталог':{u'field': u'price_catalog', u'func': to_int},
u'Налог включен':{u'field': u'tax', u'func': bool},
u'Год основания':{u'field': u'foundation_year', u'func': to_int},
#u'Данные за год':{u'field': u'periodic', u'func': to_int},
u'Посетители':{u'field': u'visitors', u'func': to_int},
u'Участники':{u'field': u'members', u'func': to_int},
#u'Страны':{u'field': u'periodic', u'func': unicode},##??
u'Площадь':{u'field': u'periodic', u'func': to_int},
u'Min_Raw кв.м.':{u'field': u'min_closed_area', u'func': to_int},
u'Max_Raw кв.м.':{u'field': u'max_closed_area', u'func': to_int},
u'Min_Pack кв.м.':{u'field': u'min_closed_equipped_area', u'func': to_int},
u'Max_Pack кв.м.':{u'field': u'max_closed_equipped_area', u'func': to_int},
u'Открытая площадь':{u'field': u'max_open_area', u'func': to_int},
u'Мин. Площадь кв.м.':{u'field': u'min_open_area', u'func': to_int},
u'Регистрационный взнос':{u'field': u'registration_payment', u'func': to_int},
#u'Примечание':{u'field': u'periodic', u'func': unicode},
u'Крайний срок подачи заявки':{u'field': u'application_deadline', u'func': to_date},
u'UFI':{u'field': u'quality_label', u'func': bool},##
u'РСВЯ':{u'field': u'quality_label', u'func': bool},##
u'EXPORATING':{u'field': u'quality_label', u'func': bool},##
u'Отменена':{u'field': u'canceled', u'func': bool},
u'ExpoHIT':{u'field': u'expohit', u'func': bool},
u'Фото':{u'field': u'photo', u'func': save_photo, u'method': True},
#
}
import_settings={ import_settings={
'name': {'func': unicode}, 'name': {'func': unicode},
'url': {'func': unicode}, 'url': {'func': unicode},

@ -0,0 +1,108 @@
from django.core.management.base import BaseCommand, CommandError
from organiser.models import Organiser
from theme.models import Theme, Tag
from functions.form_check import translit_with_separator
import MySQLdb
from MySQLdb.cursors import DictCursor
def convert_to_int(st):
if not st:
return None
deduct = ('-','(',')','.',' ')
for elem in deduct:
st = st.replace(elem, '')
if st.isdigit():
return int(st)
else:
return None
class Command(BaseCommand):
def handle(self, *args, **options):
db = MySQLdb.connect(host="localhost",
user="root",
passwd="qazedc",
db="expomap_ru",
charset='utf8',
cursorclass=DictCursor)
cursor = db.cursor()
sql = """SELECT DISTINCT(customers_company) as name, specialize, otrasly as theme, tags, adress,
phone, fax, email, website, twitter, about, customers_company.url
FROM customers
LEFT JOIN customers_company
ON customers.customers_company=customers_company.title
WHERE customers_status = 4
"""
cursor.execute(sql)
res = cursor.fetchall()
for o in res:
if not o.get('name'):
continue
phone = convert_to_int(o.get('phone'))
fax = convert_to_int(o.get('fax'))
url = o['url']
if not url:
url = translit_with_separator(o.get('name'))
if isinstance(o['email'], unicode):
organiser = Organiser(url=url, phone=phone, fax=fax, email=o.get('email', ''),
twitter=o.get('twitter', '')
)
organiser.translate('ru')
organiser.name = o.get('name')
organiser.specialization = o.get('specialize')
organiser.address_inf = o.get('adress')
organiser.description = o.get('about')
if organiser.name:
print('not_saved: %s'%o['name'])
organiser.save()
print('saved: %s'%str(organiser))
theme = None
theme_id = o.get('theme')
if theme_id:
try:
theme = Theme.objects.get(id=theme_id)
except Theme.DoesNotExist:
continue
organiser.theme.add(theme)
if not theme:
continue
tags = o.get('tags')
if tags:
tags = tags.split(',')
if tags:
for tag_id in tags:
try:
tag = Tag.objects.get(id=tag_id)
except Tag.DoesNotExist:
continue
if tag.theme == theme:
organiser.tag.add(tag)
else:
continue
else:
organiser = Organiser(url=translit_with_separator(o['name']))
organiser.translate('ru')
organiser.name = o['name']
if organiser.name:
organiser.save()
print(organiser)
print('success')

@ -7,6 +7,7 @@ from django.db.models.signals import post_save
#custom functions #custom functions
from functions.signal_handlers import post_save_handler from functions.signal_handlers import post_save_handler
from functions.custom_fields import LocationField from functions.custom_fields import LocationField
from django.utils.translation import ugettext as _
class OrganiserManager(TranslationManager): class OrganiserManager(TranslationManager):
def safe_get(self, **kwargs): def safe_get(self, **kwargs):
@ -27,7 +28,7 @@ class Organiser(TranslatableModel):
#set manager of this model #set manager of this model
objects = OrganiserManager() objects = OrganiserManager()
url = models.SlugField(verbose_name='URL', blank=True) url = models.SlugField(verbose_name='URL', blank=True, max_length=255)
#relations #relations
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True, country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True,
on_delete=models.PROTECT) on_delete=models.PROTECT)
@ -42,7 +43,10 @@ class Organiser(TranslatableModel):
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True) fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True) web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, blank=True)
email = models.EmailField(verbose_name='Email', blank=True) email = models.EmailField(verbose_name='Email', blank=True)
social = models.TextField(verbose_name='Социальные страницы', blank=True) facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True) foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True)
events_number = models.PositiveIntegerField(verbose_name='Количество мероприятий', blank=True, null=True) events_number = models.PositiveIntegerField(verbose_name='Количество мероприятий', blank=True, null=True)
staff_number = models.PositiveIntegerField(verbose_name='Количество сотрудников', blank=True, null=True) staff_number = models.PositiveIntegerField(verbose_name='Количество сотрудников', blank=True, null=True)

@ -11,9 +11,11 @@ import copy
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from conference.models import Conference from conference.models import Conference
from functions.model_mixin import ExpoMixin
CONFERENCE_TYPE = (('Convention centre', 'Конгресс-центр'), ('Exposition centre', 'Конференц зал'),) CONFERENCE_TYPE = (('Convention centre', 'Конгресс-центр'), ('Exposition centre', 'Конференц зал'),)
class PlaceConference(TranslatableModel): class PlaceConference(TranslatableModel, ExpoMixin):
""" """
Create PlaceConference model Create PlaceConference model

@ -0,0 +1,20 @@
from haystack import indexes
from models import PlaceConference
class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
where = indexes.MultiValueField()
def prepare_where(self, obj):
country = [tr.name for tr in obj.country.translations.all()]
city = [tr.name for tr in obj.city.translations.all()]
return country + city
def get_model(self):
return PlaceConference
def index_queryset(self, using=None):
return self.get_model().objects.filter()

@ -11,6 +11,7 @@ from functions.custom_fields import EnumField, LocationField
from functions.signal_handlers import post_save_handler, pre_save_handler from functions.signal_handlers import post_save_handler, pre_save_handler
from functions.models_methods import ExpoManager from functions.models_methods import ExpoManager
import copy import copy
from functions.model_mixin import ExpoMixin
from exposition.models import Exposition from exposition.models import Exposition
from place_conference.models import PlaceConference from place_conference.models import PlaceConference
@ -18,7 +19,7 @@ from place_conference.models import PlaceConference
EXPOSITION_TYPE = (('Exposition complex', u'Выставочный комплекс'), ('Convention centre', u'Конгрессно-выставочный центр'), EXPOSITION_TYPE = (('Exposition complex', u'Выставочный комплекс'), ('Convention centre', u'Конгрессно-выставочный центр'),
('Exposition centre', u'Выставочный центр'),) ('Exposition centre', u'Выставочный центр'),)
class PlaceExposition(TranslatableModel): class PlaceExposition(TranslatableModel, ExpoMixin):
""" """
Create PlaceConference model Create PlaceConference model

@ -1,8 +1,5 @@
from haystack import indexes from haystack import indexes
from models import PlaceExposition from models import PlaceExposition
from django.conf import settings
class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable): class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
@ -14,14 +11,6 @@ class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
return country + city return country + city
"""
translations = indexes.MultiValueField()
def prepare_translations(self, obj):
return [tr.name for tr in obj.translations.all()]
"""
def get_model(self): def get_model(self):
return PlaceExposition return PlaceExposition

@ -159,7 +159,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'social.apps.django_app.context_processors.backends', 'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect', 'social.apps.django_app.context_processors.login_redirect',
'django_messages.context_processors.inbox', 'django_messages.context_processors.inbox',
"settings.settings.expo_context" "proj.views.expo_context"
) )
#LOGIN_REDIRECT_URL = '/' #LOGIN_REDIRECT_URL = '/'

@ -2,11 +2,10 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
from views import AdvertisingView from views import AdvertisingView
from core.views import PlaceListView, PlacePhotoView, PlaceSearchView from core.views import PlaceListView, PlacePhotoView, PlaceSearchView, EventSearchView
from views import MainPageView from views import MainPageView
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', MainPageView.as_view()), url(r'^$', MainPageView.as_view()),
url(r'^', include('accounts.urls')), url(r'^', include('accounts.urls')),
@ -22,6 +21,7 @@ urlpatterns = patterns('',
url(r'^messages/', include('django_messages.urls')), url(r'^messages/', include('django_messages.urls')),
url(r'^advertising/$', AdvertisingView.as_view()), url(r'^advertising/$', AdvertisingView.as_view()),
url(r'^events/search/$', EventSearchView.as_view()),
url(r'^places/search/$', PlaceSearchView.as_view()), url(r'^places/search/$', PlaceSearchView.as_view()),
url(r'^places/(?P<params>.*)/photo/$', PlacePhotoView.as_view()), url(r'^places/(?P<params>.*)/photo/$', PlacePhotoView.as_view()),
url(r'^places/(?P<params>.*)/(?P<page>\d+)/$', PlaceListView.as_view()), url(r'^places/(?P<params>.*)/(?P<page>\d+)/$', PlaceListView.as_view()),

@ -8,6 +8,12 @@ from news.models import News
from article.models import Article from article.models import Article
from django.views.generic import TemplateView from django.views.generic import TemplateView
from functions.forms import ThemeSearch, PlaceSearch
from functions.search_forms import EventSearchForm
def expo_context(request):
cont = {'theme_search_form': ThemeSearch(), 'place_search_form': PlaceSearch()}
return cont
class MainPageView(TemplateView): class MainPageView(TemplateView):
template_name = 'index.html' template_name = 'index.html'
@ -23,9 +29,12 @@ class MainPageView(TemplateView):
args = {'events': events, 'exposition_themes': exposition_themes, args = {'events': events, 'exposition_themes': exposition_themes,
'conference_themes': conference_themes, 'seminar_themes': seminar_themes, 'conference_themes': conference_themes, 'seminar_themes': seminar_themes,
'news_list': news_list, 'articles': articles} 'news_list': news_list, 'articles': articles, 'search_form': EventSearchForm,
'search_action': '/events/search/'}
context.update(args) context.update(args)
return context return context

@ -11,14 +11,14 @@ from functions.db import db_table_exists
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
from functions.custom_fields import LocationField from functions.custom_fields import LocationField
from functions.models_methods import ExpoManager from functions.models_methods import ExpoManager
from functions.model_mixin import EventMixin from functions.model_mixin import EventMixin, ExpoMixin
# check if table exist and create flags if true # check if table exist and create flags if true
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else [] flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
CURRENCY = ('RUB', 'USD', 'EUR') CURRENCY = ('RUB', 'USD', 'EUR')
class Seminar(TranslatableModel, EventMixin): class Seminar(TranslatableModel, EventMixin, ExpoMixin):
""" """
Create Seminar model Create Seminar model

@ -0,0 +1,20 @@
from haystack import indexes
from models import Seminar
class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
where = indexes.MultiValueField()
def prepare_where(self, obj):
country = [tr.name for tr in obj.country.translations.all()]
city = [tr.name for tr in obj.city.translations.all()]
return country + city
def get_model(self):
return Seminar
def index_queryset(self, using=None):
return self.get_model().objects.filter()

@ -1,11 +1,9 @@
from functions.forms import ThemeSearch from functions.forms import ThemeSearch, PlaceSearch
def expo_context(request):
cont = {'theme_search_form': ThemeSearch()}
return cont
date_formats = ['%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' date_formats = ['%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30' '%Y-%m-%d %H:%M', # '2006-10-25 14:30'

@ -2088,27 +2088,30 @@ button.icon-save:before {
background: none; background: none;
} }
.sf-field-wrap .sf-autocomplete { .sf-autocomplete {
position: relative; position: relative;
z-index: 0; z-index: 3048;
height: 40px; height: 40px;
margin-top: -40px; display: none;
}
.sf-autocomplete.show {
display: block;
} }
.sf-field-wrap .sf-autocomplete .sfa-wrap { .sf-autocomplete .sfa-wrap {
position: absolute; position: absolute;
left: 0; left: 0;
width: 100%; width: 100%;
top: 0; top: 0;
background: #fff; background: #fff;
padding: 40px 20px 20px 20px; padding: 20px 20px 20px 20px;
overflow: hidden; overflow: hidden;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
-webkit-border-radius: 0 0 4px 4px; -webkit-border-radius: 4px;
-moz-border-radius: 0 0 4px 4px; -moz-border-radius: 4px;
border-radius: 0 0 4px 4px; border-radius: 4px;
-webkit-box-shadow: 0 0 0 3px rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 3px rgba(0, 0, 0, .2);
-moz-box-shadow: 0 0 0 3px rgba(0, 0, 0, .2); -moz-box-shadow: 0 0 0 3px rgba(0, 0, 0, .2);
box-shadow: 0 0 0 3px rgba(0, 0, 0, .2); box-shadow: 0 0 0 3px rgba(0, 0, 0, .2);
@ -2124,13 +2127,13 @@ button.icon-save:before {
} }
.sf-field-wrap:first-child .sf-autocomplete .sfa-wrap { .sf-autocomplete .sfa-wrap {
-webkit-border-radius: 4px 0 4px 4px; -webkit-border-radius: 4px 0 4px 4px;
-moz-border-radius: 4px 0 4px 4px; -moz-border-radius: 4px 0 4px 4px;
border-radius: 4px 0 4px 4px; border-radius: 4px 0 4px 4px;
} }
.sf-field-wrap .sf-autocomplete .sfa-wrap.show { .sf-autocomplete .sfa-wrap.show {
visibility: visible; visibility: visible;
} }
@ -3945,12 +3948,12 @@ form.s-message {
} }
.c-select-box .csb-menu .places-list { .c-select-box .csb-menu .places-list, .c-select-box .csb-menu .topics-list {
width: 260px; width: 260px;
float: left; float: left;
} }
.c-select-box .csb-menu .places-list > ul > li > a { .c-select-box .csb-menu .places-list > ul > li > a, .c-select-box .csb-menu .topics-list > ul > li > a {
display: inline-block; display: inline-block;
border-bottom: 1px dashed; border-bottom: 1px dashed;
text-decoration: none; text-decoration: none;
@ -3959,17 +3962,18 @@ form.s-message {
} }
.c-select-box .csb-menu .places-list > ul > li.active > a, .c-select-box .csb-menu .places-list > ul > li.active > a,
.c-select-box .csb-menu .places-list > ul > li.active > label { .c-select-box .csb-menu .places-list > ul > li.active > label, .c-select-box .csb-menu .topics-list > ul > li.active > a,
.c-select-box .csb-menu .topics-list > ul > li.active > label {
color: #ff6600; color: #ff6600;
} }
.c-select-box .csb-menu .places-list > ul ul { .c-select-box .csb-menu .places-list > ul ul, .c-select-box .csb-menu .topics-list > ul ul {
margin: 5px 0 15px 10px; margin: 5px 0 15px 10px;
font-size: 16px; font-size: 16px;
display: none; display: none;
} }
.c-select-box .csb-menu .places-list > ul li.active ul { .c-select-box .csb-menu .places-list > ul li.active ul, .c-select-box .csb-menu .topics-list > ul li.active > ul {
display: block; display: block;
} }
@ -9915,3 +9919,13 @@ a.order-button:hover .ob-text,
width: 65%; width: 65%;
} }
.fancybox-inner {
overflow: visible!important;
}
#pw-subj {
min-height: 480px;
}
#mCSB_1 {
min-height: 188px;
}

@ -171,6 +171,7 @@ function addError(inputId, msg){
/* Нестандартное оформление для поля select */ /* Нестандартное оформление для поля select */
$.fn.customSelect = function () { $.fn.customSelect = function () {
return $(this).each(function() { return $(this).each(function() {
var $this = $(this); var $this = $(this);
var $options = $this.children('option'); var $options = $this.children('option');
var numberOfOptions = $this.children('option').length; var numberOfOptions = $this.children('option').length;
@ -218,6 +219,9 @@ function addError(inputId, msg){
$styledSelect.on('click', function(e) { $styledSelect.on('click', function(e) {
e.stopPropagation(); e.stopPropagation();
//$('div.styledSelect.active').each(function() { //$('div.styledSelect.active').each(function() {
$('div.styledSelect.active').each(function() {
$(this).removeClass('active').next('.options').hide();
});
$('div.custom-select-wrap.active').not(this).each(function() { $('div.custom-select-wrap.active').not(this).each(function() {
$(this).removeClass('active').next('.options').hide(); $(this).removeClass('active').next('.options').hide();
}); });
@ -290,18 +294,91 @@ function addError(inputId, msg){
/* Обработка autocomplete в полях поиска /* Обработка autocomplete в полях поиска
* используется jQuery UI Autocomplete * используется jQuery UI Autocomplete
* */ * */
var data = [ $('input.topicChecks').each(function() {
{ label: 'Машпром 2013', type: '', category: 'События' },
{ label: 'Маркетинг, реклама, PR', type: '', category: 'Тематики:' }, if ($(this).prop('checked')==false) {
{ label: 'Машиностроение, автоматизация, робототехника', type: '', category: 'Тематики:' },
{ label: 'Маркетинг, реклама, PR', type: '', category: 'Тематики:' }, $('li.level1.'+$(this).val()+'').each(function() {
{ label: 'Маркеты', type: '', category: 'Теги:' }, $(this).find('>label.active').first().trigger('click');
{ label: 'Маркетинг', type: 'выставки', category: 'Теги:' }, $(this).find('ul li label.active').trigger('click');
{ label: 'Маркетинг', type: 'конференции', category: 'Теги:' }, $(this).hide().addClass('noAC').find('li').each(function() {
{ label: 'Магазины', type: '', category: 'Теги:' }, $(this).addClass('noAC');
{ label: 'Маркетинг', type: '', category: 'Теги:' } });
]; })
}
else {
$('li.level1.'+$(this).val()+'').each(function() {
$(this).fadeIn();
$(this).removeClass('noAC').find('.noAC').each(function() {
$(this).removeClass('noAC');
});
});
};
});
var data=[];
function rebuildTopicsAC() {
data=[];
$('.topics-list').find('li:not(.noAC)').each(
function() {
if ($(this).find('a').text().length>0) {
data.push({sid: $(this).find('>label span input').attr('value'),type: $(this).attr('data-type'), category: '', label: $(this).find('>a').text()});
}
else {
data.push({sid: $(this).find('>label span input').attr('value'),type: $(this).attr('data-type'), category: $(this).parents().eq(1).find('>a').text()+':', label: $(this).text() });
}
}
);
$('input[type="text"].topicAC').each(function () {
var $input = $(this);
var $iWrap = $($input.parent());
var $acWrap = $('<div class="sf-autocomplete"><div class="sfa-wrap"></div></div>');
var $acSect = $acWrap.find('.sfa-wrap');
$iWrap.parent().append('<input id="top_ac_hidden" style="display:none;">');
$acWrap.appendTo($iWrap);
$input.catcomplete({
appendTo: $acSect,
delay: 0,
source: data,
open: function () {
$acSect.addClass('show').parent().addClass('show');
},
close: function () {
$acSect.removeClass('show').parent().removeClass('show');
},
select: function( event, ui ) {
//var item_to_select=ui.item.label;
var input_ID=ui.item.sid;
$('#top_ac_hidden').val(ui.item.id);
if ($('input[value="'+input_ID+'"]').parents().eq(1).hasClass('active')) {
$('#ac_animes_t').css({'opacity':0,'display':'block'}).animate({opacity:1}, 500, function() {
setTimeout(function() {
$('#ac_animes_t').stop().animate({opacity:0}, 500, function() {
$('#ac_animes_t').css({'display':'none'})
});
}, 1000);
});
}
else {
$('input[value="'+input_ID+'"]').parents().eq(1).trigger('click');
}
$(this).val('');
return false;
}
}).data( 'customCatcomplete' )._renderItem = function( ul, item ) {
var descr = item.type != '' ? ' <i>(' + item.type + ')</i>' : '';
return $( '<li>' )
.append( '<a>' + item.label + descr + '</a>' )
.appendTo( ul );
};
});
};
rebuildTopicsAC();
/*
$('input[type="text"].autocomplete').each(function () { $('input[type="text"].autocomplete').each(function () {
var $input = $(this); var $input = $(this);
var $iWrap = $input.closest('.sf-field-wrap'); var $iWrap = $input.closest('.sf-field-wrap');
@ -331,7 +408,7 @@ function addError(inputId, msg){
.appendTo( ul ); .appendTo( ul );
}; };
}); });
*/
/* Галереи-слайдеры на главной /* Галереи-слайдеры на главной
* использован плагин Swiper * использован плагин Swiper
* http://www.idangero.us/sliders/swiper/api.php * http://www.idangero.us/sliders/swiper/api.php
@ -751,7 +828,8 @@ function addError(inputId, msg){
enable: false enable: false
}, },
advanced:{ advanced:{
updateOnContentResize: true updateOnContentResize: true,
autoScrollOnFocus: false
} }
}); });
}); });
@ -928,13 +1006,41 @@ function addError(inputId, msg){
} }
}); });
$('input.topicChecks').change(function() {
if ($(this).prop('checked')==false) {
$('li.level1.'+$(this).val()+'').each(function() {
var s_ID='s'+$(this).find('>label span input').attr('value');
$('.csb-selected.show div#'+s_ID).parent().removeClass('show');
$(this).find('>label.active').first().trigger('click');
$(this).find('ul li label.active').trigger('click');
$(this).hide().addClass('noAC').find('li').each(function() {
$(this).addClass('noAC');
});
rebuildTopicsAC();
})
}
else {
$('li.level1.'+$(this).val()+'').each(function() {
$(this).fadeIn();
$(this).removeClass('noAC').find('.noAC').each(function() {
$(this).removeClass('noAC');
});
});
rebuildTopicsAC();
};
});
$('div.c-select-box').each(function () { $('div.c-select-box').each(function () {
var $sb = $(this); var $sb = $(this);
var $showContainer = $sb.children('div.csb-selected-items'); var $showContainer = $sb.children('div.csb-selected-items');
var $selected = $('<div class="csb-selected"><div class="csbs-text"></div><a class="csbs-del" href="#">x</a></div>'); var $selected = $('<div class="csb-selected"><div class="csbs-text"></div><a class="csbs-del" href="#">x</a></div>');
var $checks = $sb.find('input[type="checkbox"]'); var $checks = $sb.find('input[type="checkbox"]');
var $qSelClear = $sb.find('div.q-sel > a.clear'); var $qSelClear = $sb.find('div.q-sel > a.clear');
var $smSwitchers = $sb.find('.places-list li > a'); var $smSwitchers = $sb.find('.places-list li > a, .places-list ul li ul li label a, .topics-list li > a, .topics-list ul li ul li label a');
if (!$sb.hasClass('disabled')) { if (!$sb.hasClass('disabled')) {
$checks $checks
@ -948,19 +1054,26 @@ function addError(inputId, msg){
var $clear = $elShow.find('a.csbs-del'); var $clear = $elShow.find('a.csbs-del');
$elText.text(labelText); $elText.text(labelText);
$elShow.find('>div').prop('id','s'+$label.find('input').prop('value'));
$clear.on('click', function () { $clear.on('click', function () {
$checks.eq(index).prop('checked', false);
$label.removeClass('active');
$elShow.removeClass('show'); $elShow.removeClass('show');
if ($showContainer.children('.show').length < 1 ) { if ($showContainer.children('.show').length < 1 ) {
$showContainer.removeClass('show'); $showContainer.removeClass('show');
} }
var li_ID=$(this).parent().find('div').attr('id').substring(1);
$('.places-list, .topics-list').find('label:contains("'+$(this).parent().find('.csbs-text').text()+'")').each(function() {
if ($(this).find('input').attr('value')==li_ID) {
$(this).trigger('click');
}
});
return false; return false;
}); });
$showContainer.append($elShow); $showContainer.append($elShow);
if ($el.is(':checked')) { if ($el.is(':checked')) {
$label.addClass('active'); $label.addClass('active');
$elShow.addClass('show');
} }
if (!$showContainer.hasClass('show') && $showContainer.children('.show').length > 0) { if (!$showContainer.hasClass('show') && $showContainer.children('.show').length > 0) {
$showContainer.addClass('show'); $showContainer.addClass('show');
@ -970,21 +1083,213 @@ function addError(inputId, msg){
var $el = $(this); var $el = $(this);
var $label = $el.closest('label'); var $label = $el.closest('label');
var $showEls = $showContainer.children(); var $showEls = $showContainer.children();
var index = $checks.index(this);
console.log('#s'+$label.find('span input').attr('value'));
var index = $checks.index(this);
$el.trigger('blur'); $el.trigger('blur');
if ($el.is(':checked')) { if ($el.is(':checked')) {
$label.addClass('active'); $label.addClass('active');
$showEls.eq(index).addClass('show'); $showEls.eq(index).addClass('show');
} else { } else {
$label.removeClass('active'); $label.removeClass('active');
$el.prop('checked', false);
$showEls.eq(index).removeClass('show'); $showEls.eq(index).removeClass('show');
} }
if ($showContainer.children('.show').length > 0) { if ($showContainer.children('.show').length > 0) {
$showContainer.addClass('show'); $showContainer.addClass('show');
} else { } else {
$showContainer.removeClass('show'); $showContainer.removeClass('show');
} }
// Если сменился чекбокс области
if ($el.parents().eq(2).is('.level2')) {
// Выделяем все города
if ($el.is(':checked')) {
$el.parents().eq(2).addClass('full');
$el.parents().eq(2).find('ul li label').each(
function() {
$(this).addClass('active');
$(this).find('input[type="checkbox"]').prop('checked', true);
var s_ID='s'+$(this).find('span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
}
);
} else {
// Если сняли метку с области - снимаем метки с городов области
$el.parents().eq(2).removeClass('full');
$el.parents().eq(4).find('input[type="checkbox"]').first().prop('checked', false);
$el.parents().eq(4).find('.custom-radio-check').first().removeClass('active');
$el.parents().eq(3).find('li.level2.full').each(function () {
var s_ID='s'+$(this).find('label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().addClass('show');
}
);
var s_ID='s'+$el.parents().eq(4).find('label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
console.log('n222');
$el.parents().eq(4).find('label').first().removeClass('active');
$el.parents().eq(4).find('label span input[type="checkbox"]').first().prop('checked', false);
$el.parents().eq(2).find('ul li label.active').each(
function() {
$(this).removeClass('active');
$(this).find('input[type="checkbox"]').prop('checked', false);
}
);
}
}
else {
// Если сменился чекбокс страны
if ($el.parents().eq(2).is('.level1')) {
// Поставили метку - отмечаем все обласи
if ($el.is(':checked')) {
if ((($label.parents().eq(1).find('li .custom-radio-check.active').length)>=($label.parents().eq(1).find('li .custom-radio-check').length))) {
$label.parents().eq(2).find('label').addClass('active');
$label.parents().eq(2).find('label span input[type="checkbox"]').prop('checked', true);
} else {};
// И все города в областях
$el.parents().eq(2).find('ul li.level2').addClass('full');
if ($el.parents().eq(2).find('ul li.level2').length>0) {
$el.parents().eq(2).find('ul li.level2 label').each(
function() {
$(this).addClass('active');
$(this).find('input[type="checkbox"]').prop('checked', true);
var s_ID='s'+$(this).find('span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
}
);
} else {
$el.parents().eq(2).find('li label').each(
function() {
$(this).addClass('active');
$(this).find('input[type="checkbox"]').prop('checked', true);
var s_ID='s'+$(this).find('span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
}
);
}
} else {
// Сняли метку - снимаем метки дочерних элементов
$el.parents().eq(2).find('ul li.level2').removeClass('full');
if ((($label.parents().eq(1).find('li .custom-radio-check.active').length)<($label.parents().eq(1).find('li .custom-radio-check').length))) {
$label.removeClass('active');
$label.find('span input[type="checkbox"]').prop('checked', false);
} else {};
if ($el.parents().eq(2).find('ul li.level2').length>0) {
$el.parents().eq(2).find('ul li.level2 label.active').each(
function() {
$(this).removeClass('active');
$(this).find('input[type="checkbox"]').prop('checked', false);
}
); } else {
$el.parents().eq(2).find('li label.active').each(
function() {
$(this).removeClass('active');
$(this).find('input[type="checkbox"]').prop('checked', false);
}
);
}
}
}
else {
// Если сменился чекбокс последнего города и область не отмечена - выделить всю область
if ((($label.parents().eq(1).find('li .custom-radio-check.active').length)>=($label.parents().eq(1).find('li .custom-radio-check').length))&&($el.not(':checked'))) {
$label.parents().eq(2).find('input[type="checkbox"]').first().parents().eq(1).addClass('active');
$label.parents().eq(2).find('input[type="checkbox"]').first().parents().eq(2).addClass('full');
$label.parents().eq(2).find('input[type="checkbox"]').first().prop('checked', true);
var s_ID='s'+$label.parents().eq(2).find('input[type="checkbox"]').first().attr('value');
$showContainer.find('#'+s_ID).parent().addClass('show');
$label.parents().eq(1).find('.custom-radio-check').each(function () {
$(this).addClass('active');
var s_ID='s'+$(this).find('span input').first().attr('value');
console.log('ttt');
$showContainer.find('#'+s_ID).parent().removeClass('show');
});
} else {
// Область была отмечена, сняли метку города - снимаем метку области
$label.parents().eq(2).find('label').first().removeClass('active');
if ($label.parents().eq(2).hasClass('level2')) {
$el.parents().eq(6).find('input[type="checkbox"]').first().prop('checked', false);
$el.parents().eq(6).find('.custom-radio-check').first().removeClass('active');
} else {};
$label.parents().eq(2).find('input[type="checkbox"]').first().parents().eq(2).removeClass('full');
$label.parents().eq(2).find('input[type="checkbox"]').first().prop('checked', false);
var s_ID='s'+$label.parents().eq(2).find('input[type="checkbox"]').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
$label.parents().eq(1).find('.custom-radio-check.active').each(function () {
var s_ID='s'+$(this).find('span input').attr('value');
$showContainer.find('#'+s_ID).parent().addClass('show');
console.log('1');
});
if ($label.parents().eq(4).hasClass('level1')) {
$label.parents().eq(3).find('li.level2.full').each(function () {
var s_ID='s'+$(this).find('label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().addClass('show');
console.log('2');
});
var s_ID='s'+$label.parents().eq(4).find('label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
} else {};
};
};
};
if ($label.parents().eq(2).hasClass('level1')) {
// Для областей/городов, чей родитель - страна
$label.parents().eq(2).find('>ul').each(function () {
// Если есть области и они все уже выделены - сокращаем список тегов областей до тега страны
if ((($(this).find('li.level2.full').length)>=($(this).find('li.level2').length))&&($(this).find('li.level2').length>0)) {
$el.parents().eq(4).find('input[type="checkbox"]').first().prop('checked', true);
$el.parents().eq(4).find('.custom-radio-check').first().addClass('active');
$(this).find('li.level2.full').each(function () {
var s_ID='s'+$(this).find('label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
console.log('3');
}
);
var s_ID='s'+$label.parents().eq(3).find('li.level1 label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().addClass('show');
console.log('4');
} else {};
});
} else {
// То же самое только для городов, чей родитель область, а затем страна
if ($label.parents().eq(4).hasClass('level1')) {
$label.parents().eq(4).find('>ul').each(function() {
if ((($(this).find('li.level2.full').length)>=($(this).find('li.level2').length))&&($(this).find('li.level2').length>0)) {
$el.parents().eq(6).find('input[type="checkbox"]').first().prop('checked', true);
$el.parents().eq(6).find('.custom-radio-check').first().addClass('active');
$(this).find('li.level2.full').each(function () {
var s_ID='s'+$(this).find('label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().removeClass('show');
}
);
var s_ID='s'+$label.parents().eq(5).find('li.level1 label span input').first().attr('value');
$showContainer.find('#'+s_ID).parent().addClass('show');
console.log('5');
} else {};
});
} else {};
};
}); });
} }

@ -35,6 +35,7 @@ This template include basic anf main styles and js files,
<link rel="stylesheet" href="{% static 'client/css/jquery.fancybox.css' %}"> <link rel="stylesheet" href="{% static 'client/css/jquery.fancybox.css' %}">
<link rel="stylesheet" href="{% static 'client/css/phototag.css?nocache13' %}"> <link rel="stylesheet" href="{% static 'client/css/phototag.css?nocache13' %}">
<link rel="stylesheet" href="{% static 'client/css/regions.css' %}">
<link rel="stylesheet" href="{% static 'client/css/main.css' %}"> <link rel="stylesheet" href="{% static 'client/css/main.css' %}">
@ -111,7 +112,7 @@ This template include basic anf main styles and js files,
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script src="{% static 'client/js/jquery.phototag.js?nocache13 ' %}"></script> <script src="{% static 'client/js/jquery.phototag.js?nocache13 ' %}"></script>
<script src="{% static 'client/js/regions.js?nocache7452345345308' %}"></script> <script src="{% static 'client/js/regions.js' %}"></script>
<script src="{% static 'client/js/main.js' %}"></script> <script src="{% static 'client/js/main.js' %}"></script>
<!-- extra scripts --> <!-- extra scripts -->

@ -0,0 +1,30 @@
{% extends 'base_catalog.html' %}
{% load i18n %}
{% load template_filters %}
{% block bread_scrumbs %}
<div class="bread-crumbs">
<a href="/">{% trans 'Главная страница' %}</a>
<strong>{% trans 'Поиск' %}</strong>
</div>
{% endblock %}
{% block page_title %}
<div class="page-title">
<h1>{% trans 'Поиск' %}:</h1>
</div>
{% endblock %}
{% block content_list %}
{% with query=object_list %}
{% include 'includes/exposition/search_result.html' %}
{% endwith %}
{% endblock %}
{% block paginator %}
{% with page_obj=page_obj queries=queries %}
{% include 'includes/search_paginator.html' %}
{% endwith %}
{% endblock %}

@ -0,0 +1,120 @@
{% load static %}
{% load i18n %}
{% load template_filters %}
<ul class="cat-list cl-exhibitions">
{% for result in query %}
<li class="cl-item {% if result.object.canceled %}canceled{% endif %}">
<div class="cl-item-wrap clearfix">
<a href="{{ result.object.get_permanent_url }}">
{% if result.object.canceled %}
<div class="cancel"></div>
{% else %}
{% if result.object.expohit %}
<div class="hit"></div>
{% endif %}
{% endif %}
<div class="cli-pict">
{% with obj=result.object %}
{% include 'client/includes/show_logo.html' %}
{% endwith %}
</div>
</a>
<div class="cli-info">
<div class="cli-top clearfix">
{% if user.is_staff %}
{% if result.object.is_published %}
<div class="cli-status"><div class="status active">Активная</div></div>
{% else %}
<div class="cli-status"><div class="status canceled">Неактивная</div></div>
{% endif %}
{% else %}
{% if result.object.quality_label.ufi.is_set %}
<div class="cli-approved">
<img src="{% static 'client/img/approved-logo.png' %}" alt="" title="Approved Event" />
</div>
{% endif %}
{% endif %}
<header>
<div class="cli-title"><a href="{{ result.object.get_permanent_url }}">{{ result.object.name|safe }}</a></div>
</header>
<div class="cli-descr">
<!--{{ result.object.main_title|safe }}-->
</div>
</div>
<div class="cli-bot clearfix">
<div class="cli-date">
{% with obj=result.object %}
{% include 'client/includes/show_date_block.html' %}
{% endwith %}
</div>
{% if result.object.country %}
<div class="cli-place">
<a href="#">{{ result.object.country }}</a>, <a href="#">{{ result.object.city }}</a>,
{% if result.object.place %}
<a href="{{ result.object.place.get_permanent_url }}">{{ result.object.place }}</a>
{% endif %}
</div>
{% endif %}
</div>
</div>
<div class="cli-buttons clearfix">
<div class="cli-m-buttons">
<div class="cli-services">
<a class="button icon-sm" href="#">{% trans 'услуги' %}</a>
<div class="cli-services-sm">
<ul>
{% for service in result.object.get_services %}
<li><a href="#">{{ service.name }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<a class="button blue icon-calendar" href="#">
{% if user.is_authenticated %}
{% if result.object|in_calendar:user %}
{% trans 'из расписания' %}
{% else %}
{% trans 'в расписание' %}
{% endif %}
{% else %}
{% trans 'в расписание' %}
{% endif %}
</a>
<a class="button green icon-note" href="#">{% trans 'заметка' %}</a>
</div>
<div class="cli-s-buttons">
<a class="button blue2 lc" href="#">{% trans 'Лучшие цены на отели на' %} <i>Booking</i>.com</a>
</div>
</div>
</div>
<footer class="clearfix">
<div class="cli-stats">
{% if result.object.visitors %}
<span class="visitors" title="Посетители">{{ result.object.visitors }}</span>
{% endif %}
{% if result.object.members %}
<span class="participants" title="Участники">{{ result.object.members }}</span>
{% endif %}
</div>
<div class="cli-tags">
{% with obj=result.object filter=filter %}
{% include 'includes/show_tags.html' %}
{% endwith %}
</div>
</footer>
</li>
{% endfor %}
</ul>

@ -0,0 +1,45 @@
{% load i18n %}
{% load template_filters %}
{% if page_obj.paginator.num_pages > 1 %}
<div class="pagination clearfix">
<div class="pg-info"> {% trans 'Показано' %} {{ page_obj.start_index }} - {{ page_obj.end_index }} <i>({% trans 'всего' %} {{ page_obj.paginator.count }} {% trans 'позиций' %})</i></div>
<div class="pg-body">
{% if page_obj.has_previous %}
<a class="pg-prev" href="?page={{ page_obj.previous_page_number }}&{{ queries.urlencode }}">{% trans 'Предыдущая' %}</a>
{% else %}
<a class="pg-prev disabled" href="#">{% trans 'Предыдущая' %}</a>
{% endif %}
<ul>
{% if page_obj.number > 2 %}
<li><a href="?page={{ 1 }}&{{ queries.urlencode }} ">{{ 1 }}</a></li>
{% if page_obj.number > 3 %}
<li>...</li>
{% endif %}
{% endif %}
{% if page_obj.has_previous %}
<li><a href="?page={{ page_obj.previous_page_number }}&{{ queries.urlencode }}">{{ page_obj.previous_page_number }}</a></li>
{% endif %}
<li><b>{{ page_obj.number }}</b></li>
{% if page_obj.has_next %}
<li><a href="?page={{ page_obj.next_page_number }}&{{ queries.urlencode }}">{{ page_obj.next_page_number }}</a></li>
{% endif %}
{% if page_obj.paginator.num_pages|subtract:page_obj.number > 1 %}
{% if page_obj.paginator.num_pages|subtract:page_obj.number > 2 %}
<li>...</li>
{% endif %}
<li><a href="?page={{ page_obj.paginator.num_pages }}&{{ queries.urlencode }}">{{ page_obj.paginator.num_pages }}</a></li>
{% endif %}
</ul>
{% if page_obj.has_next %}
<a class="pg-next" href="?page={{ page_obj.next_page_number }}&{{ queries.urlencode }}">{% trans 'Следующая' %}</a>
{% else %}
<a class="pg-next disabled" href="#">{% trans 'Следующая' %}</a>
{% endif %}
</div>
</div>
{% endif %}

@ -72,29 +72,29 @@
</aside> </aside>
<div class="mcl"> <div class="mcl">
<form action="#"> <form action="{{ search_action }}">
<div class="search-form-wrap"> <div class="search-form-wrap">
<div class="search-line"> <div class="search-line">
<div class="sf-field-wrap"> <div class="sf-field-wrap">
<div class="sf-field"> <div class="sf-field">
<label for="search">Я ищу:</label> <label for="search">{% trans 'Я ищу' %}:</label>
<div class="input-text"><input type="text" class="autocomplete" id="search" name="query" /></div> <div class="input-text">{{ search_form.q }}</div>
</div> </div>
</div> </div>
<div class="sf-field-wrap"> <div class="sf-field-wrap">
<div class="sf-field"> <div class="sf-field">
<label for="where">Где:</label> <label for="where">{% trans 'Где' %}:</label>
<div class="input-text"><input type="text" class="autocomplete" id="where" name="where" /></div> <div class="input-text">{{ search_form.w }}</div>
</div> </div>
</div> </div>
<div class="sf-field-wrap"> <div class="sf-field-wrap">
<button type="submit"><span>найти</span></button> <button type="submit"><span>{% trans 'найти' %}</span></button>
</div> </div>
</div> </div>
<div class="search-line sl-options"> <div class="search-line sl-options">
<div class="sf-field-wrap">Тематика: <a class="pw-open" href="#pw-subj">Не важно</a></div> <div class="sf-field-wrap">{% trans 'Тематика' %}: <a class="pw-open" href="#pw-subj">{% trans 'Не важно' %}</a></div>
<div class="sf-field-wrap">Место: <a class="pw-open" href="#pw-place">Не важно</a></div> <div class="sf-field-wrap">{% trans 'Место' %}: <a class="pw-open" href="#pw-place">{% trans 'Не важно' %}</a></div>
<div class="sf-field-wrap">Период: <a class="pw-open" href="#pw-period">Не важно</a></div> <div class="sf-field-wrap">{% trans 'Период' %}: <a class="pw-open" href="#pw-period">{% trans 'Не важно' %}</a></div>
</div> </div>
</div> </div>
</form> </form>

@ -25,46 +25,7 @@
{% block paginator %} {% block paginator %}
{% if page_obj.paginator.num_pages > 1 %} {% with page_obj=page_obj queries=queries %}
<div class="pagination clearfix"> {% include 'includes/search_paginator.html' %}
<div class="pg-info"> Показано {{ page_obj.start_index }} - {{ page_obj.end_index }} <i>(всего {{ page_obj.paginator.count }} позиций)</i></div> {% endwith %}
<div class="pg-body">
{% if page_obj.has_previous %}
<a class="pg-prev" href="?page={{ page_obj.previous_page_number }}&{{ queries.urlencode }}">Предыдущая</a>
{% else %}
<a class="pg-prev disabled" href="#">Предыдущая</a>
{% endif %}
<ul>
{% if page_obj.number > 2 %}
<li><a href="?page={{ 1 }}&{{ queries.urlencode }} ">{{ 1 }}</a></li>
{% if page_obj.number > 3 %}
<li>...</li>
{% endif %}
{% endif %}
{% if page_obj.has_previous %}
<li><a href="?page={{ page_obj.previous_page_number }}&{{ queries.urlencode }}">{{ page_obj.previous_page_number }}</a></li>
{% endif %}
<li><b>{{ page_obj.number }}</b></li>
{% if page_obj.has_next %}
<li><a href="?page={{ page_obj.next_page_number }}&{{ queries.urlencode }}">{{ page_obj.next_page_number }}</a></li>
{% endif %}
{% if page_obj.paginator.num_pages|subtract:page_obj.number > 1 %}
{% if page_obj.paginator.num_pages|subtract:page_obj.number > 2 %}
<li>...</li>
{% endif %}
<li><a href="?page={{ page_obj.paginator.num_pages }}&{{ queries.urlencode }}">{{ page_obj.paginator.num_pages }}</a></li>
{% endif %}
</ul>
{% if page_obj.has_next %}
<a class="pg-next" href="?page={{ page_obj.next_page_number }}&{{ queries.urlencode }}">Следующая</a>
{% else %}
<a class="pg-next disabled" href="#">Следующая</a>
{% endif %}
</div>
</div>
{% endif %}
{% endblock %} {% endblock %}

@ -9,26 +9,66 @@
<form class="pw-form" action="#"> <form class="pw-form" action="#">
<div class="c-select-box-wrap"> <div class="c-select-box-wrap">
<div class="c-select-box places"> <div class="c-select-box places">
<div class="csb-title">{% trans 'Выберите страну из списка' %}</div> <div class="csb-title">
<input type="text" class="filter-input" autocomplete="on" placeholder="Введите или выберите страну из списка" />
<!--
<div class="ac-custom-message" id="ac_animes"><span>Этот регион уже выбран.</span></div>
-->
<!--Введите или выберите страну из списка-->
</div>
<div class="csb-selected-items"></div> <div class="csb-selected-items"></div>
<div class="scroll-container csb-menu"> <div class="scroll-container csb-menu">
<div class="scroll-content clearfix"> <div class="scroll-content clearfix">
<div class="places-list"> <div class="places-list">
<ul> <ul>
<li class="active"><label><input type="checkbox" name="place" value="1" />Россия</label> <li class="level1"><label><input type="checkbox" name="place" value="c10" /><span class="hidden">Россия</span></label><a href="#">Россия</a>
<ul> <ul>
<li><label><input type="checkbox" name="place" value="101" />Москва</label></li> <li class="level2"><label><input type="checkbox" name="place" value="c100" /><span class="hidden">Область 1</span></label><a href="#">Область 1</a>
<li><label><input type="checkbox" name="place" value="102" />Санкт-Петербург</label></li> <ul>
<li><label><input type="checkbox" name="place" value="103" />Владивосток</label></li> <li><label><input type="checkbox" name="place" value="c101" />Москва</label></li>
<li><label><input type="checkbox" name="place" value="104" />Краснодар</label></li> <li><label><input type="checkbox" name="place" value="c102" />Санкт-Петербург</label></li>
<li><label><input type="checkbox" name="place" value="c103" />Владивосток</label></li>
<li><label><input type="checkbox" name="place" value="c104" />Краснодар</label></li>
</ul>
</li>
<li class="level2"><label><input type="checkbox" name="place" value="c200" /><span class="hidden">Область 2</span></label><a href="#">Область 2</a>
<ul>
<li><label><input type="checkbox" name="place" value="c201" />Чугуйск</label></li>
<li><label><input type="checkbox" name="place" value="c202" />Новочебоксарск</label></li>
<li><label><input type="checkbox" name="place" value="c203" />Киров</label></li>
<li><label><input type="checkbox" name="place" value="c204" />Надым</label></li>
</ul>
</li>
<li class="level2"><label><input type="checkbox" name="place" value="c300" /><span class="hidden">Область 3</span></label><a href="#">Область 3</a>
<ul>
<li><label><input type="checkbox" name="place" value="c301" />Нягань</label></li>
<li><label><input type="checkbox" name="place" value="c302" />Вятка</label></li>
<li><label><input type="checkbox" name="place" value="c303" />Челябинск</label></li>
<li><label><input type="checkbox" name="place" value="c304" />Сколково</label></li>
</ul>
</li>
</ul> </ul>
</li> </li>
<li><label><input type="checkbox" name="place" value="2" />СНГ (исключая Россию)</label></li> <li class="level1"><label><input type="checkbox" name="place" value="c400" /><span class="hidden">СНГ (исключая Россию)</span></label><a href="#">СНГ (исключая Россию)</a>
<li><label><input type="checkbox" name="place" value="3" />Европа</label></li> <ul>
<li><label><input type="checkbox" name="place" value="4" />Азия</label></li> <li><label><input type="checkbox" name="place" value="c401" />Киев</label></li>
<li><label><input type="checkbox" name="place" value="5" />Северная Америка</label></li> <li><label><input type="checkbox" name="place" value="c402" />Харьков</label></li>
<li><label><input type="checkbox" name="place" value="6" />Южная Америка</label></li> <li><label><input type="checkbox" name="place" value="c403" />Донецк</label></li>
<li><label><input type="checkbox" name="place" value="7" />Австралия и Океания</label></li> <li><label><input type="checkbox" name="place" value="c404" />Львов</label></li>
<li><label><input type="checkbox" name="place" value="c405" />Минск</label></li>
</ul>
</li>
<li class="level1"><label><input type="checkbox" name="place" value="c500" /><span class="hidden">Европа</span></label><a href="#">Европа</a>
<ul>
<li><label><input type="checkbox" name="place" value="c501" />Лондон</label></li>
<li><label><input type="checkbox" name="place" value="c502" />Берлин</label></li>
<li><label><input type="checkbox" name="place" value="c503" />Париж</label></li>
<li><label><input type="checkbox" name="place" value="c504" />Брюсель</label></li>
</ul>
</li>
{% for value, text in place_search_form.r.field.choices %}
<li class="level1"><label><input type="checkbox" name="r" value="{{ value }}" />{{ text }}</label></li>
{% endfor %}
</ul> </ul>
</div> </div>
<div class="q-sel"> <div class="q-sel">
@ -45,6 +85,7 @@
</div> </div>
</div> </div>
<div class="pwf-buttons-line"> <div class="pwf-buttons-line">
<button type="submit" class="icon-check">{% trans 'применить' %}</button> <button type="submit" class="icon-check">{% trans 'применить' %}</button>
</div> </div>
</form> </form>

@ -9,9 +9,10 @@
<div class="pw-body clearfix"> <div class="pw-body clearfix">
<form class="pw-form" action="#"> <form class="pw-form" action="#">
<div class="pwf-line subj-checks"> <div class="pwf-line subj-checks">
{% for val, choice in theme_search_form.event.field.choices %} {% for val, choice in theme_search_form.event.field.choices %}
<div class="pwf-field"> <div class="pwf-field">
<label class="check"><input type="checkbox" name="event" value="{{ val }}" />{{ choice }}</label> <label class="check"><input type="checkbox" class="topicChecks" name="event" value="{{ val }}" />{{ choice }}</label>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>

@ -0,0 +1,3 @@
{% for text in object.get_index_text %}
{{ text }}
{% endfor %}

@ -0,0 +1,3 @@
{% for text in object.get_index_text %}
{{ text }}
{% endfor %}

@ -0,0 +1,3 @@
{% for text in object.get_index_text %}
{{ text }}
{% endfor %}

@ -0,0 +1,3 @@
{% for text in object.get_index_text %}
{{ text }}
{% endfor %}

@ -0,0 +1,3 @@
{% for text in object.get_index_text %}
{{ text }}
{% endfor %}

@ -0,0 +1,55 @@
from django.core.management.base import BaseCommand, CommandError
from theme.models import Tag, Theme
import MySQLdb
from MySQLdb.cursors import DictCursor
class Command(BaseCommand):
def handle(self, *args, **options):
db = MySQLdb.connect(host="localhost",
user="root",
passwd="qazedc",
db="expomap_ru",
charset='utf8',
cursorclass=DictCursor)
cursor = db.cursor()
# id 3732 duplicate tag with bad name(2 spaces)
sql = "SELECT * FROM tags WHERE id != 3732"
cursor.execute(sql)
res = cursor.fetchall()
for t in res:
theme_id=t['category_id']
# check if theme id exist
try:
Theme.objects.get(id=theme_id)
except Theme.DoesNotExist:
continue
# check duplicate name
ex_tags = Tag.objects.language('ru').filter(name=t['title'])
if ex_tags:
# track if tag with current theme exist
find_theme = False
for ex_tag in ex_tags:
if ex_tag.theme_id == theme_id:
find_theme = True
if find_theme:
continue
tag = Tag(id=t['id'], theme_id=theme_id)
tag.translate('ru')
tag.name = t.get('title', '')
tag.main_title = t.get('title', '')
tag.save()
print(tag)
print('success')

@ -0,0 +1,47 @@
from django.core.management.base import BaseCommand, CommandError
from theme.models import Theme
import MySQLdb
from MySQLdb.cursors import DictCursor
class Command(BaseCommand):
def handle(self, *args, **options):
db = MySQLdb.connect(host="localhost",
user="root",
passwd="qazedc",
db="expomap_ru",
charset='utf8',
cursorclass=DictCursor)
cursor = db.cursor()
sql = """SELECT * FROM categories
LEFT JOIN categories_description
ON categories.categories_id=categories_description.categories_id
"""
cursor.execute(sql)
res = cursor.fetchall()
for th in res:
theme = Theme(id=th['categories_id'], url=th['url'], types=0)
if th['expo']:
theme.types.exposition = True
if th['conference']:
theme.types.conference = True
theme.translate('ru')
theme.name = th.get('categories_name', '')
theme.main_title = th.get('categories_heading_title', '')
theme.description = th.get('categories_description', '')
theme.title = th.get('categories_meta_title', '')
theme.descriptions = th.get('categories_meta_description', '')
theme.keywords = th.get('categories_meta_keywords', '')
if theme.name:
theme.save()
print(theme)
print('success')

@ -1,6 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from bitfield import BitField from bitfield import BitField
import copy import copy
@ -32,13 +31,13 @@ class Theme(TranslatableModel):
types = BitField([k for k, v in FLAGS]) types = BitField([k for k, v in FLAGS])
#translated fields #translated fields
translations = TranslatedFields( translations = TranslatedFields(
name = models.CharField(max_length=100), name = models.CharField(max_length=255),
main_title = models.CharField(max_length=100), main_title = models.CharField(max_length=255),
description = models.TextField(blank=True), description = models.TextField(blank=True),
#-----meta data #-----meta data
title = models.CharField(max_length=250, blank=True), title = models.CharField(max_length=255, blank=True),
descriptions = models.CharField(max_length=250, blank=True), descriptions = models.CharField(max_length=255, blank=True),
keywords = models.CharField(max_length=250, blank=True), keywords = models.CharField(max_length=255, blank=True),
) )
main_page = models.PositiveIntegerField(default=0, db_index=True) main_page = models.PositiveIntegerField(default=0, db_index=True)
@ -148,9 +147,30 @@ class Tag(TranslatableModel):
from django.db.models.signals import post_save, pre_save from django.db.models.signals import post_save, pre_save
from functions.signal_handlers import post_save_handler, pre_save_handler from functions.signal_handlers import post_save_handler
from functions.form_check import translit_with_separator
import random, string
def pre_save_handler(sender, **kwargs):
obj = kwargs['instance']
if obj.language_code =='en':
try:
name = getattr(obj, 'name')
obj.url = translit_with_separator(name)
except AttributeError:
pass
tags = Tag.objects.filter(url=obj.url).exclude(id=obj.id)
if tags:
obj.url = obj.theme.url+'-'+ obj.url
if not obj.url:
obj.url = ''.join([random.choice(string.ascii_lowercase) for n in xrange(8)])
pre_save.connect(pre_save_handler, sender=Theme) pre_save.connect(pre_save_handler, sender=Theme)
pre_save.connect(pre_save_handler, sender=Tag) pre_save.connect(pre_save_handler, sender=Tag)
post_save.connect(post_save_handler, sender=Theme) post_save.connect(post_save_handler, sender=Theme)
post_save.connect(post_save_handler, sender=Tag) post_save.connect(post_save_handler, sender=Tag)

@ -10,7 +10,7 @@ from django.contrib.contenttypes import generic
# #
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
from functions.models_methods import ExpoManager from functions.models_methods import ExpoManager
from functions.model_mixin import EventMixin from functions.model_mixin import EventMixin, ExpoMixin
# check if table exist and create flags if true # check if table exist and create flags if true
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else [] flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
@ -18,7 +18,7 @@ flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('ser
CURRENCY = ('RUB', 'USD', 'EUR') CURRENCY = ('RUB', 'USD', 'EUR')
class Webinar(TranslatableModel, EventMixin): class Webinar(TranslatableModel, EventMixin, ExpoMixin):
""" """
Create Webinar model Create Webinar model

@ -0,0 +1,20 @@
from haystack import indexes
from models import Webinar
class PlaceExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
where = indexes.MultiValueField()
def prepare_where(self, obj):
country = [tr.name for tr in obj.country.translations.all()]
city = [tr.name for tr in obj.city.translations.all()]
return country + city
def get_model(self):
return Webinar
def index_queryset(self, using=None):
return self.get_model().objects.filter()
Loading…
Cancel
Save