İçindekiler

Örnek 4

Senaryo :

Belirli bir formatta barkod üretip stok kartına atama, örneğin: stok kodu (integer değeri) + kdv oranı + ean13 değeri. Örnekte sadece stok kart kodu 000010-000020 arasındaki kartlar için uygulanmıştır.

Örnekler diademo sunucusu üzerinde çalışmaktadır.

Örnek Kod (python):

# -*- coding: utf-8 -*-
'''
Örnek çalışma:
Belirli bir formatta barkod üretip stok kartına atama, stok kodu integer değeri + kdv oranı + ean13 değeri.
Stok kart kodu: 000010-000020 arasındaki stoklar sadece
'''
import sys
import json
from pprint import pprint
import urllib2
import base64

# servis çağrısı atılacak adres ön eki
wsAdresMain = 'https://diademo.ws.dia.com.tr/api/v3/'

# diademo sunucusundaki ilgili firma kodu
firma_kodu = 34

# diademo sunucusundaki ilgili dönem kodu
donem_kodu = 1

def callWs(wsAdres, postBody):
	# Gönderilen adrese, gönderilen json çağrısı atar,
	# sonuç başarılıysa döndürür, yoksa çıkar
	req = urllib2.Request(wsAdres,
						  data=json.dumps(postBody),
						  headers={"Content-Type": "application/json"})
	wsResult = urllib2.urlopen(req).read()
	wsResult = json.loads(wsResult)

	# sonuç kodu 200 döndüyse başarılı
	if wsResult and wsResult['code'] == '200':
		# msg içerisinde sessin id çıkaralım
		return wsResult
	else:
		pprint(wsResult)
		sys.exit(0)

############################################
# 1. AŞAMA : SESSION ID ALALIM

# login ws parametreleri
postBody = {"login" :
			{"username": 'ws',
			 "password": 'ws',
			 "disconnect_same_user": True,
			 "lang": 'tr',
			}
		}

wsResult = callWs(wsAdresMain + 'sis/json', postBody)
session_id = wsResult['msg']
print "session_id: %s" % session_id

############################################
# 2. AŞAMA : İlgili stokları bulalım

# scf_stokkart_listele servisine ilgili filtreyi uygulayarak stoğu alalım
postBody = {"scf_stokkart_listele" :
    {"session_id": session_id,
     "firma_kodu": firma_kodu,
     "donem_kodu": donem_kodu,
     "filters":[{"field": "stokkartkodu", "operator": ">=", "value": "000010"},
			    {"field": "stokkartkodu", "operator": "<=", "value": "000020"}]
    }
}

wsResult = callWs(wsAdresMain + 'scf/json', postBody)
stokKartlarResult = wsResult['result']
print u"%d adet stok kart bilgisi alındı" % len(stokKartlarResult)

############################################
# 3. AŞAMA : STOK KARTLARINA BARKOD ATAMASI YAPALIM

for stokKarti in stokKartlarResult:

	# stok kart kodu ve kdv satış ile başlayan uygun ean13 barkodu isteyelim.
	postBody = {"scf_stokkart_barkod_uret" :
			    {"session_id": session_id,
			     "firma_kodu": firma_kodu,
			     "donem_kodu": donem_kodu,
			     "params": {"turu": "EAN13", "onnumara": "%d%d" %(int(stokKarti['stokkartkodu']), float(stokKarti['kdvsatis']))}
			    }
			}

	barkodResult = callWs(wsAdresMain + 'scf/json', postBody)

	# Stok kartı ana birimine ilgili barkodu ekleyelim.
	postBody = {"scf_stokkart_guncelle" :
			    {"session_id": session_id,
			     "firma_kodu": firma_kodu,
			     "donem_kodu": donem_kodu,
			     "kart":
			            {
			            "_key": stokKarti['_key'],
			            "m_birimler": [{
			                            "_key": stokKarti['anabirimkey'], # sadece ana birimde çalışacağız
			                            "m_barkodlar": [{
			                                            "barkod": barkodResult['msg'],
			                                            "teraziyegonder": "H",
			                                            "turu": "S"}]
			                            }
			                           ]
			            }
			    }
			}

	callWs(wsAdresMain + 'scf/json', postBody)

	print u"%s -> %s eklendi." % (stokKarti['stokkartkodu'], barkodResult['msg'])

print u"İşlem tamamlandı."