Örnek 1 - Belirli Bir Grup Cariye Toplu Dekont

Senaryo :

Ankara şehri, Sincan ilçesinde bulunan cariler için toplu borç dekontu (cari hesap fişi) oluşturulmak istenmektedir.

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

Örnek Kod (python):

# -*- coding: utf-8 -*-
'''
Örnek çalışma:
Ankara, Sincandaki tüm carilere 150 TL alacak dekontu oluştur.
'''
import sys
import json
from pprint import pprint
import urllib2

# 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 : İŞLEM YAPILACAK CARİ KARTLARI TESBİT EDELİM

# scf_carikart_listele servisine ilgili filtreyi uygulayarak carileri alalım
postBody = {"scf_carikart_listele" :
    {"session_id": session_id,
     "firma_kodu": firma_kodu,
     "donem_kodu": donem_kodu,
     "filters":[{"field": "sehir", "operator": "=", "value": "ANKARA"},
                {"field": "ilce", "operator": "=", "value": "Sincan"}],
     "sorts": [{"field": "carikartkodu",  "sorttype": "ASC"}],
     "params": {},
     "limit": 0,
     "offset": 0
    }
}

wsResult = callWs(wsAdresMain + 'scf/json', postBody)
cariKartlarResult = wsResult['result']
print u"Toplam %d adet cari bulundu" % len(cariKartlarResult)

############################################
# 3. AŞAMA : GELEN CARİLERİ İÇİN BORÇ DEKONTU OLUŞTURALIM

# Oluşacak borç dekontu için uygun fiş numarasını bulalım.
# sis_numara_getir servisi sıradaki numarayı getirir
postBody = {"sis_numara_getir" :
    {"session_id": session_id,
     "firma_kodu": firma_kodu,
     "donem_kodu": donem_kodu,
     "table_name": "scf_carihesap_fisi",
     "column_name" : "fisno"
    }
}

wsResult = callWs(wsAdresMain + 'sis/json', postBody)
fisNo = wsResult['result']['kod']
print u"Cari Hesap Fiş Numarası: %s" % fisNo

# Önceden aldığımız cari hesap bilgilerini kullanarak
# cari hesap fişi kalemlerini oluşturulım
cariFisKalemleri = []
for cariKart in cariKartlarResult:
	cariFisKalemleri.append(
							{
		                  	"_key_scf_carikart": cariKart['_key'],
  		                   	"_key_sis_doviz": {"adi": "TL"},
		                    "_key_sis_doviz_raporlama": {"adi": "TL"},
		                  	"aciklama": "Aidat dekontu",
		                  	"alacak": "0.00",
		                  	"borc": "150.00",
		                  	"dovizkuru": "1.00",
		                  	"raporlamadovizkuru": "1.00",
		                  	"vade": "2017-09-30"
		                  	}
							)

# Cari hesap fişini ekleyelim.
postBody = {"scf_carihesap_fisi_ekle" :
    {"session_id": session_id,
     "firma_kodu": firma_kodu,
     "donem_kodu": donem_kodu,
      "kart":
            {
            "_key_sis_sube": {"subekodu": "SUBE001"},
            "aciklama1": "Aidat",
            "fisno": fisNo,
            "m_kalemler": cariFisKalemleri,
            "saat": "10:00:00",
            "tarih": "2017-09-30",
            "turu": "BD"
            }
      }
}

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

print u"Borç dekontu ekleme işlemi tamamlandı!"