

		Bu text dkmani tamamen okuyup okuduklarinizi mutlaka demo programda uygulamanizi tavsiye ederiz. Kafanizdaki bir ok soruya bu 
	sekilde hizlica cevap bulabileceksiniz.


- ExtTest.Net projesi InposExt.Net.dll (32 bit dll) kullandigi iin her zaman x86 olarak derlenmelidir. Any CPU veya x64 64-bit islemcilerde alismayacaktir. 
Hata olarak "An unhandled exception of type 'System.BadImageFormatException' occurred in Microsoft.VisualStudio.HostingProcess.Utilities.dll" bezeri bir dns alir.
Farkli bir projede de InposExt.Net.dll kullanilirsa konfigurasyon olarak x86 platformu seilmelidir. 

- ExtTest.Net ayrica windows ortamda derlenmis oldugu ve 32 bit dll kullandigi iin bazi windows runtimelarina ihtiya duyabilir. Alacaginiz "inposext.dll bulunamadi"
hatalarinda runtimelari kontrol etmenizi tavsiye ederiz. Mutlaka bulunmasi gereken runtime'lar;

	1. Microsoft Visual C++ Redist 2010 x86
	2. Microsoft Visual C++ Redist 2012 x86
	3. Microsoft Visual C++ Redist 2013 x86
	4. Microsoft Visual C++ Redist 2015-2022 x86

runtime'laridir. Bunlar yklendikten sonra sorun zlecektir.

- ExtTest.Net InposExt.Net dll'ini kullanir. Referans olarak bulamazsa projenizde doru yerden aldigini gstermeniz gerekmektedir. Hata olarak "inposext.dll ya da
inposext.Net.dll bulunamadi." benzeri bir dns alir.

- InposExt.Net.dll'nin kullandigi dll'leri doru dizine (rnek olarak ayni dizine) kopyalanmalidir.

- InposExt.Net.dll ve inposext.dll bagimli oldugu libeay32.dll, qtCore4.dll qtNetwork.dll 'leri mutlaka ayni dizinde olmalidir.


- Cihazin ve entegre olacagi uygulamanin alistigi ortamda gmp3.exe adini verdigimiz bir uygulama ile eslenmesi gerekmektedir. Her seyden nce mutlaka bu yapilmalidir.
Bu uygulama ile cihaz - Pc arasinda TCP protokol ile kullanilacak ip ve port zerinden bir network olusturulur. Cihazda da bu ayarlar kaydedilmis olur. Bu network aktif
kaldigi srecek gmp3.exe uygulamasini bir daha kullanmaya gerek yoktur. One-time bir uygulamadir.

-Esleme yapildiktan sonra demo uygulama zerinde sol stte "Kasiyer Adi" altinda olan kutucuga cihaz sicili girilir. Yanina esleme yapilmis ip girilir. Onun yaninda da
port no bilgisi girilerek, "Baglan" butonu ile cihaza baglanti saglanmis olur.

- m530 cihazi durum sorgu sonularina gre islem yapilabilirlige sahip bir cihazdir. Cihaza gnderilecek komuttan nce mutlaka cihazin durumu sorgulanmali, dnen sorgu 
sonucuna gre islem yaptirilmalidir. Kullanilmasi gereken sorgularin metod isimleri ise "ecrState" ve "saleState" olarak ikiye ayrilir. Ayrica bu durumlar,
"inposEcrState" ve "inposEcrSaleState" olarak enumlandirilmistir. Bu enumlari asagida detaylandirdik. Incelemenizi tavsiye ederiz. 

	a. ecrState  => m530 cihazinin genel ekranlarinin konumu dndrr. "inposEcrSaleState", "inposEcrMainMenu" seklinde dns yapar. 

	b. saleState => m530 cihazinin satis konumunda oldugu durumda, satisin da kendi durumlari mevcuttur. Sorgu, bu durumlari dndrr. "inposSaleWaitingForInput"
seklinde dns yapar. Ayrica bu konumda yapilan satis durumu sorgusu, o anki fisno ve zno degerlerini cihazdan alarak, kullanildigi takdirde receiptData() metoduyla
yapilan parali demelerin tutarlarini ve deme tiplerini dndrr. Bu metod sayesinde parali demelerin basarili olup olmadigi kontrol edilmis olur.

	Konuyu ufak bir rnekle aiklamak gerekirse;

	1. Cihazin kasiyer girisi yapilan ekranda oldugunu varsayalim ve bir satis yapmak isteyelim. Burada ecrState sorgusu yaptiginizda sonu olarak inposEcrLogin
