diff --git a/static/js/_.js b/static/js/_.js index 9c0b7aa..fb9f41d 100644 --- a/static/js/_.js +++ b/static/js/_.js @@ -175,6 +175,7 @@ $(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'); diff --git a/store/alemtat.py b/store/alemtat.py index 519254f..2a26527 100644 --- a/store/alemtat.py +++ b/store/alemtat.py @@ -1,12 +1,59 @@ import requests from django.core.cache import cache + class AlemTat(object): COUNTRY_CODE = '0001' - CITY_CODE = '000003' + CITY_CODE = '000019' API_KEY = '677a8773-c647-4b8f-8968-32a67d55e0d3' CONTRACT = '05828/ИМ' + ZONES_FROM_UK_E = ( + ('000019', 0), + ('000003', 2), + ('000008', 2), + ('000009', 5), + ('000011', 2), + ('000006', 2), + ('000078', 5), + ('000004', 2), + ('000106', 4), + ('000064', 4), + ('000005', 2), + ('000014', 2), + ('000016', 2), + ('000010', 2), + ('000017', 2), + ('000018', 2), + ('000020', 2), + ('000055', 2), + ('000015', 2), + ('000007', 2), + ('000012', 2), + ('000024', 2), + ('003000', 5), + ('000229', 5), + ('000198', 5), + ('000098', 5), + ('000100', 5), + ('000080', 5), + ('000116', 2), + ('000119', 5), + ('000114', 5), + ('000069', 5), + ('000082', 5), + ('000263', 2), + ('000077', 5), + ('000070', 5), + ('000036', 5), + ('000157', 5), + ('000071', 5), + ('000076', 5), + ('000096', 5), + ('000205', 5), + ('000183', 5), + ) + def _build_url(self, url): # url = url.replace('\{ext\}', API_KEY) retval = url @@ -18,13 +65,14 @@ class AlemTat(object): def get_cities(self): cache_key = 'alemtat_cities' - retval = None# cache.get(cache_key, None) + retval = None # cache.get(cache_key, None) if not retval: url = self._build_url( - 'http://api.alemtat.kz/web/{ext}/Catalog/getCitiesByCountry?CountryLocalCode={}'.format(self.COUNTRY_CODE, ext=self.API_KEY)) + 'http://api.alemtat.kz/web/{ext}/Catalog/getCitiesByCountry?CountryLocalCode={}'.format( + self.COUNTRY_CODE, ext=self.API_KEY)) r = requests.get(url) retval = r.json() - #cache.set(cache_key, retval, 60*60*24*7) + # cache.set(cache_key, retval, 60*60*24*7) return retval def get_cities_tuple(self): @@ -34,14 +82,14 @@ class AlemTat(object): def get_services(self): cache_key = 'alemtat_services' - retval = None #cache.get(cache_key, None) + retval = None # cache.get(cache_key, None) if not retval: url = self._build_url( 'http://api.alemtat.kz/web/{ext}/Catalog/getServices'.format(ext=self.API_KEY)) r = requests.get(url) retval = r.json() - #cache.set(cache_key, retval, 60*60*24*7) - return retval + # cache.set(cache_key, retval, 60*60*24*7) + return filter(lambda s: s['LocalCode'] in ['E', 'T'], retval) def get_services_tuple(self): retval = map(lambda services: (services['LocalCode'], services['Name'],), self.get_services()) @@ -66,14 +114,205 @@ class AlemTat(object): Contract=self.CONTRACT, ) r = requests.post(url, data=post_data) - return r.json() + if r.json()['AmountPlusFSAmount'] > 0: + return r.json() + else: + return self.get_amount_alternative(to, places, weight, service) + + ZONES_E = ( + (0.3, ( + (1, 1480), + (2, 1590), + (3, 1920), + (4, 2430), + (5, 2900), + ),), + (0.5, ( + (1, 1900), + (2, 2280), + (3, 2450), + (4, 2850), + (5, 3100), + ),), + (1, ( + (1, 2432), + (2, 2440), + (3, 2700), + (4, 3300), + (5, 3510), + ),), + (1.5, ( + (1, 2584), + (2, 2700), + (3, 2830), + (4, 3500), + (5, 3780), + ),), + (2, ( + (1, 2704), + (2, 2830), + (3, 2950), + (4, 3650), + (5, 3900), + ),), + (2.5, ( + (1, 2824), + (2, 2950), + (3, 3070), + (4, 3780), + (5, 4020), + ),), + (3, ( + (1, 2944), + (2, 3070), + (3, 3200), + (4, 3900), + (5, 4150), + ),), + (3.5, ( + (1, 3064), + (2, 3200), + (3, 3300), + (4, 4020), + (5, 4550), + ),), + (4, ( + (1, 3184), + (2, 3300), + (3, 3430), + (4, 4150), + (5, 4680), + ),), + (4.5, ( + (1, 3304), + (2, 3430), + (3, 3560), + (4, 4250), + (5, 4810), + ),), + (5, ( + (1, 3424), + (2, 3560), + (3, 3640), + (4, 4380), + (5, 4890), + ),), + ) + + ZONES_T = ( + (5, ( + (1, 1300), + (2, 1500), + (3, 1700), + (4, 2500), + (5, 2500), + ),), + (10, ( + (1, 1550), + (2, 2050), + (3, 2550), + (4, 2750), + (5, 3750), + ),), + (30, ( + (1, 4550), + (2, 6050), + (3, 7550), + (4, 8750), + (5, 11750), + ),), + (60, ( + (1, 9050), + (2, 12050), + (3, 15050), + (4, 17750), + (5, 23750), + ),), + (100, ( + (1, 15050), + (2, 20050), + (3, 25050), + (4, 31750), + (5, 41750), + ),), + ) + + def get_weight_price(self, zone, weight, service): + retval = 0 + + if zone == 0: + return retval + + if service == 'E': + + zones_prices = dict(self.ZONES_E) + if weight <= 0.3: retval = dict(zones_prices[0.3])[zone] + elif weight <= 0.5: retval = dict(zones_prices[0.5])[zone] + elif weight <= 1: retval = dict(zones_prices[1])[zone] + elif weight <= 1.5: retval = dict(zones_prices[1.5])[zone] + elif weight <= 2: retval = dict(zones_prices[2])[zone] + elif weight <= 2.5: retval = dict(zones_prices[2.5])[zone] + elif weight <= 3: retval = dict(zones_prices[3])[zone] + elif weight <= 3.5: retval = dict(zones_prices[3.5])[zone] + elif weight <= 4: retval = dict(zones_prices[4])[zone] + elif weight <= 4.5: retval = dict(zones_prices[4.5])[zone] + elif weight <= 5: retval = dict(zones_prices[5])[zone] + elif weight > 5: + retval = dict(zones_prices[5])[zone] + plusweight = ( + (1, 456), + (2, 460), + (3, 465), + (4, 630), + (5, 650), + ) + retval += int(weight-5) * dict(plusweight)[zone] + + if service == 'T': + zones_prices = dict(self.ZONES_T) + plusweight = ( + (1, 150), + (2, 200), + (3, 250), + (4, 300), + (5, 400), + ) + if weight <= 5: retval = dict(zones_prices[5])[zone] + elif weight <= 10: retval = dict(zones_prices[10])[zone] + elif weight > 10 and weight < 30: + retval = dict(zones_prices[10])[zone] + retval += int(weight-10) * dict(plusweight)[zone] + elif weight >= 30 and weight < 60: + retval = dict(zones_prices[30])[zone] + retval += int(weight-30) * dict(plusweight)[zone] + elif weight >= 60 and weight < 100: + retval = dict(zones_prices[60])[zone] + retval += int(weight-60) * dict(plusweight)[zone] + elif weight >= 100: + retval = dict(zones_prices[100])[zone] + retval += int(weight-100) * dict(plusweight)[zone] + + return retval + + + def get_amount_alternative(self, to, places, weight, service): + retval = dict(AmountPlusFSAmount=0) + zone = 5 + try: + zone = dict(self.ZONES_FROM_UK_E)[to] + except: + pass + + retval['AmountPlusFSAmount'] = self.get_weight_price(zone, weight, service) + + return retval def alemtat_get_cities_tuple(): a = AlemTat() return a.get_cities_tuple() + def alemtat_get_services_tuple(): a = AlemTat() return a.get_services_tuple() - diff --git a/store/migrations/0024_auto_20150620_1248.py b/store/migrations/0024_auto_20150620_1248.py new file mode 100644 index 0000000..e18f869 --- /dev/null +++ b/store/migrations/0024_auto_20150620_1248.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('store', '0023_auto_20150619_1520'), + ] + + operations = [ + migrations.AlterField( + model_name='orderdata', + name='deliv_type', + field=models.CharField(verbose_name='Способ доставки', max_length=2, choices=[('E', 'Экспресс-отправления по РК'), ('T', 'Не срочные отправления по РК')], default=''), + ), + ]