******* Do ReadRDCard With 1 In RdCard.Prg
******* START OF RDCard.SPR
******* ไฟล์ของ RdCard RDNIDlib.dll  ,RDNIDlib64.dll  , RDNIDlib.DLX  ,
*******  RdOK.Hav ,  
******   RdError.Hav  , RdCardExp.txt  ,RdCardExp.warn (ถ้ายังมีปัญหาให้ลบ)

Procedure ReadRDCard
** nRdFormACT=1  && ส่งมาจากต่าง Form 
If Type('nRdFormACT')<>'N'
	cFoxMessColor="RGB(255,0,0)" && แดง
	Do Fox_Mess With 'อยู่ระหว่างการพัฒนา'
	Return 
Endif 
nRdFormACT=Iif(Type('nRdFormACT')='N',nRdFormACT,1)    && 1=เข้าพัก 2=แก้ประวัติ
If !FLDHVFL('RDCard64.Exe')
	Do Fox_Mess With 'ไม่พบไฟล์ RDCard64.Exe'
	Return 
Endif 
** แก้โปรแกรมให้ทำงานได้ตามปรกติ 
If !File('RdOK.Hav')
	If File('RdCardExp.txt')
		Copy File RdCardExp.txt To RdOK.Hav
	Else
		Copy File Data\FILEHAVE.DIR To RdOK.Hav
	Endif 
Endif 
If File('RdError.Hav')
	Delete File RdError.Hav
Endif 
***
If !File('RdCardAnswer.tx0')
	Txt="Run /n RDCard64.Exe"	
	&Txt 
Endif 
Private OldAlias
cTmRdCard=Space(0)
OldAlias=Alias()
nRecinGuest=Recno('Guest')
m.iRunCard=0  && นับเวลา 
m.iRunStep=0  && ลำดับการทำงาน 
m.RdCardYesNO='0'  && มาจาก RDCard64.Exe
*****
m.cfRDSave=0 && YesNO หน้า FORM 
m.SeekandRDC=0  && 1=ค้นหาสมาชิกเก่าเจอและเลือกใช้ชื่อใหม่ 
nRecRdCard=0 && Record ของรายการเก่า  
****
**** เจอเป็นลูกค้าใหม่ 
m.rDocno_Id=Space(25)
m.rGuestName=Space(0)
m.rGuestaddr1=Space(0)
m.rGuestaddr2=Space(0)
m.rBirthdate=Date()
m.rexpirdate=Date()
m.rGuestSEX=Space(0)
***
nScrForm	=1  && สำหรับควบคุมแต่ละ FORM
Do Form RDCard Name ReadRDCard
If m.cfRDSave=1 && YesNO
	m.Docno_Id=m.rDocno_Id
	Select Guest 
	If nRecRdCard>0 .and. m.SeekandRDC=0  && เจอแต่ยังใช้ข้อมูลเก่า 
		m.PreName=Guest.PreName
		m.GuestName=Guest.GuestName
		m.Guestaddr1=Guest.Guestaddr1
		m.Guestaddr2=Guest.Guestaddr2
		m.Birthdate=Guest.Birthdate
		m.expirdate=Guest.expirdate
		m.GuestSEX=Guest.GuestSEX
	Else && ข้อมูลใหม่ 
		m.PreName=Space(0)
		m.GuestName=m.rGuestName
		m.Guestaddr1=m.rGuestaddr1
		m.Guestaddr2=m.rGuestaddr2
		m.Birthdate=m.rBirthdate
		m.expirdate=m.rexpirdate
		m.GuestSEX=m.rGuestSEX
	Endif 
	If nRecRdCard>0
		Scatter Memvar Field SubName,guesttel,Guestaddr3,Guestaddr4
		Scatter Memvar Field homeaddr1,homeaddr2,homeaddr3,homeaddr4,hometel
		Scatter Memvar Field TourCode,GuestEmail,ContactMan,Nation,MbType
		Scatter Memvar Field GuestMess,OptionMess,Tmno
		Scatter Memvar Field Occupation,plofissue
	Endif 
	If Used('Tourist') .and. !Empty(m.TourCode) .and. Seek(m.TourCode,'Tourist')
		m.Firstname=Tourist.Firstname
		m.Tourname=Tourist.Tourname
	Else 
		m.Firstname=Space(0)
		m.Tourname=Space(0)
	Endif 
	m.Nationname=Iif(Type('m.Nation')='C' .and. Used('Nation') .and. !Empty(m.Nation) .and. Seek(m.Nation,'Nation'),Nation.Nationname,Space(0))
	m.Typename=Iif(Type('m.MbType')='C' .and. Used('MbType') .and. !Empty(m.MbType) .and. Seek(m.MbType,'MbType'),MbType.Typename,Space(0))
	**** ค้นหาเลขที่ เดิม  Pipop
	*** Do Step 
	Do Case 
	Case nRdFormACT=2  && หน้าจอประวัติ ต้องเป็นลูกค้าเก่า เสมอ
		m.GuestNew=1 
		Go nRecinGuest In Guest  && เลื่อนไปรายการเดิม 
		If Type('cUPNWguest')='C' .and. !Empty(cUPNWguest)
			m.GuestCode=cUPNWguest
		Else
			m.GuestCode=Guest.GuestCode
		Endif 
	Case nRecRdCard>0    && ลูกค้าเก่า 
		m.GuestNew=1 
		m.GuestCode=Guest.GuestCode
	Otherwise 
		m.GuestNew=2 && ลูกค้าใหม่ 
		Do GenNewGuestCode In GuestRun.Prg
	EndCase
	***	
	Do ChgNm2Pre With m.PreName,m.GuestName In \Pos\Security\Prog\Sec4Prog
	Do AutoKeyPR With 1,6	
