diff --git a/archilance/management/commands/generate_portfolios.py b/archilance/management/commands/generate_portfolios.py
index c50b957..0cf8efa 100644
--- a/archilance/management/commands/generate_portfolios.py
+++ b/archilance/management/commands/generate_portfolios.py
@@ -38,7 +38,7 @@ class Command(BaseCommand):
def create_portfolio(i):
portf = Portfolio(
name='Portforlio %s' % i,
- description="Portforlio %s's description" % i,
+ description=util.lorem(_.random(5, 30)),
budget=util.random_amount(),
currency=_.sample(CURRENCIES)[0],
term=_.random(0, 20),
diff --git a/archilance/management/commands/generate_projects.py b/archilance/management/commands/generate_projects.py
index 7ff5779..4ef30fe 100644
--- a/archilance/management/commands/generate_projects.py
+++ b/archilance/management/commands/generate_projects.py
@@ -63,7 +63,7 @@ class Command(BaseCommand):
deal_type=_.sample(Project.DEAL_TYPES)[0],
term=_.random(0, 20),
term_type=_.sample(TERMS)[0],
- text='Project %s text' % i,
+ text=util.lorem(_.random(5, 30)),
work_type=_.sample(Project.WORK_TYPES)[0],
state='active',
)
diff --git a/archilance/management/commands/generate_reviews.py b/archilance/management/commands/generate_reviews.py
index 649a162..98f8a94 100644
--- a/archilance/management/commands/generate_reviews.py
+++ b/archilance/management/commands/generate_reviews.py
@@ -23,7 +23,7 @@ class Command(BaseCommand):
review.project = Project.objects.order_by('?').first()
review.stars = _.random(1, 5)
- review.text = 'This is a review %s text' % i
+ review.text = util.lorem()
review.is_secured = _.sample((True, False))
review.save()
diff --git a/archilance/management/commands/generate_users.py b/archilance/management/commands/generate_users.py
index e46aac1..5940f83 100644
--- a/archilance/management/commands/generate_users.py
+++ b/archilance/management/commands/generate_users.py
@@ -79,7 +79,9 @@ class Command(BaseCommand):
username = 'user-%s' % i
return User.objects.create(
- first_name='User-%s' % i,
+ first_name='Василий',
+ last_name='Пупкин',
+ patronym='Иванович',
username=username,
email='%s@example.com' % username,
is_active=True,
diff --git a/archilance/util.py b/archilance/util.py
index c96141b..adbd3a1 100644
--- a/archilance/util.py
+++ b/archilance/util.py
@@ -1,5 +1,7 @@
+from django.shortcuts import _get_queryset
from django.utils import timezone
from pprint import pprint, pformat
+import natsort
import pydash as _; _.map = _.map_; _.filter = _.filter_
import random
@@ -41,14 +43,31 @@ def random_amount():
return random.random() * random.choice((100, 1000, 10000))
+def get_or_none(klass, *args, **kwargs):
+ queryset = _get_queryset(klass)
+
+ try:
+ return queryset.get(*args, **kwargs)
+ except queryset.model.DoesNotExist:
+ return None
+
+
+def get_attr_or_none(klass, *args, attr=None, **kwargs):
+ object = get_or_none(klass, *args, **kwargs)
+
+ if object and attr and isinstance(attr, str):
+ return getattr(object, attr, None)
+
+
def model_fields(model, width=200):
+ fields = natsort.natsorted(model._meta.get_fields(), key=lambda f: f.name)
+
pprint([(
f.name,
'Relation? %s' % f.is_relation,
'Null? %s' % f.null,
'Blank? %s' % f.blank if not f.is_relation else '(relation)',
- 'Hidden? %s' % (f.is_hidden() if hasattr(f, 'is_hidden') else False),
- ) for f in model._meta.get_fields(include_hidden=True)], width=width)
+ ) for f in fields], width=width)
def lorem(sentences=5):
diff --git a/common/utils.py b/common/utils.py
deleted file mode 100644
index 4a75d6a..0000000
--- a/common/utils.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.shortcuts import _get_queryset
-
-def get_or_none(klass, *args, **kwargs):
- queryset = _get_queryset(klass)
-
- try:
- return queryset.get(*args, **kwargs)
- except queryset.model.DoesNotExist:
- return None
diff --git a/projects/migrations/0004_auto_20160726_1931.py b/projects/migrations/0004_auto_20160726_1931.py
new file mode 100644
index 0000000..d703839
--- /dev/null
+++ b/projects/migrations/0004_auto_20160726_1931.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-07-26 16:31
+from __future__ import unicode_literals
+
+import datetime
+from django.db import migrations, models
+from django.utils.timezone import utc
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('projects', '0003_auto_20160725_1606'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='stage',
+ options={'ordering': ['pos'], 'verbose_name': 'Этап', 'verbose_name_plural': 'Этапы'},
+ ),
+ migrations.AlterField(
+ model_name='stage',
+ name='created',
+ field=models.DateTimeField(default=datetime.datetime(2016, 7, 26, 16, 31, 5, 738741, tzinfo=utc)),
+ ),
+ ]
diff --git a/projects/templates/customer_project_detail.html b/projects/templates/customer_project_detail.html
index 3906342..481dce8 100644
--- a/projects/templates/customer_project_detail.html
+++ b/projects/templates/customer_project_detail.html
@@ -201,6 +201,7 @@
{% endfor %}
+
{% include 'partials/pagination.html' %}
diff --git a/projects/templates/project_detail.html b/projects/templates/project_detail.html
index 695dfad..04f3f27 100644
--- a/projects/templates/project_detail.html
+++ b/projects/templates/project_detail.html
@@ -242,6 +242,7 @@
{% endfor %}
+
{% include 'partials/pagination.html' %}
diff --git a/projects/templates/project_filter.html b/projects/templates/project_filter.html
index f8231f2..2443d41 100644
--- a/projects/templates/project_filter.html
+++ b/projects/templates/project_filter.html
@@ -166,85 +166,78 @@
-
-
-
-
-
-
-
-
- {% for proj in projects %}
-
-
-
- {{ proj }}
-
-
- -
- Объект "{{ proj.realty.name }}"
-
- -
- 0 ответ от имени группы
-
-
-
{{ proj.text }}
-
- {% if TEMPLATE_DEBUG %}
-
{{ proj|inspect }}
Specialization: {{ proj.specialization }}
Realty location: {{ proj.realty.location }}
Constr. type: {{ proj.realty.construction_type }}
Build. classif.: {{ proj.realty.building_classification }}
+
+
+
+
+
+
+ {% for proj in projects %}
+
+
+
+ {{ proj }}
+
+
+ -
+ Объект "{{ proj.realty.name }}"
+
+ -
+ 0 ответ от имени группы
+
+
+
{{ proj.text }}
+
+ {% if TEMPLATE_DEBUG %}
+
{{ proj|inspect }}
Specialization: {{ proj.specialization }}
Realty location: {{ proj.realty.location }}
Constr. type: {{ proj.realty.construction_type }}
Build. classif.: {{ proj.realty.building_classification }}
+ {% endif %}
+
+
+ - {{ proj.created }}
+ - 0
+ - {{ proj.answers.count }}
+ - {{ proj.user }}
+
+
+
+
+ {{ proj.budget }}
+
+
+ {% if proj.secure_deal %}
+ - Безопасная сделка
{% endif %}
-
-
- - {{ proj.created }}
- - 0
- - {{ proj.answers.count }}
- - {{ proj.user }}
-
-
-
-
- {{ proj.budget }}
-
-
- {% if proj.secure_deal %}
- - Безопасная сделка
- {% endif %}
-
- -
- Стадия: "П"
-
-
- -
- Отказаться и переместить
- в корзину
-
-
-
+
+
+ Стадия: "П"
+
+
+
+ Отказаться и переместить
+ в корзину
+
+
- {% endfor %}
-
-
-
-
-
-
- {% include 'partials/pagination.html' %}
-
-
-
-
-
-
+
+ {% endfor %}
+
+
+
+
+ {% include 'partials/pagination.html' %}
+
+
+
{% include 'partials/footer.html' %}
diff --git a/specializations/templatetags/specializtions_tags.py b/specializations/templatetags/specializtions_tags.py
index 8e6579a..8f067c9 100644
--- a/specializations/templatetags/specializtions_tags.py
+++ b/specializations/templatetags/specializtions_tags.py
@@ -1,13 +1,15 @@
from django import template
-from common.utils import get_or_none
+
+from archilance import util
from users.models import User
+
register = template.Library()
@register.inclusion_tag('templatetags/specializations_widget.html', takes_context=True)
def specialization_widget(context, user_id):
user_id = int(user_id)
- user = get_or_none(User, pk=user_id)
+ user = util.get_or_none(User, pk=user_id)
if user:
specializations = user.contractor_specializations.all()
else:
diff --git a/templates/home.html b/templates/home.html
index de9778e..bc6c7a9 100644
--- a/templates/home.html
+++ b/templates/home.html
@@ -6,14 +6,7 @@
{% include 'partials/header.html' %}
-{# {% url "password_reset_recover" %}#}
Основная задача сайта
-
-
- Authed? {{ request.user.is_authenticated }}
- {{ request.user }} ({{ request.user.pk }})
- {{ request.user.groups.all }}
-
diff --git a/templates/partials/base.html b/templates/partials/base.html
index 0d72d28..09ff0fb 100644
--- a/templates/partials/base.html
+++ b/templates/partials/base.html
@@ -31,10 +31,19 @@
{% if messages %}
{% for message in messages %}
- {{ message | safe }}
+ {{ message|safe }}
{% endfor %}
{% endif %}
+
+ {{ request.user }}
+
+ {% if request.user.is_authenticated %}
+ PK: {{ request.user.pk }}
+ Groups: {{ request.user.groups.all }}
+ {% endif %}
+
+
{% block content %}{% endblock %}
@@ -50,6 +59,7 @@
+
diff --git a/templates/partials/pagination.html b/templates/partials/pagination.html
index bf07867..db632a0 100644
--- a/templates/partials/pagination.html
+++ b/templates/partials/pagination.html
@@ -1,29 +1,51 @@
{% if is_paginated %}
+
+
{% endif %}
diff --git a/users/admin.py b/users/admin.py
index 1d81876..1890f01 100644
--- a/users/admin.py
+++ b/users/admin.py
@@ -1,6 +1,6 @@
from django.contrib import admin
-from .models import User, Team, ContractorFinancialInfo, ContractorResume, ContractorResumeFiles
+from .models import User, Team, UserFinancialInfo, ContractorResume, ContractorResumeFiles
class UserAdmin(admin.ModelAdmin):
@@ -11,7 +11,7 @@ class UserAdmin(admin.ModelAdmin):
return ', '.join(g.name for g in obj.groups.all())
admin.site.register(User, UserAdmin)
-admin.site.register(ContractorFinancialInfo)
+admin.site.register(UserFinancialInfo)
admin.site.register(Team)
admin.site.register(ContractorResume)
admin.site.register(ContractorResumeFiles)
diff --git a/users/forms.py b/users/forms.py
index cf3b0ec..7a4f24b 100644
--- a/users/forms.py
+++ b/users/forms.py
@@ -1,10 +1,11 @@
from django import forms
from django.forms import ModelForm
import itertools
+import pydash as _; _.map = _.map_; _.filter = _.filter_
-from .models import User, ContractorFinancialInfo
+from .models import User, UserFinancialInfo
from common.models import Location
-from projects.models import Project, BuildingClassfication, ConstructionType
+from projects.models import Project, Realty, BuildingClassfication, ConstructionType
from specializations.models import Specialization
@@ -110,7 +111,27 @@ class ContractorFilterForm(forms.Form):
super().__init__(*args, **kwargs)
-class ContractorFinancicalInfoForm(ModelForm):
+class CustomerProfileProjectRealtyForm(forms.Form):
+ def __init__(self, *args, **kwargs):
+ self.request = kwargs.pop('request')
+ self.customer = kwargs.pop('customer')
+
+ super().__init__(*args, **kwargs)
+
+ realties = _.uniq(tuple(p.realty for p in self.customer.projects.all()))
+
+ self.fields['realty'] = forms.ChoiceField(
+ widget=forms.Select(attrs={
+ 'class': 'selectpicker',
+ 'onchange': "$(this).closest('form').submit()",
+ }),
+
+ choices=(('', 'Все объекты'),) + tuple((r.pk, r.name) for r in realties),
+ required=False,
+ )
+
+
+class UserFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:]
@@ -120,7 +141,7 @@ class ContractorFinancicalInfoForm(ModelForm):
# self.fields['residency'].widget.choices = self.fields['residency'].choices
class Meta:
- model = ContractorFinancialInfo
+ model = UserFinancialInfo
fields = (
'fio',
diff --git a/users/migrations/0003_auto_20160726_1931.py b/users/migrations/0003_auto_20160726_1931.py
new file mode 100644
index 0000000..6ee662f
--- /dev/null
+++ b/users/migrations/0003_auto_20160726_1931.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-07-26 16:31
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('users', '0002_auto_20160725_1605'),
+ ]
+
+ operations = [
+ migrations.RenameModel(
+ old_name='ContractorFinancialInfo',
+ new_name='UserFinancialInfo',
+ ),
+ migrations.RemoveField(
+ model_name='user',
+ name='contractor_financial_info',
+ ),
+ migrations.AddField(
+ model_name='user',
+ name='financial_info',
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user', to='users.UserFinancialInfo'),
+ ),
+ ]
diff --git a/users/mixins.py b/users/mixins.py
index d31cc8f..6bf0e1b 100644
--- a/users/mixins.py
+++ b/users/mixins.py
@@ -3,7 +3,6 @@ from django.contrib import messages
class CheckForUserMixin(object):
-
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
pk = kwargs.get('pk')
diff --git a/users/models.py b/users/models.py
index 25e071f..3a819db 100644
--- a/users/models.py
+++ b/users/models.py
@@ -41,7 +41,7 @@ class CustomerUserManager(models.Manager):
return super().get_queryset().filter(groups__name='Заказчики')
-class ContractorFinancialInfo(models.Model):
+class UserFinancialInfo(models.Model):
RESIDENCIES = (
('russian_resident', 'Резидент РФ'),
('non_russian_resident', 'Нерезидент РФ'),
@@ -117,7 +117,6 @@ class User(AbstractBaseUser, PermissionsMixin):
)
avatar = models.ImageField(upload_to='users/avatars/', blank=True)
- contractor_financial_info = models.OneToOneField(ContractorFinancialInfo, related_name='contractor', blank=True, null=True)
contractor_resume = models.OneToOneField(ContractorResume, related_name='contractor', blank=True, null=True)
contractor_specializations = TreeManyToManyField(Specialization, related_name='contractors', blank=True)
contractor_status = models.CharField(default='free', max_length=20, choices=STATUSES)
@@ -126,6 +125,7 @@ class User(AbstractBaseUser, PermissionsMixin):
date_joined = models.DateTimeField(default=timezone.now)
date_of_birth = models.DateTimeField(null=True, blank=True)
email = models.EmailField(max_length=255, unique=True, db_index=True)
+ financial_info = models.OneToOneField(UserFinancialInfo, related_name='user', blank=True, null=True)
first_name = models.CharField(max_length=255, blank=True)
gender = models.CharField(max_length=30, choices=GENDERS, blank=True)
is_active = models.BooleanField(default=True)
diff --git a/users/templates/contractor_filter.html b/users/templates/contractor_filter.html
index 0eded61..9ec79b4 100644
--- a/users/templates/contractor_filter.html
+++ b/users/templates/contractor_filter.html
@@ -163,281 +163,281 @@
-
-
-
- {% for obj in coll %}
- {% if obj|class_name == 'Team' %}
- {% with team=obj %}
-
-
-
-

