remotes/origin/artem
Gena 11 years ago
parent fad441d3ac
commit d63fb74ac8
  1. 1
      .gitignore
  2. 10
      api/urls.py
  3. 32
      api/views.py
  4. 5
      batiskaf/settings.py
  5. 219
      batiskaf/templates/jinja2/base.jinja
  6. 11
      batiskaf/urls.py
  7. 1
      main/backends/__init__.py
  8. 13
      main/backends/email_backends.py
  9. 72
      static/js/_.js
  10. 8
      static/less/_.css
  11. 11
      static/less/_.less

1
.gitignore vendored

@ -1,6 +1,7 @@
*.pyc
*.pyo
.idea
.tmp
*.sublime-project
*.sublime-workspace
*.db

@ -1,15 +1,5 @@
from django.conf.urls import url, include
from .views import *
from rest_framework import routers
# Serializers define the API representation.
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'cart', CartViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
]

@ -1,12 +1,22 @@
from rest_framework import serializers, viewsets
class CartSerializer(serializers.Serializer):
session = serializers.CharField(max_length=500)
items = serializers.CharField(max_length=500)
class CartViewSet(viewsets.ViewSet):
serializer_class = CartSerializer
from django.core.mail import mail_managers
from django.http import JsonResponse
from rest_framework.response import Response
from rest_framework.decorators import api_view
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def call_order(request):
retval = dict(error=False)
try:
mail_managers('Заказали звонок', '''
Имя: {}
Телефон: {}
Время: {}
'''.format(
request.POST['name'],
request.POST['phone'],
request.POST['time'],
))
except Exception as e:
retval = dict(error=True)
return JsonResponse(retval)

@ -19,7 +19,10 @@ ADMINS = (
('spacenergy', 'spacenergy@me.com'),
)
MANAGERS = ADMINS
MANAGERS = (
('spacenergy', 'spacenergy@me.com'),
('admin', 'admin@batiskaf-kz.kz'),
)
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/

