diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index a492a9cb..71f77c9d 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -246,8 +246,8 @@ class ContactSettings(models.Model): contact = models.OneToOneField(Contact) periodic = models.PositiveIntegerField(verbose_name=_(u'Периодичность отправки'), choices=PERIODIC_CHOICES, default=WEEK) - exponent_practicum = models.BooleanField(default=False, verbose_name=_(u'Практикум экспонента')) - organiser_practicum = models.BooleanField(default=True, verbose_name=_(u'Практикум организатора событий')) + exponent_practicum = models.BooleanField(default=True, verbose_name=_(u'Практикум экспонента')) + organiser_practicum = models.BooleanField(default=False, verbose_name=_(u'Практикум организатора событий')) theme = models.ManyToManyField('theme.Theme', blank=True, null=True, verbose_name=_(u'Тематики')) area = models.ManyToManyField('country.Area', blank=True, null=True, verbose_name=_(u'Географические зоны')) country = models.ManyToManyField('country.Country', blank=True, null=True, verbose_name=_(u'Страны')) diff --git a/emencia/django/newsletter/settings.py b/emencia/django/newsletter/settings.py index 2df5679d..c2aa0c5a 100644 --- a/emencia/django/newsletter/settings.py +++ b/emencia/django/newsletter/settings.py @@ -15,7 +15,7 @@ USE_TINYMCE = getattr(settings, 'NEWSLETTER_USE_TINYMCE', USE_PRETTIFY = getattr(settings, 'NEWSLETTER_USE_PRETTIFY', True) -MAILER_HARD_LIMIT = getattr(settings, 'NEWSLETTER_MAILER_HARD_LIMIT', 100) +MAILER_HARD_LIMIT = getattr(settings, 'NEWSLETTER_MAILER_HARD_LIMIT', 2000) INCLUDE_UNSUBSCRIPTION = getattr(settings, 'NEWSLETTER_INCLUDE_UNSUBSCRIPTION', True) diff --git a/emencia/django/newsletter/views/expo_views.py b/emencia/django/newsletter/views/expo_views.py index b0ef935b..e59f9bdf 100644 --- a/emencia/django/newsletter/views/expo_views.py +++ b/emencia/django/newsletter/views/expo_views.py @@ -22,7 +22,9 @@ class SubscribeView(FormView): contact = Contact.objects.get(email=email) return form_class(instance=contact, **self.get_form_kwargs()) except Contact.DoesNotExist: - return form_class(**self.get_form_kwargs()) + pass + + return form_class(**self.get_form_kwargs()) else: return form_class(**self.get_form_kwargs()) diff --git a/expobanner/admin.py b/expobanner/admin.py index aad89529..675e947c 100644 --- a/expobanner/admin.py +++ b/expobanner/admin.py @@ -70,6 +70,7 @@ class BannerList(AbstractList): def get_queryset(self): qs = self.model.objects.filter(group__isnull=False).order_by('-fr') if not self.request.GET.get('show_inactive'): + qs = qs.filter(public=True) qs = qs.filter(Q(fr__lte=date.today()) & (Q(to__isnull=True) | Q( to__gte=date.today()))) if self.request.GET.get('q'): qs = qs.filter(title__icontains=self.request.GET['q']) diff --git a/expobanner/models.py b/expobanner/models.py index 8a1afabd..cf61d245 100644 --- a/expobanner/models.py +++ b/expobanner/models.py @@ -14,6 +14,9 @@ from country.models import Country class URL(models.Model): + """ + Model for urls or regex urls that can be used in banners representation + """ title = models.CharField(verbose_name=u'Заголовок', max_length=256) url = models.CharField(verbose_name=u'URL or URL RegEx', max_length=2048) regex = models.BooleanField(verbose_name=u'RegEx', default=False) @@ -39,6 +42,9 @@ class URL(models.Model): class BannerGroup (models.Model): + """ + place where banner can be show + """ name = models.CharField(verbose_name=u'Имя', max_length=255) slug = models.SlugField(verbose_name=u'URL', unique=True) width = models.PositiveSmallIntegerField(verbose_name=u'Ширина', default=0) @@ -68,6 +74,9 @@ class BannerGroup (models.Model): class Banner(models.Model, StatMixin): + """ + Uses for store information about banners. Also can be used as tracked link + """ objects = BiasedManager() title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True) @@ -78,12 +87,10 @@ class Banner(models.Model, StatMixin): url = models.CharField(verbose_name=u'URL', max_length=1024) fr = models.DateField(default=date.today()) to = models.DateField(blank=True, null=True) - theme = models.ManyToManyField(Theme, blank=True, null=True, verbose_name=u'Тематика') country = models.ManyToManyField(Country, blank=True, null=True, verbose_name=u'Страна') sort = models.PositiveSmallIntegerField(verbose_name=u'Сорт', default=500) - group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=u'Место', null=True, blank=True) often = models.PositiveSmallIntegerField( verbose_name=_('Often'), @@ -104,25 +111,29 @@ class Banner(models.Model, StatMixin): public = models.BooleanField(verbose_name=u'Активный', default=True) created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) - + # password for clients stat_pswd = models.CharField(max_length=16) class Meta: ordering = ['-public'] def get_admin_url(self): - return '/admin/expobanners/banners/banner/%d/edit/'%self.id + return '/admin/expobanners/banners/banner/%d/edit/' % self.id - def key(slef): + @property + def key(self): if hasattr(settings, 'SECRET_KEY'): key = str(datetime.now()) + settings.SECRET_KEY else: key = str(datetime.now()) return hashlib.md5(key).hexdigest() - def log(self, request, type): + def log(self, request, t): + """ + creating log by request + """ log = { - 'type': type, + 'type': t, 'banner': self, 'group': self.group, 'ip': request.META.get('REMOTE_ADDR'), @@ -169,6 +180,9 @@ class Banner(models.Model, StatMixin): class Log(models.Model): + """ + store information about showing and clicking of banners + """ banner = models.ForeignKey(Banner, related_name='banner_logs') group = models.ForeignKey(BannerGroup, related_name='group_logs', verbose_name=_('Group'), blank=True, null=True) urls = models.ManyToManyField(URL, related_name='url_logs', verbose_name=_('URLs'), blank=True) @@ -192,6 +206,9 @@ class Log(models.Model): class LogStat(models.Model): + """ + store aggregated data of logs + """ banner = models.ForeignKey(Banner, related_name='banner_stat', verbose_name=_('Banner'), blank=True) group = models.ForeignKey(BannerGroup, related_name='group_stat', verbose_name=_('Group'), blank=True, null=True) urls = models.ManyToManyField(URL, related_name='url_bloks', verbose_name=_('URLs'), null=True, blank=True) @@ -211,6 +228,9 @@ class LogStat(models.Model): # ------------------ class Paid(models.Model, StatMixin): + """ + store information about paid events + """ tickets = models.ForeignKey(Banner, related_name='paid_tickets') participation = models.ForeignKey(Banner, related_name='paid_participation') official = models.ForeignKey(Banner, related_name='paid_official') @@ -233,6 +253,9 @@ class Paid(models.Model, StatMixin): class PaidStat(models.Model): + """ + aggregated data of paid logs + """ paid = models.ForeignKey(Paid) date = models.DateField(verbose_name=_('Date')) page_views = models.PositiveIntegerField(default=0) @@ -248,6 +271,9 @@ class PaidStat(models.Model): class Top(models.Model, StatMixin): + """ + store information about events in top + """ link = models.ForeignKey(Banner) catalog = models.CharField(max_length=16, verbose_name=u'Каталог для топа') position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция') @@ -273,6 +299,9 @@ class Top(models.Model, StatMixin): class TopStat(models.Model): + """ + aggregated data of logs events in top + """ date = models.DateField() theme = models.ForeignKey('theme.Theme', blank=True, null=True) tag = models.ForeignKey('theme.Tag', blank=True, null=True) @@ -283,6 +312,9 @@ class TopStat(models.Model): class MainPage(models.Model, StatMixin): + """ + events on main page info + """ link = models.ForeignKey(Banner) position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция') public = models.BooleanField(default=True, verbose_name=u'Активная') @@ -331,4 +363,4 @@ def generate_stat_pass(sender, **kwargs): post_save.connect(generate_stat_pass, sender=Banner) post_save.connect(generate_stat_pass, sender=Paid) -post_save.connect(generate_stat_pass, sender=Top) +post_save.connect(generate_stat_pass, sender=Top) \ No newline at end of file diff --git a/expobanner/views.py b/expobanner/views.py index beb3f1ec..22333adf 100644 --- a/expobanner/views.py +++ b/expobanner/views.py @@ -21,6 +21,9 @@ def view(request, banner_id): return redirect(banner.img.url) def get_banners(request): + """ + return list of banners filtered by sending data + """ url = get_referer_view(request, default='/') # get urls by current url urls = URL.cached.all() diff --git a/import_xls/utils.py b/import_xls/utils.py index 018bc924..09133f5b 100644 --- a/import_xls/utils.py +++ b/import_xls/utils.py @@ -218,16 +218,16 @@ def save_logo(obj, path): return u'Неизвестная ошибка' - def check_quality_label(obj, value, label): bit = obj.quality_label + try: value = int(value) except: - return None + return bit if value: setattr(bit, label, True) - return None + return bit def to_user(value): try: diff --git a/place_exposition/models.py b/place_exposition/models.py index f4fa2c47..7c197f5c 100644 --- a/place_exposition/models.py +++ b/place_exposition/models.py @@ -191,12 +191,12 @@ class PlaceExposition(TranslatableModel, ExpoMixin): def get_nearest_hotels(self): if not self.address: - return None + return [] # get coordinates of all hotels in current city qs_hotels_all = self.city.hotels.filter(city=self.city) hotels_coord = [(hotel.latitude, hotel.longitude) for hotel in qs_hotels_all] # coordinate current place - place_coord = (self.address['lat'], self.address['lng']) + place_coord = (float(self.address['lat']), float(self.address['lng'])) # 4 coordinates of 4 nearest hotels hotels_coord = sorted(hotels_coord, key=partial(dist, place_coord))[:4] # start generating filter for queryset diff --git a/templates/client/blank.html b/templates/client/blank.html index 9d78fc79..605e7c6b 100644 --- a/templates/client/blank.html +++ b/templates/client/blank.html @@ -95,7 +95,7 @@ This template include basic anf main styles and js files, } - +