konumunda oldugunu dnecektir. Bu sonuca gre kasiyer girisi yapmaniz gerektigini anlayip giris yaparak cihazda kullanici girisi yapilmasi saglanmalidir. 

	2. Kasiyer girisi saglandiktan sonra cihaz durumu sorgusu (ecrState) dns olarak "ecrMainMenu" dnecektir. Burasi cihazin ana mensdr. Satis baslatma islemleri
rapor islemleri, ek kopya islemleri bu mende yapilir. Bu mende satis sorgusu (saleState) yapilirsa, hata dnecektir nk satis baslamadi. Satis gereklestirmek iin
startSale metodu alistirilir ve cihaz satisa geer.

	3. Satis ekraninda cihaz durumu sorgusu (ecrState) dns olarak "ecrSale" olarak dnecektir. Cihazin satis ekrani burasidir. Kalem ekleme, deme ekleme, o anki
aktif olan satis iin fis sorgusu yapilabilir. Burada rnegin ecrLogin metodu yani kasiyer giris metodu alistirilirsa, zaten hali hazirda kasiyer girisi yapilmis oldugu iin
hata dnecektir(inposInvalidOperationError)

	4. Kalemler eklenir. Eklenecek olan kalemlerin kaynak kodda designer formunda da greceginiz zere birden fazla degiskeni vardir(item.name, item.section vb.) Bu degerler
dogru sekilde doldurulup kalem eklemesi yapilir. Bu adimda yapilacak sorgular cihaz zaten hala satista oldugu iin ecrSale ve inposSaleWaitingForInput olarak dnecektir

	5. deme ekleme ya da satis sonlandirma yapilir. Eger parali bir satis sz konusu degilse endSale() metodu deme tipi set edildikten sonra gnderilebilir. Yapilan 
satis parali ise burada addPayment() metodu kullanilmali. Bu metod tahsil edilecek tutar bilgisi ve deme tipini alir cihaza gnderir. deme gereklestikten sonra 
kalan tutarlarda ayni sekilde kesilebilir.

	6. Satisin sonlanmasi durumunda cihaz konumu (ecrState) ecrMainMenu olarak dnecektir. Satis eger basarili bir sekilde tamamlanirsa bu konuma dndgn grmeniz
kritiktir. Satisin sonlandigini bu sekilde anlamak mmkndr. Satisin gereklesmemesi durumunda cihaz konumu(ecrState) ecrMainMenu'ye dnmeyip satista(ecrSale) durumunda
kalacaktir ve satis durumu sorgusu(ecrSaleState) inposWaitingForInput ya da inposSaleIdle olarak grnecektir.

	NEMLI NOT:
		Kredi karti satislarinda deme eklenirken ya da satis sonlandirirken, satis her seye ek olarak bir konuma daha geis yapar. Burasi kartin okutuldugu konumdur.
	ecrState = ecrSale ve ecrSaleState = inposWaitingForTransactionCompleted olarak dns yapacaktir. "inposWaitingForTransactionCompleted" satis konumu cihazin kartli islem 
	baslattigini gsterir. Burada msteri karti okutmalidir ve internet hizina bagli olarak bankanin demeyi tahsil etmesi beklenir. Kartli islem sonunda islemin tamamlandigi bilgisi
	yine eger tm deme alindiysa ecrState ile, eger parali demenin bir parasi yapildiysa receiptData() metoduyla grenilebilir.

	NEMLI NOT 2:
		Yazarkasa ile uygulamanin birbiriyle haberlesmesinde aksakliklar olmamasi iin ve kullanicinin mmkn oldugunca sadece uygulamayi kullanmasi iin
	cihazin tuslarinin kilitlenmesini kesinlikle tavsiye ederiz "blockEcrKeys()". Aksi takdirde disaridan mdahaleler saglikli bir entegrasyonun nne geebilir.

