RUNEXE_TFHKA

// Programa   : RUNEXE_TFHKA
// Fecha/Hora : 00/00/0000 00:00:00
// Propósito  : Emision Ticket de venta fiscal para impresora HKA-80, Mediante programa binario: IntTFHKA.EXE
// Creado Por : Juan Navas/ Kelvis Escalante
// Llamado por: DPDOCCLI_PRINT
// Aplicación : FACTURACION CONVENCIONAL Y PUNTO DE VENTA
// Tabla      : DPDOCCLI
// Fecha/Hora : 01/09/2022 00:00:00

/*
Implementación impresora HK80 mediante programa RUNEXE_TFHKA generando archivo TXT contentivo
de las instrucciones de impresión para utilizar el programa binario IntTFHKA.exe "suministrado por THE FACTORY"
Llamado desde el programa DPDOCCLI_PRINT y este llamado desde DPFACTURAV y DPPOSPRINT
En la serie fiscal, Debe seleccionar impresora TFHKA
*/

#INCLUDE "DPXBASE.CH"
#INCLUDE "FILEIO.CH"

PROCE MAIN(cCodSuc,cTipDoc,cNumero,cOption)
  LOCAL oTable
  LOCAL cWhere:="",cFile,cSql,cText:="",cSerie:=""
  LOCAL cFileOut,cMemoLog:="",lResp:=.F.,cResp
  LOCAL cDir:="C:\IntTFHKA\",cCurDir:=CURDRIVE()+":\"+CURDIR(),cBatCall,cRun:=""
  LOCAL cFileFav:=cDir+"FACTURA.TXT"
  LOCAL cFileLog:=cDir+"STATUS_ERROR_"+LSTR(SECONDS())+".TXT"
  LOCAL aPagos :={},nLen,oTable,nNumero,lSave:=.T.,cTipo:=""
  LOCAL cFilePag // log de pagos

  DEFAULT cCodSuc:=oDp:cSucursal,;
          cTipDoc:="TIK",;
          cNumero:=SQLGETMAX("DPDOCCLI","DOC_NUMERO","DOC_TIPDOC"+GetWhere("=",cTipDoc)),;
          cOption:="3"

  oDp:cImpFiscalSqlPagos:=""

  cWhere:="DOC_CODSUC"+GetWhere("=",cCodSuc)+" AND "+;
          "DOC_TIPDOC"+GetWhere("=",cTipDoc)+" AND "+;
          "DOC_NUMERO"+GetWhere("=",cNumero)+" AND "+;
          "DOC_ACT" +GetWhere("=",1 )+" AND "+;
          "DOC_TIPTRA"+GetWhere("=","D" )

  IF Empty(cSerie)
    cSerie:=SQLGET("DPDOCCLI","DOC_SERFIS",cWhere)
  ENDIF

  IF Empty(oDp:cImpFisCom)
    oDp:cImpFisCom:=SQLGET("DPSERIEFISCAL","SFI_PUERTO","SFI_LETRA"+GetWhere("=",cSerie))
  ENDIF

  IF Empty(oDp:cImpFisCom)
    MsgMemo("No tiene Puerto Serial")
  ENDIF

  IF !EJECUTAR("RUNEXE_TFHKA_STATUS",cSerie)
    RETURN .F.
  ENDIF

  cFileOut:=cCurDir+"\TEMP\"+cTipDoc+cNumero+"_OUT.LOG"

  IF !FILE(cDir+"IntTFHKA.exe")
    MsgMemo("Requiere Programa "+cDir+"IntTFHKA.exe")
    RETURN .F.
  ENDIF

  cFileFav:=cCurDir+"\TEMP\"+cTipDoc+cNumero+".txt"
  cFilePag:=cCurDir+"\TEMP\"+cTipDoc+cNumero+".pag"
  cText :=EJECUTAR("TFHKA_DATA",cCodSuc,cTipDoc,cNumero,cOption)

  IF Empty(cText) .OR. ValType(cText)<>"C"
    MsgMemo("Data Vacia","ValType "+ValType(cText))
    RETURN .F.
  ENDIF

  cFile :=cDir+cTipDoc+cNumero+".txt"

  ferase(cFileFav)

  IF FILE(cFileFav)
    MsgMemo("Archivo está Abierto ","No se puede Generar")
    RETURN .F.
  ENDIF

  FERASE("RUN_TFHKA.BAT")

  IF FILE("RUN_TFHKA.BAT")
     MsgMemo("Archivo RUN_TFHKA.BAT ","No se puede Generar")
     RETURN .F.
  ENDIF

  DPWRITE(cFile ,cText)
  DPWRITE(cFileFav,cText)

  cRun:="CD\INTTFHKA "+CRLF+;
        "IntTFHKA.EXE SendFileCmd("+cFile+") > "+cFileLog

  DPWRITE("RUN_TFHKA.BAT",cRun)
  CURSORWAIT()

  ferase(cFileLog)

  IF !oDp:lImpFisModVal
    MsgRun("Imprimiendo Ticket No.:"+cNumero,"Por Favor Espere",{||WAITRUN("RUN_TFHKA.BAT",0) })
  ENDIF

  SysRefresh(.T.)

  cMemoLog:=MEMOREAD(cFileLog)

  cMemoLog:=MemoRead(cFileLog)
  cMemoLog:=STRTRAN(cMemoLog,CHR(13),"")
  cMemoLog:=STRTRAN(cMemoLog,CHR(10),"")
  cMemoLog:=ALLTRIM(cMemoLog)
