Merge branch 'develop' of git.general-servers.com:expomap/expomap into develop

remotes/origin/1203
Nazar Kotjuk 10 years ago
commit 582cac3d88
  1. 3
      accounts/views.py
  2. 3
      article/views.py
  3. 3
      company/views.py
  4. 3
      conference/views.py
  5. 72
      core/views.py
  6. 37
      expobanner/admin.py
  7. 3
      exposition/views.py
  8. 20
      functions/custom_views.py
  9. 19
      functions/overrides.py
  10. 2
      photologue/views.py
  11. 3
      place_exposition/views.py
  12. 12
      proj/settings.py
  13. 16
      specialist_catalog/admin_urls.py
  14. 2
      specialist_catalog/forms.py
  15. 3
      specialist_catalog/models.py
  16. 40
      specialist_catalog/views.py
  17. 31
      templates/admin/expobanner/banner_stat.html
  18. 36
      templates/admin/expobanner/main_stat.html
  19. 31
      templates/admin/expobanner/paid_stat.html
  20. 35
      templates/admin/specialist/catalog_all.html
  21. 10
      templates/admin/specialist/catalog_new.html
  22. 7
      templates/client/accounts/calendar.html
  23. 6
      templates/client/blank.html
  24. 2
      templates/client/exposition/exposition_detail.html
  25. 28
      templates/client/includes/conference/default_description.html
  26. 54
      templates/client/includes/exposition/default_description.html
  27. 3
      translator/views.py

@ -8,7 +8,8 @@ from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _, get_language
from django.utils import timezone
from django_messages.forms import SendForm
from django.views.generic import TemplateView, FormView, ListView
from django.views.generic import TemplateView, FormView
from functions.custom_views import ListView
from sorl.thumbnail import get_thumbnail
from .forms import ChangePasswordForm, EmailAnnouncementForm, FeedFilterForm
from company.forms import CreateCompanyForm

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import json
from django.views.generic import DetailView, ListView
from django.views.generic import DetailView
from functions.custom_views import ListView
from django.http import HttpResponse
from models import Article
from forms import ArticleFilterForm

@ -2,7 +2,8 @@
import json
from django.http import HttpResponse
from django.conf import settings
from django.views.generic import ListView, DetailView
from django.views.generic import DetailView
from functions.custom_views import ListView
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext as _, get_language
from haystack.query import EmptySearchQuerySet

@ -6,7 +6,8 @@ from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpRespons
from django.contrib import messages
from django.shortcuts import get_object_or_404
from django.contrib.contenttypes.models import ContentType
from django.views.generic import ListView, DetailView
from django.views.generic import DetailView
from functions.custom_views import ListView
from django.views.generic.edit import FormMixin
from django.utils.translation import ugettext as _
from django.utils import translation

@ -3,7 +3,8 @@ from country.models import Country
from city.models import City
from place_exposition.models import PlaceExposition
from place_conference.models import PlaceConference
from django.views.generic import ListView, CreateView, DeleteView, UpdateView, DetailView
from django.views.generic import CreateView, DeleteView, UpdateView, DetailView
from functions.custom_views import ListView
from django.core.urlresolvers import reverse_lazy
from functions.views_help import split_params
from django.utils.translation import ugettext as _
@ -265,36 +266,39 @@ from django.core.urlresolvers import reverse
def download_workbook(request):
lang = get_language()
data = request.GET
qs = []
for i,obj in enumerate(data):
if data.get('data[%i][name]'%i) == 'expo':
qs.append(Exposition.objects.language(lang).get(id=data['data[%i][value]'%i]))
elif data.get('data[%i][name]'%i) == 'conf':
qs.append(Conference.objects.language(lang).get(id=data['data[%i][value]'%i]))
earliest_event = qs[0].data_begin
for i, obj in enumerate(qs, start=1):
if obj.data_begin < earliest_event:
earliest_event = obj.data_begin
setattr(obj, 'number', i)
setattr(obj, 'dates', u'%s - %s'%(obj.data_begin.strftime('%d %B %Y'),obj.data_end.strftime('%d %B %Y')))
setattr(obj, 'full_place', u'%s, %s, %s' % (obj.country, obj.city, getattr(obj.place, 'name', '')))
try:
setattr(obj, 'link', u'http://www.expomap.ru%s)'%obj.get_absolute_url())
except:
setattr(obj, 'link', u'http://www.expomap.ru%s)'%obj.get_permanent_url())
columns = (
'number',
'name',
'dates',
'main_title',
'full_place',
'participation_note',
'link')
workbook = queryset_to_workbook(qs, columns, earliest_event)
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="My calendar.xls"'
workbook.save(response)
return response
if data:
qs = []
for i,obj in enumerate(data):
if data.get('data[%i][name]'%i) == 'expo':
qs.append(Exposition.objects.language(lang).get(id=data['data[%i][value]'%i]))
elif data.get('data[%i][name]'%i) == 'conf':
qs.append(Conference.objects.language(lang).get(id=data['data[%i][value]'%i]))
earliest_event = qs[0].data_begin
for i, obj in enumerate(qs, start=1):
if obj.data_begin < earliest_event:
earliest_event = obj.data_begin
setattr(obj, 'number', i)
setattr(obj, 'dates', u'%s - %s'%(obj.data_begin.strftime('%d %B %Y'),obj.data_end.strftime('%d %B %Y')))
setattr(obj, 'full_place', u'%s, %s, %s' % (obj.country, obj.city, getattr(obj.place, 'name', '')))
try:
setattr(obj, 'link', u'http://www.expomap.ru%s)'%obj.get_absolute_url())
except:
setattr(obj, 'link', u'http://www.expomap.ru%s)'%obj.get_permanent_url())
columns = (
'number',
'name',
'dates',
'main_title',
'full_place',
'participation_note',
'link')
workbook = queryset_to_workbook(qs, columns, earliest_event)
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="My calendar.xls"'
workbook.save(response)
return response
else:
return HttpResponseRedirect(request.META.get('HTTP_REFERER'), "/profile/calendar/")

