remotes/origin/1203
Назар Котюк 11 years ago
commit 13abedbafe
  1. 2
      proj/settings.py
  2. 2
      service/models.py
  3. 52
      service/order_forms.py
  4. 6
      service/views.py
  5. 1
      templates/client/includes/catalog_search.html
  6. 18
      templates/client/includes/conference/conference_list.html
  7. 16
      templates/client/includes/event_steps.html
  8. 18
      templates/client/includes/exposition/exposition_list.html
  9. 9
      templates/client/includes/place/place_list.html
  10. 18
      templates/client/service/tour.html
  11. 21
      templates/client/service/translator.html
  12. 12
      templates/client/static_client/css/main.css
  13. 38
      templates/client/static_client/js/_modules/block.search.js
  14. 2
      templates/client/static_client/js_min/_modules/block.search.min.js

@ -404,6 +404,8 @@ MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2,
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64]
CLIENT_DATE_FORMAT = ["%d.%m.%Y"]
# cache pages in random seconds. random in this range
CACHE_RANGE = [60, 120]

@ -107,7 +107,7 @@ class Translation(AbstractOrder):
class Visit(AbstractOrder):
fr = models.DateField()
to = models.DateField()
people = models.IntegerField()
people = models.IntegerField(blank=True, null=True)
hotel_additional = models.TextField(blank=True)
city_from = models.CharField(max_length=255, blank=True)
hotel_stars = models.CharField(max_length=30, blank=True)

@ -6,6 +6,7 @@ from models import Catalog, Tickets, Remote, Participation, Translation, Visit,
from exposition.models import Exposition
from conference.models import Conference
from seminar.models import Seminar
from django.conf import settings
class AbstractOrderForm(forms.ModelForm):
@ -74,7 +75,7 @@ class AbstractOrderForm(forms.ModelForm):
if not phone:
return
deduct = ('-','(',')','.',' ')
deduct = ('-','(',')','.',' ', '+')
for elem in deduct:
phone = phone.replace(elem, '')
if phone.isdigit():
@ -132,42 +133,43 @@ from theme.models import Theme
class TranslationForm(AbstractOrderForm):
languages = forms.CharField(required=False)
themes = forms.CharField(required=False)
fr = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}), required=False)
to = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}), required=False)
fr = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT,
widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT,
widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}))
class Meta:
model = Translation
HOTEL_ADDITIONAL_CHOICES = [('', _(u'Выберите')),(_(u'Условие1'), _(u'Условие1')),
(_(u'Условие2'), _(u'Условие2')),(_(u'Условие3'), _(u'Условие3'))]
HOTEL_ADDITIONAL_CHOICES = [('', _(u'Выберите')), (_(u'Одноместное'), _(u'Одноместное')),
(_(u'Двухместное'), _(u'Двухместное')),(_(u'Трехместное'), _(u'Трехместное'))]
AVIA_TYPE_CHOICES = [(_(u'Прямой'), _(u'Прямой')), (_(u'С пересадкой'), _(u'С пересадкой')),
(_(u'Бизнес-класс'), _(u'Бизнес-класс')), (_(u'Эконом-класс'), _(u'Эконом-класс'))]
HOTEL_LOCATION_CHOICES = [('', _(u'Выберите')), (_(u'Расположение1'), _(u'Расположение1')),
(_(u'Расположение2'), _(u'Расположение2'))]
HOTEL_LOCATION_CHOICES = [('', _(u'Выберите')), (_(u'Любое'), _(u'Любое')),
(_(u'Рядом с выставкой'), _(u'Рядом с выставкой')),
(_(u'В центре'), _(u'В центре'))]
HOTEL_BUDGET_ADD = [('', _(u'Выберите')), (_(u'В сутки'), _(u'В сутки')), (_(u'В неделю'), _(u'В неделю'))]
HOTEL_BUDGET_ADD = [(_(u'В сутки'), _(u'В сутки')), (_(u'За весь период'), _(u'За весь период'))]
class VisitForm(AbstractOrderForm):
fr = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}))
fr = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT, required=False,
widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT, required=False,
widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}))
hotel_additional = forms.ChoiceField(choices=HOTEL_ADDITIONAL_CHOICES, required=False)
hotel_stars = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
hotel_stars = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), required=False,
choices=[('1','1'),('2','2'),('3','3'),('4','4'),('5','5')])
hotel_location = forms.ChoiceField(choices=HOTEL_LOCATION_CHOICES, required=False)
hotel_budget_add = forms.ChoiceField(choices=HOTEL_BUDGET_ADD, required=False)
languages = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
choices=LANGS)
themes = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
choices=[(theme.name, theme.name) for theme in Theme.objects.all()])
languages = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Знание языков')}))
themes = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Тематика')}))
avia_type = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
choices=AVIA_TYPE_CHOICES)
choices=AVIA_TYPE_CHOICES, required=False)
class Meta:
model = Visit
@ -178,20 +180,6 @@ class VisitForm(AbstractOrderForm):
else:
return ', '.join(hotel_stars)
def clean_languages(self):
languages = self.cleaned_data.get('languages')
if not languages:
return ''
else:
return ', '.join(languages)
def clean_themes(self):
themes = self.cleaned_data.get('themes')
if not themes:
return ''
else:
return ', '.join(themes)
def clean_avia_type(self):
avia_type = self.cleaned_data.get('avia_type')
if not avia_type:

