Clipper On Line • Ver Tópico - Tela simples enviando XML

Tela simples enviando XML

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Tela simples enviando XML

Mensagempor Itamar M. Lins Jr. » 18 Fev 2021 14:23

Olá!
Sem título.png

Soma os XML's NFe e NFCe, Zipa e manda para contabilidade. Fiquei procrastinando para fazer...
Mas tem clientes que até hoje não sabem zipar arquivos e anexar emails com outlook e cia.
Se fizer tudo de vez, como fica as atualizações ?
#include 'hwgui.ch'

**************
FUNCTION NFXML
**************
*
*
LOCAL oDlg, oFont, cTitulo:='XML de NF Emitidas',oBrw, cPhantom :=  "", oTo, cTo :=  Space(70)
LOCAL nMes := month(date()) - 1
LOCAL cAno := str(year(date()),4), cAnoMes :=  ""
LOCAL dIni, dFim, cUF, xCol
LOCAL aNFeXML, aNFCeXML
LOCAL cMascara :=  ""
LOCAL oImgEMAIL := hbitmap():AddResource( 'EMAIL' )
LOCAL oImgZIP := hbitmap():AddResource( 'IMG_ZIP' )

PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -16

INIT DIALOG oDlg CLIPPER TITLE cTitulo Font oFont AT 0,0 SIZE 300,200 STYLE DS_CENTER + WS_VISIBLE + WS_SYSMENU

@ 005,035 say 'Informe o Mês:' size 120,20
@ 120,030 get oMes Var nMes picture '99' valid {||nMes >= 1 .and. nMes <= 12} size 30,25
@ 005,065 say 'Informe o Ano:' size 120,20
@ 120,060 get oAno Var cAno picture '9999' size 50,25

@ 010,120 get oPhantom VAR cPhantom size 0,0

@ 200,020 Button oBt Caption 'Cancelar'   Size 90,30  ON CLICK {||hwg_EndDialog()}
@ 200,100 Button oBt Caption 'Confirmar'  Size 90,30  ON CLICK {||lOk:=.t.,hwg_EndDialog()}

Add status to oDlg parts 300

oDlg:Activate()

AbreDb('empresa.dbf','em',.t.)
cIBGECod  := em->CodCidIBGE
cFantasia := em->empresa
FechaDb('em')

AbreDb('contador.dbf','cd',.t.)
cTo :=  Lower(cd->email)
FechaDb('cd')

cUF  := SubStr(cIBGECod,1,2)
dIni := bom(ctod('01/'+str(nMes,2)+'/'+cAno))
dFim := eom(ctod('01/'+str(nMes,2)+'/'+cAno))

cAnoMes   := hb_DToC(dIni,'YYMM')
cMascara  := cUF + cAnoMes

aNFeXML := hb_DirScan( cPathNFeXML , cMascara + "*-nfe.xml" )
aNFCeXML := hb_DirScan( cPathNFCeXML , cMascara + "*-nfe.xml" )

IF Empty(aNFeXML)
   hwg_msginfo("Não encontrado os arquivos NFe XML")
   aNFeXML :=  {{"","","","",""}}
ENDIF

IF Empty(aNFCeXML)
   hwg_msginfo("Não encontrado os arquivos NFCe XML")
   aNFCeXML :=  {{"","","","",""}}
ENDIF

PREPARE FONT oFont    NAME "MS Sans Serif" WIDTH 0 HEIGHT -14
PREPARE FONT oFontBrw NAME "Courire New" WIDTH 0 HEIGHT -16
   