@ -110,6 +110,20 @@ class BannerStat(DetailView):
model = Banner
template_name = 'admin/expobanner/banner_stat.html'
def get_context_data(self, **kwargs):
context = super(BannerStat, self).get_context_data(**kwargs)
obj = self.object
qs = obj.banner_stat.all()
date_from, date_to = self.request.GET.get('date_from'), self.request.GET.get('date_to')
if date_from:
date_from = datetime.strptime(date_from, "%d.%m.%Y")
qs = qs.filter(date__gt=date_from)
if date_to:
date_to = datetime.strptime(date_to, "%d.%m.%Y")
qs = qs.filter(date__lt=date_to)
context['stats'] = qs
return context
class PaidList(ListView):
model = Exposition
@ -177,9 +191,17 @@ class PaidStat(DetailView):
participation=Sum('participation_clicks'),
catalog=Sum('catalog_clicks')
)
qs = obj.paidstat_set.all()
date_from, date_to = self.request.GET.get('date_from'), self.request.GET.get('date_to')
if date_from:
date_from = datetime.strptime(date_from, "%d.%m.%Y")
qs = qs.filter(date__gt=date_from)
if date_to:
date_to = datetime.strptime(date_to, "%d.%m.%Y")
qs = qs.filter(date__lt=date_to)
context['stats'] = qs
return context
# ----------------------------------
class MainList(ListView):
model = Exposition
@ -222,7 +244,7 @@ def main_turn(request, pk, status):
main.save()
return HttpResponseRedirect('/admin/expobanners/main/list/')
from datetime import datetime
class MainStat(DetailView):
model = MainPage
@ -231,13 +253,22 @@ class MainStat(DetailView):
def get_context_data(self, **kwargs):
context = super(MainStat, self).get_context_data(**kwargs)
obj = self.object
context['stats'] = obj.link.banner_stat.all()
context['all'] = obj.link.banner_stat.aggregate(
views=Sum('view'),
clicks=Sum('click'),
unique_clicks=Sum('unique_click'),
unique_views=Sum('unique_view')
)
qs = obj.link.banner_stat.all()
date_from, date_to = self.request.GET.get('date_from'), self.request.GET.get('date_to')
if date_from:
date_from = datetime.strptime(date_from, "%d.%m.%Y")
qs = qs.filter(date__gt=date_from)
if date_to:
date_to = datetime.strptime(date_to, "%d.%m.%Y")
qs = qs.filter(date__lt=date_to)
context['stats'] = qs
return context
# ------------------------------------

@ -4,7 +4,8 @@ import datetime
from django.http import HttpResponseRedirect, HttpResponse, HttpResponsePermanentRedirect
from django.contrib.contenttypes.models import ContentType
from django.conf import settings
from django.views.generic import ListView, DetailView
from django.views.generic import DetailView
from functions.custom_views import ListView
from django.utils.translation import ugettext as _
from django.shortcuts import get_object_or_404
from django.http import Http404