@ -17,6 +17,8 @@ order_forms = {'translator': TranslationForm, 'catalog': CatalogForm, 'participa
'remote': RemoteForm, 'tickets': TicketsForm, 'visit': VisitForm, 'buildstand': BuildStandForm}
class ServiceView(FormView):
success_url = '/service/thanks/'
def get_form_class(self):
url = self.kwargs.get('url')
@ -26,13 +28,9 @@ class ServiceView(FormView):
else:
raise Http404
def get_template_names(self):
url = self.kwargs.get('url')
service = get_object_or_404(Service, url=url)
return service.template

@ -99,6 +99,7 @@
{% if request.GET.debug == '1' %}
<script src="{% static 'client/js/_modules/block.search.js' %}"></script>
{% else %}
<script src="{% static 'client/js_min/_modules/block.search.min.js' %}"></script>
{% endif %}
<script>

@ -1,8 +1,10 @@
{% load static %}
{% load i18n %}
{% load template_filters %}
<ul class="cat-list cl-exhibitions">
{% with objects=object_list %}
{% with objects=object_list %}
{% if objects %}
<ul class="cat-list cl-exhibitions">
{% for obj in objects %}
<li class="cl-item {% if obj.canceled %}canceled{% endif %}">
<div class="cl-item-wrap clearfix">
@ -117,8 +119,16 @@
</script>
{%endif %}
{% endfor %}
{% endwith %}
</ul>
</ul>
{% else %}
<p class="message-not-found">
<span class="message">
{% trans "Конференции по указанным параметрам не найдены. Попробуйте задать менее точный запрос по теме или расширить период времени" %}
</span>
</p>
{% endif %}
{% endwith %}
{% block scripts %}
{% if request.GET.debug == '1' %}
<script src="{% static 'client/js/_modules/block.exposition.list.js' %}"></script>

@ -3,26 +3,14 @@
<div class="i-steps">
<div class="is-title">{% if event.catalog == '/expo/' %}{% trans 'Участвовать в выставке' %}{% else %}{% trans 'Посетить конференцию' %}{% endif %}</div>
<ul>
{% if event.country_id in sng_countries %}
<li class="s1">
<div class="label">1. {% trans 'Участвовать в событии' %}</div>
<a class="step"
href="{{ event.get_permanent_url }}service/participation/"
target="_blank">
{% trans 'Участвовать' %}
</a>
</li>
{% else %}
<li class="s1">
<div class="label">1. {% trans 'Зарегистрируйтесь на событие' %}</div>
<div class="label">{% if event.catalog == '/expo/' %}{% trans 'Создайте уникальную концепцию' %}{% else %}{% trans 'Зарегистрируйтесь на событие' %}{% endif %}</div>
<a class="step"
href="{% if event.registration_link %}{{ registration_link }}{% else %}{{ event.get_permanent_url }}service/tickets/{% endif %}"
target="_blank">
{% if event.catalog == '/expo/' %}{% trans 'Билеты на выставку' %}{% else %}{% trans 'Регистрация' %}{% endif %}
{% if event.catalog == '/expo/' %}{% trans 'Заявка на участие' %}{% else %}{% trans 'Регистрация' %}{% endif %}
</a>
</li>
{% endif %}
<li class="s2">
<div class="label">{% trans 'Забронируйте отель по лучшей цене' %}</div>