- Yazarkasa durumlari, satis durumlari ve hata(inposExtError) sonularindan dnen enumlarin aiklamalarini asagida bulabilirsiniz.

	1. Yazarkasa durumlari (inposEcrState)
		a. InposEcrInitialization 			= 0	=> Yazarkasanin entegrasyona baglanti kurmadigi durumdur. initialize() metodu alistirilmalidir.
		b. InposEcrIdle					= 1	=> Yazarkasanin bosta oldugu durumdur.
		c. InposEcrNotUsable 				= 2	=> Yazarkasanin mali islem yapamayacagi menlerde oldugu durumlardir. Servis ekrani buna rnektir.
		d. InposEcrError 				= 3	=> Yazarkasada bir hata oldugu durumdur. Yazici hatasi buna rnek olabilir.
		e. InposEcrLogin 				= 4	=> Yazarkasanin kasiyer giris ekraninda oldugu durumdur.
		f. InposEcrSale 				= 5	=> Yazarkasanin satis ekraninda oldugu durumdur.
		g. InposEcrSaleWithInvoice 			= 6	=> Yazarkasanin faturali satista oldugu durumdur.
		h. InposEcrMainMenu 				= 7	=> Yazarkasanin ana ekranda oldugu durumdur.
		i. InposEcrReports 				= 8 	=> Yazarkasanin raporlar mensnde oldugu durumdur.
		j. InposEcrZReportRequired 			= 9	=> Yazarkasanin zorunlu z almasi gerektigi durumdur.
		k. InposEcrPrintingMerchantSlip 		= 10	=> Yazarkasanin isyeri slibi bastigi durumdur.
		l. InposEcrSaleWithCardPaymentCanceled		= 13	=> Kredi kartiyla alinmis parali demenin iptal edilmesi iin kart okutulmasini bekleyen durumdur.
	
	2. Satis durumlari (inposEcrSaleState)
		a. InposSaleIdle 				= 0 	=> Satisin bosta oldugu durumdur.
		b. InposSaleWaitingForInput 			= 1	=> Satisin aktif oldugu ve kalem ya da deme bilgisi beklenen durumdur.
		g. InposSaleWaitingForTransactionCompleted	= 6	=> Satisin kredi karti iin banka uygulamasina gnderildigi durumdur.(Kart okuma)
		h. InposSaleDataFinalized			= 15	=> endSale() metoduna bagli bir durumdur. Satisin bittigini belirtir.

	3. Hata Kodlari (inposExtError)
		a. InposNoError					= 0 	=> Metod alisirken bir hata olmadigini gsterir.
		b. InposNotInitializedError			= 1 	=> Yazarkasanin entegrasyona init olmadigini gsterir.
		c. InposConnectionError				= 2 	=> Yazarkasanin entegrasyon ile baglantisinin koptugunu gsterir.
		d. InposInvalidArgumentError			= 4 	=> Metodlarda kullanilan parametre degerlerinde bir hata oldugunu gsterir.
		e. InposInvalidEcrStateError			= 6 	=> Kullanilan metodun dogru cihaz konumunda alistirilmadigini gsterir.
		f. InposInvalidSaleStateError			= 7 	=> Kullanilan metodun dogru satis konumunda alistirilmadigini gsterir.
		g. InposInvalidOperationError			= 8 	=> Kullanilan metodun dogru cihaz konumu ya da satis konumunda alistirilmadigini gsterir.
		h. InposNoPrinterPaperError			= 9 	=> Cihaz fis basarken yazicida kagit bittigini belirtir.
		i. InposGmp3PairingError			= 10	=> Yapilan esleme islemi basarili olsa bile eski versiyon dll ya da gmp3.exe kullanildigini gsterir.
		j. InposExternalPrinterError			= 14 	=> Kullanilan harici yazicida bir sorun oldugunu belirtir.
		k. InposReportPrintingError			= 15 	=> ikartilacak raporun ikartilamadigini belirtir.
		l. InposSaleNotFinishedError			= 101 	=> endSale() metodu iin receiptData metodunun fisin basilmasinin daha bitmedigi sirada kullanildigini gsterir.	
	
- Toplam tutara ya da kaleme indirimleri yapilacaksa;
	
	1. Kaleme indirim  -> Eklenecek rne indirim orani ya da indirim tutari verilir kalem bu sekilde eklenir. 
	2. Toplama indirim -> Toplama indirim, addSaleItem() kullanilarak rn birim fiyati 0 ve indirim orani ya da tutari girilerek yapilir.

