diff --git a/emencia/django/newsletter/admin_forms.py b/emencia/django/newsletter/admin_forms.py index ce428c9a..36cd04a7 100644 --- a/emencia/django/newsletter/admin_forms.py +++ b/emencia/django/newsletter/admin_forms.py @@ -71,7 +71,7 @@ class MailingListForm(forms.ModelForm): class Meta: model = MailingList - fields = ('name', 'description') + fields = ('name', 'description', 'theme_for_filter') def save(self, commit=True): ml = super(MailingListForm, self).save(commit=True) @@ -98,9 +98,12 @@ class NewsletterForm(forms.ModelForm): class Meta: model = Newsletter - fields = ('title', 'content', 'mailing_list', 'test_contacts', 'header_sender', + fields = ('title', 'content', 'mailing_list', 'theme_for_filter', 'test_contacts', 'header_sender', 'header_reply', 'status', 'sending_date', 'slug') - + def __init__(self, *args, **kwargs): + super(NewsletterForm, self).__init__(*args, **kwargs) + if self.instance and self.instance.mailing_list_id: + self.fields['theme_for_filter'].queryset = self.instance.mailing_list.theme_for_filter.all() class AttachmentForm(forms.ModelForm): class Meta: diff --git a/emencia/django/newsletter/admin_urls.py b/emencia/django/newsletter/admin_urls.py index b1a296c3..899d2690 100644 --- a/emencia/django/newsletter/admin_urls.py +++ b/emencia/django/newsletter/admin_urls.py @@ -3,7 +3,7 @@ from django.conf.urls import patterns from emencia.django.newsletter.views.admin_views import ContactList, UpdateContact, MailingListView, UpdateMailingList,\ CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate, \ DeleteMailingList, ImportContacts, NewsletterHistory, NewsletterStatistics, NewsletterCloneView,ContactQueryDelete,\ - NewsletterDelete, PopupStatisticsView + NewsletterDelete, PopupStatisticsView, theme_for_filter_ajax urlpatterns = patterns('', @@ -16,6 +16,7 @@ urlpatterns = patterns('', url(r'^newsletters/(?P\d+)/test/$', 'emencia.django.newsletter.views.admin_views.send_test_newsletter', name='newsletters_newsletters_send_test'), + url(r'^newsletters/get-themes/', theme_for_filter_ajax, name='admin-newsletters-get-themes'), url(r'^newsletters/$', NewsletterCreate.as_view(), name='newsletters_newsletters_create'), @@ -32,4 +33,4 @@ urlpatterns = patterns('', url(r'^contact/import/$', ImportContacts.as_view(), name='import_newsletters_contacts'), url(r'get-popup-statistics/$', PopupStatisticsView.as_view(), name='popup_statistics'), - ) \ No newline at end of file + ) diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py index 1872ba4f..3d4235ee 100644 --- a/emencia/django/newsletter/mailer.py +++ b/emencia/django/newsletter/mailer.py @@ -326,8 +326,10 @@ class NewsLetterSender(object): else: already_sent = ContactMailingStatus.objects.filter(status=ContactMailingStatus.SENT, newsletter=self.newsletter).values_list('contact__id', flat=True) - expedition_list = self.newsletter.mailing_list.expedition_set().exclude(id__in=already_sent) - return expedition_list + qs = self.newsletter.mailing_list.expedition_set().exclude(id__in=already_sent) + if self.newsletter.mailing_list.theme_for_filter.all(): + qs = qs.filter(contactsettings__theme__in=self.newsletter.theme_for_filter) + return qs def update_contact_status(self, contact, exception, send): if not send: diff --git a/emencia/django/newsletter/migrations/0001_initial.py b/emencia/django/newsletter/migrations/0001_initial.py index d5b2e548..ae20d7b0 100644 --- a/emencia/django/newsletter/migrations/0001_initial.py +++ b/emencia/django/newsletter/migrations/0001_initial.py @@ -1,272 +1,725 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime from south.db import db +from south.v2 import SchemaMigration from django.db import models -from emencia.django.newsletter.models import * -class Migration: +class Migration(SchemaMigration): def forwards(self, orm): - - # Adding model 'MailingList' - db.create_table('newsletter_mailinglist', ( - ('id', orm['newsletter.MailingList:id']), - ('name', orm['newsletter.MailingList:name']), - ('description', orm['newsletter.MailingList:description']), - ('creation_date', orm['newsletter.MailingList:creation_date']), - ('modification_date', orm['newsletter.MailingList:modification_date']), + # Adding model 'SMTPServer' + db.create_table(u'newsletter_smtpserver', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('host', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('user', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)), + ('password', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)), + ('port', self.gf('django.db.models.fields.IntegerField')(default=25)), + ('tls', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('headers', self.gf('django.db.models.fields.TextField')(blank=True)), + ('mails_hour', self.gf('django.db.models.fields.IntegerField')(default=0)), )) - db.send_create_signal('newsletter', ['MailingList']) + db.send_create_signal(u'newsletter', ['SMTPServer']) - # Adding model 'ContactMailingStatus' - db.create_table('newsletter_contactmailingstatus', ( - ('id', orm['newsletter.ContactMailingStatus:id']), - ('newsletter', orm['newsletter.ContactMailingStatus:newsletter']), - ('contact', orm['newsletter.ContactMailingStatus:contact']), - ('status', orm['newsletter.ContactMailingStatus:status']), - ('link', orm['newsletter.ContactMailingStatus:link']), - ('creation_date', orm['newsletter.ContactMailingStatus:creation_date']), + # Adding model 'Contact' + db.create_table(u'newsletter_contact', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'], null=True)), + ('email', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)), + ('first_name', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)), + ('last_name', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)), + ('subscriber', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('valid', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('tester', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('activation_code', self.gf('django.db.models.fields.CharField')(default='84446db444d7b77c2f054627e77a9ef92fb6f6b8', max_length=40)), + ('activated', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'], null=True, blank=True)), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modification_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), )) - db.send_create_signal('newsletter', ['ContactMailingStatus']) + db.send_create_signal(u'newsletter', ['Contact']) + + # Adding model 'ContactSettings' + db.create_table(u'newsletter_contactsettings', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('contact', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['newsletter.Contact'], unique=True)), + ('periodic', self.gf('django.db.models.fields.PositiveIntegerField')(default=1)), + ('exponent_practicum', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('organiser_practicum', self.gf('django.db.models.fields.BooleanField')(default=False)), + )) + db.send_create_signal(u'newsletter', ['ContactSettings']) - # Adding model 'WorkGroup' - db.create_table('newsletter_workgroup', ( - ('id', orm['newsletter.WorkGroup:id']), - ('name', orm['newsletter.WorkGroup:name']), - ('group', orm['newsletter.WorkGroup:group']), + # Adding M2M table for field theme on 'ContactSettings' + m2m_table_name = db.shorten_name(u'newsletter_contactsettings_theme') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('contactsettings', models.ForeignKey(orm[u'newsletter.contactsettings'], null=False)), + ('theme', models.ForeignKey(orm[u'theme.theme'], null=False)) )) - db.send_create_signal('newsletter', ['WorkGroup']) + db.create_unique(m2m_table_name, ['contactsettings_id', 'theme_id']) - # Adding model 'Link' - db.create_table('newsletter_link', ( - ('id', orm['newsletter.Link:id']), - ('title', orm['newsletter.Link:title']), - ('url', orm['newsletter.Link:url']), - ('creation_date', orm['newsletter.Link:creation_date']), + # Adding M2M table for field area on 'ContactSettings' + m2m_table_name = db.shorten_name(u'newsletter_contactsettings_area') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('contactsettings', models.ForeignKey(orm[u'newsletter.contactsettings'], null=False)), + ('area', models.ForeignKey(orm[u'country.area'], null=False)) )) - db.send_create_signal('newsletter', ['Link']) + db.create_unique(m2m_table_name, ['contactsettings_id', 'area_id']) - # Adding model 'Newsletter' - db.create_table('newsletter_newsletter', ( - ('id', orm['newsletter.Newsletter:id']), - ('title', orm['newsletter.Newsletter:title']), - ('content', orm['newsletter.Newsletter:content']), - ('mailing_list', orm['newsletter.Newsletter:mailing_list']), - ('server', orm['newsletter.Newsletter:server']), - ('header_sender', orm['newsletter.Newsletter:header_sender']), - ('header_reply', orm['newsletter.Newsletter:header_reply']), - ('status', orm['newsletter.Newsletter:status']), - ('sending_date', orm['newsletter.Newsletter:sending_date']), - ('slug', orm['newsletter.Newsletter:slug']), - ('creation_date', orm['newsletter.Newsletter:creation_date']), - ('modification_date', orm['newsletter.Newsletter:modification_date']), + # Adding M2M table for field country on 'ContactSettings' + m2m_table_name = db.shorten_name(u'newsletter_contactsettings_country') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('contactsettings', models.ForeignKey(orm[u'newsletter.contactsettings'], null=False)), + ('country', models.ForeignKey(orm[u'country.country'], null=False)) )) - db.send_create_signal('newsletter', ['Newsletter']) + db.create_unique(m2m_table_name, ['contactsettings_id', 'country_id']) - # Adding model 'SMTPServer' - db.create_table('newsletter_smtpserver', ( - ('id', orm['newsletter.SMTPServer:id']), - ('name', orm['newsletter.SMTPServer:name']), - ('host', orm['newsletter.SMTPServer:host']), - ('user', orm['newsletter.SMTPServer:user']), - ('password', orm['newsletter.SMTPServer:password']), - ('port', orm['newsletter.SMTPServer:port']), - ('tls', orm['newsletter.SMTPServer:tls']), - ('headers', orm['newsletter.SMTPServer:headers']), - ('mails_hour', orm['newsletter.SMTPServer:mails_hour']), + # Adding M2M table for field city on 'ContactSettings' + m2m_table_name = db.shorten_name(u'newsletter_contactsettings_city') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('contactsettings', models.ForeignKey(orm[u'newsletter.contactsettings'], null=False)), + ('city', models.ForeignKey(orm[u'city.city'], null=False)) )) - db.send_create_signal('newsletter', ['SMTPServer']) + db.create_unique(m2m_table_name, ['contactsettings_id', 'city_id']) - # Adding model 'Contact' - db.create_table('newsletter_contact', ( - ('id', orm['newsletter.Contact:id']), - ('email', orm['newsletter.Contact:email']), - ('first_name', orm['newsletter.Contact:first_name']), - ('last_name', orm['newsletter.Contact:last_name']), - ('subscriber', orm['newsletter.Contact:subscriber']), - ('valid', orm['newsletter.Contact:valid']), - ('tester', orm['newsletter.Contact:tester']), - ('tags', orm['newsletter.Contact:tags']), - ('content_type', orm['newsletter.Contact:content_type']), - ('object_id', orm['newsletter.Contact:object_id']), - ('creation_date', orm['newsletter.Contact:creation_date']), - ('modification_date', orm['newsletter.Contact:modification_date']), + # Adding model 'MailingList' + db.create_table(u'newsletter_mailinglist', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('description', self.gf('django.db.models.fields.TextField')(blank=True)), + ('announce', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('announce_public_day', self.gf('django.db.models.fields.IntegerField')(default=2)), + ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modification_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), )) - db.send_create_signal('newsletter', ['Contact']) + db.send_create_signal(u'newsletter', ['MailingList']) - # Adding ManyToManyField 'WorkGroup.mailinglists' - db.create_table('newsletter_workgroup_mailinglists', ( + # Adding M2M table for field subscribers on 'MailingList' + m2m_table_name = db.shorten_name(u'newsletter_mailinglist_subscribers') + db.create_table(m2m_table_name, ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), - ('mailinglist', models.ForeignKey(orm.MailingList, null=False)) + ('mailinglist', models.ForeignKey(orm[u'newsletter.mailinglist'], null=False)), + ('contact', models.ForeignKey(orm[u'newsletter.contact'], null=False)) )) + db.create_unique(m2m_table_name, ['mailinglist_id', 'contact_id']) - # Adding ManyToManyField 'MailingList.subscribers' - db.create_table('newsletter_mailinglist_subscribers', ( + # Adding M2M table for field unsubscribers on 'MailingList' + m2m_table_name = db.shorten_name(u'newsletter_mailinglist_unsubscribers') + db.create_table(m2m_table_name, ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('mailinglist', models.ForeignKey(orm.MailingList, null=False)), - ('contact', models.ForeignKey(orm.Contact, null=False)) + ('mailinglist', models.ForeignKey(orm[u'newsletter.mailinglist'], null=False)), + ('contact', models.ForeignKey(orm[u'newsletter.contact'], null=False)) )) + db.create_unique(m2m_table_name, ['mailinglist_id', 'contact_id']) - # Adding ManyToManyField 'WorkGroup.contacts' - db.create_table('newsletter_workgroup_contacts', ( + # Adding model 'Newsletter' + db.create_table(u'newsletter_newsletter', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('content', self.gf('django.db.models.fields.TextField')(default=u'\n\n')), + ('mailing_list', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.MailingList'])), + ('server', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.SMTPServer'])), + ('header_sender', self.gf('django.db.models.fields.CharField')(default='Expomap', max_length=255)), + ('header_reply', self.gf('django.db.models.fields.CharField')(default='Expomap', max_length=255)), + ('status', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('sending_date', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=50)), + ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modification_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'newsletter', ['Newsletter']) + + # Adding M2M table for field test_contacts on 'Newsletter' + m2m_table_name = db.shorten_name(u'newsletter_newsletter_test_contacts') + db.create_table(m2m_table_name, ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), - ('contact', models.ForeignKey(orm.Contact, null=False)) + ('newsletter', models.ForeignKey(orm[u'newsletter.newsletter'], null=False)), + ('contact', models.ForeignKey(orm[u'newsletter.contact'], null=False)) + )) + db.create_unique(m2m_table_name, ['newsletter_id', 'contact_id']) + + # Adding model 'Link' + db.create_table(u'newsletter_link', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('url', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + )) + db.send_create_signal(u'newsletter', ['Link']) + + # Adding model 'Attachment' + db.create_table(u'newsletter_attachment', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('newsletter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.Newsletter'])), + ('title', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('file_attachment', self.gf('django.db.models.fields.files.FileField')(max_length=255)), + )) + db.send_create_signal(u'newsletter', ['Attachment']) + + # Adding model 'ContactMailingStatus' + db.create_table(u'newsletter_contactmailingstatus', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('newsletter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.Newsletter'])), + ('contact', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.Contact'])), + ('status', self.gf('django.db.models.fields.IntegerField')()), + ('link', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['newsletter.Link'], null=True, blank=True)), + ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), )) + db.send_create_signal(u'newsletter', ['ContactMailingStatus']) - # Adding ManyToManyField 'WorkGroup.newsletters' - db.create_table('newsletter_workgroup_newsletters', ( + # Adding model 'WorkGroup' + db.create_table(u'newsletter_workgroup', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('group', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.Group'])), + )) + db.send_create_signal(u'newsletter', ['WorkGroup']) + + # Adding M2M table for field contacts on 'WorkGroup' + m2m_table_name = db.shorten_name(u'newsletter_workgroup_contacts') + db.create_table(m2m_table_name, ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), - ('newsletter', models.ForeignKey(orm.Newsletter, null=False)) + ('workgroup', models.ForeignKey(orm[u'newsletter.workgroup'], null=False)), + ('contact', models.ForeignKey(orm[u'newsletter.contact'], null=False)) )) + db.create_unique(m2m_table_name, ['workgroup_id', 'contact_id']) - # Adding ManyToManyField 'MailingList.unsubscribers' - db.create_table('newsletter_mailinglist_unsubscribers', ( + # Adding M2M table for field mailinglists on 'WorkGroup' + m2m_table_name = db.shorten_name(u'newsletter_workgroup_mailinglists') + db.create_table(m2m_table_name, ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('mailinglist', models.ForeignKey(orm.MailingList, null=False)), - ('contact', models.ForeignKey(orm.Contact, null=False)) + ('workgroup', models.ForeignKey(orm[u'newsletter.workgroup'], null=False)), + ('mailinglist', models.ForeignKey(orm[u'newsletter.mailinglist'], null=False)) )) + db.create_unique(m2m_table_name, ['workgroup_id', 'mailinglist_id']) - # Adding ManyToManyField 'Newsletter.test_contacts' - db.create_table('newsletter_newsletter_test_contacts', ( + # Adding M2M table for field newsletters on 'WorkGroup' + m2m_table_name = db.shorten_name(u'newsletter_workgroup_newsletters') + db.create_table(m2m_table_name, ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('newsletter', models.ForeignKey(orm.Newsletter, null=False)), - ('contact', models.ForeignKey(orm.Contact, null=False)) + ('workgroup', models.ForeignKey(orm[u'newsletter.workgroup'], null=False)), + ('newsletter', models.ForeignKey(orm[u'newsletter.newsletter'], null=False)) + )) + db.create_unique(m2m_table_name, ['workgroup_id', 'newsletter_id']) + + # Adding model 'PopupCount' + db.create_table(u'newsletter_popupcount', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('date', self.gf('django.db.models.fields.DateField')()), + ('theme', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['theme.Theme'], null=True)), + ('cnt', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), )) + db.send_create_signal(u'newsletter', ['PopupCount']) + + # Adding unique constraint on 'PopupCount', fields ['theme', 'date'] + db.create_unique(u'newsletter_popupcount', ['theme_id', 'date']) + def backwards(self, orm): + # Removing unique constraint on 'PopupCount', fields ['theme', 'date'] + db.delete_unique(u'newsletter_popupcount', ['theme_id', 'date']) - # Deleting model 'MailingList' - db.delete_table('newsletter_mailinglist') + # Deleting model 'SMTPServer' + db.delete_table(u'newsletter_smtpserver') - # Deleting model 'ContactMailingStatus' - db.delete_table('newsletter_contactmailingstatus') + # Deleting model 'Contact' + db.delete_table(u'newsletter_contact') - # Deleting model 'WorkGroup' - db.delete_table('newsletter_workgroup') + # Deleting model 'ContactSettings' + db.delete_table(u'newsletter_contactsettings') - # Deleting model 'Link' - db.delete_table('newsletter_link') + # Removing M2M table for field theme on 'ContactSettings' + db.delete_table(db.shorten_name(u'newsletter_contactsettings_theme')) + + # Removing M2M table for field area on 'ContactSettings' + db.delete_table(db.shorten_name(u'newsletter_contactsettings_area')) + + # Removing M2M table for field country on 'ContactSettings' + db.delete_table(db.shorten_name(u'newsletter_contactsettings_country')) + + # Removing M2M table for field city on 'ContactSettings' + db.delete_table(db.shorten_name(u'newsletter_contactsettings_city')) + + # Deleting model 'MailingList' + db.delete_table(u'newsletter_mailinglist') + + # Removing M2M table for field subscribers on 'MailingList' + db.delete_table(db.shorten_name(u'newsletter_mailinglist_subscribers')) + + # Removing M2M table for field unsubscribers on 'MailingList' + db.delete_table(db.shorten_name(u'newsletter_mailinglist_unsubscribers')) # Deleting model 'Newsletter' - db.delete_table('newsletter_newsletter') + db.delete_table(u'newsletter_newsletter') - # Deleting model 'SMTPServer' - db.delete_table('newsletter_smtpserver') + # Removing M2M table for field test_contacts on 'Newsletter' + db.delete_table(db.shorten_name(u'newsletter_newsletter_test_contacts')) - # Deleting model 'Contact' - db.delete_table('newsletter_contact') + # Deleting model 'Link' + db.delete_table(u'newsletter_link') + + # Deleting model 'Attachment' + db.delete_table(u'newsletter_attachment') + + # Deleting model 'ContactMailingStatus' + db.delete_table(u'newsletter_contactmailingstatus') - # Dropping ManyToManyField 'WorkGroup.mailinglists' - db.delete_table('newsletter_workgroup_mailinglists') + # Deleting model 'WorkGroup' + db.delete_table(u'newsletter_workgroup') - # Dropping ManyToManyField 'MailingList.subscribers' - db.delete_table('newsletter_mailinglist_subscribers') + # Removing M2M table for field contacts on 'WorkGroup' + db.delete_table(db.shorten_name(u'newsletter_workgroup_contacts')) - # Dropping ManyToManyField 'WorkGroup.contacts' - db.delete_table('newsletter_workgroup_contacts') + # Removing M2M table for field mailinglists on 'WorkGroup' + db.delete_table(db.shorten_name(u'newsletter_workgroup_mailinglists')) - # Dropping ManyToManyField 'WorkGroup.newsletters' - db.delete_table('newsletter_workgroup_newsletters') + # Removing M2M table for field newsletters on 'WorkGroup' + db.delete_table(db.shorten_name(u'newsletter_workgroup_newsletters')) - # Dropping ManyToManyField 'MailingList.unsubscribers' - db.delete_table('newsletter_mailinglist_unsubscribers') + # Deleting model 'PopupCount' + db.delete_table(u'newsletter_popupcount') - # Dropping ManyToManyField 'Newsletter.test_contacts' - db.delete_table('newsletter_newsletter_test_contacts') models = { - 'auth.group': { - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + u'accounts.user': { + 'Meta': {'ordering': "['-rating']", 'object_name': 'User'}, + 'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'company': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'to': u"orm['company.Company']"}), + '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'}), + 'email': ('django.db.models.fields.EmailField', [], {'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'}), + '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'}), + 'position': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), + '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'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': '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': "orm['auth.Permission']", 'blank': 'True'}) + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) }, - 'auth.permission': { - 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, + 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': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + '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'}) }, - 'contenttypes.contenttype': { - 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, + u'city.city': { + 'Meta': {'unique_together': '()', 'object_name': 'City', 'index_together': '()'}, + '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'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.CharField', [], {'max_length': '55'}), + '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': {'ordering': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'Company', 'index_together': '()'}, + 'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}), + 'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + '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'}), + 'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', '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'}), + 'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), + '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']"}), + 'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '255'}), + 'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', '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'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 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'}) }, - 'newsletter.contact': { - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + u'country.area': { + 'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Area', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'country.country': { + 'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Country', 'index_together': '()'}, + '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'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'language': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Language']", 'null': 'True', 'blank': 'True'}), + 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '55'}), + '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': {'unique_together': '()', 'object_name': 'Currency', 'index_together': '()'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 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': '255'}), + 'code': ('django.db.models.fields.CharField', [], {'max_length': '4'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'directories.language': { + 'Meta': {'unique_together': '()', 'object_name': 'Language', 'index_together': '()'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'file.filemodel': { + 'Meta': {'unique_together': '()', 'object_name': 'FileModel', 'index_together': '()'}, + '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'", 'values': "('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF')", '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'", 'values': "['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2']"}) + }, + u'newsletter.attachment': { + 'Meta': {'object_name': 'Attachment'}, + 'file_attachment': ('django.db.models.fields.files.FileField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Newsletter']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'newsletter.contact': { + 'Meta': {'ordering': "('-modification_date',)", 'object_name': 'Contact'}, + 'activated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'activation_code': ('django.db.models.fields.CharField', [], {'default': "'dfcfa04440c050dcc912d8db824058afe8d75e11'", 'max_length': '40'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), - 'tags': ('tagging.fields.TagField', [], {'default': "''"}), - 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), - 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}) + 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']", 'null': 'True'}), + 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) }, - 'newsletter.contactmailingstatus': { - 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Contact']"}), + u'newsletter.contactmailingstatus': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'ContactMailingStatus'}, + 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Contact']"}), 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), - 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Newsletter']"}), 'status': ('django.db.models.fields.IntegerField', [], {}) }, - 'newsletter.link': { + u'newsletter.contactsettings': { + 'Meta': {'object_name': 'ContactSettings'}, + 'area': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Area']", 'null': 'True', 'blank': 'True'}), + 'city': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['city.City']", 'null': 'True', 'blank': 'True'}), + 'contact': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['newsletter.Contact']", 'unique': 'True'}), + 'country': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Country']", 'null': 'True', 'blank': 'True'}), + 'exponent_practicum': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'organiser_practicum': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'periodic': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}) + }, + u'newsletter.link': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'Link'}, 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) }, - 'newsletter.mailinglist': { + u'newsletter.mailinglist': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'MailingList'}, + 'announce': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'announce_public_day': ('django.db.models.fields.IntegerField', [], {'default': '2'}), 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']"}), - 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}) + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'mailinglist_subscriber'", 'symmetrical': 'False', 'to': u"orm['newsletter.Contact']"}), + 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'mailinglist_unsubscriber'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['newsletter.Contact']"}) }, - 'newsletter.newsletter': { + u'newsletter.newsletter': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'Newsletter'}, 'content': ('django.db.models.fields.TextField', [], {'default': "u'\\n\\n'"}), 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), - 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.MailingList']"}), + 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Expomap'", 'max_length': '255'}), + 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Expomap'", 'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.MailingList']"}), 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), 'sending_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'server': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': "orm['newsletter.SMTPServer']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}), + 'server': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.SMTPServer']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) }, - 'newsletter.smtpserver': { + u'newsletter.popupcount': { + 'Meta': {'ordering': "['-date']", 'unique_together': "(('theme', 'date'),)", 'object_name': 'PopupCount'}, + 'cnt': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'date': ('django.db.models.fields.DateField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'theme': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['theme.Theme']", 'null': 'True'}) + }, + u'newsletter.smtpserver': { + 'Meta': {'object_name': 'SMTPServer'}, 'headers': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'mails_hour': ('django.db.models.fields.IntegerField', [], {'default': '0'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), 'port': ('django.db.models.fields.IntegerField', [], {'default': '25'}), - 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'user': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) }, - 'newsletter.workgroup': { - 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), + u'newsletter.workgroup': { + 'Meta': {'object_name': 'WorkGroup'}, + 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + }, + u'organiser.organiser': { + 'Meta': {'unique_together': '()', 'object_name': 'Organiser', 'index_together': '()'}, + 'active': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), + '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'}), + 'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', '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'}), + 'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': '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']"}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + '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'}), + 'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}), + 'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'photologue.gallery': { + 'Meta': {'ordering': "['-date_added']", 'unique_together': '()', 'object_name': 'Gallery', 'index_together': '()'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'photos': ('sortedm2m.fields.SortedManyToManyField', [], {'blank': 'True', 'related_name': "'galleries'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['photologue.Photo']"}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), + 'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'photologue.photo': { + 'Meta': {'ordering': "['sort']", 'unique_together': '()', 'object_name': 'Photo', 'index_together': '()'}, + 'crop_from': ('django.db.models.fields.CharField', [], {'default': "'center'", 'max_length': '10', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'effect': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'photo_related'", 'null': 'True', 'to': u"orm['photologue.PhotoEffect']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), + 'sort': ('django.db.models.fields.PositiveIntegerField', [], {'default': '10', 'null': 'True', 'db_index': 'True'}), + 'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['photologue.UserMark']", 'null': 'True', 'symmetrical': 'False'}), + 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + u'photologue.photoeffect': { + 'Meta': {'object_name': 'PhotoEffect'}, + 'background_color': ('django.db.models.fields.CharField', [], {'default': "'#FFFFFF'", 'max_length': '7'}), + 'brightness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'color': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'contrast': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'filters': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), + 'reflection_size': ('django.db.models.fields.FloatField', [], {'default': '0'}), + 'reflection_strength': ('django.db.models.fields.FloatField', [], {'default': '0.6'}), + 'sharpness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'transpose_method': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}) + }, + u'photologue.usermark': { + 'Meta': {'object_name': 'UserMark'}, + 'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'left': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'top': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'marks'", 'to': u"orm['accounts.User']"}), + 'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {}) + }, + u'place_conference.placeconference': { + 'Meta': {'unique_together': '()', 'object_name': 'PlaceConference', 'index_together': '()'}, + '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', [], {'related_name': "'place_conferences'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + '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'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': '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'", 'values': "['Convention centre', 'Exposition 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', [], {'default': '0'}), + 'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': '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': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'PlaceExposition', 'index_together': '()'}, + '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', [], {'related_name': "'place_expositions'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + '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'}), + 'event_in_year': ('django.db.models.fields.PositiveIntegerField', [], {'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'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': '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'}), + 'partner': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'photogallery': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['photologue.Gallery']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'press_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + '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'", 'values': "['Exposition complex', 'Convention centre', 'Exposition centre']"}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) + }, + u'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'theme.tag': { + 'Meta': {'unique_together': '()', 'object_name': 'Tag', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + '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': {'unique_together': '()', 'object_name': 'Theme', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'main_page_conf': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'main_page_expo': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'types': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}) + }, + u'translator.translator': { + 'Meta': {'unique_together': '()', 'object_name': 'Translator', 'index_together': '()'}, + 'birth': ('django.db.models.fields.DateField', [], {}), + 'car': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gender': ('functions.custom_fields.EnumField', [], {'default': "'male'", 'values': "('male', 'female')"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) } } - complete_apps = ['newsletter'] + complete_apps = ['newsletter'] \ No newline at end of file diff --git a/emencia/django/newsletter/migrations/0002_auto__add_field_newsletter_theme_for_filter.py b/emencia/django/newsletter/migrations/0002_auto__add_field_newsletter_theme_for_filter.py new file mode 100644 index 00000000..23d2baec --- /dev/null +++ b/emencia/django/newsletter/migrations/0002_auto__add_field_newsletter_theme_for_filter.py @@ -0,0 +1,473 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding M2M table for field theme_for_filter on 'MailingList' + m2m_table_name = db.shorten_name(u'newsletter_mailinglist_theme_for_filter') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('mailinglist', models.ForeignKey(orm[u'newsletter.mailinglist'], null=False)), + ('theme', models.ForeignKey(orm[u'theme.theme'], null=False)) + )) + db.create_unique(m2m_table_name, ['mailinglist_id', 'theme_id']) + + # Adding field 'Newsletter.theme_for_filter' + db.add_column(u'newsletter_newsletter', 'theme_for_filter', + self.gf('django.db.models.fields.related.ForeignKey')(to=orm['theme.Theme'], null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Removing M2M table for field theme_for_filter on 'MailingList' + db.delete_table(db.shorten_name(u'newsletter_mailinglist_theme_for_filter')) + + # Deleting field 'Newsletter.theme_for_filter' + db.delete_column(u'newsletter_newsletter', 'theme_for_filter_id') + + + models = { + u'accounts.user': { + 'Meta': {'ordering': "['-rating']", 'object_name': 'User'}, + 'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'company': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'to': u"orm['company.Company']"}), + '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'}), + 'email': ('django.db.models.fields.EmailField', [], {'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'}), + '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'}), + 'position': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), + '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'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': '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': {'unique_together': '()', 'object_name': 'City', 'index_together': '()'}, + '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'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.CharField', [], {'max_length': '55'}), + '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': {'ordering': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'Company', 'index_together': '()'}, + 'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}), + 'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + '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'}), + 'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', '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'}), + 'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), + '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']"}), + 'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '255'}), + 'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', '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': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Area', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'country.country': { + 'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Country', 'index_together': '()'}, + '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'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'language': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Language']", 'null': 'True', 'blank': 'True'}), + 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '55'}), + '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': {'unique_together': '()', 'object_name': 'Currency', 'index_together': '()'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 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': '255'}), + 'code': ('django.db.models.fields.CharField', [], {'max_length': '4'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'directories.language': { + 'Meta': {'unique_together': '()', 'object_name': 'Language', 'index_together': '()'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'file.filemodel': { + 'Meta': {'unique_together': '()', 'object_name': 'FileModel', 'index_together': '()'}, + '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'", 'values': "('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF')", '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'", 'values': "['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2']"}) + }, + u'newsletter.attachment': { + 'Meta': {'object_name': 'Attachment'}, + 'file_attachment': ('django.db.models.fields.files.FileField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Newsletter']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'newsletter.contact': { + 'Meta': {'ordering': "('-modification_date',)", 'object_name': 'Contact'}, + 'activated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'activation_code': ('django.db.models.fields.CharField', [], {'default': "'018d00351873c1a8f23734cdbf9a620dfb81b477'", 'max_length': '40'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']", 'null': 'True'}), + 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + u'newsletter.contactmailingstatus': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'ContactMailingStatus'}, + 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Contact']"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.Newsletter']"}), + 'status': ('django.db.models.fields.IntegerField', [], {}) + }, + u'newsletter.contactsettings': { + 'Meta': {'object_name': 'ContactSettings'}, + 'area': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Area']", 'null': 'True', 'blank': 'True'}), + 'city': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['city.City']", 'null': 'True', 'blank': 'True'}), + 'contact': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['newsletter.Contact']", 'unique': 'True'}), + 'country': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Country']", 'null': 'True', 'blank': 'True'}), + 'exponent_practicum': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'organiser_practicum': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'periodic': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}) + }, + u'newsletter.link': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'Link'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'newsletter.mailinglist': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'MailingList'}, + 'announce': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'announce_public_day': ('django.db.models.fields.IntegerField', [], {'default': '2'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'mailinglist_subscriber'", 'symmetrical': 'False', 'to': u"orm['newsletter.Contact']"}), + 'theme_for_filter': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), + 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'mailinglist_unsubscriber'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['newsletter.Contact']"}) + }, + u'newsletter.newsletter': { + 'Meta': {'ordering': "('-creation_date',)", 'object_name': 'Newsletter'}, + 'content': ('django.db.models.fields.TextField', [], {'default': "u'\\n\\n'"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Expomap'", 'max_length': '255'}), + 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Expomap'", 'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.MailingList']"}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'sending_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'server': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['newsletter.SMTPServer']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'theme_for_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'newsletter.popupcount': { + 'Meta': {'ordering': "['-date']", 'unique_together': "(('theme', 'date'),)", 'object_name': 'PopupCount'}, + 'cnt': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'date': ('django.db.models.fields.DateField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'theme': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['theme.Theme']", 'null': 'True'}) + }, + u'newsletter.smtpserver': { + 'Meta': {'object_name': 'SMTPServer'}, + 'headers': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mails_hour': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'port': ('django.db.models.fields.IntegerField', [], {'default': '25'}), + 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) + }, + u'newsletter.workgroup': { + 'Meta': {'object_name': 'WorkGroup'}, + 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + }, + u'organiser.organiser': { + 'Meta': {'unique_together': '()', 'object_name': 'Organiser', 'index_together': '()'}, + 'active': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), + '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'}), + 'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', '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'}), + 'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': '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']"}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + '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'}), + 'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}), + 'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'photologue.gallery': { + 'Meta': {'ordering': "['-date_added']", 'unique_together': '()', 'object_name': 'Gallery', 'index_together': '()'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'photos': ('sortedm2m.fields.SortedManyToManyField', [], {'blank': 'True', 'related_name': "'galleries'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['photologue.Photo']"}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), + 'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'photologue.photo': { + 'Meta': {'ordering': "['sort']", 'unique_together': '()', 'object_name': 'Photo', 'index_together': '()'}, + 'crop_from': ('django.db.models.fields.CharField', [], {'default': "'center'", 'max_length': '10', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'effect': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'photo_related'", 'null': 'True', 'to': u"orm['photologue.PhotoEffect']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), + 'sort': ('django.db.models.fields.PositiveIntegerField', [], {'default': '10', 'null': 'True', 'db_index': 'True'}), + 'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['photologue.UserMark']", 'null': 'True', 'symmetrical': 'False'}), + 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + u'photologue.photoeffect': { + 'Meta': {'object_name': 'PhotoEffect'}, + 'background_color': ('django.db.models.fields.CharField', [], {'default': "'#FFFFFF'", 'max_length': '7'}), + 'brightness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'color': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'contrast': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'filters': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), + 'reflection_size': ('django.db.models.fields.FloatField', [], {'default': '0'}), + 'reflection_strength': ('django.db.models.fields.FloatField', [], {'default': '0.6'}), + 'sharpness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'transpose_method': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}) + }, + u'photologue.usermark': { + 'Meta': {'object_name': 'UserMark'}, + 'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'left': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'top': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'marks'", 'to': u"orm['accounts.User']"}), + 'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {}) + }, + u'place_conference.placeconference': { + 'Meta': {'unique_together': '()', 'object_name': 'PlaceConference', 'index_together': '()'}, + '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', [], {'related_name': "'place_conferences'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + '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'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': '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'", 'values': "['Convention centre', 'Exposition 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', [], {'default': '0'}), + 'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': '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': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'PlaceExposition', 'index_together': '()'}, + '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', [], {'related_name': "'place_expositions'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + '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'}), + 'event_in_year': ('django.db.models.fields.PositiveIntegerField', [], {'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'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': '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'}), + 'partner': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'photogallery': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['photologue.Gallery']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'press_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + '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'", 'values': "['Exposition complex', 'Convention centre', 'Exposition centre']"}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) + }, + u'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'theme.tag': { + 'Meta': {'unique_together': '()', 'object_name': 'Tag', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + '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': {'unique_together': '()', 'object_name': 'Theme', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'main_page_conf': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'main_page_expo': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'types': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}) + }, + u'translator.translator': { + 'Meta': {'unique_together': '()', 'object_name': 'Translator', 'index_together': '()'}, + 'birth': ('django.db.models.fields.DateField', [], {}), + 'car': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gender': ('functions.custom_fields.EnumField', [], {'default': "'male'", 'values': "('male', 'female')"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['newsletter'] \ No newline at end of file diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index 0d7c609f..69d1ad37 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -290,6 +290,7 @@ class MailingList(models.Model): announce_public_day = models.IntegerField(default=2) creation_date = models.DateTimeField(_('creation date'), auto_now_add=True) modification_date = models.DateTimeField(_('modification date'), auto_now=True) + theme_for_filter = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики'), null=True, blank=True) def subscribers_count(self): return self.subscribers.all().count() @@ -372,6 +373,7 @@ class Newsletter(models.Model): default=_('\n\n')) mailing_list = models.ForeignKey(MailingList, verbose_name=_('mailing list')) + theme_for_filter = models.ForeignKey('theme.Theme', verbose_name=_(u'Ограничение по тематике'), null=True, blank=True) test_contacts = models.ManyToManyField(Contact, verbose_name=_('test contacts'), blank=True, null=True) @@ -569,4 +571,4 @@ class PopupCount(models.Model): def get_active(self): qs = Contact.objects.filter(creation_date__startswith=self.date, activated=True) - return qs.count() \ No newline at end of file + return qs.count() diff --git a/emencia/django/newsletter/south_migrations_old(27.06.16)/0001_initial.py b/emencia/django/newsletter/south_migrations_old(27.06.16)/0001_initial.py new file mode 100644 index 00000000..d5b2e548 --- /dev/null +++ b/emencia/django/newsletter/south_migrations_old(27.06.16)/0001_initial.py @@ -0,0 +1,272 @@ +from south.db import db +from django.db import models +from emencia.django.newsletter.models import * + + +class Migration: + + def forwards(self, orm): + + # Adding model 'MailingList' + db.create_table('newsletter_mailinglist', ( + ('id', orm['newsletter.MailingList:id']), + ('name', orm['newsletter.MailingList:name']), + ('description', orm['newsletter.MailingList:description']), + ('creation_date', orm['newsletter.MailingList:creation_date']), + ('modification_date', orm['newsletter.MailingList:modification_date']), + )) + db.send_create_signal('newsletter', ['MailingList']) + + # Adding model 'ContactMailingStatus' + db.create_table('newsletter_contactmailingstatus', ( + ('id', orm['newsletter.ContactMailingStatus:id']), + ('newsletter', orm['newsletter.ContactMailingStatus:newsletter']), + ('contact', orm['newsletter.ContactMailingStatus:contact']), + ('status', orm['newsletter.ContactMailingStatus:status']), + ('link', orm['newsletter.ContactMailingStatus:link']), + ('creation_date', orm['newsletter.ContactMailingStatus:creation_date']), + )) + db.send_create_signal('newsletter', ['ContactMailingStatus']) + + # Adding model 'WorkGroup' + db.create_table('newsletter_workgroup', ( + ('id', orm['newsletter.WorkGroup:id']), + ('name', orm['newsletter.WorkGroup:name']), + ('group', orm['newsletter.WorkGroup:group']), + )) + db.send_create_signal('newsletter', ['WorkGroup']) + + # Adding model 'Link' + db.create_table('newsletter_link', ( + ('id', orm['newsletter.Link:id']), + ('title', orm['newsletter.Link:title']), + ('url', orm['newsletter.Link:url']), + ('creation_date', orm['newsletter.Link:creation_date']), + )) + db.send_create_signal('newsletter', ['Link']) + + # Adding model 'Newsletter' + db.create_table('newsletter_newsletter', ( + ('id', orm['newsletter.Newsletter:id']), + ('title', orm['newsletter.Newsletter:title']), + ('content', orm['newsletter.Newsletter:content']), + ('mailing_list', orm['newsletter.Newsletter:mailing_list']), + ('server', orm['newsletter.Newsletter:server']), + ('header_sender', orm['newsletter.Newsletter:header_sender']), + ('header_reply', orm['newsletter.Newsletter:header_reply']), + ('status', orm['newsletter.Newsletter:status']), + ('sending_date', orm['newsletter.Newsletter:sending_date']), + ('slug', orm['newsletter.Newsletter:slug']), + ('creation_date', orm['newsletter.Newsletter:creation_date']), + ('modification_date', orm['newsletter.Newsletter:modification_date']), + )) + db.send_create_signal('newsletter', ['Newsletter']) + + # Adding model 'SMTPServer' + db.create_table('newsletter_smtpserver', ( + ('id', orm['newsletter.SMTPServer:id']), + ('name', orm['newsletter.SMTPServer:name']), + ('host', orm['newsletter.SMTPServer:host']), + ('user', orm['newsletter.SMTPServer:user']), + ('password', orm['newsletter.SMTPServer:password']), + ('port', orm['newsletter.SMTPServer:port']), + ('tls', orm['newsletter.SMTPServer:tls']), + ('headers', orm['newsletter.SMTPServer:headers']), + ('mails_hour', orm['newsletter.SMTPServer:mails_hour']), + )) + db.send_create_signal('newsletter', ['SMTPServer']) + + # Adding model 'Contact' + db.create_table('newsletter_contact', ( + ('id', orm['newsletter.Contact:id']), + ('email', orm['newsletter.Contact:email']), + ('first_name', orm['newsletter.Contact:first_name']), + ('last_name', orm['newsletter.Contact:last_name']), + ('subscriber', orm['newsletter.Contact:subscriber']), + ('valid', orm['newsletter.Contact:valid']), + ('tester', orm['newsletter.Contact:tester']), + ('tags', orm['newsletter.Contact:tags']), + ('content_type', orm['newsletter.Contact:content_type']), + ('object_id', orm['newsletter.Contact:object_id']), + ('creation_date', orm['newsletter.Contact:creation_date']), + ('modification_date', orm['newsletter.Contact:modification_date']), + )) + db.send_create_signal('newsletter', ['Contact']) + + # Adding ManyToManyField 'WorkGroup.mailinglists' + db.create_table('newsletter_workgroup_mailinglists', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), + ('mailinglist', models.ForeignKey(orm.MailingList, null=False)) + )) + + # Adding ManyToManyField 'MailingList.subscribers' + db.create_table('newsletter_mailinglist_subscribers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('mailinglist', models.ForeignKey(orm.MailingList, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + # Adding ManyToManyField 'WorkGroup.contacts' + db.create_table('newsletter_workgroup_contacts', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + # Adding ManyToManyField 'WorkGroup.newsletters' + db.create_table('newsletter_workgroup_newsletters', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('workgroup', models.ForeignKey(orm.WorkGroup, null=False)), + ('newsletter', models.ForeignKey(orm.Newsletter, null=False)) + )) + + # Adding ManyToManyField 'MailingList.unsubscribers' + db.create_table('newsletter_mailinglist_unsubscribers', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('mailinglist', models.ForeignKey(orm.MailingList, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + # Adding ManyToManyField 'Newsletter.test_contacts' + db.create_table('newsletter_newsletter_test_contacts', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('newsletter', models.ForeignKey(orm.Newsletter, null=False)), + ('contact', models.ForeignKey(orm.Contact, null=False)) + )) + + def backwards(self, orm): + + # Deleting model 'MailingList' + db.delete_table('newsletter_mailinglist') + + # Deleting model 'ContactMailingStatus' + db.delete_table('newsletter_contactmailingstatus') + + # Deleting model 'WorkGroup' + db.delete_table('newsletter_workgroup') + + # Deleting model 'Link' + db.delete_table('newsletter_link') + + # Deleting model 'Newsletter' + db.delete_table('newsletter_newsletter') + + # Deleting model 'SMTPServer' + db.delete_table('newsletter_smtpserver') + + # Deleting model 'Contact' + db.delete_table('newsletter_contact') + + # Dropping ManyToManyField 'WorkGroup.mailinglists' + db.delete_table('newsletter_workgroup_mailinglists') + + # Dropping ManyToManyField 'MailingList.subscribers' + db.delete_table('newsletter_mailinglist_subscribers') + + # Dropping ManyToManyField 'WorkGroup.contacts' + db.delete_table('newsletter_workgroup_contacts') + + # Dropping ManyToManyField 'WorkGroup.newsletters' + db.delete_table('newsletter_workgroup_newsletters') + + # Dropping ManyToManyField 'MailingList.unsubscribers' + db.delete_table('newsletter_mailinglist_unsubscribers') + + # Dropping ManyToManyField 'Newsletter.test_contacts' + db.delete_table('newsletter_newsletter_test_contacts') + + models = { + 'auth.group': { + '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': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + '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'}) + }, + 'newsletter.contact': { + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'subscriber': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {'default': "''"}), + 'tester': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}) + }, + 'newsletter.contactmailingstatus': { + 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Contact']"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Link']", 'null': 'True', 'blank': 'True'}), + 'newsletter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.Newsletter']"}), + 'status': ('django.db.models.fields.IntegerField', [], {}) + }, + 'newsletter.link': { + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.mailinglist': { + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']"}), + 'unsubscribers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}) + }, + 'newsletter.newsletter': { + 'content': ('django.db.models.fields.TextField', [], {'default': "u'\\n\\n'"}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'header_reply': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), + 'header_sender': ('django.db.models.fields.CharField', [], {'default': "'Emencia Newsletter'", 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailing_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['newsletter.MailingList']"}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'sending_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'server': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': "orm['newsletter.SMTPServer']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}), + 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'test_contacts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'newsletter.smtpserver': { + 'headers': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'host': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mails_hour': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'port': ('django.db.models.fields.IntegerField', [], {'default': '25'}), + 'tls': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'user': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) + }, + 'newsletter.workgroup': { + 'contacts': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Contact']", 'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mailinglists': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.MailingList']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'newsletters': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['newsletter.Newsletter']", 'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['newsletter'] diff --git a/emencia/django/newsletter/migrations/0002_auto__add_attachment.py b/emencia/django/newsletter/south_migrations_old(27.06.16)/0002_auto__add_attachment.py similarity index 100% rename from emencia/django/newsletter/migrations/0002_auto__add_attachment.py rename to emencia/django/newsletter/south_migrations_old(27.06.16)/0002_auto__add_attachment.py diff --git a/emencia/django/newsletter/migrations/0003_auto__add_unique_newsletter_slug.py b/emencia/django/newsletter/south_migrations_old(27.06.16)/0003_auto__add_unique_newsletter_slug.py similarity index 100% rename from emencia/django/newsletter/migrations/0003_auto__add_unique_newsletter_slug.py rename to emencia/django/newsletter/south_migrations_old(27.06.16)/0003_auto__add_unique_newsletter_slug.py diff --git a/emencia/django/newsletter/south_migrations_old(27.06.16)/__init__.py b/emencia/django/newsletter/south_migrations_old(27.06.16)/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index e9fbf598..a7d8bede 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -1,25 +1,53 @@ # -*- coding: utf-8 -*- import datetime -from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView, DetailView, RedirectView, TemplateView + from django.conf import settings -from django.utils import translation -from django.utils.translation import ugettext_lazy as _ -from django.forms.formsets import formset_factory -from django.http import HttpResponseRedirect, HttpResponse -from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse_lazy +from django.forms.formsets import formset_factory from django.forms.models import modelformset_factory -from HTMLParser import HTMLParseError -from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment, ContactMailingStatus -from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm, AttachmentForm +from django.http import Http404, HttpResponse, HttpResponseRedirect +from django.shortcuts import get_object_or_404 +from django.utils import translation +from django.utils.encoding import force_text +from django.utils.translation import ugettext_lazy as _ +from django.views.generic import ( + CreateView, + DeleteView, + DetailView, + FormView, + ListView, + RedirectView, + TemplateView, + UpdateView +) +from emencia.django.newsletter.admin_forms import ( + AttachmentForm, + ContactSettingsForm, + MailingListForm, + NewsletterForm +) +from emencia.django.newsletter.forms import ( + MailingStatusFilter, + PopupCountFilter +) from emencia.django.newsletter.mailer import Mailer -from emencia.django.newsletter.forms import PopupCountFilter, MailingStatusFilter -from ..forms import ContactFilterForm, ContactImportForm -from ..utils.excel import ExcelResponse +from emencia.django.newsletter.models import ( + Attachment, + Contact, + ContactMailingStatus, + ContactSettings, + MailingList, + Newsletter +) from functions.admin_views import paginate_results -from ..models import PopupCount +from functions.http import JsonResponse +from HTMLParser import HTMLParseError from theme.models import Theme +from ..forms import ContactFilterForm, ContactImportForm +from ..models import PopupCount +from ..utils.excel import ExcelResponse + class ContactList(FormView): paginate_by = settings.ADMIN_PAGINATION @@ -383,3 +411,15 @@ class PopupStatisticsView(FormView): data['form'] = form return self.render_to_response(data) + + +def theme_for_filter_ajax(request): + if request.is_ajax(): + empty = [{'pk': '', 'name': '-----'}] + try: + ml = MailingList.objects.get(pk=request.GET.get('id')) + themes = Theme.objects.language().filter(pk__in=[x.pk for x in ml.theme_for_filter.all()]).values('pk', 'name') + return JsonResponse({'data': empty + [{'pk': x['pk'], 'name': force_text(x['name'])} for x in themes]}) + except (MailingList.DoesNotExist, ValueError, ): + return JsonResponse({'data': empty}) + return Http404() diff --git a/fabfile.py b/fabfile.py index da8f4af2..07c99232 100644 --- a/fabfile.py +++ b/fabfile.py @@ -21,6 +21,15 @@ apache2_conf = '/etc/apache2/sites-available/proj.com' settings_conf = join(REMOTE_HOME_DIR, 'proj/settings.py') services = ['nginx', 'apache2'] +ticket_functions = {} + + +def ticket(func): + if not callable(func): + raise NotImplementedError('func must be a callable') + ticket_functions[func.__name__] = func + return func + def set_host(host): env.hosts = env.roledefs.get(host) @@ -63,25 +72,20 @@ def call_state(state, only=None): for service in services: run('service {service} {state}'.format(service=service, state=state)) -def put_1345(): - call_state('stop', only='nginx') - with cd(REMOTE_HOME_DIR): - run('git pull') - # put_configs() - call_state('start', only='nginx') - def chown(): with cd(REMOTE_HOME_DIR): run('chown -Rv www-data:www-data .') -def pull(with_configs=False): +def pull(with_configs=False, func=None): with cd(REMOTE_HOME_DIR): call_state('stop', only='apache2') run('git pull') if with_configs: put_configs() + if func is not None and func in ticket_functions and callable(ticket_functions[func]): + ticket_functions[func]() call_state('start', only='apache2') @@ -138,18 +142,24 @@ def stage4_firstrun(): pull(with_configs=True) run('python manage.py syncdb') run('python manage.py migrate theme') + ticket1393() call_state('start') +@ticket def ticket1395(): - # stage4 with cd(REMOTE_HOME_DIR): run('python manage.py accounts_check_url') +@ticket def ticket1374(): with cd(REMOTE_HOME_DIR): - call_state('stop', only='apache2') - run('git pull') run('python manage.py migrate theme') - call_state('start', only='apache2') + + +@ticket +def ticket1393(): + with cd(REMOTE_HOME_DIR): + run('python manage.py migrate newsletter 0001 --fake') + run('python manage.py migrate newsletter') diff --git a/templates/admin/newsletters/newsletter_object.html b/templates/admin/newsletters/newsletter_object.html index babcaa3f..68a1e6b0 100644 --- a/templates/admin/newsletters/newsletter_object.html +++ b/templates/admin/newsletters/newsletter_object.html @@ -1,5 +1,6 @@ {% extends 'admin/base.html' %} {% load static %} +{% load i18n %} {% block scripts %} @@ -10,6 +11,7 @@ $(function(){ $('select').select2({width: "element"}); + $('select#id_theme_for_filter').select2("destroy"); //$('#id_country').select2({width: "element"}); $('#id_sending_date').datetimepicker({ todayHighlight: true, @@ -17,6 +19,20 @@ minView:2 }); + $('#id_mailing_list').on('change', function(e){ + $.get( + "{% url 'admin-newsletters-get-themes' %}", + {'id': $(this).val()}, + function(data){ + //generate new options + var html = ''; + $.each(data.data, function(i, elem){ + html += ''; + }); + $('#id_theme_for_filter').html(html); + });//end get + }); + }) {% endblock %} @@ -28,7 +44,7 @@
-

{% if object %}Изменения{% else %}Создание{% endif %} рассылки

+

{% if object %}{% trans "Изменения" %}{% else %}{% trans "Создание" %}{% endif %} {% trans "рассылки" %}

{% for field in form %} @@ -45,14 +61,14 @@
-

Прикрепить файлы

+

{% trans "Прикрепить файлы" %}

{{ attachment_formset.management_form }} - - + + @@ -60,12 +76,12 @@ - + {% endfor %}
тайтлфайл{% trans "тайтл" %}{% trans "файл" %}  
{{ attachment_form.id }}{{ attachment_form.title }} {{ attachment_form.file_attachment }} Удалить {% trans "Удалить" %}
-

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

+

{% trans "Добавить файл" %}