@ -16,6 +16,7 @@
<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">
<link rel="stylesheet" href="/static/js/Magnific-Popup/dist/magnific-popup.css">
{% block stylesheet %}{% endblock stylesheet %}
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
@ -67,12 +68,20 @@
<div class="container">
<div class="top-left-links"><a href="/payment/">Оплата</a> | <a href="/delivery/">Доставка</a> | <a href="/advantages/">Преимущества</a> | <a
<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> |
<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
src="/static/img/skype.png" alt="" width="20" height="20"/></a>
<span class="yellow"><a href="#call-form" id="order-call-link"><span class="glyphicon glyphicon-phone-alt"
aria-hidden="true"></span> Заказать
звонок</a></span> |
<a href="mailto:admin@batiskaf-kz.kz"><span class="glyphicon glyphicon-envelope"
aria-hidden="true"></span> Написать нам</a> | <a
href="skype:batiskaf_kz?chat"><img
src="/static/img/skype.png" alt="" width="20" height="20"/></a>
</div>
@ -93,7 +102,8 @@
<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></p>
<span class="label label-success">{{ (request|cart).items|length }}</span>{% endif %}</a> | <a
href="#">Войти</a></p>
</div>
</div>
</div>
@ -116,19 +126,19 @@
{% for child in category.get_childs_ordered_by_count()|batch(2) %}
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
{% for col in child %}
<ul>
<li><a class="title"
href="{{ col.get_absolute_url() }}">{{ col.title }}</a>
</li>
{% for child2 in col.childs.all() %}
<li>
<a href="{{ child2.get_absolute_url() }}">{{ child2.title }}</a>
{% for col in child %}
<ul>
<li><a class="title"
href="{{ col.get_absolute_url() }}">{{ col.title }}</a>
</li>
{% endfor %}
{% for child2 in col.childs.all() %}
<li>
<a href="{{ child2.get_absolute_url() }}">{{ child2.title }}</a>
</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
{% endfor %}
</div>
@ -142,147 +152,6 @@
</li>
{% endfor %}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Подводная#}
{# охота</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{# <div class="row">#}
{# <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">#}
{# <ul>#}
{# <li><a class="title" href="/store/spearfishing/spearguns/">Ружья</a>#}
{# </li>#}
{# <li><a href="#">Пневматика</a></li>#}
{# <li><a href="/store/spearfishing/spearguns/arbalets/">Арбалеты</a></li>#}
{# <li><a href="#">Карбоновые арбалеты</a></li>#}
{# </ul>#}
{# <ul>#}
{# <li><a class="title" href="#">Аксессуары к ружьям</a></li>#}
{# <li><a href="#">Гарпуны</a></li>#}
{# <li><a href="#">Наконечники</a></li>#}
{# <li><a href="#">Катушки</a></li>#}
{# <li><a href="#">Линь</a></li>#}
{# <li><a href="#">Амортизаторы</a></li>#}
{# <li><a href="#">Заряжалки</a></li>#}
{# <li><a href="#">Запчасти</a></li>#}
{# <li><a href="#">Тяжи и зацепы</a></li>#}
{# <li><a href="#">Прочее</a></li>#}
{# </ul>#}
{# </div>#}
{# <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">#}
{# <ul>#}
{# <li><a class="title" href="#">Неопрен</a></li>#}
{# <li><a href="#">Гидрокостюмы</a></li>#}
{# <li><a href="#">Перчатки</a></li>#}
{# <li><a href="#">Носки</a></li>#}
{# </ul>#}
{# <ul>#}
{# <li><a class="title" href="#">Экипировка</a></li>#}
{# <li><a href="#">Маски</a></li>#}
{# <li><a href="#">Ласты</a></li>#}
{# <li><a href="#">Трубки</a></li>#}
{# <li><a href="#">Куканы</a></li>#}
{# <li><a href="#">Сумки</a></li>#}
{# </ul>#}
{# </div>#}
{# <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">#}
{# <ul>#}
{# <li><a class="title" href="#">Грузовые системы</a></li>#}
{# <li><a href="#">Ремни</a></li>#}
{# <li><a href="#">Грузы</a></li>#}
{# <li><a href="#">Жилеты</a></li>#}
{# </ul>#}
{# <ul>#}
{# <li><a class="title" href="#">Приборы</a></li>#}
{# <li><a href="#">Компьютеры</a></li>#}
{# <li><a href="#">Компасы</a></li>#}
{# </ul>#}
{# </div>#}
{# <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">#}
{# <ul>#}
{# <li><a class="title" href="#">Фонари</a></li>#}
{# <li><a href="#">На батарейках</a></li>#}
{# <li><a href="#">Аккумуляторные</a></li>#}
{# </ul>#}
{# <ul>#}
{# <li><a class="title" href="#">Безопасность</a></li>#}
{# <li><a href="#">Ножи</a></li>#}
{# <li><a href="#">Буи, плотики</a></li>#}
{# </ul>#}
{# </div>#}
{# </div>#}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Дайвинг</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown"#}
{# class="dropdown-toggle">Фридайвинг</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Отдых на#}
{# воде</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown"#}
{# class="dropdown-toggle">Распродажа</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Детям</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Для#}
{# бассейна</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Подарочный#}
{# сертификат</a>#}
{# <ul class="dropdown-menu">#}
{# <li>#}
{# <div class="yamm-content">#}
{##}
{# </div>#}
{# </li>#}
{# </ul>#}
{# </li>#}
</ul>
</div>
@ -343,7 +212,9 @@
<br/><br/>
<p>
<a href="#">Карта сайта</a> &nbsp;|&nbsp; <a href="#">Поисковые запросы</a> &nbsp;|&nbsp; <a href="/store/search/?q=">Поиск</a> &nbsp;|&nbsp; <a href="/contacts/">Контакты</a> &nbsp;|&nbsp; <a href="#">RSS</a>
<a href="#">Карта сайта</a> &nbsp;|&nbsp; <a href="#">Поисковые запросы</a> &nbsp;|&nbsp; <a
href="/store/search/?q=">Поиск</a> &nbsp;|&nbsp; <a href="/contacts/">Контакты</a> &nbsp;|&nbsp; <a
href="#">RSS</a>
</p><br/>
<p>
@ -365,6 +236,37 @@
{% endfor %}
</ul>
{% endif %}
<form action="/" id="call-form" class="form mfp-hide call-form" method="post">
<h3>Заказать бесплатный звонок</h3>
<input id="id_reply_to" name="reply_to" type="hidden">
<div class="form-group">
<label class="control-label" for="id_name">Ваше имя</label>
<div class=" ">
<input class=" form-control" id="id_name" maxlength="45" name="name" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label" for="id_phone">Номер телефона</label>
<div class=" ">
<input class=" form-control" id="id_phone" maxlength="254" name="phone" type="phone">
</div>
</div>
<div class="form-group">
<label class="control-label" for="id_time">Удобное время (желательно с 10:00 до 19:00)</label>
<div class=" ">
<input class=" form-control" id="id_time" maxlength="254" name="time" type="time">
</div>
</div>
<div class="form-group text-left">
<button type="submit" name="call-order" class="btn btn-primary"><span class="glyphicon glyphicon-phone-alt"
aria-hidden="true"></span> Заказать звонок
</button>
</div>
</form>
{% block footer_scripts %}
<script src="/static/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/static/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
@ -377,6 +279,7 @@
<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/select2.min.js"></script>
<script src="/static/js/Magnific-Popup/dist/jquery.magnific-popup.min.js"></script>
<script src="/static/js/_.js?v=5"></script>
{% endblock footer_scripts %}
{% block jss %}{% endblock jss %}

@ -1,7 +1,16 @@
from django.conf.urls import patterns, include, url
from django.contrib import admin
from api.views import call_order
from store.views import order_view, order_print
from main.views import *
from rest_framework import routers
#from api.urls import router
from rest_framework import routers
from api.views import *
# Serializers define the API representation.
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter(trailing_slash=True)
admin.site.site_header = 'Админка Batiskaf-kz.kz'
admin.site.site_title = 'Админка Batiskaf-kz.kz'
@ -11,8 +20,10 @@ urlpatterns = patterns(
'',
url(r'^$', 'main.views.index',
name='index'),
url(r'^api/', include(router.urls)),
url(r'^news/', include('news.urls')),
url(r'^get_order_amount/$', 'store.views.get_order_amount'),
url(r'^order_call/$', 'api.views.call_order'),
url(r'^order/(?P<order>.+)/print/$', order_print,
name='store_order_print'),

@ -0,0 +1 @@
__author__ = 'OG'

@ -0,0 +1,13 @@
from __future__ import absolute_import
import datetime
import os
from django.core.mail.backends import filebased
class EmailBackend(filebased.EmailBackend):
def _get_filename(self):
if self._fname is None:
timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
fname = "%s-%s.eml" % (timestamp, abs(id(self)))
self._fname = os.path.join(self.file_path, fname)
return self._fname

@ -226,21 +226,57 @@ $(document).ready(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");
//});
});
$('#order-call-link').magnificPopup({
type: 'inline',
preloader: false,
});
$('#call-form').on('submit', function(){
var f_name = $('#call-form #id_name');
var f_phone = $('#call-form #id_phone');
var f_time = $('#call-form #id_time');
var is_full = true;
if (!f_name.val()){
f_name.parent().parent('.form-group').addClass('has-error');
is_full = false;
}else{
f_name.parent().parent('.form-group').removeClass('has-error');
}
if (!f_phone.val()){
f_phone.parent().parent('.form-group').addClass('has-error');
is_full = false;
}else{
f_phone.parent().parent('.form-group').removeClass('has-error');
}
if (!f_time.val()){
f_time.parent().parent('.form-group').addClass('has-error');
is_full = false;
}else{
f_time.parent().parent('.form-group').removeClass('has-error');
}
if (is_full){
$.ajax({
type: "POST",
url: '/order_call/',
data: {
name: f_name.val(),
phone: f_phone.val(),
time: f_time.val(),
},
success: function(data){
$.magnificPopup.close();
swal("Спасибо!", "Мы приняли вашу заявку! Наш менеджер свяжется с вами в указанное время.", "success")
}
});
}
//form-group has-error
return false;
})
})
;

@ -942,3 +942,11 @@ ul.messages {
background: #F5F7FA;
padding: 15px;
}
.call-form {
background: #FFF;
padding: 20px 30px;
text-align: left;
max-width: 500px;
margin: 40px auto;
position: relative;
}

@ -814,4 +814,13 @@ ul.messages {
background: #F5F7FA;
padding: 15px;
}
}
}
.call-form {
background: #FFF;
padding: 20px 30px;
text-align: left;
max-width: 500px;
margin: 40px auto;
position: relative
}

Loading…
Cancel
Save