-
-
- {{ team.name }}
+
+
+
+
+ {% for obj in coll %}
+ {% if obj|class_name == 'Team' %}
+ {% with team=obj %}
+
+
+
+
+
+
+
+
+
+
+ Специализации:
-
На сайте 8 лет и 3 месяца
-
Свободен
-
-
-
-
-
-
-
-
-
- Специализации:
-
-
- Интерьеры
- 2-й
-
+
+ Интерьеры
+ 2-й
+
+
+ Визуализация/3D
+ 45-й
+
+
+ Экстерьеры
+ 10-й
+
+
- Визуализация/3D
- 45-й
+ Архитектура
+ 3-й
- Экстерьеры
- 10-й
-
-
-
- Архитектура
- 3-й
-
-
- 3D Моделирование
- 100-й
-
+
3D Моделирование
+
100-й
-
+
-
-
-
+
+
+
+
+
-
-
-
-{# {% if TEMPLATE_DEBUG %}#}
-{#
#}
-{#
######## Team owner #########
Specializations: {{ team.owner.contractor_specializations.all }}
Location: {{ team.owner.location }}
Build. classif-s: {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}
Constr. types: {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}
CRO: {{ team.owner.cro }}
Work types: {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}
######## Team users #########
Specializations: {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}
Location: {% for u in team.users.all %}{{ u.location }}, {% endfor %}
Build. classif-s: {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}
Constr. types: {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}
CRO: {% for u in team.users.all %}{{ u.cro }}, {% endfor %}
Work types: {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}
#}
-{#
#}
-{# {% endif %}#}
-
-
- {% for portf in team.portfolios.all|slice:':4' %}
-
- {% endfor %}
+
+
+
+ {% if TEMPLATE_DEBUG %}
+
+
######## Team owner #########
Specializations: {{ team.owner.contractor_specializations.all }}
Location: {{ team.owner.location }}
Build. classif-s: {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}
Constr. types: {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}
CRO: {{ team.owner.cro }}
Work types: {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}
######## Team users #########
Specializations: {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}
Location: {% for u in team.users.all %}{{ u.location }}, {% endfor %}
Build. classif-s: {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}
Constr. types: {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}
CRO: {% for u in team.users.all %}{{ u.cro }}, {% endfor %}
Work types: {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}
+ {% endif %}
+
+
+
+ {% for portf in team.portfolios.all|slice:':4' %}
+
+ {% endfor %}
- {% endwith %}
- {% elif obj|class_name == 'User' %}
- {% with contractor=obj %}
-
-
+ {% endwith %}
+ {% elif obj|class_name == 'User' %}
+ {% with contractor=obj %}
+
+
+
+
+
+
+
+
+
+
+ Специализации:
-
На сайте 8 лет и 3 месяца
-
Свободен
-
-
-
-
-
-
-
-
-
- Специализации:
-
-
- Интерьеры
- 2-й
-
+
+ Интерьеры
+ 2-й
+
+
+ Визуализация/3D
+ 45-й
+
+
+ Экстерьеры
+ 10-й
+
+
- Визуализация/3D
- 45-й
+ Архитектура
+ 3-й
- Экстерьеры
- 10-й
-
-
-
- Архитектура
- 3-й
-
-
- 3D Моделирование
- 100-й
-
+
3D Моделирование
+
100-й
-
+
-
-
-
+
+
+
+
+
-
-
-{# {% if TEMPLATE_DEBUG %}#}
-{#
#}
-{#
Specializations: {{ contractor.contractor_specializations.all }}
Location: {{ contractor.location }}
Build. classif-s: {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}
Constr. types: {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}
CRO: {{ contractor.cro }}
Work types: {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}
#}
-{#
#}
-{# {% endif %}#}
-
-
- {% for portf in contractor.portfolios.all|slice:':4' %}
-
- {% endfor %}
+
+
+
+ {% if TEMPLATE_DEBUG %}
+
+
Specializations: {{ contractor.contractor_specializations.all }}
Location: {{ contractor.location }}
Build. classif-s: {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}
Constr. types: {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}
CRO: {{ contractor.cro }}
Work types: {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}
+ {% endif %}
+
+
+ {% for portf in contractor.portfolios.all|slice:':4' %}
+
+ {% endfor %}
- {% endwith %}
- {% endif %}
- {% endfor %}
-
-
-
- {% include 'partials/pagination.html' %}
-
-
+
+ {% endwith %}
+ {% endif %}
+ {% endfor %}
+
+
+
+ {% include 'partials/pagination.html' %}
+
{% include 'partials/footer.html' %}
diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html
index 606a110..ac27bd8 100644
--- a/users/templates/contractor_profile.html
+++ b/users/templates/contractor_profile.html
@@ -1,6 +1,7 @@
{% extends 'partials/base.html' %}
-{% load staticfiles %}
+{% load projects_tags %}
+{% load specializtions_tags %}
{% load thumbnail %}
@@ -70,7 +71,7 @@
- {{ contractor.get_full_name }}[{{ contractor.username }}]
+ {{ contractor.get_full_name }} [{{ contractor.username }}]
Россия, Москва
На сайте 8 лет и 3 месяца
@@ -80,11 +81,9 @@
показать контакты
- {% load specializtions_tags %}
{% specialization_widget contractor.pk %}
- {% load projects_tags %}
{% ratings_widget contractor.pk %}
{% if contractor.cro %}
diff --git a/users/templates/contractor_profile_edit.html b/users/templates/contractor_profile_edit.html
index 2d733c7..197d047 100644
--- a/users/templates/contractor_profile_edit.html
+++ b/users/templates/contractor_profile_edit.html
@@ -15,19 +15,19 @@
{% load mptt_tags %}
{{ form.errors }}
-
-
-
-

-
-
-
-
+
+
+
+

+
+
+
+
ФИО:
diff --git a/users/templates/customer_profile_edit.html b/users/templates/customer_profile_edit.html
index 0432434..effa6ff 100644
--- a/users/templates/customer_profile_edit.html
+++ b/users/templates/customer_profile_edit.html
@@ -1,113 +1,126 @@
{% extends 'partials/base.html' %}
-{% load staticfiles %}
{% load thumbnail %}
{% block content %}
-{% include 'partials/header.html' %}
+ {% include 'partials/header.html' %}
+
-
- {% include 'partials/footer.html' %}
+
+ {% include 'partials/footer.html' %}
{% endblock %}
+
+
{% block js_block %}
-