@ -18,9 +18,23 @@ from hvad.utils import get_translation_aware_manager
#python
import random
from django.views.generic import ListView as OldListView
from country.models import Country
class ListView(OldListView):
"""
List of modules, where overrided ListView is used:
- accounts.views
- article.views
- company.views
- conference.views
- core.views
- exposition.views
- photologue.views
- place_exposition.views
- specialist_catalog.views
- translator.views
"""
paginator_class = settings.DEFAULT_PAGINATOR
@login_required
def filtered_list(request, objects, template, item_per_page=settings.ADMIN_PAGINATION):
@ -186,7 +200,7 @@ def delete_object(request, Model, Form, url, prev_page,):
return render_to_response('delete.html', args)
#-----class------------------
from django.views.generic import ListView, DetailView
from django.views.generic import DetailView
from functions.views_help import split_params
from city.models import City

@ -0,0 +1,19 @@
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
class SeoPaginator(Paginator):
def validate_number(self, number):
"Validates the given 1-based page number."
try:
number = int(number)
except (TypeError, ValueError):
raise PageNotAnInteger('That page number is not an integer')
if number < 1:
raise EmptyPage('That page number is less than 1')
if number > self.num_pages:
if number == 1 and self.allow_empty_first_page:
pass
else:
number = 1
return number

@ -3,7 +3,7 @@ import warnings
from django.conf import settings
from django.views.generic.dates import ArchiveIndexView, DateDetailView, DayArchiveView, MonthArchiveView, YearArchiveView
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from functions.custom_views import ListView
from .models import Photo, Gallery
# Number of galleries to display per page.

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.views.generic import ListView, DetailView, FormView
from django.views.generic import DetailView, FormView
from functions.custom_views import ListView
from django.utils import translation
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext

@ -422,10 +422,14 @@ THUMBNAIL_DEBUG = DEBUG
CALLBACK_EMAIL = 'kotzilla@ukr.net'
BOOKING_AID = '333667'
try:
from functions.overrides import SeoPaginator as Paginator
except ImportError:
from django.core.paginator import Paginator
DEFAULT_PAGINATOR = Paginator
ADMIN_PAGINATION = 20
CLIENT_PAGINATION = 15
TEMPLATE_DEBUG = DEBUG
NO_LOGO = '/static/client/img/no-logo.png'
@ -504,4 +508,6 @@ if DEBUG:
# 'INTERCEPT_REDIRECTS': False,
#}
"""
"""
# -- PAGINATION -- #

@ -5,16 +5,14 @@ from .views import *
urlpatterns = patterns('',
url(r'^specialist/new/$', SpecialistCreateView.as_view(), name='specialist_new'),
url(r'^specialist/all/$', SpecialistListView.as_view(), name='specialist_all'),
url(r'^specialist/edit/(?P<pk>\d{1,4})/$', SpecialistUpdateView.as_view(), name='specialist_edit'),
url(r'^specialist/delete/(?P<pk>\d{1,4})/$', SpecialistDeleteView.as_view(), name='specialist_delete'),
url(r'^specialist/edit/(?P<pk>\d{1,6})/$', SpecialistUpdateView.as_view(), name='specialist_edit'),
url(r'^specialist/delete/(?P<pk>\d{1,6})/$', SpecialistDeleteView.as_view(), name='specialist_delete'),
url(r'^catalog/new/$', CatalogCreateView.as_view(), name='catalog_new'),
url(r'^catalog/all/$', CatalogListView.as_view(), name='catalog_all'),
url(r'^catalog/city/$', CatalogCityView.as_view(), name='catalog_city'),
url(r'^catalog/country/$', CatalogCountryView.as_view(), name='catalog_country'),
url(r'^catalog/edit/(?P<pk>\d{1,4})/$', CatalogUpdateView.as_view(), name='catalog_edit'),
url(r'^catalog/delete/(?P<pk>\d{1,4})/$', CatalogDeleteView.as_view(), name='catalog_delete'),
url(r'^catalog/(?P<catalog_pk>\d{1,4})/add_feedback/$', FeedbackCreateView.as_view(), name='feedback_new'),
url(r'^catalog/edit/(?P<pk>\d{1,6})/$', CatalogUpdateView.as_view(), name='catalog_edit'),
url(r'^catalog/delete/(?P<pk>\d{1,6})/$', CatalogDeleteView.as_view(), name='catalog_delete'),
url(r'^catalog/(?P<catalog_pk>\d{1,6})/add_feedback/$', FeedbackCreateView.as_view(), name='feedback_new'),
#url(r'^catalog/(?P<pk>\d{1,4})/feedbacks/$', FeedbackListView.as_view(), name='feedback_all'),
url(r'^catalog/(?P<catalog_pk>\d{1,4})/feedback/(?P<id>\d{1,4})/$', FeedbackUpdateView.as_view(), name='feedback_edit'),
url(r'^feedback/delete/(?P<pk>\d{1,4})/$', FeedbackDeleteView.as_view(), name='feedback_delete'),
url(r'^catalog/(?P<catalog_pk>\d{1,6})/feedback/(?P<id>\d{1,4})/$', FeedbackUpdateView.as_view(), name='feedback_edit'),
url(r'^feedback/delete/(?P<pk>\d{1,6})/$', FeedbackDeleteView.as_view(), name='feedback_delete'),
)

