remotes/origin/artem
Gena 11 years ago
parent 2449302508
commit 51f7dc55e8
  1. 2
      batiskaf/settings.py
  2. 66
      batiskaf/templates/jinja2/advantages.jinja
  3. 50
      batiskaf/templates/jinja2/base.jinja
  4. 10
      batiskaf/templates/jinja2/cart_detail.jinja
  5. 67
      batiskaf/templates/jinja2/category.jinja
  6. 12
      batiskaf/templates/jinja2/contacts.jinja
  7. 24
      batiskaf/templates/jinja2/delivery.jinja
  8. 12
      batiskaf/templates/jinja2/faq.jinja
  9. 109
      batiskaf/templates/jinja2/includes/category_filter.jinja
  10. 9
      batiskaf/templates/jinja2/order_ok.jinja
  11. 26
      batiskaf/templates/jinja2/payment.jinja
  12. 4
      batiskaf/templates/jinja2/product.jinja
  13. 6
      batiskaf/urls.py
  14. 17
      main/views.py
  15. 1
      static/css/select2.min.css
  16. 39
      static/js/_.js
  17. 2
      static/js/select2.min.js
  18. 14
      static/less/_.css
  19. 13
      static/less/_.less
  20. 9
      store/cart.py
  21. 6
      store/models.py
  22. 3
      store/urls.py
  23. 20
      store/views.py

