DLL_BEMATECH

// Programa     :   DLL_BEMATECH
// Fecha/Hora   :   19/06/2022 18:06:15
// Propósito    :   Imprimir con BemaTech sin depender del modulos HRB
// Creado Por   :   Juan Navas
// Llamado por  :   DPPOS/DPFACTURAV
// Aplicación   :
// Tabla        :

#INCLUDE "DPXBASE.CH"

PROCE MAIN(cCodSuc,cTipDoc,cNumero,lMsgErr,lShow,lBrowse)
  LOCAL oTable,cFileOrg
  LOCAL cTicket :=""
  LOCAL cFileLog:=""
  LOCAL oSerFis :=NIL
  LOCAL lDemo :=(cTipDoc=NIL)

  DEFAULT cCodSuc:=oDp:cSucursal,;
    cTipDoc:="FAV",;
    cNumero:=SQLGETMAX("DPDOCCLI","DOC_NUMERO","DOC_CODSUC"+GetWhere("=",cCodSuc)+" AND DOC_TIPDOC"+GetWhere("=",cTipDoc)+" AND DOC_TIPTRA"+GetWhere("=","D"))

  DEFAULT lMsgErr:=.T.,;
    lShow :=.T.,;
    lBrowse:=.T.

  IF lShow
    AEVAL(DIRECTORY("TEMP\*.ERR"),{|a,n| FERASE("TEMP\"+a[1])})
  ENDIF

  cTicket:=cNumero

  TDpClass():New(NIL,"oBema")
  oBema:hDll :=NIL
  oBema:cName     : ="BEMATECH"
  oBema:cFileDll  : ="BemaFI32.dll"
  oBema:cEstatus  : =""
  oBema:oFile     : =NIL
  oBema:lMsgErr   : =lMsgErr
  oBema:lErr      : =.F. // no genera ninguna Incidencia
  oBema:cFileLog  : ="TEMP\"+cTipDoc+ALLTRIM(cTicket)+".LOG"
  oBema:lShow     : =lShow

  cFileLog:=oBema:cFileLog

  ferase(cFileLog)

  IF FILE(cFileLog)
    oBema:MsgErr("Archivo "+cFileLog+" está abierto")
  ENDIF

  oBema:oFile:=TFile():New(oBema:cFileLog)

  IF !FILE(oBema:cFileDll)
    oBema:lErr :=.T.
    oBema:oFile:AppStr("No se Encuenta Archivo "+oBema:cFileDll)
    oBema:MsgErr()
    RETURN .F.
  ENDIF

  oBema:hDll := LoadLibrary(oBema:cFileDll)

  IF lDemo
    oBema:MSGERR()
  ENDIF

RETURN oMemo

/*
// En este Lugar Introduce la llamada desde el programa DpXbase para bematech
*/

FUNCTION MSGLOG(cMsg,lMsgErr)

  IF oBema:lMsgErr .AND. Empty(cMsg)
    cMsg:=MemoRead(oBema:cFileLog)
  ENDIF

  IF !Empty(cMsg)
    MsgMemo(cMsg)
  ENDIF

RETURN .T.

  FUNCTION MSGERR()
    LOCAL cMsg:=""

  IF oBema:lShow
    cMsg:=EJECUTAR("MSGTEMPERR")
  ENDIF

  IF !Empty(cMsg)
    MsgMemo(cMsg)
  ENDIF

RETURN .T.

FUNCTION BEMA_INI()
  LOCAL nRet,cError:="",I
  LOCAL cWinDir :="" // GetWinDir()+"\System32\"
  LOCAL cFileDll:="bemafi32.dll"
  LOCAL aDlls:={}

  If( oDp:lBema_Demo == nil, oDp:lBema_Demo := .T., ) ; If( oDp:aBema_Tasas == nil, oDp:aBema_Tasas := {}, );

  IF !File(cFileDll)

    AADD(aDlls,"bemafi32.dll")
    AADD(aDlls,"bemafi32.ini")

    FOR I := 1 TO len(aDlls)

      IF !File(cWinDir+aDlls[I])
            __COPYFILE("BEMATECH\"+aDlls[I],cWinDir+aDlls[I])
         ENDIF

      NEXT

  ENDIF

  If( oDp:nBemaDll == nil, oDp:nBemaDll := LoadLibrary("bemafi32.dll"), ) ;

  nRet:=BmPrintLig()

  cError:=BEMA_ERROR(nRet,.F.)

RETURN cError

FUNCTION BEMA_ERROR(nRet,lShow)
  LOCAL cError:=""

  If( lShow == nil, lShow := .T., ) ;

  IF nRet=1
    RETURN ""
  ENDIF

  DO CASE

    CASE nRet= -1

      cError:="Parámetro inválido"

    CASE nRet= -2

      cError:="Parámetro Inválido"

    CASE nRet=-3

      cError:="Aliquota no programada"

    CASE nRet=-4

      cError:="Archivo BemaFI32.INI no encontrado, copielo en c:\windows\system32"

    CASE nRet=-5

      cError:="Error en Apertura, Posiblemente ya está Abierto el Puerto"

    CASE nRet=-6

      cError:="Ninguna Impresora fué Encontrada, Verifique si está Encendida o Conectada al Cable Serial"

    CASE nRet = -8

      cError:="Error al Crear o Grabar en el Archivo status.txt o retorno.txt "

  ENDCASE

  cError:="Error:"+LSTR(nRet)+", "+cError

  IF lShow
    MensajeErr(cError,"Error Impresora Bematech")
  ENDIF

RETURN cError

FUNCTION BEMA_END()

  IF oDp:nBemaDll<>NIL
    FreeLibrary(oDp:nBemaDll)
    oDp:nBemaDll:=NIL
  ENDIF

RETURN .T.

PROCE XBEMA()
  LOCAL nRet ,cRif:=PADR("Nombre del Cliente",41)+PADR("RIF",18)
  LOCAL nNumImp:=0,I,uBuf,cTasas:=SPACE(79)

  uBuf := 0
  nRet := BmFlagFiscal(@uBuf)

BemaLeerAlicuota(@cTasas)
nRet := BmAbreCup(cRif)

RETURN NIL

FUNCTION CAMBIARTASAS()

  WQout( { "Es necesario Emitir Reporte Z" } )

  IF MsgYesNo("Cambiar Tasas ")
    BematechZ()
    BemaProgAlicuota( "1600")
  ENDIF

RETURN .T.

FUNCTION BemaTechZ()
  LOCAL cFecha:=DTOC(DATE())
  LOCAL cHora :=TIME()

  BemaReporteZeta(cFecha,cHora)

RETURN .T.

FUNCTION BmPrintLig( )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_VerificaImpressoraLigada" ) == .T., "BmPrintLig",       "Bematech_FI_VerificaImpressoraLigada" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
Return uResult

FUNCTION BmNumeroCx( NumeroCaixa )
  LOCAL cFarProc:= GetProcAdd(oDp:nBemaDLL, If( Empty( "Bematech_FI_NumeroCaja" ) == .T., "BmNumeroCx",                      "Bematech_FI_NumeroCaja" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,NumeroCaixa )
RETURN uResult

FUNCTION BmAbreCup( cData )
  LOCAL cFarProc:= GetProcAdd(oDp:nBemaDLL, If( Empty( "Bematech_FI_AbreComprobanteDeVenta" ) == .T., "BmAbreCup",            "Bematech_FI_AbreComprobanteDeVenta" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,cData )
RETURN uResult

FUNCTION BmFlagFiscal( FlagFiscal )
  LOCAL cFarProc := GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_FlagsFiscales" ) == .T., "BmFlagFiscal",                "Bematech_FI_FlagsFiscales" ), .T., 7,10 )
  LOCAL uResult := FWCallDLL( cFarProc,@FlagFiscal )
RETURN uResult

FUNCTION BmFechaCup( FormaPgto,Acrescimo,TipoAcresc,ValorAcresc,ValorPago,Mensagem )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_CierraCupon" ) == .T., "BmFechaCup",                    "Bematech_FI_CierraCupon" ), .T., 7,8,8,8,8,8,8 )
  LOCAL uResult := FWCallDLL( cFarProc,FormaPgto,Acrescimo,TipoAcresc,ValorAcresc,ValorPago,Mensagem )
RETURN uResult

FUNCTION BemaLeerAlicuota( cTasas )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_RetornoAlicuotas" ) == .T., "BemaLeerAlicuota",          "Bematech_FI_RetornoAlicuotas" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,@cTasas )
RETURN uResult

FUNCTION BemaProgAlicuota( cTasas )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_ProgramaAlicuota" ) == .T., "BemaProgAlicuota",          "Bematech_FI_ProgramaAlicuota" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,cTasas )
RETURN uResult

FUNCTION BemaReporteZeta( Dt,Hs )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_ReduccionZ" ) == .T., "BemaReporteZeta",                 "Bematech_FI_ReduccionZ" ), .T., 7,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,Dt,Hs )
RETURN uResult

FUNCTION BmSubTotal( SubTotal )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_SubTotal" ) == .T., "BmSubTotal",                       "Bematech_FI_SubTotal" ), .T., 7,9 ) ;
  LOCAL uResult := FWCallDLL( cFarProc,SubTotal )
RETURN uResult

FUNCTION BmVerArred(Arredonda)
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_VerificaTruncamiento" ) == .T., "BmVerArred",           "Bematech_FI_VerificaTruncamiento" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,Arredonda )
RETURN uResult

FUNCTION BmLigArred()
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_ProgramaRedondeo" ) == .T., "BmLigArred",                "Bematech_FI_ProgramaRedondeo" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmDtMovto( DtMovto )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_FechaMovimiento" ) == .T., "BmDtMovto",                  "Bematech_FI_FechaMovimiento" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,DtMovto )
RETURN uResult

FUNCTION BmFlagFisc( FlagFiscal )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_FlagsFiscales" ) == .T., "BmFlagFisc",                  "Bematech_FI_FlagsFiscales" ), .T., 7,10 )
  LOCAL uResult := FWCallDLL( cFarProc,@FlagFiscal )
RETURN uResult

FUNCTION BmLeituraX( )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_LecturaX" ) == .T., "BmLeituraX",                        "Bematech_FI_LecturaX" ), .T., 7 ) ;
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmReducaoZ( Dt,Hs )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_ReduccionZ" ) == .T., "BmReducaoZ", "Bematech_FI_ReduccionZ" ), .T., 7,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,Dt,Hs )
RETURN uResult

FUNCTION BmDtHora( Dt,Hs )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_FechaHoraImpresora" ) == .T., "BmDtHora",                "Bematech_FI_FechaHoraImpresora" ), .T., 7,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,Dt,Hs )
RETURN uResult

FUNCTION BmAbreDia( Vl,Fr )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_AberturaDoDia" ) == .T., "BmAbreDia",                    "Bematech_FI_AberturaDoDia" ), .T., 7,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,Vl,Fr )
RETURN uResult

FUNCTION BmVerPapel( Linhas )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_MonitoramentoPapel" ) == .T., "BmVerPapel",              "Bematech_FI_MonitoramentoPapel" ), .T., 7,10 )
  LOCAL uResult := FWCallDLL( cFarProc,@Linhas )
RETURN uResult

FUNCTION BmCanCupom()
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_CierraCupon" ) == .T., "BmCanCupom",                    "Bematech_FI_CierraCupon" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmCancItem()
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_AnulaArticuloAnterior" ) == .T., "BmCancItem",          "Bematech_FI_AnulaArticuloAnterior" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmAbreGav()
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_AccionaGaveta" ) == .T., "BmAbreGav",                    "Bematech_FI_AccionaGaveta" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmNumCupom( cCupon )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_NumeroCupon" ) == .T., "BmNumCupom",                    "Bematech_FI_NumeroCupon" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,@cCupon )
RETURN uResult

FUNCTION BmMemFiscD( In,Fi )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_LecturaMemoriaFiscalFecha" ) == .T., "BmMemFiscD",      "Bematech_FI_LecturaMemoriaFiscalFecha" ), .T., 7,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,In,Fi )
RETURN uResult

FUNCTION BmMemFiscR( In,Fi )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_LecturaMemoriaFiscalReduccion" ) == .T.,                "BmMemFiscR", "Bematech_FI_LecturaMemoriaFiscalReduccion" ), .T., 7,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,In,Fi )
RETURN uResult

FUNCTION BmCpGerAbr( Texto )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_CierraInformeGerencial" ) == .T., "BmCpGerAbr",          "Bematech_FI_CierraInformeGerencial" ), .T., 7,8 )
  LOCAL uResult := FWCallDLL( cFarProc,Texto )
RETURN uResult

FUNCTION BmCpGerFec( )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_CierraInformeGerencial" ) == .T., "BmCpGerFec",          "Bematech_FI_CierraInformeGerencial" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmStGaveta( nStatus )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_VerificaEstadoGaveta" ) == .T., "BmStGaveta",            "Bematech_FI_VerificaEstadoGaveta" ), .T., 7,10 )
  LOCAL uResult := FWCallDLL( cFarProc,@nStatus )
