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