INIT DIALOG oDlg CLIPPER TITLE cTitulo Font oFont AT 10,10 SIZE 1280,700  NOEXITESC  STYLE DS_CENTER + WS_SYSMENU

   @ 100,10 Browse oBrwNFe ARRAY of oDlg FONT oFontBrw Size 1100,280
   Hwg_CreateArList( oBrwNFe, aNFeXML )
   //oBrw:bOther       := {|oBrw, msg, wParam, lParam| fKeyDownP(oBrw, msg, wParam, lParam, @lEsc,'eq')}   
   oBrwNFe:acolumns[1]:heading := "NFe XML"
   oBrwNFe:acolumns[1]:length := 60
   oBrwNFe:acolumns[1]:picture := '@R 99999999999999999999999999 99999999 9 99999999 9'

   oBrwNFe:acolumns[2]:heading := "Tamanho"
   oBrwNFe:acolumns[2]:length := 07
   oBrwNFe:acolumns[2]:picture := '999,999'
   
   oBrwNFe:acolumns[3]:heading := "Data"
   oBrwNFe:acolumns[3]:length := 08
   oBrwNFe:acolumns[3]:picture := '@E'

   oBrwNFe:acolumns[4]:heading := "Hora"
   oBrwNFe:acolumns[4]:length := 08
   oBrwNFe:acolumns[4]:picture := '@!'

   oBrwNFe:acolumns[5]:heading := "Attrib"
   oBrwNFe:acolumns[5]:length := 06
   oBrwNFe:acolumns[5]:picture := '@!'

   
   @ 100,320 Browse oBrwNFCe ARRAY of oDlg FONT oFontBrw Size 1100,280
   Hwg_CreateArList( oBrwNFCe, aNFCeXML )
   //oBrw:bOther       := {|oBrw, msg, wParam, lParam| fKeyDownP(oBrw, msg, wParam, lParam, @lEsc,'eq')}   
   oBrwNFCe:acolumns[1]:heading := "NFCe XML"
   oBrwNFCe:acolumns[1]:length := 60
   oBrwNFCe:acolumns[1]:picture := '@R 99999999999999999999999999 99999999 9 99999999 9'

   oBrwNFCe:acolumns[2]:heading := "Tamanho"
   oBrwNFCe:acolumns[2]:length := 07
   oBrwNFCe:acolumns[2]:picture := '999,999'
   
   oBrwNFCe:acolumns[3]:heading := "Data"
   oBrwNFCe:acolumns[3]:length := 08
   oBrwNFCe:acolumns[3]:picture := '@E'

   oBrwNFCe:acolumns[4]:heading := "Hora"
   oBrwNFCe:acolumns[4]:length := 08
   oBrwNFCe:acolumns[4]:picture := '@!'

   oBrwNFCe:acolumns[5]:heading := "Attrib"
   oBrwNFCe:acolumns[5]:length := 06
   oBrwNFCe:acolumns[5]:picture := '@!'

   Add status to oDlg parts 230,230,100,0
 
   oDlg:bActivate := {|| XMLTotais(oDlg,dIni,dFim,aNFeXML,aNFCeXML) }

   @ 100,620 say "Email Contabilidade:" size 200,25
   @ 320,610 get oTO VAR cTO size 500,25 STYLE ES_LOWERCASE + ES_AUTOHSCROLL
   
   @ 010,005 OwnerButton oZip OF oDlg Size 68,68 ON CLICK {||ZipXML(dIni,aNFeXML,aNFCeXML) } FLAT BITMAP oImgZIP FROM RESOURCE TRANSPARENT COORDINATES 0,0,68,68 TOOLTIP "Compactar XML"
   
   @ 010,100 OwnerButton oEmailZip OF oDlg Size 68,68 ON CLICK {||Enviar_ZipXML(dIni,oDlg) } FLAT BITMAP oImgEmail FROM RESOURCE TRANSPARENT COORDINATES 0,0,68,68 TOOLTIP "Enviar XML"
       
oDlg:Activate()

RETURN NIL

**************************************
FUNCTION ZipXML(dIni,aNFeXML,aNFCeXML)
**************************************
*
*
LOCAL cAnoMes  := hb_DToC(dIni,'MM_YYYY'), aXML:={}, nX
LOCAL cNFeZip  := hb_DirBase() + "\NFe_XML_"+cAnoMes+".zip"
LOCAL cNFCeZip := hb_DirBase() + "\NFCe_XML_"+cAnoMes+".zip"

FOR nX := 1 TO Len(aNFeXML)
   AAdd(aXML,cPathNFeXML + aNFeXML[nX][1])
NEXT