@ -22,7 +22,7 @@ class SpecialistCatalogForm(TranslatableModelForm):
class Meta:
model = SpecialistCatalog
fields = ['price', 'currency', 'logo_preview', 'main_descr', 'place_photo',
fields = ['price', 'currency', 'logo', 'main_descr', 'place_photo',
'specialists', 'city', 'country', 'type', 'title', 'benefits', 'big_cities']
widgets = {
'type': forms.Select(choices=(('1', 'Country'), ('2', 'City'))),

@ -28,13 +28,14 @@ class Specialist(models.Model):
class SpecialistCatalog(TranslatableModel):
price = models.IntegerField(verbose_name=u"Цена", default=200)
currency = models.CharField(max_length=255, verbose_name=u"Валюта", default=u"EUR")
logo_preview = models.ImageField(verbose_name=u"Логотип", blank=True, upload_to='specialist_catalog/logo_preview/')
logo = models.ImageField(db_column= "logo_preview", verbose_name=u"Логотип", blank=True, upload_to='specialist_catalog/logo_preview/')
place_photo = models.ImageField(verbose_name=u"Фото для города", blank=True, upload_to='specialist_catalog/place_photo/')
specialists = models.ManyToManyField(Specialist, verbose_name=u"Специалисты", blank=True)
city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=u"Город", blank=True, null=True)
country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=u"Страна", blank=False)
type = models.PositiveSmallIntegerField(verbose_name=u"Тип(Страна/Город)", default=2)
objects = TranslationManager()
translations = TranslatedFields(
title=models.CharField(max_length=255, verbose_name=u"Заголовок"),

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.views.generic import CreateView, UpdateView, DeleteView, ListView, FormView, DetailView
from django.views.generic import CreateView, UpdateView, DeleteView, FormView, DetailView
from functions.custom_views import ListView
from django.views.generic.detail import SingleObjectMixin
from django.utils.translation import ugettext as _
from meta.views import MetadataMixin
@ -12,6 +13,8 @@ from django.http import HttpResponseRedirect, Http404, HttpResponsePermanentRedi
from .models import _city, _country
# =========== ADMIN VIEWS ===========
# Specialist views
@ -71,35 +74,24 @@ class CatalogCreateView(CreateView):
success_url = reverse_lazy("catalog_all")
class CatalogListView(ListView):
model = SpecialistCatalog
template_name = 'admin/specialist/catalog_all.html'
paginate_by = settings.ADMIN_PAGINATION
class CatalogCityView(ListView):
model = SpecialistCatalog
template_name = 'admin/specialist/catalog_all.html'
paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self):
query = self.request.GET.get('query', None)
qs = self.model.objects.language().filter(type=2)
if query:
qs = qs.filter(title__icontains=query)
return qs
class CatalogCountryView(ListView):
class CatalogListView(ListView):
model = SpecialistCatalog
template_name = 'admin/specialist/catalog_all.html'
paginate_by = settings.ADMIN_PAGINATION
paginator_class = settings.DEFAULT_PAGINATOR
def get_queryset(self):
query = self.request.GET.get('query', None)
qs = self.model.objects.language().filter(type=1)
_GET = self.request.GET
query, city, country, only_cntry = _GET.get('query'), _GET.get('city'), _GET.get('country'), _GET.get('only_countries')
qs = self.model.objects.language()
if only_cntry:
qs = qs.filter(type=1)
if query:
qs = qs.filter(title__icontains=query)
if city:
qs = qs.filter(city__translations__name__icontains=city)
if country:
qs = qs.filter(country__translations__name__icontains=country)
return qs
@ -235,4 +227,4 @@ def redirect_old(request, *args, **kwargs):
if not kwargs.get('type'):
return HttpResponsePermanentRedirect('/translators/country/')
else:
return HttpResponsePermanentRedirect('/translators/city/')
return HttpResponsePermanentRedirect('/translators/city/')