@ -42,7 +42,7 @@ MESSAGE_TAGS = {
AUTH_USER_MODEL = 'accounts.Profile'
#LOGIN_URL = '/account/login/'
LOGIN_URL = '/account/login/'
LOGOUT_URL = '/account/logout/'

@ -0,0 +1,66 @@
{% extends 'base.jinja' %}
{% block content %}
<h3>10 причин, по которым стоит обратить внимание на наш интернет-магазин "Батискаф - Казахстан"</h3>
<br/>
<div class="well well-large">
<ol>
<li>
Вы получаете доступ к <a href="/store/search/?q=">огромному ассортименту товаров</a> для подводной охоты
и дайвинга, а также сопутствующих товаров этого направления.
</li>
<li>
В нашем магазине вас ждут доступные цены и широкий ассортимент товара наилучшего качества.
</li>
<li>
Наш интернет–магазин является официальным дилером таких торговых марок, как <a href="http://beuchat.kz">Beuchat</a>
и
<a href="http://www.scorpena.ru">Scorpena</a>.
</li>
<li>
Вы получаете <a href="/delivery/">удобнейший сервис по доставке</a> вашего заказа (от нашего склада до
ваших дверей), предоставленный ведущей транспортной компанией в Казахстане (<a
href="http://www.alemtat.kz">Алем-Тат</a>).
</li>
<li>
В вашем распоряжении <a href="/payment/">различные варианты для оформления оплаты</a> вашего заказа.
Оплата карточками Visa и Master Card, банковский платеж в любом банке на территории РК, оплата
наложенным платежом курьеру.
</li>
<li>
Вы всегда можете получить (в рабочие часы с 10:00 до 19:00 кроме воскресенья) <a href="/contacts/">онлайн
консультацию наших специалистов</a>, сделав звонок на
<a href="skype:batiskaf_kz?chat">Skype</a>, или просто набрав один из телефонов указанных в разделе
<a href="/contacts/">Контакты</a>. Специалисты нашего магазина имеют квалификацию Подводного Охотника,
присвоенную Федерацией Подводного спорта РФ.
Все наши специалисты прошли курс Подводного охотника, утверждённый федерацией Подводного Спорта РФ,
руководителем проекта
<a href="/">Батискаф Казахстан</a> является <a
href="http://www.ruf.ru/instruktoryi-po-podvodnoy-ohote.html">действующий инструктор по подводной
охоте, Федерации Подводного Спорта России Полинкин Матвей Владимирович</a>.
</li>
<li>
Если же вы посетили наш сайт в нерабочие часы, вы просто оставляете заявку на звонок с указанием
времени, в которое вам было бы удобнее всего принять наш звонок. Наши менеджеры свяжутся с вами, и вы
сможете получить информацию по интересующему вас вопросу.
</li>
<li>
При каждом изменении статуса вашего заказа вы будете получать уведомление от нашего интернет-магазина.
</li>
<li>
Оформив подписку на нашем сайте вы будете получать самую свежую информацию о всех обновлениях, которые
будут происходить на нашем сайте, а это – появление нового товара во всех категориях, самые свежие
новости о проводимых нами акциях и мероприятиях.
</li>
<li>
Наш магазин работает в тесном взаимодействии с самым продвинутым Казахстанским Клубом подводной охоты и
дайвинга "<a href="http://garpun.kz">Гарпун</a>", который постоянно проводит тесты снаряжения и оборудования для подводной охоты и
дайвинга, а также является организатором и вдохновителем проектов по продвижению Подводной Охоты на
территории РК,таких как фестиваль <a href="http://beuchat.kz/beuchat-fest-2014/registration/">Beuchat Fest Казахстан (2014 год)</a>, получивший статус ежегодного, также
отмеченный неоднократными статьями в самом популярном журнале подводных охотников "<a
href="http://podvoh.ru">Мир Подводной Охоты</a>".
</li>
</ol>
</div>
{% endblock %}

@ -12,7 +12,8 @@
<link href="/static/bower_components/Bootflat/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/bower_components/Bootflat/bootflat/css/bootflat.min.css" rel="stylesheet">
<link href="/static/less/_.css?v=6" rel="stylesheet">
<link href="/static/less/_.css?v=7" rel="stylesheet">
<link href="/static/css/select2.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/static/bower_components/sweetalert/lib/sweet-alert.css">
<link href="/static/js/icheck/skins/square/blue.css" rel="stylesheet">
{% block stylesheet %}{% endblock stylesheet %}
@ -66,8 +67,8 @@
<div class="container">
<div class="top-left-links"><a href="#">Оплата</a> | <a href="#">Доставка</a> | <a href="#">Помощь</a> | <a
href="#">Контакты</a></div>
<div class="top-left-links"><a href="/payment/">Оплата</a> | <a href="/delivery/">Доставка</a> | <a href="/advantages/">Преимущества</a> | <a
href="/contacts/">Контакты</a></div>
<div class="top-right-links"><span class="yellow">+7 (777) 163-14-34</span> |
<span class="yellow">+7 (775) 859-12-17</span> |
<a href="mailto:admin@batiskaf-kz.kz">Написать нам</a> | <a href="skype:batiskaf_kz?chat"><img
@ -84,13 +85,13 @@
<a href="/"><img src="/static/img/logo.png" alt="" width="457" height="104"/></a>
</div>
<div class="quick-access-container">
<form action="">
<input type="text" placeholder="Что ищем?"/>
<form action="/store/search/" method="get">
<input type="text" placeholder="Что ищем?" name="q" value="{{ request.GET['q']|default('') }}"/>
<button type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button>
</form>
<p class="small-welcome">Добро пожаловать в интернет-магазин Батискаф!</p>
<p class="quick-links"><a href="#">Мой аккаунт</a> | <a href="#">Новости</a> | <a href="/store/cart/">Моя
<p class="quick-links"><a href="#">Мой аккаунт</a> | <a href="/news/">Новости</a> | <a href="/store/cart/">Моя
корзина {% if (request|cart).items|length > 0 %}
<span class="label label-success">{{ (request|cart).items|length }}</span>{% endif %}</a> | <a
href="#">Оформление заказа</a> | <a href="#">Войти</a></p>
@ -305,16 +306,13 @@
<div class="row">
<div class="col-xs-6">
<a href="#">Сеть Батискаф</a><br/>
<a href="#">Магазины</a><br/>
<a href="#">Наши бренды</a><br/>
<a href="#">Новости</a><br/>
<a href="/news/">Новости</a><br/>
<a href="/faq/">FAQ</a><br/>
<a href="/contacts/">Контакты</a><br/>
</div>
<div class="col-xs-6">
<a href="#">Контакты</a><br/>
<a href="#">Обратная связь</a><br/>
<a href="#">Журнал</a><br/>
<a href="#">Франчайзинг</a><br/>
</div>
</div>
@ -324,15 +322,11 @@
<div class="row">
<div class="col-xs-6">
<a href="#">Доставка</a><br/>
<a href="#">Оплата</a><br/>
<a href="#">Система скидок</a><br/>
<a href="/delivery/">Доставка</a><br/>
<a href="/payment/">Оплата</a><br/>
<a href="/advantages/">Преимущества</a><br/>
</div>
<div class="col-xs-6">
<a href="#">Сервис</a><br/>
<a href="#">Возврат и возмещение</a><br/>
<a href="#">Правила и условия</a><br/>
<a href="#">Помощь</a><br/>
</div>
</div>
@ -342,7 +336,7 @@
<span class="title">МЫ В ИНТЕРНЕТЕ</span><br/><br/>
<div class="row">
Кнопочки социалок
в процессе добавления...
</div>
</div>
@ -358,12 +352,11 @@
<p>
<a href="#">Карта сайта</a> <a href="#">Поисковые запросы</a> <a href="#">Advanced Search</a> <a
href="#">Contact Us</a> <a href="#">RSS</a>
</p><br/>
</p><br/> <br/><br/>
<p class="lead">
Все права защищены 2015 © компанией Батискаф-Казахстан <br/>
<p>
Все права защищены 2001-2014 © компанией Батискаф <br/>
ООО "Батискаф” ИНН 7801565397 ОГРН 1127847046964 от 23.01.2012г. <br/>
Юрид.адрес: 199155 г.Санкт-Петербург Морская наб. д.33 лит.А пом.13Н
</p>
</div>
</div>
@ -386,7 +379,8 @@
<script src="/static/js/jquery.ba-bbq.min.js"></script>
<script src="/static/js/jquery.elevateZoom-3.0.8.min.js"></script>
<script src="/static/js/Selecter/jquery.fs.selecter.min.js"></script>
<script src="/static/js/_.js?v=3"></script>
<script src="/static/js/select2.min.js"></script>
<script src="/static/js/_.js?v=4"></script>
{% endblock footer_scripts %}
{% block jss %}{% endblock jss %}
{% if messages %}

@ -39,7 +39,7 @@
<a href="{{ item.item.product.get_absolute_url() }}">{{ item.item.product.title }}</a><br/>
<em>{{ item.item.variation }}</em>
</td>
<td class="text-right info">{{ item.item.price }} ₸</td>
<td class="text-right info">{{ item.item.get_price() }} ₸</td>
<td class="text-right"><input type="number" value="{{ item.count }}"
name="{{ item.id }}" class="form-control col-xs-1"/>
@ -57,7 +57,7 @@
<tr>
<th colspan="2" class="text-left"><a href="javascript:history.back()" class="">
&larr; Продолжить покупки</a></th>
<th colspan="3" class="text-right table-cart-itogo">Итого: <span id="cart-itogo">{{ cart.total }}</span> ₸</th>
<th colspan="3" class="text-right table-cart-itogo">Стоимость товара: <span id="cart-itogo">{{ cart.total }}</span> ₸</th>
<th class="text-center">
<button type="submit" class="btn btn-primary"><span
class="glyphicon glyphicon-repeat"></span> Пересчитать
@ -71,16 +71,16 @@
</div>
<div class="order-data">
<div class="row">
<h3 class="">Расчет доставки</h3><br/>
<div class="col-xs-6 col-xs-offset-3">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Расчет доставки</h3>
</div>
<div class="panel-body">
<form action="" class="" method="post"><input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ form|bootstrap }}
<br/>
<div class="order-itogo text-right">
Стоимость доставки: <span id="order-itogo-delivery">0</span> ₸
<br/>
Итого к оплате: <span id="order-itogo-amount">{{ cart.total }}</span> ₸
</div>
<br/>