RETURN uResult

FUNCTION BmCupAdAbr( FormaPgto,Valor,Cupom )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_AbreComprobanteNoFiscalVinculado" ) == .T.,              "BmCupAdAbr","Bematech_FI_AbreComprobanteNoFiscalVinculado" ), .T., 7,8,8,8 )
  LOCAL uResult := FWCallDLL( cFarProc,FormaPgto,Valor,Cupom )
RETURN uResult

FUNCTION BmCupAdUsa( Texto )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_ImprimeComprobanteNoFiscalVinculado" ) == .T.,          "BmCupAdUsa", "Bematech_FI_ImprimeComprobanteNoFiscalVinculado" ), .T., 7,8 )
  LOCAL uResult := FWCallDLL( cFarProc,Texto )
RETURN uResult

FUNCTION BmCupAdFec( )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty("Bematech_FI_CierraComprobanteNoFiscalVinculado" ) == .T.,            "BmCupAdFec","Bematech_FI_CierraComprobanteNoFiscalVinculado" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmVendItem( Codigo,Descricao,Aliquota,TpQte,Quantid,Decimal,ValUnit,TpDesc,ValDesc )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_VendeArticulo" ) == .T., "BmVendItem",                  "Bematech_FI_VendeArticulo" ), .T., 7,8,8,8,8,8,7,8,8,8 )
  LOCAL uResult := FWCallDLL( cFarProc,Codigo,Descricao,Aliquota,TpQte,Quantid,Decimal,ValUnit,TpDesc,ValDesc )
