DLL_SAMSUNG
// Programa : DLL_SAMSUNG.PRG
// Fecha/Hora : 28/07/2022 13:23:22
// Propósito : Proveer las funciones para imprimir mediante Impresora Fiscal SAMSUNG
// Creado Por : Marlon Ramos/Juan Navas
// Llamado por :
// Aplicación :
// Tabla :
#INCLUDE “DPXBASE.CH”
// MEMVAR oDp,status,error,nContEnc
FUNCTION MAIN(cTipDoc,cNumero)
LOCAL cPuerto :=oDp:cImpFisCom
LOCAL cError :=””,nError
DEFAULT cTipDoc:=”TIK”,;
cNumero:=SQLGETMAX(“DPDOCCLI”,”DOC_NUMERO”,”DOC_TIPDOC”+GetWhere(“=”,cTipDoc))
IF !TYPE(“oSAMSUNG”)=”O”
TDpClass():New(NIL,”oSAMSUNG”)
ENDIF
oSAMSUNG:hDll :=NIL
oSAMSUNG:cName :=”EPSON”
oSAMSUNG:cFileDll:=”tfhkaif.dll”
oSAMSUNG:cEstatus:=””
oSAMSUNG:oFile :=NIL
oSAMSUNG:lError :=.F.
oSAMSUNG:nContEnc:=0
oSAMSUNG:cTipDoc :=cTipDoc
oSAMSUNG:cNumero :=cNumero
oSAMSUNG:cFileLog:=”TEMP\”+cNumero+”.LOG”
IF !FILE(oSAMSUNG:cFileDll)
MsgMemo(“No se Encuentra Archivo “+oSAMSUNG:cFileDll)
RETURN NIL
ENDIF
oSAMSUNG:oFile :=TFile():New(oSAMSUNG:cFileLog)
oDp:nSAMSUNGDll := If(oDp:nSAMSUNGDll == nil,LoadLibrary(cFileDll),oDp:nSAMSUNGDll )
cPuerto := If(cPuerto == nil,”COM1″,cPuerto )
IF ValType(oDp:nSAMSUNGDll)!=”N” .And. oDp:nSAMSUNGDll!=0
cError:=SAMSUNG_ERROR(999,.T.)
ELSE
nError:=DpOpenFpctrl(cPuerto)
IF nError != 1 .And. nError != 0
cError:=SAMSUNG_ERROR(nError,.T.,.T.)
ENDIF
IF !EMPTY(cError)
oSAMSUNG:lError:=.T.
DpCloseFpctrl ()
ENDIF
ENDIF
oSAMSUNG:cError :=cError
RETURN oSAMSUNG
FUNCTION SAMSUNG_ERROR(nRet,lShow,lVerifPto)
LOCAL cError:=””
lShow := If(lShow == nil,.T.,lShow )
lVerifPto:= If(lVerifPto == nil,.F.,lVerifPto )
IF nRet=1 .Or. (nRet = 0 .And. !lVerifPto)
RETURN “”
ENDIF
cError:=”desconocido Nº: “+STR(nRet)
IF nRet= 0
cError:=”Puerto no Abierto”
ENDIF
IF nRet= -1
cError:=”Parámetro inválido”
ENDIF
IF nRet= -2
cError:=”Parámetro Inválido”
ENDIF
IF nRet=-3
cError:=”Aliquota no programada”
ENDIF
IF nRet=-4
cError:=”Archivo tfhkaif.INI no encontrado, copielo en “+oDp:cBin
ENDIF
IF nRet=-5
cError:=”Error en Apertura, Posiblemente ya está Abierto el Puerto”
ENDIF
IF nRet=-6
cError:=”Ninguna Impresora fué Encontrada, Verifique si está Encendida o Conectada al Cable Serial o USB”
ENDIF
IF nRet = -8
cError:=”Error al Crear o Grabar en el Archivo status.txt o retorno.txt “
ENDIF
IF nRet = 137
cError:=”Impresora No Conectada o Apagada”
ENDIF
IF nRet = 999
cError:=”No se puedo cargar archivo tfhkaif.dll”
ENDIF
cError:=”Error:”+LSTR(nRet)+”, “+cError
oSAMSUNG:oFile:AppStr(cError)
IF lShow
MensajeErr(cError,”Error Impresora SAMSUNG”)
ENDIF
RETURN cError
FUNCTION DpAbreTick(cRif,cCliente,cTel,cDir,cDir2,cNumero,cTipDoc)
LOCAL nAncho:=IIF(“ACLAS”$UPPE(oDp:cImpFiscal),21,25)
oSAMSUNG:cError :=””
oSAMSUNG:SamsungENC(“Cliente : “+Left(cCliente,nAncho))
IF Len(cCliente) > nAncho
oSAMSUNG:SamsungENC(Substr(cCliente,nAncho+1,35))
ENDIF
oSAMSUNG:SamsungENC(“CI / RIF: “+cRif)
IF !Empty(cTel)
oSAMSUNG:SamsungENC(IIF(cTipDoc=”DEV”,””,”Telefono: “)+cTel)
ENDIF
IF !Empty(cDir)
oSAMSUNG:SamsungENC(cDir)
ENDIF
IF !Empty(cDir2)
oSAMSUNG:SamsungENC(cDir2 )
ENDIF
oSAMSUNG:SamsungENC(Replicate(“-“,35))
oSAMSUNG:SamsungENC(“Ticket N: “+cNumero)
RETURN EMPTY(oSAMSUNG:cError)
FUNCTION SamsungENC(cTextEnc)
LOCAL cIni,nStatus,nError,cError,lCadena
oSAMSUNG:nContEnc:=oSAMSUNG:nContEnc+1
cIni:=ALLTRIM(STR(oSAMSUNG:nContEnc,2,0))
cIni:=”i”+REPLICATE(“0”,2-LEN(cIni))+cIni
oSAMSUNG:DpSendCmd(@nStatus,@nError,cIni+Left(cTextEnc,35))
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
RETURN cError
FUNCTION DpImpItem (nPrecio,nCantid,cDescri,cTipIva,nDesc,cTipDoc,cComent)
LOCAL cIni,lStatus,nError,nStatus,cError,cTasa:=””,cPrecio,cCant
cPrecio:=STRZERO(nPrecio,11,2 )
cPrecio:=STRTRAN(cPrecio ,”.”,””)
cCant :=STRZERO(nCantid,09,3)
cCant :=STRTRAN(cCant ,”.”,””)
IF cTipIva = “EX”
cTasa:=IIF(cTipDoc!=”DEV”,” “,”d0”)
ENDIF
IF cTipIva = “GN”
cTasa:=IIF(cTipDoc!=”DEV”,”!”,”d1″)
ENDIF
IF cTipIva = “RD”
cTasa:=IIF(cTipDoc!=”DEV”,'”‘,”d2″)
ENDIF
IF cTipIva = “S1”
cTasa:=IIF(cTipDoc!=”DEV”,”#”,”d3″)
ENDIF
oSAMSUNG:DpSendCmd(@nStatus,@nError,cTasa+cPrecio+cCant+ALLTRIM(PADR(cDescri,40)))
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
IF nDesc > 0
oSAMSUNG:DpSendCmd(@nStatus,@nError,”p-“+SINDEC(nDesc,4))
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
ENDIF
IF !EMPTY(cComent)
oSAMSUNG:DpSendCmd(@nStatus,@nError,”@”+cComent)
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
ENDIF
RETURN !EMPTY(cError)
FUNCTION DpImpSub(nDesc,nRecargo)
LOCAL cDesc,nStatus,nError,cError
oSAMSUNG:DpSendCmd(@nStatus,@nError,”3″)
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
IF nDesc>0
cDesc :=oSAMSUNG:SINDEC(nDesc,4)
DpSendCmd(@nStatus,@nError,”p-“+cDesc)
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
ENDIF
IF nRecargo>0
cDesc:=oSAMSUNG:SINDEC(nRecargo,4)
oSAMSUNG:DpSendCmd(@nStatus,@nError,”p+”+cDesc)
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
ENDIF
RETURN !EMPTY(cError)
FUNCTION DpImpPag(aTipoPago,cTipDoc)
LOCAL nCont:=1,nStatus,nError,cError
IF cTipDoc = “DEV”
oSAMSUNG:DpSendCmd(@nStatus,@nError,”f07000000000000″)
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
ELSE
FOR nCont=1 TO LEN(aTipoPago)
oSAMSUNG:DpSendCmd(@nStatus,@nError,RIGHT(aTipoPago[nCont],LEN(aTipoPago[nCont])-1))
cError:=oSAMSUNG:SAMSUNG_ERROR(nError,.T.)
NEXT
ENDIF
RETURN !EMPTY(cError)
FUNCTION SINDEC(nMonto,nLen,nDec)
LOCAL cPrecio,nAt,nPor
nDec :=IIF(nDec=NIL,2,nDec)
nPor :=VAL(“1″+REPLI(“0”,nDec))
cPrecio:=ALLTRIM(STR(nMonto*nPor))
nAt :=AT(“.”,cPrecio)
cPrecio:=LEFT(cPrecio,nAt-1)
cPrecio:=REPLI(“0”,nLen-LEN(cPrecio))+cPrecio
RETURN cPrecio
FUNCTION SAMSUNG_END()
oSAMSUNG:DpCloseFpctrl()
IF oDp:nSAMSUNGDll<>NIL
FreeLibrary(oDp:nSAMSUNGDll)
oDp:nSAMSUNGDll:=NIL
ENDIF
IF !oSAMSUNG:oFile=NIL
oSAMSUNG:oFile:Close()
ENDIF
RETURN .T.
/*
// Funciones de la DLL
*/
FUNCTION DpOpenFpctrl(lpPortName )
LOCAL cFarProc:= GetProcAddress(oDp:nSAMSUNGDLL,If(Empty(“OpenFpctrl” ) == .t.,”DpOpenFpctrl”,”OpenFpctrl” ),.T.,7,9 )
LOCAL uResult := CallDLL(cFarProc,lpPortName )
RETURN uResult
FUNCTION DpCloseFpctrl()
LOCAL cFarProc:= GetProcAddress(oDp:nSAMSUNGDLL,If(Empty(“CloseFpctrl” ) == .t.,”DpCloseFpctrl”,”CloseFpctrl” ),.T.,7 )
LOCAL uResult := CallDLL(cFarProc )
RETURN uResult
FUNCTION DpReadFpStatus(status ,error )
LOCAL cFarProc:= GetProcAddress(oDp:nSAMSUNGDLL,If(Empty(“ReadFpStatus” ) == .t.,”DpReadFpStatus”,”ReadFpStatus” ),.T.,7,10 ,10 )
LOCAL uResult := CallDLL(cFarProc,@status ,@error )
oSAMSUNG:oFile:AppStr(“DpReadFpStatus:”+CTOO(status,”C”)+”,”+CTOO(error,”C”))
RETURN uResult
FUNCTION DpSendCmd(status,error,cmd )
LOCAL cFarProc := GetProcAddress(oDp:nSAMSUNGDLL,If(Empty(“SendCmd” ) == .t.,”DpSendCmd”,”SendCmd” ),.T.,7,10 ,10,9 )
LOCAL uResult := CallDLL(cFarProc,@status ,@error,@cmd )
oSAMSUNG:oFile:AppStr(“DpSendCmd:”+CTOO(status,”C”)+”,”+CTOO(error,”C”)+”,”+CTOO(cmd,”C”))
RETURN uResult
FUNCTION DpSendFileCmd(status ,error,file )
LOCAL cFarProc:= GetProcAddress(oDp:nSAMSUNGDLL,If(Empty(“SendFileCmd” ) == .t.,”DpSendFileCmd”,”SendFileCmd” ),.T.,7,10 ,10,9 )
LOCAL uResult := CallDLL(cFarProc,@status ,@error,@file )
oSAMSUNG:oFile:AppStr(“DpSendFileCmd:”+CTOO(status,”C”)+”,”+CTOO(error,”C”)+”,”+CTOO(file,”C”))
RETURN uResult
// EOF