@ -3,10 +3,15 @@
<div class=" breadcrumbs">
<ol class="breadcrumb breadcrumb-arrow">
<li><a href="/">Главная</a></li>
{% if category %}
{% for parent in category.get_parents() %}
<li><a href="{{ parent.get_absolute_url() }}">{{ parent.title }}</a></li>
{% endfor %}
<li class="active"><span>{{ category.title }}</span></li>
{% else %}
<li class="active"><span>Поиск</span></li>
{% endif %}
</ol>
</div>
<div class="row">
@ -25,6 +30,7 @@
</div>
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9 index-goods category-items">
{% if products %}
<div class="category-paginator">
<div class="category-paginator-top">
<div class="row">
@ -70,6 +76,7 @@
</div>
</div>
</div>
{% endif %}
<div class="row">
{% if products %}
@ -124,6 +131,7 @@
</div>
</div>
{% endfor %}
{% else %}
<div class="alert alert-warning alert-dismissable">
<h4>Список товаров пуст</h4>
@ -131,12 +139,67 @@
<p>Товары в данной категории или с выбранными параметрами отсутствуют. Выберите другую
категорию, либо сбросьте фильтр параметров.</p>
<p><a class="btn btn-warning" href="/">Перейти на главную страницу</a> <a class="btn btn-link"
<p><a class="btn btn-warning" href="/">Перейти на главную страницу</a>
{% if category %}
<a class="btn btn-link"
href="{{ category.get_absolute_url() }}">или
отменить фильтрацию</a></p>
отменить фильтрацию</a>
{% endif %} </p>
</div>
{% endif %}
</div>
{% if products %}
<div class="category-paginator">
<div class="category-paginator-top">
<div class="row">
<div class="col-xs-4">С {{ products.start_index() }} до {{ products.end_index() }}
из {{ products.paginator.count }}</div>
<div class="col-xs-4 text-center paginate">Страница: {% if products.has_previous() %}
<a href="?page={{ products.previous_page_number() }}">&larr;</a>{% endif %}
{% for page in products.paginator.page_range %}
{% if page == products.number %}
{{ page }}
{% else %}
<a href="?page={{ page }}">{{ page }}</a>
{% endif %}
{% endfor %}
{% if products.has_next() %}
<a href="?page={{ products.next_page_number() }}">&rarr;</a>
{% endif %}</div>
<div class="col-xs-4 text-right">Показать
<select name="show-count" id="">
<option value="10">10</option>
<option value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="all">Все</option>
</select>
на странице
</div>
</div>
</div>
<div class="category-paginator-bottom">
<div class="row">
<div class="col-xs-6"></div>
<div class="col-xs-6 text-right">Сортировать по
<select name="products-sort" id="">
<option value="-date">Дате добавления &darr;</option>
<option value="date">Дате добавления &uarr;</option>
<option value="-price">Цене &darr;</option>
<option value="price">Цене &uarr;</option>
</select>
</div>
</div>
</div>
</div>
{% endif %}
</div>
</div>