@ -1,5 +1,6 @@
{% extends 'base.html' %}
{% load static %}
{% load i18n %}
{% block scripts %}
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
{% endblock %}
@ -12,6 +13,20 @@
<h2><i class="icon-align-justify"></i> {{ object }} (Пароль: {{ object.stat_pswd }})</h2>
</div>
<div class="box-content">
<!-- date filter -->
<div class="row-fluid">
<form class = "form-inline" method="get" >
<div class="form-group ">
<label class="control-label" for="id_date_from"> {% trans "с: " %}</label>
<input class="form-control" type="text" name="date_from" id="id_date_from">
<label for="id_date_to" >{% trans "по: " %}</label>
<input class="form-control" type="text" name="date_to" id="id_date_to" >
<button class="btn btn-primary" type="submit" >{% trans "Фильтровать" %}</button>
</div>
</form>
</div>
<!-- end date filter -->
<table class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr>
@ -23,7 +38,7 @@
</tr>
</thead>
<tbody>
{% with stats=object.banner_stat.all %}
{% with stats=stats %}
{% for stat in stats %}
<tr>
<td>{{ stat.date|date:"Y-m-d" }}</td>
@ -39,5 +54,19 @@
</div>
</div>
</div>
<script>
console.log("down");
$('#id_date_from').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('#id_date_to').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
console.log("1");
</script>
{% endblock %}

