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. 345
      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 []
class City(TranslatableModel):
"""
Create City model
@ -25,7 +23,6 @@ class City(TranslatableModel):
"""
objects = ExpoManager()
services = BitField(flags=flags)
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 django.contrib.contenttypes import generic
#
from django.utils.translation import ugettext as _
from functions.custom_fields import LocationField
from functions.models_methods import ExpoManager
from functions.model_mixin import ExpoMixin
class Company(TranslatableModel, ExpoMixin):
"""
Create Company model
@ -20,7 +19,7 @@ class Company(TranslatableModel, ExpoMixin):
objects = ExpoManager()
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
creator = models.ForeignKey('accounts.User', verbose_name='Создатель', related_name='created_company',
blank=True, null=True)
@ -39,7 +38,10 @@ class Company(TranslatableModel, ExpoMixin):
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, 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)
#translation fields
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
from functions.custom_fields import EnumField
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
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
CURRENCY = ('RUB', 'USD', 'EUR')
class Conference(TranslatableModel, EventMixin):
class Conference(TranslatableModel, EventMixin, ExpoMixin):
"""
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 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):
paginate_by = 2

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

@ -13,7 +13,7 @@ from organiser.models import Organiser
from functions.custom_fields import EnumField
from functions.signal_handlers import post_save_handler, pre_save_handler
from functions.models_methods import ExpoManager
from functions.model_mixin import EventMixin
from functions.model_mixin import EventMixin, ExpoMixin
AUDIENCE1 = ((None,_(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 []
class Exposition(TranslatableModel, EventMixin):
class Exposition(TranslatableModel, EventMixin, ExpoMixin):
"""
Create Exposition model
@ -137,6 +137,10 @@ class Exposition(TranslatableModel, EventMixin):
def __unicode__(self):
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):
checked = [item for item, bool in self.audience if bool==True]
audience = []

@ -1,15 +1,20 @@
"""
from haystack import indexes
from models import Exposition
class ExpositionIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True)
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 Exposition
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"])
# dont delete
class EnumField(models.Field):
"""
A field class that maps to MySQL's ENUM type.

@ -2,7 +2,6 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from theme.models import Theme
from haystack.query import SearchQuerySet
class AdminSearchForm(forms.Form):
@ -10,15 +9,25 @@ class AdminSearchForm(forms.Form):
class ThemeSearch(forms.Form):
event = forms.MultipleChoiceField(required=False,widget=forms.CheckboxSelectMultiple, choices=[(0, _(u'выставки')),
(1, _(u'конференции')),
(2, _(u'семинары')),
(3, _(u'вебинары'))])
theme = forms.ModelMultipleChoiceField(required=False, queryset=Theme.objects.all(),
event = forms.MultipleChoiceField(required=False,
widget=forms.CheckboxSelectMultiple(attrs={'class': 'topicChecks'}),
choices=[('exposition', _(u'выставки')),
('conference', _(u'конференции')),
('seminar', _(u'семинары')),
('webinar', _(u'вебинары'))])
theme = forms.ModelMultipleChoiceField(required=False, queryset=[],
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):
q = 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
class ExpoMixin(object):
def get_index_text(self):
names = [tr.name for tr in self.translations.all()]
return names
def get_logo(self):
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):
obj = kwargs['instance']
if obj.language_code =='en':
try:
name = getattr(obj, 'name')
@ -12,6 +13,7 @@ def pre_save_handler(sender, **kwargs):
except AttributeError:
pass
if not obj.url:
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'phone', 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'logo', u'func': save_file, u'method': True, u'purpose': 'logo'},#сделать
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'web_page', 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'foundation_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'open_area', 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'scheme', u'func': save_file, u'method': True, u'purpose': 'scheme teritory'},#сделать
u'Банк/Банкоматы/Обмен валюты':{u'field': u'bank', u'func': bool},
@ -431,6 +431,78 @@ place_exp_sett = {
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={
'name': {'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
from functions.signal_handlers import post_save_handler
from functions.custom_fields import LocationField
from django.utils.translation import ugettext as _
class OrganiserManager(TranslationManager):
def safe_get(self, **kwargs):
@ -27,7 +28,7 @@ class Organiser(TranslatableModel):
#set manager of this model
objects = OrganiserManager()
url = models.SlugField(verbose_name='URL', blank=True)
url = models.SlugField(verbose_name='URL', blank=True, max_length=255)
#relations
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True,
on_delete=models.PROTECT)
@ -42,7 +43,10 @@ class Organiser(TranslatableModel):
fax = models.BigIntegerField(verbose_name='Факс', blank=True, null=True)
web_page = models.CharField(verbose_name='Веб-сайт',max_length=255, 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)
events_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 conference.models import Conference
from functions.model_mixin import ExpoMixin
CONFERENCE_TYPE = (('Convention centre', 'Конгресс-центр'), ('Exposition centre', 'Конференц зал'),)
class PlaceConference(TranslatableModel):
class PlaceConference(TranslatableModel, ExpoMixin):
"""
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.models_methods import ExpoManager
import copy
from functions.model_mixin import ExpoMixin
from exposition.models import Exposition
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 centre', u'Выставочный центр'),)
class PlaceExposition(TranslatableModel):
class PlaceExposition(TranslatableModel, ExpoMixin):
"""
Create PlaceConference model

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

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

@ -2,11 +2,10 @@
from django.conf.urls import patterns, include, url
from views import AdvertisingView
from core.views import PlaceListView, PlacePhotoView, PlaceSearchView
from core.views import PlaceListView, PlacePhotoView, PlaceSearchView, EventSearchView
from views import MainPageView
urlpatterns = patterns('',
url(r'^$', MainPageView.as_view()),
url(r'^', include('accounts.urls')),
@ -22,6 +21,7 @@ urlpatterns = patterns('',
url(r'^messages/', include('django_messages.urls')),
url(r'^advertising/$', AdvertisingView.as_view()),
url(r'^events/search/$', EventSearchView.as_view()),
url(r'^places/search/$', PlaceSearchView.as_view()),
url(r'^places/(?P<params>.*)/photo/$', PlacePhotoView.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 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):
template_name = 'index.html'
@ -23,9 +29,12 @@ class MainPageView(TemplateView):
args = {'events': events, 'exposition_themes': exposition_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)
return context

@ -11,14 +11,14 @@ from functions.db import db_table_exists
from functions.custom_fields import EnumField
from functions.custom_fields import LocationField
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
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
CURRENCY = ('RUB', 'USD', 'EUR')
class Seminar(TranslatableModel, EventMixin):
class Seminar(TranslatableModel, EventMixin, ExpoMixin):
"""
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'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'

@ -2088,27 +2088,30 @@ button.icon-save:before {
background: none;
}
.sf-field-wrap .sf-autocomplete {
.sf-autocomplete {
position: relative;
z-index: 0;
z-index: 3048;
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;
left: 0;
width: 100%;
top: 0;
background: #fff;
padding: 40px 20px 20px 20px;
padding: 20px 20px 20px 20px;
overflow: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-border-radius: 0 0 4px 4px;
-moz-border-radius: 0 0 4px 4px;
border-radius: 0 0 4px 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-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);
@ -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;
-moz-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;
}
@ -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;
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;
border-bottom: 1px dashed;
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 > 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;
}
.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;
font-size: 16px;
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;
}
@ -9914,4 +9918,14 @@ a.order-button:hover .ob-text,
padding-bottom: 5px;
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 */
$.fn.customSelect = function () {
return $(this).each(function() {
var $this = $(this);
var $options = $this.children('option');
var numberOfOptions = $this.children('option').length;
@ -218,6 +219,9 @@ function addError(inputId, msg){
$styledSelect.on('click', function(e) {
e.stopPropagation();
//$('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() {
$(this).removeClass('active').next('.options').hide();
});
@ -290,18 +294,91 @@ function addError(inputId, msg){
/* Обработка autocomplete в полях поиска
* используется jQuery UI Autocomplete
* */
var data = [
{ label: 'Машпром 2013', type: '', category: 'События' },
{ label: 'Маркетинг, реклама, PR', type: '', category: 'Тематики:' },
{ label: 'Машиностроение, автоматизация, робототехника', type: '', category: 'Тематики:' },
{ label: 'Маркетинг, реклама, PR', type: '', category: 'Тематики:' },
{ label: 'Маркеты', type: '', category: 'Теги:' },
{ label: 'Маркетинг', type: 'выставки', category: 'Теги:' },
{ label: 'Маркетинг', type: 'конференции', category: 'Теги:' },
{ label: 'Магазины', type: '', category: 'Теги:' },
{ label: 'Маркетинг', type: '', category: 'Теги:' }
];
$('input.topicChecks').each(function() {
if ($(this).prop('checked')==false) {
$('li.level1.'+$(this).val()+'').each(function() {
$(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');
});
})
}
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 () {
var $input = $(this);
var $iWrap = $input.closest('.sf-field-wrap');
@ -331,7 +408,7 @@ function addError(inputId, msg){
.appendTo( ul );
};
});
*/
/* Галереи-слайдеры на главной
* использован плагин Swiper
* http://www.idangero.us/sliders/swiper/api.php
@ -751,7 +828,8 @@ function addError(inputId, msg){
enable: false
},
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 () {
var $sb = $(this);
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 $checks = $sb.find('input[type="checkbox"]');
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')) {
$checks
@ -948,19 +1054,26 @@ function addError(inputId, msg){
var $clear = $elShow.find('a.csbs-del');
$elText.text(labelText);
$elShow.find('>div').prop('id','s'+$label.find('input').prop('value'));
$clear.on('click', function () {
$checks.eq(index).prop('checked', false);
$label.removeClass('active');
$elShow.removeClass('show');
if ($showContainer.children('.show').length < 1 ) {
$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;
});
$showContainer.append($elShow);
if ($el.is(':checked')) {
$label.addClass('active');
$elShow.addClass('show');
}
if (!$showContainer.hasClass('show') && $showContainer.children('.show').length > 0) {
$showContainer.addClass('show');
@ -970,25 +1083,217 @@ function addError(inputId, msg){
var $el = $(this);
var $label = $el.closest('label');
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');
if ($el.is(':checked')) {
$label.addClass('active');
$showEls.eq(index).addClass('show');
} else {
$label.removeClass('active');
$el.prop('checked', false);
$showEls.eq(index).removeClass('show');
}
if ($showContainer.children('.show').length > 0) {
$showContainer.addClass('show');
$showContainer.addClass('show');
} else {
$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 {};
};
});
}
$qSelClear.on('click', function () {
$checks.prop('checked', false).trigger('change');
return false;

@ -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/phototag.css?nocache13' %}">
<link rel="stylesheet" href="{% static 'client/css/regions.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="{% 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>
<!-- 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>
<div class="mcl">
<form action="#">
<form action="{{ search_action }}">
<div class="search-form-wrap">
<div class="search-line">
<div class="sf-field-wrap">
<div class="sf-field">
<label for="search">Я ищу:</label>
<div class="input-text"><input type="text" class="autocomplete" id="search" name="query" /></div>
<label for="search">{% trans 'Я ищу' %}:</label>
<div class="input-text">{{ search_form.q }}</div>
</div>
</div>
<div class="sf-field-wrap">
<div class="sf-field">
<label for="where">Где:</label>
<div class="input-text"><input type="text" class="autocomplete" id="where" name="where" /></div>
<label for="where">{% trans 'Где' %}:</label>
<div class="input-text">{{ search_form.w }}</div>
</div>
</div>
<div class="sf-field-wrap">
<button type="submit"><span>найти</span></button>
<button type="submit"><span>{% trans 'найти' %}</span></button>
</div>
</div>
<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">Место: <a class="pw-open" href="#pw-place">Не важно</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-subj">{% trans 'Не важно' %}</a></div>
<div class="sf-field-wrap">{% trans 'Место' %}: <a class="pw-open" href="#pw-place">{% trans 'Не важно' %}</a></div>
<div class="sf-field-wrap">{% trans 'Период' %}: <a class="pw-open" href="#pw-period">{% trans 'Не важно' %}</a></div>
</div>
</div>
</form>

@ -25,46 +25,7 @@
{% block paginator %}
{% if page_obj.paginator.num_pages > 1 %}
<div class="pagination clearfix">
<div class="pg-info"> Показано {{ page_obj.start_index }} - {{ page_obj.end_index }} <i>(всего {{ page_obj.paginator.count }} позиций)</i></div>
<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 %}
{% with page_obj=page_obj queries=queries %}
{% include 'includes/search_paginator.html' %}
{% endwith %}
{% endblock %}

@ -9,26 +9,66 @@
<form class="pw-form" action="#">
<div class="c-select-box-wrap">
<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="scroll-container csb-menu">
<div class="scroll-content clearfix">
<div class="places-list">
<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>
<li><label><input type="checkbox" name="place" value="101" />Москва</label></li>
<li><label><input type="checkbox" name="place" value="102" />Санкт-Петербург</label></li>
<li><label><input type="checkbox" name="place" value="103" />Владивосток</label></li>
<li><label><input type="checkbox" name="place" value="104" />Краснодар</label></li>
<li class="level2"><label><input type="checkbox" name="place" value="c100" /><span class="hidden">Область 1</span></label><a href="#">Область 1</a>
<ul>
<li><label><input type="checkbox" name="place" value="c101" />Москва</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>
</li>
<li><label><input type="checkbox" name="place" value="2" />СНГ (исключая Россию)</label></li>
<li><label><input type="checkbox" name="place" value="3" />Европа</label></li>
<li><label><input type="checkbox" name="place" value="4" />Азия</label></li>
<li><label><input type="checkbox" name="place" value="5" />Северная Америка</label></li>
<li><label><input type="checkbox" name="place" value="6" />Южная Америка</label></li>
<li><label><input type="checkbox" name="place" value="7" />Австралия и Океания</label></li>
<li class="level1"><label><input type="checkbox" name="place" value="c400" /><span class="hidden">СНГ (исключая Россию)</span></label><a href="#">СНГ (исключая Россию)</a>
<ul>
<li><label><input type="checkbox" name="place" value="c401" />Киев</label></li>
<li><label><input type="checkbox" name="place" value="c402" />Харьков</label></li>
<li><label><input type="checkbox" name="place" value="c403" />Донецк</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>
</div>
<div class="q-sel">
@ -45,6 +85,7 @@
</div>
</div>
<div class="pwf-buttons-line">
<button type="submit" class="icon-check">{% trans 'применить' %}</button>
</div>
</form>

@ -9,9 +9,10 @@
<div class="pw-body clearfix">
<form class="pw-form" action="#">
<div class="pwf-line subj-checks">
{% for val, choice in theme_search_form.event.field.choices %}
<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>
{% endfor %}
</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 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from bitfield import BitField
import copy
@ -32,13 +31,13 @@ class Theme(TranslatableModel):
types = BitField([k for k, v in FLAGS])
#translated fields
translations = TranslatedFields(
name = models.CharField(max_length=100),
main_title = models.CharField(max_length=100),
name = models.CharField(max_length=255),
main_title = models.CharField(max_length=255),
description = models.TextField(blank=True),
#-----meta data
title = models.CharField(max_length=250, blank=True),
descriptions = models.CharField(max_length=250, blank=True),
keywords = models.CharField(max_length=250, blank=True),
title = models.CharField(max_length=255, blank=True),
descriptions = models.CharField(max_length=255, blank=True),
keywords = models.CharField(max_length=255, blank=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 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=Tag)
post_save.connect(post_save_handler, sender=Theme)
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.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
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')
class Webinar(TranslatableModel, EventMixin):
class Webinar(TranslatableModel, EventMixin, ExpoMixin):
"""
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