@ -1,8 +1,10 @@
{% load static %}
{% load i18n %}
{% load template_filters %}
{% with objects=object_list %}
{% if objects %}
<ul class="cat-list cl-exhibitions">
{% with objects=object_list %}
{% for obj in objects %}
<li class="cl-item {% if obj.canceled %}canceled{% endif %}">
<div class="cl-item-wrap clearfix">
@ -119,8 +121,20 @@
</script>
{%endif %}
{% endfor %}
{% endwith %}
</ul>
{% else %}
<p class="message-not-found">
<span class="message">
{% trans "Выставки по указанным параметрам не найдены. Попробуйте задать менее точный запрос по теме или расширить период времени" %}
</span>
</p>
{% endif %}
{% endwith %}
{% block scripts %}
{% if request.GET.debug == '1' %}
<script src="{% static 'client/js/_modules/block.exposition.list.js' %}"></script>

@ -1,8 +1,8 @@
{% load static %}
{% load i18n %}
<ul class="cat-list cl-places">
{% with objects=object_list %}
<ul class="cat-list cl-places">
{% for object in object_list %}
<li class="cl-item" {% if forloop.counter == 1 %}style="border:1px solid #ff6600;"{% else %}{% endif %}>
<div class="cl-item-wrap clearfix">
@ -44,13 +44,10 @@
{% endif %}
</div>
<div class="cli-s-buttons">
<a class="button blue2 lc" target="_blank" href="http://www.booking.com/searchresults.html?aid={{ book_aid }}&city={{ object.city.id }}">{% trans 'Найти отели поблизости' %}</a>
</div>
</div>
</li>
{% endfor %}
</ul>
{% endwith %}

@ -23,6 +23,7 @@
{% block page_title %}
<div class="page-title">
<h1>{% if meta %}{{ meta.h1 }}{% else %}{% trans 'Посещение выставки' %} {% if object %}{{ object.name }}{% endif %}{% endif %}</h1>
{{ form.errors }}
</div>
{% endblock %}
@ -150,29 +151,18 @@
<div class="rq-s-line">
<div class="mf-field full-width">
<input type="text" name="languages" id="id_languages" placeholder="{% trans 'Знание языков' %}"/>
{{ form.languages }}
</div>
</div>
<div class="rq-s-line">
<!-- todo: сделать input:text-->
<div class="c-select-box select" data-placeholder="{% trans 'Тематика' %}">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
<ul>
</ul>
</div>
</div>
<div class="mf-field full-width">
{{ form.themes }}
</div>
</div>
</div>
<div class="rq-s-line">
<label>{% trans 'Занятость' %}:</label>

@ -50,7 +50,7 @@
</div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}>
{{ form.errors }}
{% comment %}{{ form.errors }}{% endcomment %}
<form method="post">{% csrf_token %}
<hr />
@ -62,11 +62,12 @@
<div class="mf-line cols-2 rq-trans">
<div class="mf-field">
<input id="id_languages" name="languages" placeholder="{% trans 'Знание языков' %}" type="text">
<input id="id_languages" name="languages" placeholder="{% trans 'Знание языков' %}" type="text" value="{{ form.languages.value }}">
</div>
<div class="mf-field">
<input id="id_themes" name="themes" placeholder="{% trans 'Тематика' %}" type="text">
<input id="id_themes" name="themes" placeholder="{% trans 'Тематика' %}" type="text" value="{{ form.themes.value }}">
</div>
</div>
@ -86,13 +87,21 @@
<label>{% trans 'Даты работы' %}:</label>
<div class="mf-field">
<div class="period">
<div class="pwf-field">
<div class="pwf-field validate-field{% if form.fr.errors %} error-field{% endif %}">
<label>{% trans 'с' %}</label>
{{ form.fr }}
<div class="error-blob">
{{ form.fr.errors }}
</div>
</div>
<div class="pwf-field">
<div class="pwf-field validate-field{% if form.to.errors %} error-field{% endif %}">
<label>{% trans 'по' %}</label>
{{ form.to }}
<div class="error-blob">
{{ form.to.errors }}
</div>
</div>
</div>
</div>
@ -183,7 +192,7 @@
</form>
</div>
<div class="rq-btn-wrap rq-btn-to-hide">
<div class="rq-btn-wrap rq-btn-to-hide rq-to-hide">
<div class="rqb-cols">
<div class="rqb-button">