@ -1,7 +1,14 @@
{% extends 'admin/base.html' %}
{% load static %}
{% load i18n %}
{% block scripts %}
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
{# datetimepicker #}
<script type="text/javascript">
console.log("2");
</script>
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
{% endblock %}
@ -16,6 +23,19 @@
<div class="span8">Линк на статистику: <b>{{ request.get_host }}/expo-b/banner/{{ object.link.id }}/stat/</b></div>
<div class="span4">Пароль: <b>{{ object.link.stat_pswd }}</b></div>
</div>
<!-- date filter -->
<div class="row-fluid">
<form class = "form-inline" method="get" >
<div class="form-group ">
<label class="control-label" for="id_date_from"> {% trans "с: " %}</label>
<input class="form-control" type="text" name="date_from" id="id_date_from">
<label for="id_date_to" >{% trans "по: " %}</label>
<input class="form-control" type="text" name="date_to" id="id_date_to" >
<button class="btn btn-primary" type="submit" >{% trans "Фильтровать" %}</button>
</div>
</form>
</div>
<!-- end date filter -->
<table class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr>
@ -52,5 +72,19 @@
</div>
</div>
</div>
<script>
console.log("down");
$('#id_date_from').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('#id_date_to').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
console.log("1");
</script>
{% endblock %}

@ -1,4 +1,5 @@
{% extends 'base.html' %}
{% load i18n %}
{% load static %}
{% block scripts %}
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
@ -16,6 +17,20 @@
<div class="span8">Линк на статистику: <b>{{ request.get_host }}/expo-b/paid/{{ object.id }}/stat/</b></div>
<div class="span4">Пароль: <b>{{ object.stat_pswd }}</b></div>
</div>
<!-- date filter -->
<div class="row-fluid">
<form class = "form-inline" method="get" >
<div class="form-group ">
<label class="control-label" for="id_date_from"> {% trans "с: " %}</label>
<input class="form-control" type="text" name="date_from" id="id_date_from">
<label for="id_date_to" >{% trans "по: " %}</label>
<input class="form-control" type="text" name="date_to" id="id_date_to" >
<button class="btn btn-primary" type="submit" >{% trans "Фильтровать" %}</button>
</div>
</form>
</div>
<!-- end date filter -->
<table class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr>
@ -34,7 +49,7 @@
<td>{{ all.participation}}</td>
<td>{{ all.catalog }}</td>
</tr>
{% with stats=object.paidstat_set.all %}
{% with stats=stats %}
{% for stat in stats %}
<tr>
<td>{{ stat.date|date:"Y-m-d" }}</td>
@ -50,5 +65,19 @@
</div>
</div>
</div>
<script>
console.log("down");
$('#id_date_from').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('#id_date_to').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
console.log("1");
</script>
{% endblock %}

@ -1,5 +1,6 @@
{% extends 'base.html' %}
{% load thumbnail %}
{% load i18n %}
{% block body %}
<div class="box span8">
<div class="box-header well">
@ -7,24 +8,38 @@
</div>
<div class="box-content">
<form method="get">
<input id="find" type ='text' name = 'query' placeholder="Введите запрос">
<button type="submit" class="btn">Найти</button>
<input id="find" type ='text' name = 'query' placeholder={% trans "Заголовок" %}>
<input id="find_country" type ='text' name = 'country' placeholder={% trans "Страна" %}>
<input id="find_city" type ='text' name = 'city' placeholder={% trans "Город" %}>
<label for="only_country">{% trans "Только страны" %} <input class="checkbox" id="only_country" type ='checkbox' name = 'only_countries'></label>
<button type="submit" class="btn">{% trans "Найти" %}</button>
</form>
</div>
</div>
<script>
var cbx = $("#only_country")[0];
var fnd = $("#find_city")[0];
cbx.onclick = function(){
if (cbx.checked == true){
fnd.disabled = true;
}
else{
fnd.disabled = false;
}
}
</script>
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Все каталоги специалистов</h2>
<h2><i class="icon-arrow-down"></i>{% trans "Все каталоги специалистов" %}</h2>
</div>
<div class="box-content">
<table class="table table-hover">
<thead>
<tr>
<th>Заголовок</th>
<th>{% if request.path == "/admin/specialist_catalog/catalog/city/" %}Город{% elif request.path == "/admin/specialist_catalog/catalog/country/" %}Страна{% else %}Страна/Город{% endif %}</th>
<th>{% trans "Заголовок" %}</th>
<th>{% trans 'Страна/Город' %}</th>
<th>Link</th>
<th>&nbsp;</th>
</tr>
@ -34,16 +49,16 @@
<tr>
<td>{{ item.title }}</td>
<td>{% if item.type == 1%}{{ item.country.name }}{% else %}{{ item.city.name }}{% endif %}</td>
<td><a href="{{ item.get_absolute_url }}" target="_blank">на сайте</a></td>
<td><a href="{{ item.get_absolute_url }}" target="_blank">{% trans "на сайте" %}</a></td>
<td class="center sorting_1">
<a class="btn-small btn-info" href='{% url "catalog_edit" item.id %}'>
Изменить
{% trans "Изменить" %}
</a>
</td>
<td>
<a class="btn-small btn-danger delete" href='{% url "catalog_delete" item.id %}'>
Удалить
{% trans "Удалить" %}
</a>
</td>
</tr>
@ -51,7 +66,7 @@
</tbody>
</table>
<a class="btn btn-success" href='{% url "catalog_new" %}'>
<i class="icon-plus-sign icon-white"></i> Добавить </a>
<i class="icon-plus-sign icon-white"></i> {% trans "Добавить" %}</a>
</div>
{% include 'admin/includes/admin_pagination.html' %}

@ -103,12 +103,12 @@
<span class="help-inline">{{ form.specialists.errors }}</span>
</div>
</div>
{# logo_preview #}
<div class="control-group {% if form.logo_preview.errors %}error{% endif %}">
<label class="control-label">{{ form.logo_preview.label }}:</label>
{# logo #}
<div class="control-group {% if form.logo.errors %}error{% endif %}">
<label class="control-label">{{ form.logo.label }}:</label>
<div class="controls">
{{ form.logo_preview }} <output id="list_logo"></output>
<span class="help-inline">{{ form.logo_preview.errors }}</span>
{{ form.logo }} <output id="list_logo"></output>
<span class="help-inline">{{ form.logo.errors }}</span>
</div>
</div>
{# place_photo #}

@ -65,7 +65,12 @@
}
console.log(clear_list);
var query = $.param({data:clear_list});
window.location.href = "/profile/calendar/export/?" + query;
if(clear_list.Length > 0){
window.location.href = "/profile/calendar/export/?" + query;
}
else{
alert({% trans "Не выбрано ни одного события!" %})
}
});
})

@ -89,7 +89,11 @@ This template include basic anf main styles and js files,
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-P5C6GR');</script>
<!-- End Google Tag Manager -->
<style>
.text-indent-1-5em {
text-indent: 1.5em
}
</style>
</head>

@ -1,4 +1,4 @@
{% extends 'base_catalog.html' %}
{% extends 'client/base_catalog.html' %}
{% load i18n %}
{% load template_filters %}