IF hb_vfExists(cNFeZip)
   IF hb_vfErase(cNFeZip) == 0
   Else
      hwg_msginfo("Falha apagando arquivo: " + cNFeZip)
      RETURN .F.
   ENDIF
ENDIF

oBar := HProgressBar():NewBox( "Compactando NFe, "+lTrim(Str(1,9))+" De "+lTrim(Str(Len(aNFeXML),9))+" Arquivo(s)",,,350,,)
hb_ZipFile(cNFeZip, aXML,,{||oBar:Step()})
oBar:Close()

aXML :=  {}

FOR nX := 1 TO Len(aNFCeXML)
   AAdd(aXML,cPathNFCeXML + aNFCeXML[nX][1])
NEXT

IF hb_vfExists(cNFCeZip)
   IF hb_vfErase(cNFCeZip) == 0
   Else
      hwg_msginfo("Falha apagando arquivo: " + cNFCeZip)
      RETURN .F.
   ENDIF
ENDIF

oBar := HProgressBar():NewBox( "Compactando NFCe, "+lTrim(Str(1,9))+" De "+lTrim(Str(Len(aNFCeXML),9))+" Arquivo(s)",,,350,,)
hb_ZipFile(cNFCeZip, aXML,,{||oBar:Step()})
oBar:Close()

*********************************
FUNCTION Enviar_ZIPXML(dIni,oDlg)
*********************************
*
*
LOCAL aFiles:={}, cAnoMes := hb_DToC(dIni,'MM_YYYY')
LOCAL cHost, lRet := .F., nPort, lSTARTTLS := .F.
LOCAL cNFeZip  := hb_DirBase() + "\NFe_XML_"+cAnoMes+".zip"
LOCAL cNFCeZip := hb_DirBase() + "\NFCe_XML_"+cAnoMes+".zip"

IF hb_vfExists(cNFeZip)
   aFiles := {cNFeZip}
Else
   Hwg_MsgInfo("Não encontrado XML's da(s) NFe(s).")
ENDIF

IF hb_vfExists(cNFeZip) .and. hb_vfExists(cNFCeZip)
   aFiles := {cNFeZip,cNFCeZip}
Else
   Hwg_MsgInfo("Não encontrado XML's da(s) NFCe(s).")   
ENDIF

cSubject   := "XML Mês " + cAnoMes
cBody      := "XML das Notas Fiscais." // + hb_eol() + "Não responda esse email."
cTo        := "xyz@gmail.com"
cFrom      := "sxxxxxx@gmail.com"
cHost      := "smtp.gmail.com"
nPort      := 465
cPassword  := "XXXXXXXXXXXXXX"
xCC        :=  ""
xBCC       :=  ""

lRet := tip_MailSend( ;
      cHost, ;
      nPort, ; //iif( lSTARTTLS, 587, 465 ), ;
      cFrom, ;
      cTo, ;
      xCC /* CC */, ;
      xBCC /* BCC */, ;
      cBody , ;
      cSubJect , ;
      aFiles /* attachment */, ;
      cFrom, ;
      cPassword, ;
      "", ;
      NIL /* nPriority */, ;
      NIL /* lRead */, ;
      .T. /* lTrace */, ;
      .F., /*lPopAuth */ ;
      NIL /* lNoAuth */, ;
      NIL /* nTimeOut */, ;
      NIL /* cReplyTo */, ;
      nPort == 465) //! lSTARTTLS )

If lRet
   hwg_Msginfo("Email enviado." + hb_eol() + "Assunto: " + cSubject+hb_eol() + "Endereço: "+cTo)
Else
   hwg_Msgexclamation("Falha enviando email via TIP_MAILSEND")
EndIf

RETURN lRet

***************************************************
FUNCTION XMLTotais(oDlg,dIni,dFim,aNFeXML,aNFCeXML)
***************************************************
*
*
LOCAL nX, aXML := {}, nIgnorada :=  0
LOCAL nTotalNFe := 0, nTotalNFCe :=  0
LOCAL nValorProdNFCe := 0, nValorProdNFe :=  0

oBar := HProgressBar():NewBox( "Processando, "+lTrim(Str(0,9))+" De "+lTrim(Str(Len(aNFeXML),9))+" Registro(s)",,,400,, 10, Len(aNFeXML), )