@ -13761,3 +13761,15 @@ hr + .rq-note {
background-position: -74px 0;
}
/**************************\
# форма "отправить заявку"
\**************************/
.period .pwf-field .error-blob{
line-height: 18px;
}
.service-page .period .pwf-field.error-field:before{
margin-right: 13px;
margin-top: -8px;
}

@ -577,17 +577,24 @@ if (EXPO.searchBlock){
}
};
// var newData = ['banan','banan2','banan3','banan4','banan5'];
/**
* the ID value of the timer that is set
*/
self.timeout;
self.$inputFilter.attr('autocomplete', 'on');
self.$inputFilter.on('keyup', function (event) {
text = $(this).val();
event.stopImmediatePropagation();
clearTimeout(self.timeout);
if (text.length > 2 && firstComplete){
self.timeout = setTimeout(function () {
getRequest({'term':text, 'form':form}, self.opt.autoCompleteUrl, requestHandler);
firstComplete = false;
}, 1000);
}else if(text.length == 0 && !firstComplete){
if(self.$inputFilter.hasClass('ui-autocomplete-input')){
@ -1604,17 +1611,24 @@ if (EXPO.searchBlock){
}
};
// var newData = ['banan','banan2','banan3','banan4','banan5'];
/**
* the ID value of the timer that is set
*/
self.timeout;
self.$inputFilter.attr('autocomplete', 'on');
self.$inputFilter.on('keyup', function (event) {
text = $(this).val();
event.stopImmediatePropagation();
clearTimeout(self.timeout);
if (text.length > 2 && firstComplete){
self.timeout = setTimeout(function () {
getRequest({'term':text, 'form':form}, self.opt.autoCompleteUrl, requestHandler);
firstComplete = false;
}, 1000);
}else if(text.length == 0 && !firstComplete){
if(self.$inputFilter.hasClass('ui-autocomplete-input')){
@ -1996,14 +2010,20 @@ if (EXPO.searchBlock){
}
}
};
this.completeName = 'autocomplete',
this.completeName = 'autocomplete';
this.firstComplete = true;
this.$field.attr('autocomplete','off');
/**
* the ID value of the timer that is set
*/
this.timeout;
//autocomplete behaviour
self.$field.on('keyup', function (event) {
var reqObj;
text = $(this).val();
event.stopImmediatePropagation();
clearTimeout(self.timeout);
if(self.dataForm){
reqObj = {
'term':text,
@ -2016,6 +2036,7 @@ if (EXPO.searchBlock){
}
if(self.opt.anyChar){
if (text.length > 2){
self.timeout = setTimeout(function () {
getRequest(reqObj, self.opt.autoCompleteUrl, function (data) {
if(self.$field.hasClass('ui-autocomplete-input')){
self.$field[self.completeName]( "destroy" );
@ -2025,6 +2046,8 @@ if (EXPO.searchBlock){
self._initAutoComplete();
self.showList('');
});
}, 1000);
} else if(text.length === 0){
if(self.$field.hasClass('ui-autocomplete-input')){
self.$field[self.completeName]( "destroy" );
@ -2034,14 +2057,15 @@ if (EXPO.searchBlock){
}
}else{
if (text.length > 2 && firstComplete){
self.timeout = setTimeout(function () {
getRequest(reqObj, self.opt.autoCompleteUrl, function (data) {
self.rawData.set(data);
self._initAutoComplete();
self.showList('');
// self.DOMcompleteWrap.addClass('full-visible');
});
firstComplete = false;
}, 1000);
}else if(text.length == 0 && !firstComplete){
if(self.$field.hasClass('ui-autocomplete-input')){

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save