cResp :=ALLTRIM(SUBS(cMemoLog,LEN(cMemoLog)-1))

  /*
  // 18/11/2022 Si cMemoLog está vacio no tiene incidencia.
  */

  IF ("0"$cResp .OR. Empty(cMemoLog)) .AND. !oDp:lImpFisModVal

      SQLUPDATE("DPDOCCLI","DOC_IMPRES",.T.,cWhere)

      lSave :=oDp:lImpFisRegAud
      cTipo :="RAUD"

      // Anulación de Tickets
      IF cOption="7"
         cMemoLog:="Anulación Documento Impreso"
         cTipo :="DANU"
         lSave :=.T.
      ENDIF

  ELSE

      // en el caso de ser NO impreso, debe actualizarlo en la pista de auditoria
      cMemoLog:=MemoRead(cFileLog)
      cWhere  :="AUD_CLAVE "+GetWhere("=",cCodSuc+cTipDoc+cNumero)+" AND "+;
                "AUD_SCLAVE"+GetWhere("=","TFHK_EXE")

      SQLUPDATE("DPAUDITOR","AUD_TIPO","SIMP",cWhere)

      IF !oDp:lImpFisModVal
        MsgMemo(cMemoLog+CRLF+"Revisar si la Impresora Tiene Papel","Error de Impresión "+cTipDoc+"-"+cNumero)
      ENDIF

      lSave:=.T.
      cTipo:="NIMP" // no Impreso

  ENDIF

  // Guardar
  IF lSave

    IF !Empty(oDp:cImpFiscalSqlPagos)
      OpenTable(oDp:cImpFiscalSqlPagos):CTOTXT(cFilePag)
    ENDIF

    nNumero:=SQLINCREMENTAL("DPAUDITOR","AUD_NUMERO","AUD_SCLAVE"+GetWhere("=","TFHK_EXE"))
    oTable:=OpenTable("SELECT * FROM DPAUDITOR",.F.)
    oTable:Append()
    oTable:Replace("AUD_FECHAS",oDp:dFecha   )
    oTable:Replace("AUD_FECHAO",DPFECHA()    )
    oTable:Replace("AUD_HORA ",HORA_AP()     )
    oTable:Replace("AUD_TABLA ","DPDOCCLI"   )
    oTable:Replace("AUD_CLAVE ",cCodSuc+cTipDoc+cNumero)
    oTable:Replace("AUD_USUARI",oDp:cUsuario )
    oTable:Replace("AUD_ESTACI",oDp:cPcName  )
    oTable:Replace("AUD_IP" ,oDp:cIpLocal    )
    oTable:Replace("AUD_TIPO" ,cTipo         ) // No impreso/Anulado
    oTable:Replace("AUD_MEMO" ,cMemoLog+CRLF+cText+CRLF+"FILE"+cFileLog+CRLF+cRun+CRLF+"PAGOS:"+cFilePag+CRLF+MemoRead(cFilePag)+CRLF+oDp:cImpFiscalSqlPagos) // Traza
  oTable:Replace("AUD_SCLAVE","TFHK_EXE" )
  oTable:Replace("AUD_NUMERO",nNumero )
    oTable:Commit()
    oTable:End(.T.)

    IF oDp:lImpFisModVal
      DPWRITE(cFile,oTable:AUD_MEMO)
    ENDIF

  ENDIF


  IF oDp:lImpFisModVal
    VIEWRTF(cFile,"Documento "+cTipDoc+cNumero)
  ENDIF

RETURN .T.
// EOF