RETURN uResult

FUNCTION BmFormasPag( FormaPgto,ValorPago )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_EfectuaFormaPago" ) == .T., "BmFormasPag",              "Bematech_FI_EfectuaFormaPago" ), .T., 7,8,8 )
  LOCAL uResult := FWCallDLL( cFarProc,FormaPgto,ValorPago )
RETURN uResult

FUNCTION BmIniFecCup( Acrescimo,TipoAcresc,ValorAcresc )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_IniciaCierreCupon" ) == .T., "BmIniFecCup",              "Bematech_FI_IniciaCierreCupon" ), .T., 7,8,8,8 )
  LOCAL uResult := FWCallDLL( cFarProc,Acrescimo,TipoAcresc,ValorAcresc )
RETURN uResult

FUNCTION BmTerFecCup( Mensagem )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_FinalizarCierreCupon" ) == .T., "BmTerFecCup",          "Bematech_FI_FinalizarCierreCupon" ), .T., 7,8 )
  LOCAL uResult := FWCallDLL( cFarProc,Mensagem )
RETURN uResult

FUNCTION BmTfStatus( Operacao )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FITEF_Status" ) == .T., "BmTfStatus",                      "Bematech_FITEF_Status" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,Operacao )
RETURN uResult

FUNCTION BmSimboloMoneda( cMoneda )
  LOCAL cFarProc := GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_CambiaSimboloMoneda" ) == .T., "BmSimboloMoneda",      "Bematech_FI_CambiaSimboloMoneda" ), .T., 7,9 )
  LOCAL uResult := FWCallDLL( cFarProc,cMoneda )
RETURN uResult

FUNCTION BmAbreNotaDeCredito( cNombre,cSerie,cRif,cDias,cMes,cAno,cHora,cMin,cSeg,cCupon )
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty( "Bematech_FI_AbreNotaDeCredito" ) == .T., "BmAbreNotaDeCredito",      "Bematech_FI_AbreNotaDeCredito" ), .T., 7,9,9,9,9,9,9,9,9,9,9 )
  LOCAL uResult := FWCallDLL( cFarProc,cNombre,cSerie,cRif,cDias,cMes,cAno,cHora,cMin,cSeg,cCupon )
RETURN uResult

FUNCTION BmLecturaX()
  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, If( Empty("Bematech_FI_LecturaX" ) == .T., "BmLecturaX", "Bematech_FI_LecturaX" ), .T., 7 )
  LOCAL uResult := FWCallDLL( cFarProc )
RETURN uResult

FUNCTION BmIniFecCupIGTF( ValorD )

  LOCAL cFarProc:= GetProcAdd( oDp:nBemaDLL, "Bematech_FI_IniciaCierreCuponIGTF", .T., 7,8 )
  LOCAL uResult := FWCallDLL( ValorD )

RETURN uResult
// EOF