add dpd delivery service

stepan-k
Dmitriy Shesterkin 9 years ago
parent aab47b9da4
commit 90a519f5cd
  1. 5
      batiskaf/templates/jinja2/base.jinja
  2. 62
      batiskaf/templates/jinja2/cart_detail.jinja
  3. 2
      batiskaf/urls.py
  4. 1
      dpd_places.xml
  5. BIN
      static/img/pickup-delivery-2.png
  6. 171
      static/js/_.js
  7. 215
      static/less/_.css
  8. 45
      static/less/_.less
  9. 2
      static/less/_.min.css
  10. 18
      static/less/icons.css
  11. 3
      store/admin.py
  12. 45
      store/migrations/0060_auto_20170602_2202.py
  13. 20
      store/migrations/0061_auto_20170603_0220.py
  14. 13
      store/models.py
  15. 93
      store/views.py

@ -17,7 +17,8 @@
<link href='/static/favicon.ico?v=3' type='image/x-icon' rel='shortcut icon'/>
<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/_.min.css?v=8" rel="stylesheet">
<link href="/static/less/_.min.css?v=9" rel="stylesheet">
<link href="/static/less/icons.css?v=1" 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 rel="stylesheet" href="/static/js/mp/dist/magnific-popup.css">
@ -377,7 +378,7 @@
<script src="/static/js/formstone/js/touch.js"></script>
<script src="/static/js/formstone/js/dropdown.js"></script>
<script src="/static/star-rating/jquery.rating.pack.js"></script>
<script src="/static/js/_.js?v=16"></script>
<script src="/static/js/_.js?v=17"></script>
{% endblock footer_scripts %}
{% block jss %}{% endblock jss %}
{% if messages %}

