dpd get cities

stepan-k
Dmitriy Shesterkin 9 years ago
parent ef94a90b25
commit ad2dc3adb3
  1. 5
      batiskaf/settings.py
  2. 27
      batiskaf/templates/jinja2/cart_detail.jinja
  3. 5
      batiskaf/urls.py
  4. 1
      dpd/__init__.py
  5. BIN
      static/img/dpd.png
  6. 47
      static/js/_.js
  7. 84
      store/views.py

@ -282,3 +282,8 @@ MERCHANT_ID = "92210431" # ; Терминал ИД в банковской Си
DJANGORESIZED_DEFAULT_SIZE = [1920, 1080]
DJANGORESIZED_DEFAULT_QUALITY = 75
DJANGORESIZED_DEFAULT_KEEP_META = True
DPD_ID = '1122000140'
DPD_KEY = '0599EDC793B39FA6C098C3A8A7B5C603BBD3BE56'
DPD_DEV_SERVER = 'http://wstest.dpd.ru'
DPD_SERVER = 'http://ws.dpd.ru'

@ -103,6 +103,12 @@
Казпочта <br><img src="/static/img/kazpost.jpg" alt="" width="150">
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="deliv_service" id="deliv_service4" value="dpd">
DPD Казахстан <br><img src="/static/img/dpd.png" alt="" width="90">
</label>
</div>
<div class="radio" style="display:none">
<label>
<input type="radio" name="deliv_service" id="deliv_service2"
@ -166,6 +172,27 @@
</div>
</div>
<div class="dpd_block" style="display: none;">
<div class="form-group">
<label class="control-label" for="id_city">Населенный пункт</label>
<div>
<select name="dpd_city" id="id_dpd_city" class="form-control" style="width:100%">
<option value="0" selected="selected">Выберете населенный пункт</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label" for="id_dpd_address">Адрес</label>
<div>
<input name="dpd_address" type="text" id="id_dpd_address"
class="form-control" value="{{ request.POST['dpd_address'] or '' }}">
</div>
</div>
</div>
{{ form|bootstrap }}