FOR nX := 1 TO Len(aNFeXML)
   AAdd(aXML,cPathNFeXML + aNFeXML[nX][1])
NEXT

For nX := 1 To Len( aXML )

  oBar:Step("Processando, "+lTrim(Str(nX,9))+" De "+lTrim(Str(Len(aNFeXml),9))+" Registro(s)")
         
  cFile := aXML[nX]
 
  cFile := Hb_MemoRead( cFile )

  cBloco := XmlNode( cFile , "ide" ) //Data
  dhEmi  := hb_ctod(substr(XmlNode( cBloco , "dhEmi" ),1,10),"yyyy-mm-dd")  //<dhEmi>2019-01-31T08:47:58-03:00</dhEmi>
  cNF    := XmlNode( cBloco , "nNF" ) //
 
  if dhEmi >= dIni .and. dhEmi <= dFim
  else
     loop
  endif

  cBloco := XmlNode( cFile , "infProt" ) //Autorizada ?

  cMotivo := XmlNode( cBloco , "xMotivo" )

  if upper(substr(cMotivo,1,16)) == "AUTORIZADO O USO"
  else
    //rodape(oDlg,4, "Ignor.: " + strzero(++nIgnorada,6) + " " + aXml[nX] )
    loop
  endif

  cBloco := XmlNode( cFile , "total" ) //Para somar os valores totais da notas

  nValorTag := XmlNode( cBloco , "vProd" )
  nValorProdNFe += Val( nValorTag )

  nValorTag := XmlNode( cBloco , "vNF" )
  nTotalNFe += Val( nValorTag )

Next

oBar:Close()

aXML :=  {}

oBar := HProgressBar():NewBox( "Processando, "+lTrim(Str(0,9))+" De "+lTrim(Str(Len(aNFCeXml),9))+" Registro(s)",,,400,, 10, Len(aNFCeXML), )

FOR nX := 1 TO Len(aNFCeXML)
   AAdd(aXML,cPathNFCeXML + aNFCeXML[nX][1])
NEXT

For nX := 1 To Len( aXML )

  oBar:Step("Processando, "+lTrim(Str(nX,9))+" De "+lTrim(Str(Len(aNFCeXml),9))+" Registro(s)")
         
  cFile := aXML[nX]
 
  cFile := Hb_MemoRead( cFile )

  cBloco := XmlNode( cFile , "ide" ) //Data
  dhEmi  := hb_ctod(substr(XmlNode( cBloco , "dhEmi" ),1,10),"yyyy-mm-dd")  //<dhEmi>2019-01-31T08:47:58-03:00</dhEmi>
  cNF    := XmlNode( cBloco , "nNF" ) //
 
  if dhEmi >= dIni .and. dhEmi <= dFim
  else
     loop
  endif

  cBloco := XmlNode( cFile , "infProt" ) //Autorizada ?

  cMotivo := XmlNode( cBloco , "xMotivo" )

  if upper(substr(cMotivo,1,16)) == "AUTORIZADO O USO"
  else
    //rodape(oDlg,4, "Ignor.: " + strzero(++nIgnorada,6) + " " + aXml[nX] ) 
    loop
  endif

  cBloco := XmlNode( cFile , "total" ) //Para somar os valores totais da notas

  nValorTag := XmlNode( cBloco , "vProd" )
  nValorProdNFCe += Val( nValorTag )

  nValorTag  := XmlNode( cBloco , "vNF" )
  nTotalNFCe += Val( nValorTag )

Next

oBar:Close()

Rodape(oDlg,1,"Qtd NFe: "  + Transform( Len(aNFeXML),"999,999")  + " Total: " + Transform( nTotalNFe ,"@e 99999,999.99") )
Rodape(oDlg,2,"Qtd NFCe: " + Transform( Len(aNFCeXML),"999,999") + " Total: " + Transform( nTotalNFCe ,"@e 99999,999.99") )
Rodape(oDlg,3,"Mês: " + Str(Month(dIni),2)+'/'+Str(Year(dIni),4) )

RETURN Nil


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes



Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro