remotes/origin/1203
Nazar Kotjuk 10 years ago
commit 00e5ac3507
  1. 4
      emencia/django/newsletter/models.py
  2. 2
      emencia/django/newsletter/settings.py
  3. 4
      emencia/django/newsletter/views/expo_views.py
  4. 1
      expobanner/admin.py
  5. 48
      expobanner/models.py
  6. 3
      expobanner/views.py
  7. 6
      import_xls/utils.py
  8. 4
      place_exposition/models.py
  9. 2
      templates/client/blank.html
  10. 7
      templates/client/newsletters/subcribe.html

@ -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'Страны'))

@ -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)

@ -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())

@ -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'])

@ -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)

@ -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()

@ -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:

@ -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

@ -95,7 +95,7 @@ This template include basic anf main styles and js files,
}
</style>
<meta name="google-site-verification" content="2tSiaGdvrZTPw0mXMndZdk3MleeguLQ192Xb9U4JSyo" />
</head>
<body {% block body_class %}{% endblock %}>
<!--[if lt IE 8]>

@ -23,7 +23,6 @@
</style>
</head>
<body class="pr">
{{ form.errors }}
<div id="pr-wrapper">
<header id="pr-header">
@ -48,7 +47,7 @@
<h1>{% trans 'Анонсы выставок' %} <br />{% trans 'и конференций на ваш e-mail' %}</h1>
<h2>{% trans 'Хотите быть в курсе событий?' %}</h2>
<div class="pr-promo-text">
<p>{% trans 'Получайте анонсы выставок и конференций на email каждую среду. Вы можете выбрать несколько интересующих вас тематических направлений.' %} <a href="#">{% trans 'Пример письма' %}</a></p>
<p>{% trans 'Получайте анонсы выставок и конференций на email каждую среду. Вы можете выбрать несколько интересующих вас тематических направлений.' %} <a target="_blank" href="/newsletters/test-letter/">{% trans 'Пример письма' %}</a></p>
</div>
<form id="form1" action="#" class="pr-form" method="post">{% csrf_token %}
<fieldset>
@ -152,7 +151,7 @@
return true;
}else{
e.preventDefault();
alert({%trans "Выберите тематику!" %});
alert('{%trans "Выберите тематику!" %}');
}
});
$('#form3').on('submit', function(e){
@ -162,7 +161,7 @@
return true;
}else{
e.preventDefault();
alert({%trans "Выберите тематику!" %});
alert('{%trans "Выберите тематику!" %}');
}
});
/*

Loading…
Cancel
Save