- Faturali satislar icin akis adim adim su sekildedir:

	1. startSaleWithInvoice()    => Faturali satis baslatma komutu.
	2. addSaleItem()	     => Kalemler eklenir
	3. addPayment() || endSale() => Satis sonlandirilir
		Bu aamada cihazn ekranna nihai tketici / mkellef seenei gelecektir. Ayrca cihaz sorgusu "InposEcrSaleWithInvoice" olarak dnecektir. Cihaz zerinden bir secim yapmadan
		sonraki adima gein.
	4. endSaleWithInvoice()	     => Faturali satis parametreleri ile sonlandirilir.

- Avans ve Cari Hesap iin akis su sekildedir:

	1. startSale()		     => Satis baslanir.
	2. addSaleItem()	     => Avans ya da cari hesap kesilecek tutar kadar kalem eklemek zorunludur ama fise yansimayacaktir.
	3. Sat tipi Cari Hesap olarak deitirilir.
	4. addPayment()		     => Yapilmak istenen avans ya da cari hesap tutari eklenir.
	5. endSaleWithInvoice()	     => Iki tahsilat tr de bilgi fisi oldugu iin satis fatura keserek sonlandirilir.

- Verilmis olan inposext.dll uygulama alistirildiginda ayni dizine txt olarak iki adet log dosyasi olusturacaktir. Karsilastiginiz hatalarda bu loglari incelemenizi
anlasilmayan noktalarda da bizlerden bilgi almanizi; bunun yaninda olusan loglar biraz byk dosyalara dnsebilecegi iin ara ara dosyalari silmenizi tavsiye ederiz.

- Debug klasr iinde bulunan dll'lerde yenilik olarak yemek karti demesi alabilecek metotlar eklenmistir. Demo proje iinde deme tipi combobox'tan yemek karti olarak
seilip, altindaki combobox'tan ise yemek karti tipi seilmelidir. Eklenen demeler sadece bilgi amali oldugu iin receiptData() metodunda bulunan amountToPay degiskenine 
yemek karti deme tutari eklenmeyecek olup, totalAmount degiskenine eklenecektir.
Yapilan yemek karti demeleri eger parali degilse(rnek: nakit - yemek karti veya kredi karti - yemek karti) basilan fis bilgi fisi olarak ikacaktir. Eger parali deme
var ise fis bilgi fisi olarak ikmayip sadece nakit ve kredi karti tutarlari kdv'ye ve toplama yansiyacaktir. Yemek karti ile alinan demenin alindi bilgisi basilacaktir.

- Fis zerine bilgi yazmak iin kullanilabilecek bir alan mevcuttur. cashierName her satis ncesi set edilir. Bu alanin bir karakter sinirlamasi bulunmamaktadir ancak bu kisim
zerinde dzenleme yapilirken alt satira gemesi iin bir zm retmeniz gerekecektir. Yazarkasanin kendi slibi tek satira maksimum 48 karakter alabilir. 49. karakter otomatik
olarak alt satira kendisi geecektir.

- Cihaza harici yazici baglamak mmkndr. Bu islem 3 farkli sekilde yapilabilir. Cihazda servis mens iinde sirayla "Diger - Harici Yazici" blmne gidilip burada baglanacak
yazici tipi seilir. Ekranda grdgnz 2-3 model ile direkt entegremiz bulunmaktadir. Bu cihazlar haricinde yazici baglamak iin ise ESC/POS seenegi ile devam edilebilir.
ESC/POS standartlarina uyan yazicilar bu seenek ile cihaza baglanabilir. 

	NEMLI NOT: 
		Hali hazirda entegrasyonumuz bulunan firmalardan aldigimiz bilgilere nazaran, birok ESC/POS standartlarina uydugunu belirten ama aslinda uymayan yazici modeliyle
	karsilastik. Yaptigimiz testlerde kimi yazicilarin trke karakterleri algilama ya da algilasa bile dogru standart zerinden geri mesaj atamama sorunu, mali mhr simgesi(MF)
	tanimama, seri port, network, usb seeneklerinden bazilarini karsilamama gibi sorunlari oldugunu tespit ettik. Entegrasyon sayisi arttika da harici yazicilarda olusan 
	baglanti kopmalari, karakter basamamalari vs. gibi sorunlar iin dzenleme islemleri sirf yazici standartlara dzgn uymadigi bunun yaninda ok uzun ve ciddi bir alisma gerektirdigi
	iin artik alismayan yazicilar iin destek vermeyi kestik. Daha iyi zmler sunabilmek iin ise alternatifler yaratmaya bir yandan da alismaktayiz. Anlayisiniz iin tesekkr ederiz.