Endif 
If !Empty(cTmRdCard) .and. File(cTmRdCard)
	Delete File &cTmRdCard
Endif 
If !Empty(OldAlias) .and. Used(OldAlias)
	Select &OldAlias
Endif 
Return 
******* END OF RDCard.SPR


Function WRdCard
** เริ่มกระบวนการทำงาน
If File('_Card\RdCard.txt') .and. File('HoVFP.exe')
	Delete File _Card\RdCard.txt
Endif 
If File('FileHave.Opn')
	Delete File FileHave.Opn
Endif 
Copy File RdCardAnswer.tx0 To _Card\RdCardAnswer.txt && FileHave.Opn
Copy File RdCardAnswer.tx0 To _Card\FileHave.Opn  && เพื่อให้รู้ว่า กำลังเปิดโปรแกรม
Txt="Run /n RDCard64.Exe"	
&Txt 
ReadRDCard.cfRDSave2.SetFocus()
Return 


Procedure RdTime
nCardAudit=0  && สำหรับ Debug โปรแกรม 
m.iRunCard=m.iRunCard+1
Do Case 
Case m.iRunStep=1 && จะทำเป็นรายการที่ 2
	*ReadRDCard.cTimer.Enabled=.F.
	*ReadRDCard.cTimer.Interval=100*1000 && 10 วินาที แล้วทำงานต่อ
	*ReadRDCard.cTimer.Enabled=.T.
	If m.RdCardYesNO='1' && OK
		ReadRDCard.cfRDSave1.Click()
	Else
		ReadRDCard.cfRDSave2.Click()
	EndIf 
	Return 