@ -1,21 +1,21 @@
{% load i18n %}
<div class="ied-text">
Конференция {{conf.name}} проходит {% include 'client/includes/show_date_block.html' with obj=conf %} в городе {{conf.city.name}}, {{conf.country.name}}.
{% blocktrans with name=conf.name%}
<p class="text-indent-1-5em">Конференция {{name}} проходит {% endblocktrans %}{% include 'client/includes/show_date_block.html' with obj=conf %}
{% blocktrans with city=conf.name country=country.name name=conf.name id=conf.city.id code=request.LANGUAGE_CODE date1=conf.data_begin|date:'j' date2=conf.data_begin|date:'Y' date3=conf.data_begin|date:'n' date4=conf.data_end|date:'j' date5=conf.data_end|date:'Y' date6=conf.data_end|date:'n' %}
в городе {{city}}, {{country}}.
Посмотреть, как проехать в место проведения конференции, можно на сайте конгрессной площадки.
Деловая программа {{conf.name}} разбита на секции по дням и размещается на сайте мероприятия с подробным списком
докладчиков конференции. Спикеров конференции {{conf.name}} обычно окончательно утверждают за 1-2 месяца до начала конференции.
<br/>
<p><b>Ваши деловые контакты на {{conf.name}} </b></p>
<br/>
Добавьте конференцию {{conf.name}} в расписание, чтобы не потерять важное событие,
Деловая программа {{name}} разбита на секции по дням и размещается на сайте мероприятия с подробным списком
докладчиков конференции. Спикеров конференции {{name}} обычно окончательно утверждают за 1-2 месяца до начала конференции.</p>
<h3>Ваши деловые контакты на {{name}} </h3>
<p class="text-indent-1-5em">Добавьте конференцию {{name}} в расписание, чтобы не потерять важное событие,
где встречаются профессионалы нужной Вам отрасли. Создавайте свой календарь мероприятий, просто нажав кнопку
"Добавить в календарь".
<br/>
<p><b>Планируете самостоятельную поездку на {{conf.name}} ? </b></p>
<br/>
Если Вам требуется размещение, мы рекомендуем посмотреть отели и цены в период проведения конференции <a href="http://www.booking.com/searchresults.html?aid=333667&city={{ conf.city.id }}&do_availability_check=on&label=conf_search&lang={{ request.LANGUAGE_CODE }}&checkin_monthday={{ conf.data_begin|date:'j' }}&checkin_year_month={{ conf.data_begin|date:'Y' }}-{{ conf.data_begin|date:'n' }}&checkout_monthday={{ conf.data_end|date:'j' }}&checkout_year_month={{ conf.data_end|date:'Y' }}-{{ conf.data_end|date:'n' }}">здесь</a>.
"Добавить в календарь".</p>
<h3>Планируете самостоятельную поездку на {{name}} ? </h3>
<p class="text-indent-1-5em">Если Вам требуется размещение, мы рекомендуем посмотреть отели и цены в период проведения конференции <a href="http://www.booking.com/searchresults.html?aid=333667&city={{ id }}&do_availability_check=on&label=conf_search&lang={{ code }}&checkin_monthday={{ date1 }}&checkin_year_month={{ date2 }}-{{ date3 }}&checkout_monthday={{ date4 }}&checkout_year_month={{ date5 }}-{{ date6 }}">здесь</a>.
Не забудьте проверить место и даты конференции на официальном сайте и в календаре организатора. Событие могут перенести,
отменить, объединить с проектом схожей тематики. Expomap не несет ответственности за неточности
предоставляемой информации.
Есть вопрос по участию в {{conf.name}} ? Ответим по тел. <b>+7 (499) 999-12-07</b>
Есть вопрос по участию в {{name}} ? Ответим по тел. <b>+7 (499) 999-12-07</b></p>
{% endblocktrans %}
</div>