@ -0,0 +1,12 @@
{% extends 'base.jinja' %}
{% block content %}
<h3>Контакты</h3>
<br/>
<div class="well well-large">
</div>
{% endblock %}

@ -0,0 +1,24 @@
{% extends 'base.jinja' %}
{% block content %}
<h3>Способы Доставки</h3>
<br/>
<div class="well well-large">
<ol>
<li><strong>Экспресс-отправления</strong> - 1-7 дней.</li>
<li><strong>Доставка отправлений не срочного характера</strong> - 6-17 дней.</li>
<li><strong>Доставка по городу</strong>.</li>
 
</ol>
<p>
Ваша посылка доставляется "до двери" при выборе любого способа доставки. Стоимость доставки рассчитывается
автоматически при оформлении заказа. После отправки товара вы получите письмо с номером отслеживания посылки
на сайте компании
<a href="http://www.alemtat.kz">Алем-Тат</a>.
</p>
</div>
{% endblock %}

@ -0,0 +1,12 @@
{% extends 'base.jinja' %}
{% block content %}
<h3>Часто задаваемые вопросы</h3>
<br/>
<div class="well well-large">
</div>
{% endblock %}

@ -1,57 +1,74 @@
{% if category.childs.all() %}
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;Категории</div>
{% if category %}
{% if category.childs.all() %}
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;Категории</div>
<ul class="attr-filter">
{% for child in category.childs.all() %}
<li>
<a href="{{ child.get_absolute_url() }}">{{ child.title }}</a>
</li>
{% endfor %}
</ul>
<hr class="dashed"/>
{% endif %}
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;Производитель</div>
<ul class="attr-filter">
{% for child in category.childs.all() %}
{% for choise in category.brands() %}
<li>
<a href="{{ child.get_absolute_url() }}">{{ child.title }}</a>
<label><input type="checkbox" name="brand[{{ loop.index0 }}]" value="{{ choise.pk }}"
{% if choise.pk.__str__() in request.GET.getlist('brand[]') %}
checked="checked"
{% endif %}
/> {{ choise }}</label>
</li>
{% endfor %}
</ul>
<hr class="dashed"/>
{% endif %}
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;Производитель</div>
<ul class="attr-filter">
{% for choise in category.brands() %}
<li>
<label><input type="checkbox" name="brand[{{ loop.index0 }}]" value="{{ choise.pk }}"
{% if choise.pk.__str__() in request.GET.getlist('brand[]') %}
checked="checked"
{% endif %}
/> {{ choise }}</label>
</li>
{% endfor %}
</ul>
{% for attr in category.attr_cat.all() %}
<hr class="dashed"/>
{% for attr in category.attr_cat.all() %}
<hr class="dashed"/>
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;{{ attr.attribute.title }}</div>
{% if attr.field_type == 'select' %}
<ul class="attr-filter">
{% for choise in attr.choises_array %}
<li>
<label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]"
value="{{ choise }}"
{% if choise in request.GET.getlist('%s[]'|format(attr.attribute.slug)) %}
checked="checked"
{% endif %}/> {{ choise }}</label>
</li>
{% endfor %}
</ul>
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;{{ attr.attribute.title }}</div>
{% if attr.field_type == 'select' %}
<ul class="attr-filter">
{% for choise in attr.choises_array %}
<li>
<label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]"
value="{{ choise }}"
{% if choise in request.GET.getlist('%s[]'|format(attr.attribute.slug)) %}
checked="checked"
{% endif %}/> {{ choise }}</label>
</li>
{% endfor %}
</ul>
{% else %}
<ul class="attr-filter">
{% for value in attr.get_posible_values() %}
<li>
<label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]"
value="{{ value }}"/> {{ value }}</label>
</li>
{#TODO: Сделать разбор по фильтрам для стринга #}
{% endfor %}
</ul>
{% else %}
<ul class="attr-filter">
{% for value in attr.get_posible_values() %}
<li>
<label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]"
value="{{ value }}"/> {{ value }}</label>
</li>
{#TODO: Сделать разбор по фильтрам для стринга #}
{% endfor %}
</ul>
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% else %}
<div class="category-filter-title">&rarr;&nbsp;&nbsp;&nbsp;Производитель</div>
<ul class="attr-filter">
{% for choise in brands %}
<li>
<label><input type="checkbox" name="brand[{{ loop.index0 }}]" value="{{ choise.pk }}"
{% if choise.pk.__str__() in request.GET.getlist('brand[]') %}
checked="checked"
{% endif %}
/> {{ choise }}</label>
</li>
{% endfor %}
</ul>
{% endif %}