@ -91,22 +91,22 @@
<br>
<div class="form-group"><label class="control-label" for="deliv_service">Служба
доставки</label></div>
<div class="radio">
<div class="radio" style="display: inline-block;vertical-align: top;margin-top: -6px;margin-right: 40px;">
<label>
<input type="radio" name="deliv_service" id="deliv_service3" value="pickup" checked>
Самовывоз <br>
Самовывоз <br><img src="/static/img/pickup-delivery-2.png" alt="" width="50" style="margin-left: 20px;margin-bottom:0;margin-top: 5px">
</label>
</div>
<div class="radio">
<div class="radio" style="display: inline-block;vertical-align: top;margin-right: 20px;">
<label>
<input type="radio" name="deliv_service" id="deliv_service1" value="kazpost">
Казпочта <br><img src="/static/img/kazpost.jpg" alt="" width="150">
Казпочта <br><img src="/static/img/kazpost.jpg" alt="" width="150" style="padding-top: 12px;margin-left: -40px;">
</label>
</div>
<div class="radio">
<div class="radio" style="display: inline-block;vertical-align: top;">
<label>
<input type="radio" name="deliv_service" id="deliv_service4" value="dpd">
DPD Казахстан <br><img src="/static/img/dpd.png" alt="" width="90">
DPD Казахстан <br><img src="/static/img/dpd.png" alt="dpd" width="90" style="margin-left: 13px;">
</label>
</div>
<div class="radio" style="display:none">
@ -152,7 +152,7 @@
<div class="kazpost_block" style="display: none;">
<div class="form-group">
<label class="control-label" for="id_city">Ближайшее областное отделение</label>
<label class="control-label required" for="id_city">Ближайшее областное отделение</label>
<div>
<select name="kazpost_city" id="id_kazpost_city" class="form-control" style="width:100%">
{% for city in kazpost_cities %}
@ -173,15 +173,49 @@
</div>
<div class="dpd_block" style="display: none;">
<div class="dpd_block" style="display: none; position: relative;">
<div id="ajaxLoading" style="display: none;">
<span id="dpdCityLoading" class="glyphicon glyphicon-refresh glyphicon-refresh-animate"></span>
</div>
<div class="form-group">
<label class="control-label" for="id_city">Населенный пункт</label>
<label class="control-label required" for="id_dpd_pickup">Пункт отправления</label>
<div>
<select name="dpd_city" id="id_dpd_city" class="form-control" style="width:100%">
{# <option value="0" selected="selected">Выберете населенный пункт</option>#}
<select name="dpd_pickup" id="id_dpd_pickup" class="form-control" style="width:100%">
{% for city in dpd_cities_sent %}
<option value="{{ city[0] }}">{{ city[1] }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label required" for="id_dpd_delivery">Пункт назначения</label>
<div>
<select name="dpd_delivery" id="id_dpd_delivery" class="form-control" style="width:100%"></select>
</div>
</div>
<div class="form-group">
<div>
<label class="radio-inline"><input type="radio" name="dpd_type_delivery"
value="false" checked>до двери</label>
<label class="radio-inline"><input type="radio" name="dpd_type_delivery" value="true">до пункта выдачи</label>
</div>
</div>
<div id="dpd_services_no_result" style="display: none;text-align: center;">
<b style="color: red;">Услуги удовлетворяющие выбранным условиям,<br/> не найдены!</b>
</div>
<div id="dpd_services_result" style="display: none;">
<table class="table table-hover table-responsive">
<thead>
<tr>
<th>Название<br/>услуги</th>
<th>Стоимость,<br/>тенге</th>
<th>Срок доставки,<br/>раб. дни</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="form-group">
<label class="control-label" for="id_dpd_address">Адрес</label>
@ -190,6 +224,11 @@
class="form-control" value="{{ request.POST['dpd_address'] or '' }}">
</div>
</div>
<input type="hidden" name="tmp_delivery" id="id_tmp_delivery" class="form-control" value="">
<input type="hidden" name="tmp_cost" id="id_tmp_cost" class="form-control" value="">
</div>
@ -198,6 +237,7 @@
<br>
<div class="order-itogo text-right">
Стоимость доставки: <span id="order-itogo-delivery">0</span> <span class="price__currency price__currency_up">{{ (request|currency).get_symbol() }}</span>
<br/>

@ -116,7 +116,7 @@ urlpatterns = (
url(r'^order/(?P<order>.+)/$', order_view,
name='store_order_view'),
url(r'^get_dpd_cities/$', 'store.views.get_dpd_cities'),
url(r'^get_order_dpd_amount/$', 'store.views.get_order_dpd_amount'),
url(r'^store/', include('store.urls')),
url(r'^account/', include('accounts.urls')),

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

@ -180,7 +180,6 @@ $(document).ready(function () {
function selectCity() {
var city = $('#id_city').val();
console.log(city);
var deliv = $('#id_deliv_type').val();
var cart_itogo = $('#cart-itogo');
var order_itogo_delivery = $('#order-itogo-delivery');
@ -268,7 +267,6 @@ $(document).ready(function () {
}
$('#id_kazpost_city').select2({
placeholder: "Выберите почтовое отделение",
allowClear: false
@ -292,6 +290,61 @@ $(document).ready(function () {
}
});
function fillHTMLServicesDPD(services, div) {
div.empty();
for (var i = 0; i < services.length; i++) {
var service = services[i];
$('<tr/>', {
'class':'clickable-row',
'html':
'<td><div class="radio"><label><input type="radio" value="'+ service.name +'" id="' +
service.code + '" name="dpd_service"> '+ service.name +
'</label></div></td><td>' + service.cost + '</td><td>' +
service.days + '</td>'
}).appendTo(div);
}
$(".clickable-row").click(function() {
var input = $(this).find('input'),
cartItogo = $('#cart-itogo'),
orderItogoDelivery = $('#order-itogo-delivery'),
orderItogo = $('#order-itogo-amount'),
orderItogoUp = $('#order-itogo-amount-up'),
orderItogoDeliveryUp = $('#order-itogo-delivery-up'),
city = $('#id_dpd_delivery').text(),
delivery, result, service;
input.prop('checked', true);
delivery = $(input.children().context.childNodes[1].childNodes[0]).text();
service = input.parents()[0].childNodes[1].data;
orderItogo.html(parseFloat(delivery) + parseFloat(cartItogo.html()));
orderItogoUp.html(parseFloat(delivery) + parseFloat(cartItogo.html()));
orderItogoDelivery.html(parseFloat(delivery));
orderItogoDeliveryUp.html(parseFloat(delivery));
// result = {
// 'city': city,
// 'self_delivery': self_delivery,
// 'service': service,
// 'total': parseFloat(delivery) + parseFloat(cartItogo.html()),
// 'delivery': parseFloat(delivery)
// };
$('#id_tmp_delivery').val(city);
$('#id_tmp_cost').val(parseFloat(delivery));
});
}
function selectPickup() {
var cartItogo = $('#cart-itogo').html();
@ -301,43 +354,97 @@ $(document).ready(function () {
$('#order-itogo-amount').html(parseFloat(cartItogo));
}
$( document ).ajaxSend(function( event, jqxhr, settings ) {
if (settings.url.indexOf('get_order_dpd_amount') !== -1) {
$('#ajaxLoading').show();
}
});
$( document ).ajaxStop(function() {
$('#ajaxLoading').hide();
});
function selectDpdCity() {
console.log('dpd');
$("#id_dpd_city").select2({
placeholder: 'Введите название',
language: "ru",
minimumInputLength: 2,
ajax: {
method: 'GET',
url: "/get_dpd_cities/",
dataType: 'json',
data: function (params) {
return {
search: params.term
};
},
processResults: function (data) {
var city = $('#id_dpd_delivery').val();
var city_sent = $('#id_dpd_pickup').val();
var self_delivery = $('input[name=dpd_type_delivery]:checked').val();
// console.log(self_delivery);
if (city) {
$.ajax({
method: "GET",
url: "/get_order_dpd_amount/",
data: {
delivery: city,
pickup: city_sent,
self_delivery: self_delivery
}
}).done(function (obj) {
if (obj.length) {
$('#dpd_services_no_result').hide();
fillHTMLServicesDPD(obj, $('#dpd_services_result tbody'));
$('#dpd_services_result').show();
} else {
$('#dpd_services_no_result').show();
$('#dpd_services_result').hide();
}
});
} else {
var cartItogo = $('#cart-itogo').html();
$('#order-itogo-delivery-up').html(0);
$('#order-itogo-delivery').html(0);
$('#order-itogo-amount-up').html(parseFloat(cartItogo));
$('#order-itogo-amount').html(parseFloat(cartItogo));
}
}
$("#id_dpd_delivery").select2({
placeholder: 'Введите название',
language: "ru",
minimumInputLength: 2,
ajax: {
method: 'GET',
url: "/get_dpd_cities/",
dataType: 'json',
data: function (params) {
return {
results: data
search: params.term
};
},
cache: true
}
});
processResults: function (data) {
$('#id_dpd_city').on('select2:select', function (evt) {
// Do something
return {
results: data
};
},
cache: true
}
});
console.log('selected');
console.log($('#id_dpd_city').val());
$('#id_dpd_pickup').on('change', function() {
selectDpdCity();
});
});
$('#id_dpd_delivery').on('select2:select', function (evt) {
selectDpdCity();
});
};
// select type delivery on radiobutton
$(document).on("change","input[name=dpd_type_delivery]",function(){
selectDpdCity();
});
$('input[name=deliv_service]').change(function () {
switch ($(this).val()) {
@ -346,6 +453,8 @@ $(document).ready(function () {
$('.alemtat_block').hide();
$('.kazpost_block').hide();
$('.dpd_block').hide();
$('#dpd_services_result').hide();
$('#dpd_services_no_result').hide();
break;
case 'kazpost' :
@ -353,6 +462,8 @@ $(document).ready(function () {
$('.alemtat_block').hide();
$('.dpd_block').hide();
$('.kazpost_block').show();
$('#dpd_services_result').hide();
$('#dpd_services_no_result').hide();
break;
case 'dpd' :
@ -360,12 +471,16 @@ $(document).ready(function () {
$('.alemtat_block').hide();
$('.kazpost_block').hide();
$('.dpd_block').show();
$('#dpd_services_result').hide();
$('#dpd_services_no_result').hide();
break;
case 'alemtat' :
selectCity();
$('.alemtat_block').show();
$('.kazpost_block').hide();
$('#dpd_services_result').hide();
$('#dpd_services_no_result').hide();
$('#id_city').select2({
placeholder: "Выберите город",
allowClear: false

@ -1,6 +1,6 @@
/***
colors.css v2.0.0
colors.css v0.2.0
http://clrs.cc
@mrmrs
MIT License
@ -9,11 +9,8 @@
/*
SKINS
- Backgrounds
- Colors
- Border colors
- SVG fills
- SVG strokes
Backgrounds
Colors
*/
/* Backgrounds */
@ -120,165 +117,22 @@
.black {
color: #111;
}
/* Border colors
Use with another border utility that sets border-width and style
i.e .border { border-width: 1px; border-style: solid; }
*/
.border--navy {
border-color: #001F3F;
}
.border--blue {
border-color: #0074D9;
}
.border--aqua {
border-color: #7FDBFF;
}
.border--teal {
border-color: #39CCCC;
}
.border--olive {
border-color: #3D9970;
}
.border--green {
border-color: #2ECC40;
}
.border--lime {
border-color: #01FF70;
}
.border--yellow {
border-color: #FFDC00;
}
.border--orange {
border-color: #FF851B;
}
.border--red {
border-color: #FF4136;
}
.border--fuchsia {
border-color: #F012BE;
}
.border--purple {
border-color: #B10DC9;
}
.border--maroon {
border-color: #85144B;
}
.border--white {
border-color: #fff;
}
.border--gray {
border-color: #aaa;
}
.border--silver {
border-color: #ddd;
}
.border--black {
border-color: #111;
}
/* Fills for SVG */
.fill-navy {
fill: #001F3F;
}
.fill-blue {
fill: #0074D9;
}
.fill-aqua {
fill: #7FDBFF;
}
.fill-teal {
fill: #39CCCC;
}
.fill-olive {
fill: #3D9970;
}
.fill-green {
fill: #2ECC40;
}
.fill-lime {
fill: #01FF70;
}
.fill-yellow {
fill: #FFDC00;
}
.fill-orange {
fill: #FF851B;
}
.fill-red {
fill: #FF4136;
}
.fill-fuchsia {
fill: #F012BE;
}
.fill-purple {
fill: #B10DC9;
}
.fill-maroon {
fill: #85144B;
}
.fill-white {
fill: #fff;
}
.fill-gray {
fill: #aaa;
/* PRETTIER LINKS */
a {
transition: color 0.3s ease-in-out;
}
.fill-silver {
fill: #ddd;
}
.fill-black {
fill: #111;
}
/* Strokes for SVG */
.stroke-navy {
stroke: #001F3F;
}
.stroke-blue {
stroke: #0074D9;
}
.stroke-aqua {
stroke: #7FDBFF;
}
.stroke-teal {
stroke: #39CCCC;
}
.stroke-olive {
stroke: #3D9970;
}
.stroke-green {
stroke: #2ECC40;
}
.stroke-lime {
stroke: #01FF70;
}
.stroke-yellow {
stroke: #FFDC00;
}
.stroke-orange {
stroke: #FF851B;
}
.stroke-red {
stroke: #FF4136;
}
.stroke-fuchsia {
stroke: #F012BE;
}
.stroke-purple {
stroke: #B10DC9;
}
.stroke-maroon {
stroke: #85144B;
}
.stroke-white {
stroke: #fff;
a:link {
color: #0074D9;
transition: color 0.3s ease-in-out;
}
.stroke-gray {
stroke: #aaa;
a:visited {
color: #B10DC9;
}
.stroke-silver {
stroke: #ddd;
a:hover {
color: #7FDBFF;
}
.stroke-black {
stroke: #111;
a:active {
color: #FF851B;
}
/*!
* Yamm!3
@ -303,7 +157,7 @@
right: 0;
}
.yamm .yamm-content {
padding: 10px 20px;
padding: 20px 30px;
}
.yamm .dropdown.yamm-fw .dropdown-menu {
left: 0;
@ -1044,3 +898,40 @@ ul.messages {
content: "*";
color: red;
}
/* Make Select2 boxes match Bootstrap3 heights: */
.select2-selection__rendered {
line-height: 32px !important;
}
.select2-selection {
height: 34px !important;
}
.select2-selection__arrow b {
margin-top: 0 !important;
}
.clickable-row {
cursor: pointer;
}
.clickable-row td {
font-weight: 700;
}
#ajaxLoading {
position: absolute;
z-index: 10000;
height: 50px;
width: 50px;
right: 50%;
top: 50%;
margin-right: -25px;
margin-top: -25px;
background: white;
border-radius: 5px;
border: 1px solid;
}
#dpdCityLoading {
font-size: 30px;
position: absolute;
top: 50%;
margin-top: -15px;
left: 50%;
margin-left: -15px;
}

@ -875,4 +875,47 @@ ul.messages {
text-transform: uppercase;
}
.required:after { content:"*"; color: red; }
.required:after { content:"*"; color: red; }
/* Make Select2 boxes match Bootstrap3 heights: */
.select2-selection__rendered {
line-height: 32px !important;
}
.select2-selection {
height: 34px !important;
}
.select2-selection__arrow b {
margin-top:0 !important;
}
.clickable-row {
cursor: pointer;
td {
font-weight: 700;
}
}
#ajaxLoading {
position: absolute;
z-index: 10000;
height: 50px;
width: 50px;
right: 50%;
top: 50%;
margin-right: -25px;
margin-top: -25px;
background: white;
border-radius: 5px;
border: 1px solid;
}
#dpdCityLoading {
font-size: 30px;
position: absolute;
top: 50%;
margin-top: -15px;
left: 50%;
margin-left: -15px;
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,18 @@
.glyphicon-refresh-animate {
-animation: spin .7s infinite linear;
-webkit-animation: spinWebkit .7s infinite linear;
-moz-animation: spinMoz .7s infinite linear;
}
@-webkit-keyframes spinWebkit {
from { -webkit-transform: rotate(0deg);}
to { -webkit-transform: rotate(360deg);}
}
@keyframes spinMoz {
from { transform: scale(1) rotate(0deg);}
to { transform: scale(1) rotate(360deg);}
}
@keyframes spin {
from { transform: scale(1) rotate(0deg);}
to { transform: scale(1) rotate(360deg);}
}

@ -116,7 +116,8 @@ class OrderAdmin(admin.ModelAdmin):
obj.save()
list_display = (
'first_name', 'last_name', 'phone', 'email', 'deliv_service', 'city', 'kazpost_city', 'address', 'deliv_type', 'amount', 'status',
'first_name', 'last_name', 'phone', 'email', 'deliv_service', 'kazpost_city',
'dpd_delivery', 'address', 'amount', 'status',
get_order_items)

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-06-02 22:02
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0059_auto_20170506_1116'),
]
operations = [
migrations.AddField(
model_name='orderdata',
name='dpd_delivery',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Город доставки DPD'),
),
migrations.AddField(
model_name='orderdata',
name='dpd_pickup',
field=models.IntegerField(blank=True, choices=[(1053154781, 'г. Усть-Каменогорск'), (1033210055, 'г. Алматы')], null=True, verbose_name='Город отправления DPD'),
),
migrations.AddField(
model_name='orderdata',
name='dpd_service',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Услуга доставки DPD'),
),
migrations.AddField(
model_name='orderdata',
name='dpd_type_delivery',
field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Способ доставки DPD'),
),
migrations.AlterField(
model_name='orderdata',
name='city',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Город Алемтат'),
),
migrations.AlterField(
model_name='orderdata',
name='deliv_type',
field=models.CharField(blank=True, default='', max_length=2, null=True, verbose_name='Способ Алемтат'),
),
]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-06-03 02:20
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('store', '0060_auto_20170602_2202'),
]
operations = [
migrations.AlterField(
model_name='orderdata',
name='dpd_type_delivery',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Способ доставки DPD'),
),
]

@ -381,6 +381,11 @@ KAZPOST_CITIES = (
(16, "Талдыкорган")
)
DPD_SENT_CITIES = (
(1053154781, "г. Усть-Каменогорск"),
(1033210055, "г. Алматы")
)
class OrderData(models.Model):
created = models.DateTimeField('Дата и время', auto_now_add=True, editable=False)
@ -401,6 +406,14 @@ class OrderData(models.Model):
'Почтовая служба', max_length=20, blank=True, null=True, default='alemtat')
kazpost_city = models.IntegerField(
'Город Казпочта', blank=True, null=True, choices=KAZPOST_CITIES)
dpd_pickup = models.IntegerField(
'Город отправления DPD', blank=True, null=True, choices=DPD_SENT_CITIES)
dpd_delivery = models.CharField(
'Город доставки DPD', blank=True, null=True, max_length=20)
dpd_type_delivery = models.CharField(
'Способ доставки DPD', blank=True, null=True, max_length=20)
dpd_service = models.CharField(
'Услуга доставки DPD', blank=True, null=True, max_length=20)
address = models.CharField(
'Адрес', max_length=255, blank=False, null=False)
deliv_type = models.CharField(

@ -1,6 +1,7 @@
import base64
import json
from math import ceil
from django.contrib.auth import authenticate, login
from django.core.mail import mail_managers, mail_admins
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
@ -265,12 +266,14 @@ class CartDetailView(TemplateView):
def get_context_data(self, **kwargs):
from .models import KAZPOST_CITIES
from .models import DPD_SENT_CITIES
retval = super(CartDetailView, self).get_context_data()
retval['cart'] = Cart(self.request)
retval['form'] = OrderForm(self.request.POST or None)
retval['alemtat_cities'] = alemtat_get_cities_tuple()
retval['alemtat_services'] = alemtat_get_services_tuple()
retval['kazpost_cities'] = KAZPOST_CITIES
retval['dpd_cities_sent'] = DPD_SENT_CITIES
# retval['form_delivs'] = DelivsForm()
return retval
@ -312,6 +315,21 @@ class CartDetailView(TemplateView):
elif deliv_service == 'pickup':
order.amount = cart.total
elif deliv_service == 'dpd':
order.dpd_pickup = request.POST['dpd_pickup']
order.address = request.POST['dpd_address']
delivery_cost = int(request.POST['tmp_cost'])
order.amount = delivery_cost + cart.total
order.dpd_delivery = request.POST['tmp_delivery']
order.dpd_service = request.POST['dpd_service']
if request.POST['dpd_type_delivery'] == 'false':
order.dpd_type_delivery = 'до двери'
else:
order.dpd_type_delivery = 'до пункта выдачи'
# import ipdb;ipdb.set_trace()
profile = None
try:
@ -481,8 +499,8 @@ def get_dpd_cities(request):
<ns:getCitiesCashPay>
<request>
<auth>
<clientNumber>{clientID}</clientNumber>
<clientKey>{clientKey}</clientKey>
<clientNumber>{client_id}</clientNumber>
<clientKey>{client_key}</clientKey>
</auth>
<countryCode>KZ</countryCode>
</request>
@ -493,7 +511,7 @@ def get_dpd_cities(request):
places = list()
search = request.GET.get('search', '')
body = body.format(clientID=settings.DPD_ID, clientKey=settings.DPD_KEY)
body = body.format(client_id=settings.DPD_ID, client_key=settings.DPD_KEY)
try:
response = requests.post(url, data=body, headers=headers)
elements = ET.fromstring(response.content).findall(".//return")
@ -508,7 +526,7 @@ def get_dpd_cities(request):
data = json.dumps(places)
except:
data = json.dumps({'msg': 'false'})
data = json.dumps({'msg': 'error'})
return HttpResponse(data, content_type='json')
@ -520,6 +538,73 @@ def add_items(el, places):
)})
def get_order_dpd_amount(request):
import requests
services = list()
cart = Cart(request)
weight = cart.weight
pickup = request.GET['pickup']
delivery = request.GET['delivery']
self_delivery = request.GET['self_delivery']
url = "http://ws.dpd.ru/services/calculator2?wsdl"
headers = {'content-type': 'text/xml'}
body = """<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://dpd.ru/ws/calculator/2012-03-20">
<soapenv:Header/>
<soapenv:Body>
<ns:getServiceCost>
<request>
<auth>
<clientNumber>{clientID}</clientNumber>
<clientKey>{clientKey}</clientKey>
</auth>
<pickup>
<cityId>{pickup_city_id}</cityId>
<countryCode>KZ</countryCode>
</pickup>
<delivery>
<cityId>{delivery_city_id}</cityId>
<countryCode>KZ</countryCode>
</delivery>
<selfPickup>false</selfPickup>
<selfDelivery>{self_delivery}</selfDelivery>
<weight>{weight}</weight>
</request>
</ns:getServiceCost>
</soapenv:Body>
</soapenv:Envelope>
"""
body = body.format(clientID=settings.DPD_ID,
clientKey=settings.DPD_KEY,
weight=weight,
pickup_city_id=pickup,
delivery_city_id=delivery,
self_delivery=self_delivery)
# print(body)
try:
response = requests.post(url, data=body, headers=headers)
elements = ET.fromstring(response.content).findall(".//return")
# ROUND
for el in elements:
services.append({'code': el.find('.//serviceCode').text,
'name': el.find('.//serviceName').text,
'cost': ceil(float(el.find('.//cost').text)),
'days': el.find('.//days').text
})
_services = sorted(services, key=lambda k: (int(k['cost']), int(k['days'])))
data = json.dumps(_services)
except:
data = json.dumps({'msg': 'error'})
return HttpResponse(data, content_type='json')
class ProductSitemap(Sitemap):
changefreq = "daily"
priority = 0.8

Loading…
Cancel
Save