@ -1,24 +1,34 @@
{% load i18n %}
<div class="ied-text">
Выставка {{expo.name}} проводится {% include 'client/includes/show_date_block.html' with obj=expo %} в городе {{expo.city.name}}, {{expo.country.name}}.
Экспонируемые продукты и разделы выставки Вы можете посмотреть ниже, в блоке <a href="#additional">«Дополнительная информация».</a>
Полный список участников {{expo.name}} размещается на официальном сайте выставки и постоянно обновляется.
Там же Вы сможете найти экспонентов предыдущего года. Деловая программа {{expo.name}} обычно публикуется ближе к
началу события.
<br/>
<p><b>Ваш личный календарь</b></p>
<br/>
Добавьте выставку {{expo.name}} в расписание, чтобы не потерять важное событие. Создавайте свой календарь мероприятий,
просто нажав кнопку Добавить в календарь.
<br/>
<p> <b>Планируете самостоятельную поездку на {{expo.name}}?</b></p>
<br/>
Мы рекомендуем посмотреть отели и цены в период проведения выставки <a href="http://www.booking.com/searchresults.html?aid=333667&city={{ expo.city.id }}&do_availability_check=on&label=expo_search&lang={{ request.LANGUAGE_CODE }}&checkin_monthday={{ expo.data_begin|date:'j' }}&checkin_year_month={{ expo.data_begin|date:'Y' }}-{{ expo.data_begin|date:'n' }}&checkout_monthday={{ expo.data_end|date:'j' }}&checkout_year_month={{ expo.data_end|date:'Y' }}-{{ expo.data_end|date:'n' }}">здесь</a> .
{% if expo.place %}
Как добраться до выставочного центра {{expo.place.name}} можно посмотреть
<a href="/places/{{expo.place.url}}">здесь</a>.
{% endif %}
Не забудьте проверить место и даты выставки на официальном сайте и в календаре выставочного комплекса.
Событие могут перенести, отменить, объединить с проектом схожей тематики.
Expomap не несет ответственности за неточности предоставляемой информации.
Есть вопрос о посещении или участии в {{ expo.name }}? Ответим по тел. <b>+7 (499) 999-12-07</b>
{% blocktrans with name=expo.name %}
<p class="text-indent-1-5em">Выставка {{ name }} проводится{% endblocktrans %}
{% include 'client/includes/show_date_block.html' with obj=expo %}
{% blocktrans with city=expo.city.name country=expo.country.name %} в городе {{ city }}, {{ country }}
.{% endblocktrans %}
{% blocktrans with name=expo.name id=expo.city.id code=request.LANGUAGE_CODE date1=expo.data_begin|date:'j' date2=expo.data_begin|date:'Y' date3=expo.data_begin|date:'n' date4=expo.data_end|date:'j' date5=expo.data_end|date:'Y' date6=expo.data_end|date:'n' %}
Экспонируемые продукты и разделы выставки Вы можете посмотреть ниже, в блоке
<a href="#additional">«Дополнительная информация».</a>
Полный список участников {{ name }} размещается на официальном сайте выставки и постоянно обновляется.
Там же Вы сможете найти экспонентов предыдущего года. Деловая программа {{ name }} обычно публикуется ближе к
началу события.</p>
<h3>Ваш личный календарь</h3>
<p class="text-indent-1-5em">Добавьте выставку {{ name }} в <a href="/profile/calendar/">календарь</a>, чтобы не
потерять важное событие. Создавайте свой календарь мероприятий,
просто нажав кнопку Добавить в календарь.</p>
<h3>Планируете самостоятельную поездку на {{ name }}?</h3>
<p class="text-indent-1-5em">Мы рекомендуем посмотреть отели и цены в период проведения выставки
<a href="http://www.booking.com/searchresults.html?aid=333667&city={{ id }}&do_availability_check=on&label=expo_search&lang={{ code }}&checkin_monthday={{ date1 }}&checkin_year_month={{ date2 }}-{{ date3 }}&checkout_monthday={{ date4 }}&checkout_year_month={{ date5 }}-{{ date6 }}">здесь</a>.
{% endblocktrans %}{% if expo.place %}
{% blocktrans with name=expo.place.name url=expo.place.url %}Как добраться до выставочного центра {{ name }} можно
посмотреть
<a href="/places/{{ url }}">здесь</a>.{% endblocktrans %}
{% endif %}
{% blocktrans with name=expo.name %}
Не забудьте проверить место и даты выставки на официальном сайте и в календаре выставочного комплекса.
Событие могут перенести, отменить, объединить с проектом схожей тематики.
Expomap не несет ответственности за неточности предоставляемой информации.
Есть вопрос о посещении или участии в {{ name }}? Ответим по тел. <b>+7 (499) 999-12-07</b></p>
{% endblocktrans %}
</div>

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.views.generic import ListView, DetailView
from django.views.generic import DetailView
from functions.custom_views import ListView
from django.shortcuts import get_object_or_404
from django.views.generic.detail import SingleObjectMixin
from django.utils.translation import ugettext as _

Loading…
Cancel
Save