Case !File('_Card\FileHave.opn')   && เครื่องอ่านบัตรทำงานเสร็จแล้ว จะทำเป็นรายการที่ 1
	cFoxMessColor="RGB(128,0,128)" && ม่วง
	**** Pipop
	If !File('HoVFP.Exe') .and. File('_Card\RdCard.rtf')
		Copy File _Card\RdCard.rtf To _Card\RdCard.txt
	Endif 
	**** Pipop
	If File('_Card\RdCard.txt') .and. nCardAudit=1
		Do Fox_Time With Alltrim(Str(Line()))+' '+CutWordVF(Sys(16)),3
		Modi Comm _Card\RdCard.txt Noedit Windows MaxWindows
	Endif 
	If !File('_Card\RdCardAnswer.txt')  && ไฟล์ที่เกิดจากการกด 0K หรือ Cancel Rdcard64.exe
		***
	Else 
		***
	Endif 
	m.ForArrayY=FILETOSTR('_Card\RdCardAnswer.txt')  && ตรวจสอบการกดจาก RdCard64
	m.RdCardYesNO=Substr(Alltrim(MLINE(m.ForArrayY,1)),1,1)        
	Release m.ForArrayY
	If m.RdCardYesNO='1'  && กด OK จากโปรแกรมอ่านบัตร
		Create Cursor Tm4Rdcard (mText C(150))
		Append From _Card\RdCard.txt type SDF
		If nCardAudit=1
			Do Fox_Mess With 'อ่านไฟล์ _Card\RdCard.txt '
		Endif 
		Go 1 In Tm4Rdcard
		m.rDocno_Id=Alltrim(Tm4Rdcard.mText)
		cTmRdCard='\Temp\'+m.rDocno_Id+'.jpg' && รูปที่เก็บไว้แสดงที่หน้าจอ 
		Go 2 In Tm4Rdcard
		m.rGuestName=Alltrim(Tm4Rdcard.mText)
		Do CutBLname With m.rGuestName In \Pos\Security\Prog\Sec4Prog
		Go 4 In Tm4Rdcard
		m.raddr=Alltrim(Tm4Rdcard.mText)
		Do CutBLname With m.raddr In \Pos\Security\Prog\Sec4Prog
		nAddr=AT('อำเภอ',m.raddr)
		If nAddr=0  
			m.rGuestaddr1=m.raddr
			m.rGuestaddr2=Space(0)
		Else  && ตัดอำเภอมาอีก 1 บรรทัด
			m.rGuestaddr1=Substr(m.raddr,1,nAddr-1)
			m.rGuestaddr2=Substr(m.raddr,nAddr)
		Endif 
		Go 5 In Tm4Rdcard
		m.rBirthDate=Ctod(RdTxt2DT(Alltrim(Tm4Rdcard.mText)))
		Go 6 In Tm4Rdcard
		m.rGuestSEX=Alltrim(Tm4Rdcard.mText)
		Go 8 In Tm4Rdcard
		m.rexpirdate=Ctod(RdTxt2DT(Alltrim(Tm4Rdcard.mText)))
		Use In Tm4Rdcard
		ReadRDCard.txtReadCard.DisabledForeColor=RGB(255,0,0)
		If File(cTmRdCard)
			ReadRDCard.rdImage.Height=56
			ReadRDCard.rdImage.width=70
			ReadRDCard.rdImage.Stretch=2
			ReadRDCard.rdImage.Picture=cTmRdCard
			ReadRDCard.txtReadCard.Left=ReadRDCard.txtCode.Left
		Endif 
		**** ค้นหาเลขที่ เดิม
		Select Guest
		Set Order To Docno_ID In Guest 
		Go Top In Guest
		If Seek(m.rDocno_Id,'Guest')  && Pipop
			ReadRDCard.TxtStatus.Caption='สถานะ: ลูกค้าเก่า'
			nRecRdCard=Recno('Guest')  && Record ที่เปลี่ยนไป
			ReadRDCard.Caption='...อ่านข้อมูลสำเร็จ'
			ReadRDCard.cTimer.Enabled=.F.
			***
			ReadRDCard.Width=893
			ReadRDCard.Autocenter=.T.
			ReadRDCard.mSeekandRDC.Visible=.T.
			ReadRDCard.oGuest.Value='รายการเดิม รหัสลูกค้า '+AllTrim(Guest.GuestCode)
			ReadRDCard.otxtCode.Value=Guest.Docno_Id
			ReadRDCard.otxtName.Value=Alltrim(Guest.PreName)+Space(1)+Alltrim(Guest.GuestName) 
			ReadRDCard.otxtAddress.Value=Guest.Guestaddr1
			ReadRDCard.otxtAddress2.Value=Guest.Guestaddr2
			ReadRDCard.otxtBirth.Value=Guest.Birthdate
			ReadRDCard.otxtExpir.Value=Guest.expirdate
			ReadRDCard.otxtSex.Value=Guest.GuestSEX
			ReadRDCard.oGuest.Visible=.T.
			ReadRDCard.otxtCode.Visible=.T.
			ReadRDCard.otxtName.Visible=.T.
			ReadRDCard.otxtAddress.Visible=.T.
			ReadRDCard.otxtAddress2.Visible=.T.
			ReadRDCard.otxtBirth.Visible=.T.
			ReadRDCard.otxtExpir.Visible=.T.
			****
		Else 
			nRecRdCard=0  && ลูกค้าใหม่ 
			ReadRDCard.TxtStatus.Caption='สถานะ: ลูกค้าใหม่'
		Endif 
		Set Order To GuestCode In Guest 
	Endif 	
	ReadRDCard.Refresh
	ReadRDCard.mWait.Visible=.F.
	Do Case 
	Case nRdFormACT=2  .and. nRecRdCard>0 && กรณีแก้ประวัติ ถ้าเจอเลขที่บัตรไม่ต้องให้แก้ 
		ReadRDCard.mWait.ForeColor=RGB(255,0,0)
		ReadRDCard.mWait.Left=320
		ReadRDCard.mWait.Caption='มีการบันทึก บัตรเลขที่นี้แล้ว'
		ReadRDCard.mWait.Visible=.T.
		ReadRDCard.mEditChg.Visible=.T.
		ReadRDCard.mEditIDChg.Visible=.T.
		ReadRDCard.mEditChg.SetFocus()
	Case m.RdCardYesNO='1' && OK
		ReadRDCard.cfRDSave1.Enabled=.T.
		ReadRDCard.cfRDSave1.SetFocus()
	Case m.RdCardYesNO='2' && NO
		ReadRDCard.cfRDSave2.SetFocus()
	EndCase
	If nCardAudit=1
		Do Fox_Mess With 'm.RdCardYesNO = '+m.RdCardYesNO
	Endif 
	If File('HoVFP.exe') && Pipop
		Delete File _Card\RdCard.txt  
	Endif 
	If nCardAudit=1
		Do Fox_Mess With 'ลบไฟล์  _Card\RdCard.txt'
	Endif 
	m.iRunStep=1