@ -102,7 +102,7 @@ urlpatterns = (
url(r'^api/', include(router.urls)),
url(r'^news/', include('news.urls')),
url(r'^promo/', include('promo.urls')),
url(r'^get_order_amount/$', 'store.views.get_order_amount'),
# url(r'^get_order_amount/$', 'store.views.get_order_amount'),
url(r'^get_order_kazpost_amount/$', 'store.views.get_order_kazpost_amount'),
url(r'^order_call/$', 'api.views.call_order'),
url(r'^order_order/$', 'api.views.order_order'),
@ -115,6 +115,9 @@ urlpatterns = (
url(r'^order/(?P<order>.+)/$', order_view,
name='store_order_view'),
url(r'^get_dpd_cities/$', 'store.views.get_dpd_cities'),
url(r'^store/', include('store.urls')),
url(r'^account/', include('accounts.urls')),
url(r'^advantages/$', advantages, name='advantages'),

@ -0,0 +1 @@
# -*- coding: utf-8 -*-

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@ -301,20 +301,65 @@ $(document).ready(function () {
$('#order-itogo-amount').html(parseFloat(cartItogo));
}
function selectDpdCity() {
console.log('dpd');
// $.get("/get_dpd_cities/", function (data) {
//
// console.log(data);
//
// $("#id_dpd_city").select2({
// data: data
// });
//
// });
$("#id_dpd_city").select2({
minimumInputLength: 2,
ajax: {
method: 'GET',
url: "/get_dpd_cities/",
dataType: 'json',
data: function (params) {
return {
search: params.term
};
},
processResults: function (data) {
return {
results: data
};
},
cache: true
}
});
};
$('input[name=deliv_service]').change(function () {
switch ($(this).val()) {
case 'pickup' :
selectPickup();
$('.alemtat_block').hide();
$('.kazpost_block').hide();
$('.dpd_block').hide();
break;
case 'kazpost' :
selectKazpostCity();
$('.alemtat_block').hide();
$('.dpd_block').hide();
$('.kazpost_block').show();
break;
case 'dpd' :
selectDpdCity();
$('.alemtat_block').hide();
$('.kazpost_block').hide();
$('.dpd_block').show();
break;
case 'alemtat' :
selectCity();
$('.alemtat_block').show();

@ -1,4 +1,6 @@
import base64
import json
from django.contrib.auth import authenticate, login
from django.core.mail import mail_managers, mail_admins
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
@ -19,6 +21,8 @@ from django.http import JsonResponse
from datetime import datetime
from django.conf import settings
from django.contrib.sitemaps import Sitemap
import xml.etree.ElementTree as ET
from django.http import HttpResponse
import kkb
@ -105,14 +109,14 @@ class CategoryView(CategoryBaseView, TemplateView):
if self.is_search:
q = self.request.GET.get('q', '')
self.products_qs = Product.objects.filter(title__icontains=q).\
self.products_qs = Product.objects.filter(title__icontains=q). \
sorted_in_stock_by_field('-pk')
brands_pks = [item.brand.pk for item in self.products_qs]
retval['brands'] = Brand.objects.filter(pk__in=brands_pks).order_by(
'title') # list(set(map(lambda item: item.brand, self.products_qs)))
elif self.is_sale:
self.products_qs = Product.objects.filter(variations__discount__gt=0).distinct().\
self.products_qs = Product.objects.filter(variations__discount__gt=0).distinct(). \
sorted_in_stock_by_field('-pk')
brands_pks = [item.brand.pk for item in self.products_qs]
retval['brands'] = Brand.objects.filter(pk__in=brands_pks).order_by('title')
@ -169,7 +173,7 @@ class ProductView(CategoryBaseView, DetailView):
self.category = self._get_full_category(kwargs['categories'])
retval = super(ProductView, self).get(request, args, kwargs)
ranee = request.session.get('ranee', [])
#import pdb;pdb.set_trace()
# import pdb;pdb.set_trace()
if kwargs['slug'] not in ranee:
ranee.append(kwargs['slug'])
request.session['ranee'] = ranee
@ -182,18 +186,19 @@ class ProductView(CategoryBaseView, DetailView):
retval['form'] = ProductFeedbackForm(self.request.POST or None)
retval['updated'] = ProductsUpdate.objects.last()
ranee = self.request.session.get('ranee', [])
#import pdb;pdb.set_trace()
#ranee.pop(kwargs['object'].slug)
# import pdb;pdb.set_trace()
# ranee.pop(kwargs['object'].slug)
retval['ranee'] = []
for i in ranee:
#import pdb; pdb.set_trace()
# import pdb; pdb.set_trace()
if kwargs and i != kwargs['object'].slug:
try:
p = Product.objects.get(slug=i)
if p not in retval['ranee']:
retval['ranee'].append(p)
except: pass
#import pdb;pdb.set_trace()
except:
pass
# import pdb;pdb.set_trace()
if retval['ranee']:
retval['ranee'] = retval['ranee'][::-1][:4]
@ -311,8 +316,8 @@ class CartDetailView(TemplateView):
try:
profile = Profile.objects.get(phone=normalize_phone(order.phone))
#profile.set_password(settings.PROFILE_TEMP_PASSWORD)
#profile.save()
# profile.set_password(settings.PROFILE_TEMP_PASSWORD)
# profile.save()
send_email(profile, template='mail/order.jinja')
except:
from random import randint
@ -375,12 +380,11 @@ def get_order_amount(request):
def get_kazpost_tarif(weight, to):
import requests
import re
url="http://rates.kazpost.kz/postratesprod/postratesws.wsdl"
#headers = {'content-type': 'application/soap+xml'}
url = "http://rates.kazpost.kz/postratesprod/postratesws.wsdl"
# headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'text/xml'}
body = """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pos="http://webservices.kazpost.kz/postratesws">
<soapenv:Header/>
@ -403,7 +407,7 @@ def get_kazpost_tarif(weight, to):
</soapenv:Body>
</soapenv:Envelope>"""
body = body.format(weight*1000, to)
body = body.format(weight * 1000, to)
try:
response = requests.post(url, data=body, headers=headers)
@ -464,6 +468,58 @@ def kkb_result(request):
return render(request, 'kkb_ok.jinja')
def get_dpd_cities(request, *args, **kwargs):
import requests
url = "http://ws.dpd.ru/services/geography2?wsdl"
headers = {'content-type': 'text/xml'}
body = """<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://dpd.ru/ws/geography/2015-05-20">
<soapenv:Header/>
<soapenv:Body>
<ns:getCitiesCashPay>
<request>
<auth>
<clientNumber>{clientID}</clientNumber>
<clientKey>{clientKey}</clientKey>
</auth>
<countryCode>KZ</countryCode>
</request>
</ns:getCitiesCashPay>
</soapenv:Body>
</soapenv:Envelope>
"""
places = list()
search = request.GET.get('search', '')
body = body.format(clientID=settings.DPD_ID, clientKey=settings.DPD_KEY)
try:
response = requests.post(url, data=body, headers=headers)
elements = ET.fromstring(response.content).findall(".//return")
if search:
for el in elements:
if search.lower() in el.find('.//cityName').text.lower():
add_items(el, places)
else:
for el in elements:
add_items(el, places)
data = json.dumps(places)
except:
data = json.dumps({'msg': 'false'})
return HttpResponse(data, content_type='json')
def add_items(el, places):
places.append({'id': el.find('.//cityId').text,
'text': '{0} {1}'.format(
el.find('.//abbreviation').text,
el.find('.//cityName').text
)})
class ProductSitemap(Sitemap):
changefreq = "daily"
priority = 0.8

Loading…
Cancel
Save