@ -8,6 +8,15 @@
<p><a class="btn btn-success" target="_blank" href="/order/{{ order.pk }}/print/">Распечатать квитанцию для оплаты</a></p>
</div>
<div class="well">
<h5>Вы можете отправить прямой платеж на карту:</h5>
<p class="text-center">
<strong>Банк:</strong> Казкоммерцбанк <br/>
<strong>ИИН:</strong> 760419302190 <br/>
<strong>Номер карты:</strong> 4405 6452 0912 2014 <br/><br/>
<i>...либо воспользуйтесь квитанцией для оплаты банковским платежом</i>
</p>
</div>
<div class="well">
<table style="border:1px black solid; width: 100%">
<tr>
<td style="border-bottom:1px black solid; border-right:1px black solid; padding: 20px;">

@ -0,0 +1,26 @@
{% extends 'base.jinja' %}
{% block content %}
<h3>Способы Оплаты</h3>
<br/>
<div class="well well-large">
<ol>
<li><strong>Банковский перевод</strong> - счет для оплаты банковским платежом распечатайте на принтере и оплатите в любом банке РК. Не забывайте, что банк берет комиссию за перевод.</li>
<li><strong>Интернет банкинг</strong> - если у вас есть счет в одном из банков с системой интернет банкинга, вы можете оплатить счет, перечислив деньги со своего счета на наш расчетный счет.</li>
<li><strong>Оплата кредитной картой</strong> - вы можете моментально оплатить покупки с помощью пластиковой карты любого банка.</li>
 </ol>
</div>
<div class="well well-large">
<h5 class="text-left">Реквизиты интернет магазина Батискаф-Казахстан:</h5>
<b>ИИК:</b> KZ809261001507363000 <br/>
<b>РНН/БИН бенефециара:</b> 760419302190 <br/>
<b>Бенефециар:</b> ИП Полинкин Матвей Владимирович <br/>
<b>Банк бенефециара:</b> АО "Казкоммерцбанк" <br/>
<b>БИК:</b> KZKOKZKX <br/>
</div>
{% endblock %}

