remotes/origin/1203
Nazar Kotjuk 10 years ago
parent 1cea2afa6b
commit c1314265fa
  1. 1
      expobanner/admin.py
  2. 48
      expobanner/models.py
  3. 3
      expobanner/views.py
  4. 4
      place_exposition/models.py
  5. 2
      templates/client/blank.html

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

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

Loading…
Cancel
Save