- Yazici usb,ag,seri port olmak zere 3 farkli sekilde baglanabilir.

- Entegrasyonu tamamladiginizda mutlaka test etmenizi tavsiye ederiz. Sahada olusabilecek durumlar iin birka test senaryosunu asagida bulabilirsiniz.Bu senaryolar haricinde kullanilacak
yerde olusabilecegini dsndgnz sorunlar iin kendi test yntemlerinizi de dsnp denemeniz olduka nemlidir.

	1. Baglanti hatalari: Satis esnasinda ya da ncesinde hatta sonrasinda etherneti skp hata almaya alisin. Tekrar baglanmaya alistiginizda neler oldugunu tespit edin ve buna
gre entegrasyonunuzda gerekiyorsa dzenlemelere gidin.

	2. Satis iptalleri: m530 cihazinin nemli zelliklerinden biri, parali demede alinmis bir para deme varken satis iptali yapilabilmesidir. Parali tahsilat yapilmisken zellikle
kredi karti tahsilati yapilmisken islem iptal edilebilir. Bu durumda cihaz, satisin iptal oldugunu bu sebep ile yapilmis olan demenin iptalinin yapilmasini isteyecektir. Bu senaryo mutlaka
test edilmelidir. EcrState ve EcrSaleState metodlari kullanilarak cihazin durumlarini da kontrol etmeyi unutmayin.

	3. st ste metod alistirmayi deneyin. Alinabilecek hatalara gre dzenlemelerinizi yapin.
	4. Testlerinizi hem demo uygulamada hem kendi uygulamanizda deneyin.




Versiyon 0.19.1

addPayment_Click() metodu:
1. 	artk deme gnderilince, gnderilen deme baarlysa "deme alnd" ve "isPaymentOk = true" dnleri yapyor.
	gnderilen deme baarsz ise "deme alnmad" ve "isPaymentOk = false" dn yapyor.
2.	Toplam tahsilat tutar addPayment ile tamamlanrsa otomatik fi kesip sat bitiren bir yaps zaten bulunuyordu. Artk sat biterse
	"Sat tamamland." ve "isSaleEnd = true" dnleri yapyor.
3.	Demo uygulama iinde isSaleEnd ve isPaymentOk return edilen birer deiken deil. Kendi kullanmak istediiniz ekle gre maniple edebilirsiniz.
4.	Metodun iinde yazarkasa ve sat durum sorgular internalCheckEcrStatus() ve internalCheckSaleStatus() metodlaryla kontrol edilmektedir. Bu metodlar iinde
	eer sorgu srasnda balant kopmas durumu yaanmsa reconnect() isimli metod arlp tekrar balant kurulmas beklenir. Bu metodlar bir while dngs iinde
	balant tekrar gelene kadar ve statik bir hata says durumu salanana kadar deneme yaplr. Balant hatas deikeninin dn saysnn fazlalna gre
	balant gelmemesi durumunda uzun sreler bekleme yaayabilirsiniz. Kendinize gre bunu drp en ideali bulmak denenebilir.
5.	Fatural sat balatldktan sonra ya da avans ve cari hesap kesimleri yaplrken fatura parametreleri dolu bir ekilde addPayment_Click() altrlrsa
	cihaz otomatik olarak bekleme yapmadan faturay sonlandrr. 
6.	Yemek kart demelerinde, deme tipi yemek kart seildikten sonra alttaki combobox ile yemek kart acquirer(yemek kart tipi) seerek deme alnmaldr.
7.	Bu versiyonla beraber havale/eft deme tipi eklenmitir.
8.	Bu dll versiyonuyla beraber sahadaki cihazlarn da gncellemesi yapld. Sahadaki cihazlar eer gncellenmediyse bu dll alrken sorunlarla karlaabilirsiniz.
9.	.net.dll iinde deme kontrolleriyle ilgili ufak eklemeler yapld. 
10. Login_Click() metodu iinde, kasiyer girii yapldktan sonra cihazn z raporu almas gerektii bilgisi gelirse otomatik z raporu alma ilemi yapmas salanmtr.



nemli Not:
	1. Ltfen testlerinizi dikkatli yapn. Gnderdiiniz her komuttan sonra cihaz ekranna mutlaka bakn. Deiimleri takip edin.
	2. Mutlaka cihazn tu takmn kilitleyin.
	
	