@ -46,8 +46,8 @@
<select name="product-variations-selecter" class="product-variations-selecter">
{% for variation in product.variations.order_by('price') %}
<option {% if variation.pk == variant.pk %}selected='selected'{% endif %}
value="{{ variation.pk }}" data-price="{{ variation.price }}"
data-count="{{ variation.in_stock }}">{{ variation.variation }} - {{ variation.price }}
value="{{ variation.pk }}" data-price="{{ variation.get_price() }}"
data-count="{{ variation.in_stock }}">{{ variation.variation }} - {{ variation.get_price() }}
</option>
{% endfor %}

@ -1,6 +1,7 @@
from django.conf.urls import patterns, include, url
from django.contrib import admin
from store.views import order_view, order_print
from main.views import *
admin.site.site_header = 'Админка Batiskaf-kz.kz'
admin.site.site_title = 'Админка Batiskaf-kz.kz'
@ -18,5 +19,10 @@ urlpatterns = patterns(
name='store_order_view'),
url(r'^store/', include('store.urls')),
url(r'^account/', include('accounts.urls')),
url(r'^advantages/$', advantages,name='advantages'),
url(r'^payment/$', payment, name='payment'),
url(r'^delivery/$', delivery, name='delivery'),
url(r'^contacts/$', contacts, name='contacts'),
url(r'^faq/$', faq, name='contacfaqts'),
url(r'^admin2517_garpun/', include(admin.site.urls)),
)

@ -9,3 +9,20 @@ def index(request):
)
return render(request, 'index.jinja', c)
def advantages(request):
return render(request, 'advantages.jinja')
def payment(request):
return render(request, 'payment.jinja')
def delivery(request):
return render(request, 'delivery.jinja')
def contacts(request):
return render(request, 'contacts.jinja')
def faq(request):
return render(request, 'faq.jinja')

File diff suppressed because one or more lines are too long

