@ -1,12 +1,59 @@
import requests
import requests
from django . core . cache import cache
from django . core . cache import cache
class AlemTat ( object ) :
class AlemTat ( object ) :
COUNTRY_CODE = ' 0001 '
COUNTRY_CODE = ' 0001 '
CITY_CODE = ' 000003 '
CITY_CODE = ' 000019 '
API_KEY = ' 677a8773-c647-4b8f-8968-32a67d55e0d3 '
API_KEY = ' 677a8773-c647-4b8f-8968-32a67d55e0d3 '
CONTRACT = ' 05828/ИМ '
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 ) :
def _build_url ( self , url ) :
# url = url.replace('\{ext\}', API_KEY)
# url = url.replace('\{ext\}', API_KEY)
retval = url
retval = url
@ -18,13 +65,14 @@ class AlemTat(object):
def get_cities ( self ) :
def get_cities ( self ) :
cache_key = ' alemtat_cities '
cache_key = ' alemtat_cities '
retval = None # cache.get(cache_key, None)
retval = None # cache.get(cache_key, None)
if not retval :
if not retval :
url = self . _build_url (
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 )
r = requests . get ( url )
retval = r . json ( )
retval = r . json ( )
#cache.set(cache_key, retval, 60*60*24*7)
# cache.set(cache_key, retval, 60*60*24*7)
return retval
return retval
def get_cities_tuple ( self ) :
def get_cities_tuple ( self ) :
@ -34,14 +82,14 @@ class AlemTat(object):
def get_services ( self ) :
def get_services ( self ) :
cache_key = ' alemtat_services '
cache_key = ' alemtat_services '
retval = None #cache.get(cache_key, None)
retval = None # cache.get(cache_key, None)
if not retval :
if not retval :
url = self . _build_url (
url = self . _build_url (
' http://api.alemtat.kz/web/ {ext} /Catalog/getServices ' . format ( ext = self . API_KEY ) )
' http://api.alemtat.kz/web/ {ext} /Catalog/getServices ' . format ( ext = self . API_KEY ) )
r = requests . get ( url )
r = requests . get ( url )
retval = r . json ( )
retval = r . json ( )
#cache.set(cache_key, retval, 60*60*24*7)
# cache.set(cache_key, retval, 60*60*24*7)
return retval
return filter ( lambda s : s [ ' LocalCode ' ] in [ ' E ' , ' T ' ] , retval )
def get_services_tuple ( self ) :
def get_services_tuple ( self ) :
retval = map ( lambda services : ( services [ ' LocalCode ' ] , services [ ' Name ' ] , ) , self . get_services ( ) )
retval = map ( lambda services : ( services [ ' LocalCode ' ] , services [ ' Name ' ] , ) , self . get_services ( ) )
@ -66,14 +114,205 @@ class AlemTat(object):
Contract = self . CONTRACT ,
Contract = self . CONTRACT ,
)
)
r = requests . post ( url , data = post_data )
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 ( ) :
def alemtat_get_cities_tuple ( ) :
a = AlemTat ( )
a = AlemTat ( )
return a . get_cities_tuple ( )
return a . get_cities_tuple ( )
def alemtat_get_services_tuple ( ) :
def alemtat_get_services_tuple ( ) :
a = AlemTat ( )
a = AlemTat ( )
return a . get_services_tuple ( )
return a . get_services_tuple ( )