EndCase
Do Case 
Case m.iRunStep=1
	ReadRDCard.txtReadCard.Value='อ่านสำเร็จแล้ว : '+Alltrim(Transform(m.iRunCard,'9999,999'))
Otherwise 
	ReadRDCard.txtReadCard.Value='รอการกด OK จากโปรแกรมอ่านบัตร : '+Alltrim(Transform(m.iRunCard,'9999,999'))
EndCase
ReadRDCard.txtReadCard.Refresh()
Return 




Function RdTxt2DT  && แปลง Text เป็น วันที่ 
Parameter tmDate0
tmDate1=Padl(Alltrim(Substr(tmDate0,1,2)),2,'0')
tmDate2=Alltrim(Substr(tmDate0,3,6))
Do Case
Case tmDate2='ก.พ.'
	tmDate3='02'
Case tmDate2='มี.ค.'
	tmDate3='03'
Case tmDate2='เม.ย.'
	tmDate3='04'
Case tmDate2='พ.ค.'
	tmDate3='05'
Case tmDate2='มิ.ย.'
	tmDate3='06'
Case tmDate2='ก.ค.'
	tmDate3='07'
Case tmDate2='ส.ค.'
	tmDate3='08'
Case tmDate2='ก.ย.'
	tmDate3='09'
Case tmDate2='ต.ค.'
	tmDate3='10'
Case tmDate2='พ.ย.'
	tmDate3='11'
Case tmDate2='ธ.ค.'
	tmDate3='12'
Otherwise
	tmDate3='01'
EndCase
tmDate4=Alltrim(Substr(tmDate0,9,6)) && 543
tmDate5=Alltrim(Str(Val(tmDate4)-543))
tmDateR=tmDate1+'/'+tmDate3+'/'+tmDate5
Return tmDateR