@ -174,6 +174,7 @@ $(document).ready(function () {
var deliv = $('#id_deliv_type').val();
var cart_itogo = $('#cart-itogo').html();
var order_itogo = $('#order-itogo-amount');
var order_itogo_delivery = $('#order-itogo-delivery');
if (city && deliv) {
$.ajax({
@ -189,6 +190,9 @@ $(document).ready(function () {
order_itogo.html(
parseFloat(msg.AmountPlusFSAmount) + parseFloat(cart_itogo)
);
order_itogo_delivery.html(
parseFloat(msg.AmountPlusFSAmount)
);
});
} else {
@ -197,12 +201,35 @@ $(document).ready(function () {
}
$('#id_city').on('change', function() {
selectCity();
});
$('#id_city').select2({
placeholder: "Выберите город",
allowClear: false
}).on('change', function () {
selectCity();
});
$('#id_deliv_type').on('change', function() {
selectCity();
});
$('#id_deliv_type').select2({
placeholder: "Выберите способ доставки",
allowClear: false
}).on('change', function () {
selectCity();
});
//swal({
// title: "Заказать бесплатный звонок",
// text: "Write something interesting:",
// type: "input",
// showCancelButton: true,
// closeOnConfirm: false,
// animation: "slide-from-top",
// inputPlaceholder: "Write something"
//}, function (inputValue) {
// if (inputValue === false) return false;
// if (inputValue === "") {
// swal.showInputError("You need to write something!");
// return false
// }
// swal("Nice!", "You wrote: " + inputValue, "success");
//});
});

File diff suppressed because one or more lines are too long

@ -756,10 +756,10 @@ hr.dashed {
margin-bottom: 15px;
}
.category-paginator {
font-size: 10px;
line-height: 20px;
font-size: 12px;
line-height: 25px;
background: #434a54;
height: 40px;
height: 50px;
color: #ffffff;
margin-bottom: 20px;
border-bottom-right-radius: 4px;
@ -769,7 +769,7 @@ hr.dashed {
}
.category-paginator .category-paginator-top {
padding: 0 10px;
height: 20px;
height: 25px;
border-bottom: 1px #BDC3C7 solid;
}
.category-paginator .category-paginator-bottom {
@ -921,6 +921,10 @@ ul.messages {
.order-data .radio {
margin-left: 15px;
}
#order-itogo-amount {
#order-itogo-amount,
#order-itogo-delivery {
font-size: 20px;
}
.well-large {
padding: 40px;
}

@ -587,17 +587,17 @@ hr.dashed {
}
.category-paginator {
font-size: 10px;
line-height: 20px;
font-size: 12px;
line-height: 25px;
background: @brand-gray;
height: 40px;
height: 50px;
color: @white;
margin-bottom: 20px;
.border-right-radius(4px);
.border-left-radius(4px);
.category-paginator-top {
padding: 0 10px;
height: 20px;
height: 25px;
border-bottom: 1px #BDC3C7 solid;
}
.category-paginator-bottom {
@ -795,6 +795,9 @@ ul.messages {
margin-left: 15px;
}
#order-itogo-amount{
#order-itogo-amount, #order-itogo-delivery{
font-size: 20px;
}
.well-large{
padding: 40px;
}

@ -7,15 +7,18 @@ class CartItem(object):
def __init__(self, item_variant, count, id=None):
self.item = item_variant
self.price = int(item_variant.price)
self.price = int(item_variant.get_price())
self.count = int(count)
self.subtotal = self.price * self.count
self.subtotal = self.get_price() * self.count
if not id:
self.id = str(uuid.uuid4())
else:
self.id = id
def get_price(self):
return self.price
class Cart(object):
items = []
@ -89,7 +92,7 @@ class Cart(object):
if item.count != request_count:
self.total -= item.subtotal
item.count = request_count
item.subtotal = item.price * item.count
item.subtotal = item.get_price() * item.count
self.total += item.subtotal
self.serialize_items()

@ -213,6 +213,12 @@ class ProductVariation(models.Model):
def __str__(self):
return self.variation
def get_price(self):
if self.price > 20000:
return self.price * Decimal('.95')
else:
return self.price * Decimal('.93')
class AttributesInProduct(models.Model):
attribute = models.ForeignKey(

@ -8,6 +8,9 @@ urlpatterns = patterns('',
url(r'^cart/$', CartDetailView.as_view(),
name='store_cart_detail'),
url(r'^search/$', CategoryView.as_view(is_search=True),
name='store_search'),
url(r'^cart/add/$', CartAddView.as_view(
permanent=False), name='store_cart_add'),
url(r'^cart/remove/$', CartRemoveView.as_view(

@ -27,6 +27,8 @@ class CategoryView(CategoryBaseView, TemplateView):
brand_pks = []
products_qs = None
sort = None
is_search = False
ORDER_PARAMETERS = (
('date', 'pk'),
('-date', '-pk'),
@ -51,7 +53,7 @@ class CategoryView(CategoryBaseView, TemplateView):
return sort
def paginate(self):
paginate_by = self.request.GET.get('paginate_by', 10)
paginate_by = self.request.GET.get('paginate_by', 21)
if paginate_by == 'all':
paginate_by = 10000
@ -79,10 +81,19 @@ class CategoryView(CategoryBaseView, TemplateView):
product_attributes__attribute__attribute__in=attr,
product_attributes__value__in=attr_values).distinct()
def get_brands_by_products(self):
pass
def get_context_data(self, **kwargs):
retval = super(CategoryView, self).get_context_data()
self.category = self._get_full_category(kwargs['categories'])
self.products_qs = self.category.get_all_products().order_by('-pk')
q = None
if not self.is_search:
self.category = self._get_full_category(kwargs['categories'])
self.products_qs = self.category.get_all_products().order_by('-pk')
else:
q = self.request.GET.get('q', '')
self.products_qs = Product.objects.filter(title__icontains=q).order_by('-pk')
retval['brands'] = list(set(map(lambda item: item.brand, self.products_qs)))
self.brand_pks = self._get_brand_pks()
self.sort = self._get_sort()
@ -110,9 +121,12 @@ class CategoryView(CategoryBaseView, TemplateView):
self.paginate()
retval['category'] = self.category
retval['products'] = self.products_qs
retval['q'] = q
return retval
class ProductView(CategoryBaseView, DetailView):
model = Product
template_name = 'product.jinja'

Loading…
Cancel
Save