;** Imp_Opaf *******************************************************************
;*  Importacao de Cupons Fiscais      Layout 022                       - OPAF  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 29/08/2016 por Kamila Gomes
;Ultima Alteracao: 04/10/2016 por Anivel Auguto Rodrigues
;Motivo Alteracao: Ajustes tempo de espera 6 tentativasw de 15 segundos
;Ultima Alteracao: 08/11/2016 por Bruno Carvalho
;Motivo Alteracao: Add SDCarrega_F1() e ajustes p/ trazer apenas n§ de ECF vinculadas a empresa informada
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog             
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes TG_DTINI
;Ultima Alteracao: 03/07/2017 por Rafael Matos
;Motivo Alteracao: Substituidos Busca_Lookup por GetRecord
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Aliquota e Indices da redu‡Æo caso nÆo tenha movimenta‡Æo
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 02/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes outros dados ecf, usuario do ecf
;Ultima Alteracao: 14/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor do troco                          
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 04/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes codigo do cliente em branco             
;Ultima Alteracao: 06/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio   
;Ultima Alteracao: 04/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes condicao pagamento
;Ultima Alteracao: 25/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes corre‡Æo condicao pagamento
;Ultima Alteracao: 11/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes codigo autorizacao cartao       
;Ultima Alteracao: 19/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SDCarrega_F1() s¢ ECF ativo

;*******************************************************************************
;* Carrega F1 Personalizado do ShowDialog                                      *
;*******************************************************************************
Proc SDCarrega_F1()

;----- Se existe ECF's cadastradas para a EMPRESA ------------------------------
{Ask} {\\Sistemas\\Vendas\\Opaf_ecf} Check
Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
Moveto [Inativo             ] TypeIn "not S"
Do_It!
ClearImage
ClearImage

If IsEmpty("Answer")
   Then MSG = "N„o h  ECF cadastrada para a empresa "+VSDGEMPRESA+"!" 
        Return False
EndIf

;----- Verifica se tem mais um N§ de ECF cadastrado para a mesma EMPRESA -------
{Ask} {\\Sistemas\\Vendas\\Opaf_ecf} 
Moveto [Numero de Serie     ] TypeIn "Calc Count as Calculo"
Moveto [Numero ECF          ] Check
Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
Do_It!
ClearImage
ClearImage

View "Answer"
Scan
  If [Calculo]>1
     Then ClearImage
          MSG = "H  mais de um n§ de ECF cadastrada para a empresa "+VSDGEMPRESA+"!" 
          Return False
  EndIf   
EndScan

;---- Monta os ECF's de acordo com a EMPRESA -----------------------------------  
{Ask} {\\Sistemas\\Vendas\\Opaf_ecf}
Moveto [Numero de Serie     ] Check
Moveto [Numero ECF          ] Check
Moveto [Modelo Impressora   ] Check
Moveto [Reinicio operacao   ] Check
Moveto [Codigo do Usuario   ] Check
Moveto [Codigo da Empresa   ] Check TypeIn "~VSDGEMPRESA.."
Do_It!
ClearImage
ClearImage

View "Answer" 
Monta_Opcoes("ECF","F1_Temp")

Return True

EndProc ;SDCarrega_F1()

;*******************************************************************************
;* Proximo arquivo RT                                                          *
;*******************************************************************************
Proc ArqRT()
Private num

Aguarde("Aguardando resposta do INTEGRADOR")

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHO+"\\RT*.T" Enter ClearImage

If IsEmpty("List")
   Then num=0
   Else View "List"
        End
        num=SubStr([Name],3,6)
        If E_Numerico(num)
           Then num=Numval(num)
           Else num=0
        EndIf   
        ClearAll
EndIf

num=num+1
CriaProximo_ArqT(num)

For wc From 1 to 6  
  Aguarde("Aguardando resposta do INTEGRADOR tentativa "+StrVal(wc)+"/6 de 15 Segundos")

  Sleep 15000
  If IsFile(ARQL) Then QuitLoop EndIf
  
EndFor
LimpAguarde()

If Not IsFile(ARQL) 
   Then MSG    ="Arquivo de Log de retorno nÆo gerado !// //"
        MSG=MSG+"Verificar se INTEGRADOR do OPAF esta em execu‡Æo !//"
        MSG=MSG+"Caso nÆo esteja em execu‡Æo, carrega-lo e repetir esta opera‡Æo !"
        Mensagem(MSG)
        Return False
EndIf

Importa(ARQL) ; Importa LOG
STATUS=""
MSG="Arquivo LOG "+ARQL+"// //"
View "Impopaf"
Scan
  If SubStr([Impopaf->Texto],1,6)="INICIO"  Or 
     SubStr([Impopaf->Texto],1,3)="FIM"     Or 
     SubStr([Impopaf->Texto],1,6)="STATUS" 
     Then STATUS=SubStr([Impopaf->Texto],1,10)
          MSG=MSG+[Texto]+"//"
  EndIf             
EndScan
If STATUS<>"STATUS; OK"
   Then MSG=MSG+"//Verificar o arquivo LOG as ocorrˆncias// //"
        Mensagem(MSG)
        Return False
   Else COR_MENSAGEM="1"
        Mensagem(MSG)
EndIf   

Importa(ARQS) ; Importa Dados


Return True
EndProc

;*******************************************************************************
;* Cria Proximo arquivo RT                                                     *
;*******************************************************************************
Proc CriaProximo_ArqT(num)
Private num

ARQRET="RT"+AlinhM(STrVal(num),6)
ARQ=VSDGCAMINHO+"\\"+ARQRET+".L"+VSDGNECF
If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf

ARQ=VSDGCAMINHO+"\\"+ARQRET+".S"+VSDGNECF
If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf

ARQ=VSDGCAMINHO+"\\RETORNO.TXT"
If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf
        
Print File ARQ "101"
Print File ARQ AlinhM(Tira_CharNum(CNPJ_Empr),14)
Print File ARQ "RET"
Print File ARQ AlinhM(StrVal(Day(VSDGDTINI)),2)+AlinhM(StrVal(Month(VSDGDTINI)),2)+AlinhM(StrVal(Year(VSDGDTINI)),4)
Print File ARQ SubStr(VSDGHRINI,1,2)+SubStr(VSDGHRINI,4,2)+"00"
Print File ARQ AlinhM(StrVal(Day(VSDGDTFIM)),2)+AlinhM(StrVal(Month(VSDGDTFIM)),2)+AlinhM(StrVal(Year(VSDGDTFIM)),4)
If SubStr(VSDGHRFIM,1,2)="24"
   Then Print File ARQ "235959"
   Else Print File ARQ SubStr(VSDGHRFIM,1,2)+SubStr(VSDGHRFIM,4,2)+"59"
EndIf   
Print File ARQ "0000"
Print File ARQ "022"
Print File ARQ "\n"

Print File ARQ "111\n"
Print File ARQ "112\n"
Print File ARQ "113\n"
Print File ARQ "117\n"
Print File ARQ "118\n"

Print File ARQ "099"
Print File ARQ AlinhM("5",10)
Print File ARQ "\n"

ARQL=VSDGCAMINHO+"\\"+ARQRET+".L"+VSDGNECF
ARQS=VSDGCAMINHO+"\\"+ARQRET+".S"+VSDGNECF
ARQT=VSDGCAMINHO+"\\"+ARQRET+".T"

Copia_Arquivo(ARQ+" "+ARQT)
Deleta_Arquivo(ARQ)

EndProc

;*******************************************************************************
;* Importa dados TXT -> DB                                                     *
;*******************************************************************************
Proc Importa(ARQUIVO)
Private ARQUIVO

If Not IsTable("Impopaf")
   Then {Create} {impopaf}  "Texto" Enter  "m70" Do_It! 
EndIf

Aguarde("Convertendo TXT->DB ["+ARQUIVO+"]")
Empty("Impopaf")
If IsAssigned(varinner) Then release vars varinner  EndIf

FileRead ARQUIVO to varinner
Edit "Impopaf"
pos=1
While True
  posf=searchFrom("\n",varinner,pos)
  if posf=0 then quitLoop endif
  [Texto]=substr(varinner,pos,(posf-pos))
  Down
  pos=posf+1
EndWhile
Do_It!
ClearAll

If ARQUIVO = ARQS Then Cria_Registros() EndIf

If IsAssigned(varinner) Then release vars varinner  EndIf

Endproc

;*******************************************************************************
;* Cria tabelas de registros                                                   *
;*******************************************************************************
Proc Cria_Registros()
Private NOMREG

Array REGOPAF[7]
REGOPAF[1]="Opaf001"
REGOPAF[2]="Opaf011"
REGOPAF[3]="Opaf012"
REGOPAF[4]="Opaf013"
REGOPAF[5]="Opaf017"
REGOPAF[6]="Opaf018"
REGOPAF[7]="Opaf099"

NOMREG = ""
For i From 1 To ArraySize(REGOPAF)
    NOMREG= SubStr(REGOPAF[i],5,3)
    If Not IsTable(REGOPAF[i])
       Then {Create} TypeIn REGOPAF[i] Enter TypeIn "Texto" Enter TypeIn "m70" Do_It! 
    EndIf
    ClearAll
    
    {Ask} {ImpOpaf} Enter Check
    Moveto [Texto] TypeIn "~NOMREG.." 
    Do_It!
    ClearAll
    
    Rename "Answer" REGOPAF[i]    
EndFor

EndProc  ;Cria_Registros()
;*******************************************************************************
;* totalizar                                                                   *
;*******************************************************************************
Proc Totalizar(tot,vr)
Private tot, vr, wi

For wi From 1 To 20
 If SubStr(totalizadores[wi],1,5)=tot Or SubStr(totalizadores[wi],1,5)="00000"
    Then totalizadores[wi]=tot+StrVal(NumVal(SubStr(totalizadores[wi],6,15))+vr)
         quitloop
 Endif           
EndFor

EndProc

;*******************************************************************************
;* Verifica C¢digo da Condi‡Æo de Pagamento                                    *
;*******************************************************************************
Proc VerCodCondPagto(PARAM)
Private AUX,PARAM

AUX = PARAM
If Len(AUX)=3
   Then LETRA = SubStr(AUX,1,2)
        Switch
          Case LETRA="10" : LETRA = "A"
          Case LETRA="11" : LETRA = "B"
          Case LETRA="12" : LETRA = "C"
          Case LETRA="13" : LETRA = "D"
          Case LETRA="14" : LETRA = "E"
          Case LETRA="15" : LETRA = "F"
          Case LETRA="16" : LETRA = "G"
          Case LETRA="17" : LETRA = "H"
          Case LETRA="18" : LETRA = "I"
          Case LETRA="19" : LETRA = "J"
          Case LETRA="20" : LETRA = "K"
          Case LETRA="21" : LETRA = "L"
          Case LETRA="22" : LETRA = "M"
          Case LETRA="23" : LETRA = "N"
          Case LETRA="24" : LETRA = "O"
          Case LETRA="25" : LETRA = "P"
          Case LETRA="26" : LETRA = "Q"
          Case LETRA="27" : LETRA = "R"
          Case LETRA="28" : LETRA = "S"
          Case LETRA="29" : LETRA = "T"
          Case LETRA="30" : LETRA = "U"
          Case LETRA="31" : LETRA = "V"
          Case LETRA="32" : LETRA = "W"
          Case LETRA="33" : LETRA = "X"
          Case LETRA="34" : LETRA = "Y"
          Case LETRA="35" : LETRA = "Z"
        EndSwitch  
        CONDPAGTO = LETRA + SubStr(AUX,3,1)
   Else CONDPAGTO = AUX
EndIf

Return CONDPAGTO 

EndProc ;VerCodCondPagto

;*******************************************************************************
;* Processa dados Cupom                                                        *
;*******************************************************************************
Proc ProcessaC()
private clienteok

Array Totalizadores[20]

NR=NRecords("Opaf011")
REDZ=True

View "\\Sistemas\\Cadastro\\Tppagto"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Represen"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Estoque\\Itens"
View "Tbprcab"
View "P_Cartao"
View "ECF_C"
View "Opaf_FP"
View "CondPgto"
View "NotaC"
View "NotaI"
View "NotaV"
View "NotaIC"
CoEdit "Opaf013", "Opaf012", "Opaf011"
SetHighLight Current Record 23 Field 31

Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo Cupom "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)
  
  DTCUPOM=DateVal(SubStr([Opaf011->Texto],29,2)+"/"+
                 SubStr([Opaf011->Texto],27,2)+"/"+
                 SubStr([Opaf011->Texto],31,4))
  HRCUPOM=SubStr([Opaf011->Texto],329,2)+":"+SubStr([Opaf011->Texto],331,2)
  
  If Not REDZ And DTRZ=DTCUPOM Then Loop EndIf                  
  If DTCUPOM<VSDGDTINI Then Loop EndIf
  If DTCUPOM>VSDGDTFIM Then Loop EndIf 
     
  NECF=NumVal(SubStr([Opaf011->Texto],16,2))
  
  Moveto "ECF_C"
  Moveto [Numero do ECF]
  Locate IndexOrder by "Ind_ecf1" NECF,VSDGEMPRESA,DTCUPOM 
  If RetVal
    Then CRO=[Reinicio Operacao]
    Else REDZ=False
         DTRZ=DTCUPOM
         MSG="NÆo foi encontrado Redu‡Æo Z - Mapa Resumo //"
         MSG=MSG+"para o dia "+SubStr(DTRZ,1,2)+"/"+
                               SubStr(DTRZ,4,2)+"/"+
                               SubStr(DTRZ,7,4)+".//"
         MSG=MSG+"Cupons referente a este dia nÆo serÆo importados!"
         Mensagem(MSG)          
         Loop   
  EndIf      
  
  Moveto "Opaf011"
           
  CUPOM=SubStr([Opaf011->Texto],21,6)
  NECF =StrVal(NECF)
  CDDOCTO="X"+NECF+SubStr(CRO,2,2)
  SRDOCTO="X"+NECF+SubStr(CRO,2,2)
  NECF =AlinhM(StrVal(NECF),2) 
  
  Moveto "NotaC"
  While True
     Moveto [Codigo da Empresa]
     Locate VSDGEMPRESA,CUPOM,SRDOCTO
     If Not RetVal
        Then
             End Down
             [Codigo da Empresa          ]=VSDGEMPRESA
             [Numero do Documento        ]=CUPOM
             [Codigo do Documento        ]=CDDOCTO
             [Serie do Documento         ]=SRDOCTO
             If IsLockRecord()
                Then Del
                Else UnLockRecord     
             EndIf        
             Loop
     EndIf
     If Not IsLockRecord()
        Then QuitLoop
     EndIf   
  EndWhile   
  
  [Data de Emissao            ]=DTCUPOM
  [Data de Saida              ]=[Data de Emissao    ]
  [Hora de Saida              ]=HRCUPOM
  
  If NumVal(Substr([Opaf011->Texto],369,13))<>0
    Then [Numero DAV_PreVenda ]=Substr([Opaf011->Texto],369,13)
  EndIf
  If NumVal(Substr([Opaf011->Texto],382,13))<>0
    Then [Numero DAV_PreVenda ]=Substr([Opaf011->Texto],382,13)
  EndIf

  CODC=RTrim(SubStr([Opaf011->Texto],350,4))
  
  clienteok=false  
  if not isblank(CODC)
     then GetRecord "\\Sistemas\\Cadastro\\Destinat" CODC To Reg_Busca_Lookup
          If RetVal
             then clienteok=true
          endif
  endif       
  if clienteok  
     Then 
          [Codigo ]=CODC
     else
          [Codigo ]=VSDGCLIENTE ; cliente padrao, diversos, consumidor final
          If LTrim(RTrim(SubStr([Opaf011->Texto],101,30)))<>""
           Then [Razao Social   ]=RTrim(SubStr([Opaf011->Texto],101,30))
                [Endereco       ]=RTrim(SubStr([Opaf011->Texto],131,30))
                [Bairro         ]=RTrim(SubStr([Opaf011->Texto],161,20))
                [Telefone       ]=RTrim(SubStr([Opaf011->Texto],213,15))
                CGC_CPF=LTrim(RTrim(Substr([Opaf011->Texto],87,14)))
                Switch
                  Case Len(CGC_CPF)=11:
                       CGC_CPF=Substr(CGC_CPF,1,3)+"."+Substr(CGC_CPF,4,3)
                               +"."+Substr(CGC_CPF,7,3)+"-"+Substr(CGC_CPF,10,2)
                       [CGC        ]=CGC_CPF
                       [Tipo Pessoa]="FISICA"        
                  Case Len(CGC_CPF)=14:
                       CGC_CPF=Substr(CGC_CPF,1,2)+"."+Substr(CGC_CPF,3,3)+"."+
                               Substr(CGC_CPF,6,3)+"/"+Substr(CGC_CPF,9,4)+"-"+
                               Substr(CGC_CPF,13,2)
                       [CGC        ]=CGC_CPF
                       [Tipo Pessoa]="JURIDICA"        
                EndSwitch                   
                CID              =RTrim(SubStr([Opaf011->Texto],181,20))
                UF               =RTrim(SubStr([Opaf011->Texto],211,02))
                GetRecord "\\Sistemas\\Cadastro\\Cidades" CID,UF To Reg_Busca_Lookup
                If Not RetVal
                   Then CID=""
                        UF =""
                EndIf
                [Cidade         ]=CID
                [UF             ]=UF
          EndIf   
  EndIf

  CODR=AlinhM(RTrim(SubStr([Opaf011->Texto],228,4)),4)
  GetRecord "\\Sistemas\\Cadastro\\Represen" CODR To Reg_Busca_Lookup
  If Not Retval
    Then CODR=VSDGVENDEDOR
  EndIf   
  [Codigo do Representante    ]=CODR
  
  CODT=AlinhM(SubStr([Opaf011->Texto],319,5),5)
  GetRecord "\\Sistemas\\Vendas\\Tbprcab" CODT To Reg_Busca_Lookup
  If Not Retval
    Then CODT=""                     
  EndIf                                
  
  [Codigo da Tabela           ]=CODT
  [Codigo da Destinacao       ]=CODD 
  [Codigo da Transportadora   ]=VSDGTRANSP
  [Frete por Conta            ]="1"
  [Valor do Desconto          ]=NumVal(SubStr([Opaf011->Texto],48,13))/100
  [Valor Despesas Acessorias  ]=NumVal(SubStr([Opaf011->Texto],61,13))/100
  [Valor Mercadoria           ]=NumVal(SubStr([Opaf011->Texto],35,13))/100
  [Valor Desconto             ]=[Valor do Desconto]
  [Valor Mercadoria Liquido   ]=[Valor Mercadoria]-[Valor Desconto]
  [Valor Nota Fiscal          ]=NumVal(SubStr([Opaf011->Texto],74,13))/100
  [Frete Incluso na Nota      ]=":"
  cupom_cancelado=false
  If SubStr([Opaf011->Texto],253,1)="C"
    Then [Situacao           ]="C"
         cupom_cancelado      =true  
  EndIf
  [Sistema Gerador            ]="CF"
  [Numero da OF               ]=AlinhM(RTrim(SubStr([Opaf011->Texto],14,4)),6)
  If PARAM_RATEIO_COMISSAO = "S"                                                     
     Then [Observacao na Nota Fiscal]=RTrim(SubStr([Opaf011->Texto],269,25))
          OBS2 = LTrim(SubStr([Opaf011->Texto],294,25))
          If OBS2<>""
             Then OBS2 = AlinhM(RTrim(SubStr(OBS2,1,4)),4)
                  GetRecord "\\Sistemas\\Cadastro\\Represen" OBS2 To COMISSAO
                  If Not RetVal
                     Then MSG = "Representante: "+OBS2+" referente ao Cupom: "+CUPOM+"// nÆo cadastrado Verificar !"
                          Mensagem(MSG)
                     Else Moveto "NotaIC"
                          Moveto [Codigo da Empresa]
                          Locate VSDGEMPRESA,CUPOM,SRDOCTO
                          If Not RetVal
                             Then End Down
                                  [Codigo da Empresa        ] = VSDGEMPRESA 
                                  [Numero do Documento      ] = CUPOM 
                                  [Serie do Documento       ] = SRDOCTO
                                  [Item do Documento        ] = 0
                                  [Codigo do Representante  ] = COMISSAO["Codigo do Representante"]
                                  [Nome Fantasia Represent  ] = COMISSAO["Nome Fantasia Represent"]
                                  If (COMISSAO["Comissao do Representante"])<>BlankNum()
                                     Then [Comissao do Representante] = COMISSAO["Comissao do Representante"]
                                     Else [Comissao do Representante] = 0
                                  EndIf
                          EndIf
                          Moveto "NotaC"
                  EndIf   
          EndIf   
     Else [Observacao na Nota Fiscal]=RTrim(RTrim(SubStr([Opaf011->Texto],269,25))+"   "+
                                      RTrim(SubStr([Opaf011->Texto],294,25)))
  EndIf
    
  ;--- zera totalizadores -----------------------------------------------
  For i From 1 To 20
   Totalizadores[i]="000000.00"
  EndFor
  
  vrrateio_descto=0
  vrrateio_acresc=0
  
  vrtotal_descto=[Valor Desconto             ]
  vrtotal_acresc=[Valor Despesas Acessorias  ]
  
  TXDESCTO_TOTAL =([Valor Desconto             ]/[Valor Mercadoria])*100 ; regra sistema
  TXACRESC_TOTAL =([Valor Despesas Acessorias  ]/[Valor Mercadoria])*100 ; regra sistema
  
  TXDESCTO_RATEIO=NDecimal(([Valor Desconto             ]/[Valor Mercadoria])*100,2) ; regra do ecf
  TXACRESC_RATEIO=NDecimal(([Valor Despesas Acessorias  ]/[Valor Mercadoria])*100,2) ; regra do ecf
  
  GEROU_COMPDIAS = False
  ISSQN   = False 
  Seqv    = 0
  cv      = 0
  cp      = 0
  FP      = "OU"
  NC      = ""
  vrtroco = 0
  
  If Item_Cupom() 
  Then Venc_Cupom()           
       Acerto_Rateio()
       Venc_CompDias()
       
       Moveto "NotaC"
       Moveto [Codigo da Empresa]
       Locate VSDGEMPRESA,CUPOM,SRDOCTO
       If RetVal
          Then [Valor BCICMS         ]=VRBCICMS
               [Valor ICMS           ]=VRICMS
               [Valor ISSQN          ]=VRISSQN      
               [Valor BCISSQN        ]=VRBCISSQN
               [Valor PIS            ]=VRPIS
               [Valor COFINS         ]=VRCOFINS
               [Valor Troco          ]=vrtroco
               
               If cv>=1 Then [Tipo de Pagamento]="V" EndIf   
               If cp>=1 Then [Tipo de Pagamento]="P" EndIf
      
               Moveto [Condicao de Pagamento]
               CODP=Rtrim(SubStr([Opaf011->Texto],367,3))
               If CODP<>""
                  Then CODP=VerCodCondPagto(CODP)
               EndIf   
               If CODP="" Or CODP="000" Then CODP="00" EndIf
               
               If CODP="" or CODP="00" 
                  Then If [Tipo de Pagamento]="V"
                          Then CODIGO_AVANCO = "..VISTA.."
                          Else CODIGO_AVANCO = "..PRAZO.."
                       EndIf
                       Moveto "CondPgto"
                       Moveto [Descricao CondPagto]
                       Locate PATTERN CODIGO_AVANCO
                       If RetVal 
                          Then CODP = [Condicao de Pagamento]  
                          else CODP = ""
                       EndIf    
                       Moveto "NotaC" 
               EndIf
               [Condicao de Pagamento] = CODP
               
               If FP<>""
                  Then GetRecord "\\Sistemas\\Cadastro\\Tppagto" FP To REG_BUSCA_FP
                       If RetVal
                          Then [Forma de Pagamento] = FP  
                       EndIf
               EndIf
               
               If FP="CD"
                Then [Tipo de Pagamento  ] = "P"
                     [Numero de Parcelas ] = 1
                     [Composicao de Dias ] = "1"
               EndIf
               
               If GEROU_COMPDIAS
                  Then If COM_DIAS <> "" And COM_DIAS <> BlankNum()
                         Then [Composicao de Dias       ] = COM_DIAS
                         Else [Numero de Parcelas       ] = NUM_PARC
                       EndIf  
               EndIf                
       EndIf
  EndIf

  Moveto "NotaC"
  Controle_Dia()
  if not isblank(vsdgchapa)
     then [Codigo_Usuario]=vsdgchapa
  endif    

  UnLockRecord
  
  Moveto "Opaf011"
EndScan 
Do_It!
ClearAll

;***** Em 10.11.2014 por Andrey/Kamila - *****
;***** Correcao Numero de Dias e Data de Vencimento no NOTAV *****
;***** Para Qualquer tipo de forma de pagamento ******************
NR=NRecords("Opaf011")

View "NotaC"
View "NotaV"
CoEdit "Opaf011"
SetHighLight Current Record 23 Field 31
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo Cupom "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)
  
  If SubStr([Opaf011->Texto],1,3)="011"
     Then CUPOM   = SubStr([Opaf011->Texto],21,6)
          If SubStr(NECF,1,1)="0" Then NECF=SubStr(NECF,2,1) EndIf
          SRDOCTO = "X"+NECF+SubStr(CRO,2,2)
          
          Moveto "NotaC"
          Moveto [Codigo da Empresa]
          Locate VSDGEMPRESA,CUPOM,SRDOCTO 
          If RetVal
             Then CONT_CT = 0
                  NOME_CT = "****"
                  Moveto "NotaV"
                  Moveto [Codigo da Empresa]
                  Locate VSDGEMPRESA,CUPOM,SRDOCTO
                  If RetVal
                     Then While [Codigo da Empresa   ] = VSDGEMPRESA And
                                [Numero do Documento ] = CUPOM       And
                                [Serie do Documento  ] = SRDOCTO
                                
                                If [Forma de Pagamento]="CT" Or [Forma de Pagamento]="CD"  Or [Forma de Pagamento]="CL"
                                   Then GetRecord "\\Sistemas\\Vendas\\P_Cartao" VSDGEMPRESA,[Nome do Cartao] To CARTAO
                                        If RetVal
                                           Then If NOME_CT <> CARTAO["Nome do Cartao"]
                                                   Then NOME_CT = CARTAO["Nome do Cartao"]
                                                        CONT_CT = 0
                                                EndIf
                                                CONT_CT = CONT_CT + 1

                                                NDIAS = (NumVal(CARTAO["Numero Dias Vencimento"]) * CONT_CT)
                                                [Data] = [NotaC->Data de Emissao] + (NumVal(CARTAO["Numero Dias Vencimento"]) * CONT_CT)
                                                [Numero de Dias] = NDIAS
                                        EndIf   
                                   Else [Numero de Dias] = [Data]-[NotaC->Data de Emissao]
                                EndIf
                                Skip
                                If Eot() Then QuitLoop EndIf
                          EndWhile         
                          UnLockRecord      
                  EndIf
          EndIf   
  EndIf   
  Moveto "Opaf011"     
EndScan
Do_It!
ClearAll

;**** Em 26.03.2014 por Bruno Carvalho - CORRECAO DATA CT ou CD ****
;**** NA GERACAO DE DUPLICATAS ISSO Ô REALIZADO ********************
;NR=NRecords("Opaf011")

;View "NotaC"
;View "NotaV"
;CoEdit "Opaf011"
;SetHighLight Current Record 23 Field 31
;Scan
;  Barra(NR, RecNo())
;  Aguarde("Aguarde, Convertendo Cupom "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)
;  
;  If SubStr([Opaf011->Texto],1,3)="011"
;     Then CUPOM   = SubStr([Opaf011->Texto],18,6)
;          SRDOCTO = "X"+NECF+SubStr(CRO,2,2)
;          
;          Moveto "NotaC"
;          Moveto [Codigo da Empresa]
;          Locate VSDGEMPRESA,CUPOM,SRDOCTO 
;          If RetVal
;             Then If [Forma de Pagamento]<>"CT" And [Forma de Pagamento]<>"CD"
;                     Then Moveto "Opaf011"
;                          Loop
;                  EndIf     
;                  
;                  CONT_CT = 0
;                  NOME_CT = "****"
;                  Moveto "NotaV"
;                  Moveto [Codigo da Empresa]
;                  Locate VSDGEMPRESA,CUPOM,SRDOCTO
;                  If RetVal
;                     Then While [Codigo da Empresa   ] = VSDGEMPRESA And
;                                [Numero do Documento ] = CUPOM       And
;                                [Serie do Documento  ] = SRDOCTO
;                                
;                                GetRecord "\\Sistemas\\Vendas\\P_Cartao" VSDGEMPRESA,[Nome do Cartao] To CARTAO
;                                If RetVal
;                                   Then If NOME_CT <> CARTAO["Nome do Cartao"]
;                                           Then NOME_CT = CARTAO["Nome do Cartao"]
;                                                CONT_CT = 0
;                                        EndIf
;                                     
;                                        CONT_CT = CONT_CT + 1
;                                        NDIAS = (NumVal(CARTAO["Numero Dias Vencimento"]) * CONT_CT)
;                                     
;                                        [Data] = [NotaC->Data de Emissao] + (NumVal(CARTAO["Numero Dias Vencimento"]) * CONT_CT)
;                                        [Numero de Dias] = NDIAS 
;                                EndIf
;                                Skip
;                                If Eot() Then QuitLoop EndIf
;                          EndWhile         
;                          UnLockRecord      
;                  EndIf
;          EndIf   
;  EndIf   
;  Moveto "Opaf011"     
;EndScan
;Do_It!
;ClearAll

EndProc

;*******************************************************************************
;* Processa dados Itens Cupom                                                  *
;*******************************************************************************
Proc Item_Cupom()
   
Moveto "Opaf012"
itemCupom = False    

Scan For(SubStr([Opaf012->Texto],16,2)=NECF And SubStr([Opaf012->Texto],21,6)=CUPOM)
   ItemCupom = True
  
	 Moveto "NotaI"
	 While True
     Moveto [Codigo da Empresa]
     Locate VSDGEMPRESA,CUPOM,SRDOCTO,NumVal(SubStr([Opaf012->Texto],163,4))
     If Not RetVal
        Then End Down
             [Codigo da Empresa          ]=VSDGEMPRESA
             [Numero do Documento        ]=CUPOM
             [Serie do Documento         ]=SRDOCTO
             [Item do Documento          ]=NumVal(SubStr([Opaf012->Texto],163,4))
             If IsLockRecord()
                Then Del
                Else UnLockRecord     
             EndIf        
             Loop
     EndIf
     If Not IsLockRecord()
        Then QuitLoop
     EndIf   
   EndWhile   

   If SubStr([Opaf012->Texto],147,1)="C"  Then [Situacao_Item]="C" EndIf
   
   [Descricao do Item           ]=RTrim(SubStr([Opaf012->Texto],047,40))
   [Unidade Fiscal              ]=RTrim(SubStr([Opaf012->Texto],087,02))

   CODIT=""
   CODAUX=RTrim(SubStr([Opaf012->Texto],186,20))
   Moveto [Codigo do Item]
   If CODAUX<>"" And Busca_Lookup("Codigo de Barras",CODAUX,"SM")
    Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
    Else GetRecord "\\Sistemas\\Estoque\\Itens" CODAUX To Reg_Busca_Lookup
         If Retval  
            Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
         EndIf
   EndIf
   CODAUX=RTrim(SubStr([Opaf012->Texto],027,20))
   If CODAUX<>CODIT
    Then GetRecord "\\Sistemas\\Estoque\\Itens" CODAUX To Reg_Busca_Lookup
         If Retval 
            Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
         EndIf 
   EndIf 
   
   If CODIT=""
    Then MSG=    "Codigo do Item/Codigo de Barras n„o cadastrado !// //"
         MSG=MSG+"Cupom Fiscal: "+SRDOCTO+" - "+CUPOM+"//"
         MSG=MSG+"Codigo: "+CODAUX+"// //"  
         MSG=MSG+"Lan‡amento inv lido!"
         Mensagem(MSG)
   EndIf       

   [Codigo do Item             ]=CODIT
   [Quantidade                 ]=NumVal(SubStr([Opaf012->Texto],90,13))/1000
                       PrecoUnit=NumVal(SubStr([Opaf012->Texto],103,13))/100
                      DesctoUnit=NumVal(SubStr([Opaf012->Texto],116,13))/100
                      AcrescUnit=NumVal(SubStr([Opaf012->Texto],129,13))/100
                             IAT=SubStr([Opaf012->Texto],167,01)
                        
    If [Situacao_Item  ] ="C"
      Then DesctoUnit=0                  
           ;AcrescUnit=0
    EndIf

   [Preco Unitario             ]= PrecoUnit
   [Preco Unitario Tabela      ]= PrecoUnit
   [Valor Desconto Unitario    ]= DesctoUnit

   if [Valor Desconto Unitario ]>0
      then [Tipo Desconto Item  ]="U"
           [Valor Desconto Item ]=NDecimal(([Quantidade]*[Valor Desconto Unitario]),2)
   endif        
   [Valor OutDesp Total   ]=NDecimal(([Quantidade]*AcrescUnit),2)

   Switch
     Case IAT="T" : [Preco Total   ]=NDecimal(([Quantidade]*[Preco Unitario       ])-[Valor Desconto Item ],2)
                    valortotalizador=NDecimal(([Quantidade]*[Preco Unitario Tabela]),2)        ; alterado anivel 09/10/2014

     Case IAT="A" : [Preco Total   ]=   Round(([Quantidade]*[Preco Unitario       ])-[Valor Desconto Item ],2)
                    valortotalizador=   Round(([Quantidade]*[Preco Unitario Tabela]),2)        ; alterado anivel 09/10/2014
   EndSwitch                                     
   
   AliqICMS_CUPOM=NumVal(SubStr([Opaf012->Texto],143,4))/100

   If [Tipo do Item]<>"C" Then
       Switch
         Case SubStr([Opaf012->Texto],142,1)="T" And [Tributacao de ICMS]<>"D":
              [Tributacao de ICMS      ]="D"
              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"00"
              [CSOSN                   ]="900"
              [Aliquota de Icms        ]=AliqICMS_CUPOM  
              [Aliquota Reduzida BCICMS]=0
         Case SubStr([Opaf012->Texto],142,1)="F" And [Tributacao de ICMS]<>"S":
              [Tributacao de ICMS      ]="S"
              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"60"
              [CSOSN                   ]="500"
              [Aliquota de Icms        ]=0 
              [Aliquota Reduzida BCICMS]=0
         Case SubStr([Opaf012->Texto],142,1)="I" And [Tributacao de ICMS]<>"I":
              [Tributacao de ICMS      ]="I"
              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"40"
              [CSOSN                   ]="400"
              [Aliquota de Icms        ]=0 
              [Aliquota Reduzida BCICMS]=0
         Case SubStr([Opaf012->Texto],142,1)="N" And [Tributacao de ICMS]<>"N":
              [Tributacao de ICMS      ]="N"
              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"41"
              [CSOSN                   ]="400"
              [Aliquota de Icms        ]=0 
              [Aliquota Reduzida BCICMS]=0
       EndSwitch
   EndIf

   Switch
     Case [Tributacao de ICMS]="D" :tot="T"
     Case [Tributacao de ICMS]="S" :tot="F"
     Case [Tributacao de ICMS]="I" :tot="I"
     Case [Tributacao de ICMS]="N" :tot="N"
     Case [Tributacao de ICMS]="O" :tot="N"
     OtherWise                     :tot="S"
   EndSwitch

   ; alterado anivel 09/10/2014-------------------------------------------------
   AliqICMS=[Aliquota de ICMS]
   If [Tributacao de ICMS]="D"
      Then If [Aliquota Reduzida BCICMS]>0
             Then res     =Round((AliqICMS*[Aliquota Reduzida BCICMS])/100,2)
                  AliqICMS=AliqICMS-res
                  if Format("W6.2,EIC",AliqICMS)<>Format("W6.2,EIC",AliqICMS_CUPOM)
                     Then AliqICMS                 =AliqICMS_CUPOM
                         [Aliquota de ICMS        ]=AliqICMS_CUPOM
                         [Aliquota Reduzida BCICMS]=0
                  EndIf     
             Else AliqICMS          =AliqICMS_CUPOM
                  [Aliquota de ICMS]=AliqICMS_CUPOM
           EndIf
           tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
      Else tot=tot+"0000"
   EndIf
   ;----------------------------------------------------------------------------
   
   [Taxa Desconto Total        ]=TXDESCTO_TOTAL
   [Valor Desconto Total       ]=NDecimal(([Preco Total]*TXDESCTO_RATEIO)/100,2)
   [Valor OutDesp Total        ]=[Valor OutDesp Total ]+NDecimal(([Preco Total]*TXACRESC_RATEIO)/100,2)

   If [Situacao_Item]<>"C"
      Then Totalizar(tot,valortotalizador)    ; alterado anivel 09/10/2014
           vrrateio_descto=vrrateio_descto+[Valor Desconto Total       ]
           vrrateio_acresc=vrrateio_acresc+[Valor OutDesp Total        ]
   EndIf        
   
	 VBC=([Preco Total]-[Valor Desconto Total])+[Valor OutDesp Total]
   Switch
      Case SubStr([Opaf012->Texto],170,1)=" " And SubStr([Opaf012->Texto],142,1)="T":
           VBC=VBC-NDecimal((VBC*[Aliquota Reduzida BCICMS])/100,2)
  				 If AliqICMS>0 And VBC>0
              Then [Valor do ICMS   ]=NDecimal((VBC*[Aliquota de ICMS])/100,2)
                   [ICMS_BC         ]=VBC 
  				 EndIf
  
      Case SubStr([Opaf012->Texto],170,1)="S":
  				 If [Tributacao de ISSQN]="D"
  						Then ISSQN=True 
                   If [Aliquota de ISSQN]>0 And [Preco Total]>0
                     Then [Valor do ISSQN ]= NDecimal(([Preco Total]*[Aliquota de ISSQN])/100,2)
                          [ISSQN_BC       ]= [Preco Total]
  				         EndIf
  				 EndIf
   EndSwitch  

   If [PIS_Aliquota ]>0
     Then [PIS_Valor  ]= NDecimal((VBC*[PIS_Aliquota])/100,2)
          [PIS_BC     ]=VBC 
	 EndIf 
	 If [COFINS_Aliquota ]>0
     Then [COFINS_Valor  ]= NDecimal((VBC*[COFINS_Aliquota])/100,2)
          [COFINS_BC     ]=VBC 
	 EndIf

   ;* Seta Variaveis PegaCFOP
   Checa_CFOP      =[NotaC->Tipo Movimento Estoque]
   CFO_C           =[NotaC->CFO      ]
   CFOP_TPITEM     =[Tipo do Item      ]
   CFOP_TRIBICMS   =[Tributacao de ICMS]
   CFOP_TPTRIB     =[Tipo Tributacao   ]
   CFOP_EMPRESA    =[NotaC->Codigo da Empresa ]
   CFOP_ATIVEMPRESA=ATIVEMPR
   Play "\\Sistemas\\Exporta\\PegaCFOP"
   [CFO            ]=CFO_C
   [Tipo Tributacao]=CFOP_TPTRIB

   [Codigo da Tabela]=[NotaC->Codigo da Tabela]
   UnLockRecord

   Moveto "Opaf012"
EndScan
         
If cupom_cancelado= true And ItemCupom = false
   Then 
     Moveto "NotaI"
     NumItem = 1
		 While True
       Moveto [Codigo da Empresa]
       Locate VSDGEMPRESA,CUPOM,SRDOCTO,NumItem
       If Not RetVal
          Then End Down
               [Codigo da Empresa          ]=VSDGEMPRESA
               [Numero do Documento        ]=CUPOM
               [Serie do Documento         ]=SRDOCTO
               [Item do Documento          ]=NumItem
               If IsLockRecord()
                  Then Del
                  Else UnLockRecord     
               EndIf        
               Loop
       EndIf
       If Not IsLockRecord()
          Then QuitLoop
       EndIf   
     EndWhile   
    [Situacao_Item]="C" 
    [Descricao do Item           ]="ITEM CANCELADO"
    
    Return False
EndIf         
         
Return True         
         
EndProc ;ItensCupom

;*******************************************************************************
;* Processa dados Vencimento Cupom                                             *
;*******************************************************************************
Proc Venc_Cupom()

Moveto "Opaf013"

Scan For(SubStr([Opaf013->Texto],20,02)=NECF And SubStr([Opaf013->Texto],25,06)=CUPOM)
   If SubStr([Opaf013->Texto],55,05)="Troco"
      Then vrtroco=NumVal(SubStr([Opaf013->Texto],33,13))/100
      
           If CUPOM = SubStr([Opaf013->Texto],25,6)
              Then If vrtroco<>0 And vrtroco<>BlankNum()
          				    Then Moveto "NotaV"
                           Moveto [Codigo da Empresa]
                           Locate VSDGEMPRESA,CUPOM,SRDOCTO,AlinhM(StrVal(Seqv),2)
                           If RetVal
                              Then [Valor]=[Valor] -  vrtroco
                                   UnLockRecord
                           EndIf
                   EndIf       
           EndIf      
      Else Seqv=Seqv+1
  				 Moveto "NotaV"
  				 While True
             Moveto [Codigo da Empresa]
             Locate VSDGEMPRESA,CUPOM,SRDOCTO,AlinhM(StrVal(Seqv),2)
             If Not RetVal
                Then End Down
                     [Codigo da Empresa          ]=VSDGEMPRESA
                     [Numero do Documento        ]=CUPOM
                     [Serie do Documento         ]=SRDOCTO
                     [Sequencia                  ]=AlinhM(StrVal(Seqv),2)
                     If IsLockRecord()
                         Then Del
                         Else UnLockRecord     
                     EndIf        
                     Loop
             EndIf
             If Not IsLockRecord()
                 Then QuitLoop
             EndIf   
           EndWhile
           [Data                       ]=DateVal(SubStr([Opaf013->Texto],48,2)+"/"+
                                                 SubStr([Opaf013->Texto],46,2)+"/"+
                                                 SubStr([Opaf013->Texto],50,4))
           
           CF=SubStr([Opaf013->Texto],31,02)
           If CF="01"
              Then [Valor]=NumVal(SubStr([Opaf013->Texto],33,13))/100 -  vrtroco
              Else [Valor]=NumVal(SubStr([Opaf013->Texto],33,13))/100
           EndIf
           [Observacao                 ]=RTrim(SubStr([Opaf013->Texto],55,20))

           Switch
             Case SubStr([Opaf013->Texto],85,1)="V": cv=cv+1
             Case SubStr([Opaf013->Texto],85,1)="P": cp=cp+1
           EndSwitch  

           NC = ""
           FP = "OU"
           
           ;---- Setando valores da Forma de Pagamento da tabela OPAF ----------
           GetRecord "\\Sistemas\\Vendas\\Opaf_FP" CF To REG_FP
           If Retval
            Then FP = REG_FP["Forma de Pagamento"] 
                 If REG_FP["Tipo"]="P" Or REG_FP["Tipo"]="T" ;CartÆo Debito/Credito ou TEF 
                    Then NC=REG_FP["Descricao Operacao"] ; Nome do CartÆo
                 EndIf
           EndIf        
           
           ;---- Verificando a existˆncia do tipo de pagamento -----------------
           If FP<>""
              Then GetRecord "\\Sistemas\\Cadastro\\Tppagto" FP To REG_FP
                   If Not RetVal
                      Then FP = "" 
                   EndIf
           EndIf
           
           Moveto "Notav" 
           [Forma de Pagamento]=FP
           
           If [Forma de Pagamento]="CD" 
              Then [Data]=DTCUPOM 
           EndIf
           
           If NC<>""
              Then GetRecord "\\Sistemas\\Cadastro\\cartoes" NC To regcartoes
                   if retval
                      then [Nome do Cartao] = NC
                   endif    
                   [Numero do Cartao]=SubStr([Opaf013->Texto],309,40)    
           EndIf
           UnLockRecord
   EndIf  
   Moveto "Opaf013" 
EndScan

EndProc ;Venc_Cupom()

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc Composicao_Dias()
Private CONT,AUX_COM_DIAS,Pos

Moveto "NotaV"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,CUPOM,SRDOCTO
If RetVal
   Then GEROU_COMPDIAS = True
        CONT     = 0
        COM_DIAS = ""
        NUM_PARC = 0
        While [Codigo da Empresa  ] = VSDGEMPRESA And
              [Numero do Documento] = CUPOM       And
              [Serie do Documento ] = SRDOCTO
              
              CONT = CONT + 1
              If ([Data]-[NotaC->Data de Emissao]) < 0
                 Then AUX_COM_DIAS = "000000"
                 Else AUX_COM_DIAS = AlinhM(StrVal([Data]-[NotaC->Data de Emissao]),6)
              EndIf

              If Search(AUX_COM_DIAS,COM_DIAS) = 0
                 Then NUM_PARC = NUM_PARC + 1
                      If Int(NumVal(AUX_COM_DIAS)) = 0 
                         Then If CONT > 1
                                 Then COM_DIAS = AUX_COM_DIAS + "/" + COM_DIAS
                                 Else COM_DIAS = AUX_COM_DIAS                         
                               EndIf
                         Else If CONT > 1
                                 Then COM_DIAS = COM_DIAS + "/" + AUX_COM_DIAS
                                 Else COM_DIAS = COM_DIAS + AUX_COM_DIAS
                              EndIf
                      EndIf            
              EndIf   
              
              Skip
              If Eot() Then QuitLoop EndIf
        EndWhile

        CONT         = 0
        AUX_COM_DIAS = COM_DIAS
        Pos = Search("/",AUX_COM_DIAS)
        
        If Pos = 0
           Then COM_DIAS = StrVal(Int(NumVal(AUX_COM_DIAS)))
           Else COM_DIAS = ""
        EndIf   
        
        While Pos > 0
          INT_DIAS = Int(NumVal(SubStr(AUX_COM_DIAS,1,Pos-1)))
          If Pos <> 100000
             Then AUX_COM_DIAS = SubStr(AUX_COM_DIAS,Pos+1,Len(AUX_COM_DIAS))
          EndIf
          CONT = CONT + 1
          
          If CONT > 1
             Then COM_DIAS = COM_DIAS + "/" + StrVal(INT_DIAS)  
             Else COM_DIAS = COM_DIAS + StrVal(INT_DIAS)
          EndIf  
          If Pos = 100000
             Then QuitLoop 
          EndIf   
          
          Pos = Search("/",AUX_COM_DIAS)
          If Pos = 0
             Then Pos = 100000
          EndIf 
        EndWhile
        
        If COM_DIAS="" Or COM_DIAS=BlankNum()
           Then COM_DIAS = "0"
                NUM_PARC = 1
        EndIf
        Moveto "NotaC"     
   Else GEROU_COMPDIAS = False
        If Not IsAssigned(COM_DIAS) Then COM_DIAS = "" EndIf
        If COM_DIAS="" Or COM_DIAS=BlankNum()
           Then COM_DIAS = "0"
                NUM_PARC = 1
        EndIf
        Moveto "NotaC"     
EndIf          

EndProc ;Composicao_Dias() 

;*******************************************************************************
;* Processa dados Composi‡Æo de Dias                                           *
;*******************************************************************************
Proc Venc_CompDias()

Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,CUPOM,SRDOCTO
If Not RetVal
   Then COM_DIAS = ""
        NUM_PARC = BlankNum() 
        GEROU_COMPDIAS = False
   Else Composicao_Dias()
EndIf

EndProc ;Venc_CompDias()

;*******************************************************************************
;* Processa dados Acerto Rateio                                                *
;*******************************************************************************
Proc Acerto_Rateio()

difrateio_descto=vrtotal_descto-vrrateio_descto
difrateio_acresc=vrtotal_acresc-vrrateio_acresc

VRBCICMS  =0
VRICMS    =0

VRBCISSQN =0
VRISSQN   =0

VRBCPIS   =0
VRPIS     =0

VRBCCOFINS=0
VRCOFINS  =0

maiorgrupo="00000" ; regra ecf
maiorvalor=0

For wi From 1 To 20
 If SubStr(totalizadores[wi],1,5)<>"S0000" And
    NumVal(SubStr(totalizadores[wi],6,15))>=maiorvalor
    Then 
         maiorvalor=NumVal(SubStr(totalizadores[wi],6,15))
         maiorgrupo=SubStr(totalizadores[wi],1,5)
 Endif         
EndFor

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA, CUPOM, SRDOCTO
If RetVal
 Then While [Codigo da Empresa  ]=VSDGEMPRESA And
            [Numero do Documento]=CUPOM       And
            [Serie do Documento ]=SRDOCTO

       If [Situacao_Item]<>"C" Then

           If difrateio_descto>0 or difrateio_acresc>0
              Then

                  Switch
                    Case [Tributacao de ICMS]="D" :tot="T"
                    Case [Tributacao de ICMS]="S" :tot="F"
                    Case [Tributacao de ICMS]="I" :tot="I"
                    Case [Tributacao de ICMS]="N" :tot="N"
                    Case [Tributacao de ICMS]="O" :tot="N"
                    OtherWise                     :tot="S"
                  EndSwitch
                  
                  AliqICMS=[Aliquota de ICMS]
                  If [Tributacao de ICMS]="D"
                     Then If [Aliquota Reduzida BCICMS]>0
                            Then res     =Round((AliqICMS*[Aliquota Reduzida BCICMS])/100,2)
                                 AliqICMS=AliqICMS-res
                                 tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
                            Else tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
                          EndIf  
                     Else tot=tot+"0000"
                  EndIf
                  If tot=maiorgrupo And                     ; regra ecf
                     [Preco Total]>=([Valor Desconto Total]+difrateio_descto) 
                     Then
                          [Valor Desconto Total       ]=[Valor Desconto Total       ]+difrateio_descto
                          [Valor OutDesp Total        ]=[Valor OutDesp Total        ]+difrateio_acresc

                          VBC=([Preco Total]-[Valor Desconto Total])+[Valor OutDesp Total]
                          
                          If [PIS_Aliquota ]>0
                             Then [PIS_Valor  ]= NDecimal((VBC*[PIS_Aliquota])/100,2)
                                  [PIS_BC     ]=VBC 
                          EndIf 
                          If [COFINS_Aliquota ]>0
                             Then [COFINS_Valor  ]= NDecimal((VBC*[COFINS_Aliquota])/100,2)
                                  [COFINS_BC     ]=VBC 
                          EndIf
                          
                          If [Tributacao de ICMS]="D"
                             Then VBC=VBC-NDecimal((VBC*[Aliquota Reduzida BCICMS])/100,2)
                                  If AliqICMS>0 And VBC>0
                                     Then [Valor do ICMS   ]=NDecimal((VBC*[Aliquota de ICMS])/100,2)
                                          [ICMS_BC         ]=VBC 
                                  EndIf
                          EndIf   

                          difrateio_descto=0
                          difrateio_acresc=0
                          
                          unlockrecord
                  EndIf
           EndIf

           VRBCICMS  =VRBCICMS  +[ICMS_BC       ]
           VRICMS    =VRICMS    +[Valor do ICMS ]

           VRBCISSQN =VRBCISSQN +[ISSQN_BC      ]
           VRISSQN   =VRISSQN   +[Valor do ISSQN]
  
           VRBCPIS   =VRBCPIS   +[PIS_BC        ]
           VRPIS     =VRPIS     +[PIS_Valor     ]
  
           VRBCCOFINS=VRBCCOFINS+[COFINS_BC     ]
           VRCOFINS  =VRCOFINS  +[COFINS_Valor  ]
        EndIf

        Moveto "NotaI" 
        Skip
        If EOT() Then QuitLoop EndIf
      EndWhile
Endif

EndProc ;Acerto_Rateio()

;*******************************************************************************
;* Processa dados Reducao Z                                                    *
;*******************************************************************************
Proc ProcessaZ()
private numserie

NR=NRecords("Opaf017")
COO_NFI="" ;COO nÆo fiscal inicial
COO_NFF="" ;COO nÆo fiscal final

;View "P_Cupom"
View "ECF_C"
View "ECF_T"
View "ECF_S"
View "Opaf_tot"

CoEdit "Opaf011", "Opaf018", "Opaf017"
SetHighLight Current Record 23 Field 31

Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo Reducao Z "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)

  Switch
    Case SubStr([Opaf017->Texto],01,3)="017":

         If SubStr([Opaf017->Texto],156,4)="0000"
            Then Loop
         EndIf   

         DTREDZ=DateVal(SubStr([Opaf017->Texto],154,2)+"/"+
                        SubStr([Opaf017->Texto],152,2)+"/"+
                        SubStr([Opaf017->Texto],156,4))
         Switch
           Case DTREDZ<VSDGDTINI : Loop 
           Case DTREDZ>VSDGDTFIM : Loop 
         EndSwitch
         
         PKCUPOM  = SubStr([Opaf017->Texto],04,10)
         NECF     = SubStr([Opaf017->Texto],169,1)
         CRO      = SubStr([Opaf017->Texto],343,3)
         SRDOCTO  = "X"+NECF+SubStr(CRO,2,2)
         NECF     = NumVal(NECF)    
         numserie = SubStr([Opaf017->Texto],279,20)

         ;*** Implementado em 13.02.2014 ********************
         CUP_I = SubStr([Opaf017->Texto],017,06)
         CUP_F = SubStr([Opaf017->Texto],026,06)
         
         ;*** Implementado em 23.10.2014 ********************
         COO_NFI = SubStr([Opaf017->Texto],386,06)
         COO_NFF = SubStr([Opaf017->Texto],395,06)
 
;        *** Comentado em 07.01.2015 ************************
;        *** Comentado pois quando da o Loop nao est  preenchendo os outros campos do mapa resumo ***
;         If SubStr([Opaf017->Texto],177,06) <> "000000" And                           ;Numero Cupom Reducao
;            (CUP_I ="000000"    And  CUP_F ="000000")   
;            Then Moveto "Opaf017"
;                 Loop
;         EndIf
         ;***************************************************
         
         Moveto "ECF_C"
         DTMOV = DTREDZ
         COO_Inicial = "000000"
         For i From 1 To 7
            DTMOV = DTMOV - 1
            Moveto [Numero do ECF]
            Locate IndexOrder by "Ind_ecf1" NECF,VSDGEMPRESA,DTMOV
            If RetVal
               Then If [Numero Cupom Reducao]="000000"
                       Then COO_Inicial = "000000"
                       Else COO_Inicial = AlinhM(StrVal(NumVal([Numero Cupom Reducao])+1),6)
                    EndIf 
                    QuitLoop
            EndIf          
         EndFor
         
         While True
           Moveto [Numero do ECF]
           Locate IndexOrder by "Ind_ecf1" NECF,VSDGEMPRESA,DTREDZ
           If Not RetVal
              Then End Down
                   [Codigo da Empresa       ]=VSDGEMPRESA
                   [Serie do Documento      ]=SRDOCTO
                   [Data                    ]=DTREDZ
                   [Numero do ECF           ]=NumVal(SubStr([Opaf017->Texto],166,04))
                   [Reinicio Operacao       ]=CRO         
                   [Numero Serie Fabricacao ]=numserie

                   If IsLockRecord()
                         Then Del
                         Else UnLockRecord     
                   EndIf        
                   Loop
           EndIf
           If Not IsLockRecord()
              Then QuitLoop
           EndIf   
         EndWhile

         [Numero Sequencia           ]="000000"
         If COO_Inicial="000000"
            Then If COO_NFI<>"000000" And COO_NFI < CUP_I
                    Then COO_Inicial=COO_NFI
                    Else COO_Inicial=CUP_I
                 EndIf
         EndIf   

         [Numero Cupom Inicial       ]=CUP_I
         [Numero Cupom Final         ]=CUP_F
         [COO_Inicial                ]=COO_Inicial
         [COO_Final                  ]=SubStr([Opaf017->Texto],186,09)
         [Numero Cupom Reducao       ]=SubStr([Opaf017->Texto],186,09)
         [Contador Reducao           ]=SubStr([Opaf017->Texto],068,06)
         [Totalizador Inicial        ]=NumVal(SubStr([Opaf017->Texto],032,18))/100
         [Totalizador Final          ]=NumVal(SubStr([Opaf017->Texto],050,18))/100
         [Cancelados                 ]=NumVal(SubStr([Opaf017->Texto],074,13))/100
         [Descontos                  ]=NumVal(SubStr([Opaf017->Texto],100,13))/100
         [Isento                     ]=NumVal(SubStr([Opaf017->Texto],113,13))/100
         [Nao Incidencia             ]=NumVal(SubStr([Opaf017->Texto],126,13))/100
         [Substituicao Tributaria    ]=NumVal(SubStr([Opaf017->Texto],139,13))/100
         [Acrescimos                 ]=NumVal(SubStr([Opaf017->Texto],087,13))/100
         [Acrescimos Financeiros     ]=0
         [Sangria                    ]=0
         [Suprimentos                ]=0
         [ISSQN                      ]=0
         [ISSQN Cancelados           ]=NumVal(SubStr([Opaf017->Texto],201,13))/100
         [ISSQN Descontos            ]=NumVal(SubStr([Opaf017->Texto],227,13))/100
         [ISSQN Acrescimos           ]=NumVal(SubStr([Opaf017->Texto],214,13))/100
         [ISSQN Isento               ]=NumVal(SubStr([Opaf017->Texto],240,13))/100
         [ISSQN Nao Incidencia       ]=NumVal(SubStr([Opaf017->Texto],253,13))/100
         [ISSQN Subs. Tributaria     ]=NumVal(SubStr([Opaf017->Texto],266,13))/100
         Controle_Dia()
         UnLockRecord

         moveto "opaf_tot"
         moveto [Numero de Serie]
         locate numserie
         if retval
            then while [Numero de Serie]=numserie
            
                   switch
                     case [opaf_tot->Tipo]="ICMS"  : moveto "ecf_t"   
                     case [opaf_tot->Tipo]="ISSQN" : moveto "ecf_s"
                   endswitch

                   while true
                     moveto [Codigo da Empresa]
                     Locate VSDGEMPRESA,SRDOCTO,DTREDZ,[opaf_tot->Aliquota]
                     If Not RetVal
                        Then End Down
                             [Codigo da Empresa          ]=VSDGEMPRESA
                             [Serie do Documento         ]=SRDOCTO
                             [Data                       ]=DTREDZ
                             switch
                               case [opaf_tot->Tipo]="ICMS"  : [Aliquota de ICMS           ]=[opaf_tot->Aliquota       ]   
                               case [opaf_tot->Tipo]="ISSQN" : [Aliquota de ISSQN          ]=[opaf_tot->Aliquota       ]
                             endswitch
                             [Indice Aliquota            ]=[opaf_tot->Indice Aliquota]
                             If IsLockRecord()
                                   Then del
                                        loop
                             endif
                     EndIf
                     quitloop
                   endwhile

                   moveto "opaf_tot"
                   skip
                   if eot() then quitloop endif
                 endwhile
         endif   

         Moveto "Opaf018"
         Scan For SubStr([Opaf018->Texto],01,03)="018"        And ;** Aliquotas **
                  SubStr([Opaf018->Texto],47,01)=StrVal(NECF) And
                  SubStr([Opaf018->Texto],04,10)=PKCUPOM
                  
           If SubStr([Opaf018->Texto],50,01)="S" 
            Then Moveto "ECF_S"
                 While True
                   Moveto [Codigo da Empresa]
                   Locate VSDGEMPRESA,SRDOCTO,DTREDZ,NumVal(SubStr([Opaf018->Texto],14,04))/100
                   If Not RetVal
                      Then End Down
                           [Codigo da Empresa          ]=VSDGEMPRESA
                           [Serie do Documento         ]=SRDOCTO
                           [Data                       ]=DTREDZ
                           [Aliquota de ISSQN          ]=NumVal(SubStr([Opaf018->Texto],14,04))/100
                           If IsLockRecord()
                                 Then Del
                                 Else UnLockRecord     
                           EndIf        
                           Loop
                   EndIf
                   If Not IsLockRecord()
                      Then QuitLoop
                   EndIf   
                 EndWhile
                 [Indice Aliquota            ]=SubStr([Opaf018->Texto],48,02)
                 [Base de Calculo ISSQN      ]=NumVal(SubStr([Opaf018->Texto],18,13))/100
                 [Valor do ISSQN             ]=NumVal(SubStr([Opaf018->Texto],31,13))/100
                 UnLockRecord
                 Moveto "Opaf018"
            Else Moveto "ECF_T"
                 While True
                   Moveto [Codigo da Empresa]
                   Locate VSDGEMPRESA,SRDOCTO,DTREDZ,NumVal(SubStr([Opaf018->Texto],14,04))/100
                   If Not RetVal
                      Then End Down
                           [Codigo da Empresa          ]=VSDGEMPRESA
                           [Serie do Documento         ]=SRDOCTO
                           [Data                       ]=DTREDZ
                           [Aliquota de ICMS           ]=NumVal(SubStr([Opaf018->Texto],14,04))/100
                           If IsLockRecord()
                                 Then Del
                                 Else UnLockRecord     
                           EndIf        
                           Loop
                   EndIf
                   If Not IsLockRecord()
                      Then QuitLoop
                   EndIf   
                 EndWhile
                 [Indice Aliquota            ]=SubStr([Opaf018->Texto],48,02)
                 [Base de Calculo ICMS       ]=NumVal(SubStr([Opaf018->Texto],18,13))/100
                 [Valor do ICMS              ]=NumVal(SubStr([Opaf018->Texto],31,13))/100
                 UnLockRecord
                 Moveto "Opaf018"
           EndIf
           
         EndScan
  EndSwitch

  Moveto "Opaf017"
EndScan
Do_It!
ClearAll

EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ConfOpcoes(Opcao)
Private Opcao

Switch
  Case Opcao="Ler":
       If IsFile("IM_IDBR.sc")
           Then Play "IM_IDBR"
           Else VSDGCAMINHO="C:\\OPAF\\MONITORA\\RETORNO"
       EndIf
  Case Opcao="Gravar":
       FileWrite        "IM_IDBR.sc" From ";****** Variaveis de Configura‡„o Caminho Vise Informatica"+"\n"

       NCAMINHO=""
       For i From 1 to Len(VSDGCAMINHO)
         If SubStr(VSDGCAMINHO,i,1)=Chr(92)
            Then NCAMINHO=NCAMINHO+Chr(92)
         EndIf
         NCAMINHO=NCAMINHO+SubStr(VSDGCAMINHO,i,1)
       EndFor
       FileWrite Append "IM_IDBR.sc" From "VSDGCAMINHO="+Chr(34)+NCAMINHO+Chr(34)+"\n"

EndSwitch
EndProc ;

;*******************************************************************************
;* Verifica se a empresa est  cadastrado no OPAF_ECF                           *
;*******************************************************************************
Proc Verifica_Empresa_OpafECF()

;---- Implementado em 07.11.2016 -----------------------------------------------
NAO_ACHOU = 0
EMPRESA_CADASTRADA=False
View "Opaf_Ecf"
Scan
  If [Codigo da Empresa]=""
     Then NAO_ACHOU = NAO_ACHOU + 1
          QuitLoop
  EndIf
EndScan
ClearImage

If NAO_ACHOU > 0
   Then COR_MENSAGEM="ALERTA"
        MSG = 
        Completa("Empresa nÆo vinculada ao n§ do ECF.",70," ")+"//"+
        Completa("Ser  preciso realizar este v¡nculo para prosseguir com a importa‡„o.",70," ")+"////"+
        Completa("Informe a empresa em todos os registros da seguinte rotina: ",70," ")+"//"+
        Completa("FATURAMENTO > OPAF - Integra‡„o > 39. Informa‡”es adicionais do ECF",70," ")
        Mensagem(MSG)
        Return False    
EndIf   
Release Vars NAO_ACHOU,EMPRESA_CADASTRADA,COR_MENSAGEM
Return True                             

EndProc ;Verifica_Empresa_OpafECF()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA=""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
          If Campo="TG_NECF"
              Then If Not SDCarrega_F1()
                      Then MENSAGEM(MSG)
                      Else Seleciona_Opcoes("ECF","F1_Temp")
                   EndIf
              Else Dialog_F1()    
          EndIf       
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_CAMINHO"       : Campo="TG_DTFIM" 
            Case Campo="TG_NECF"          : Campo="TG_CAMINHO"
            Case Campo="TG_OPCOES"        : Campo="TG_NECF"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : 
                         VSDGEMPRESA=ControlValue("TG_EMPRESA")
                         If Not IsBlanK(VSDGEMPRESA)
                            Then VSDGEMPRESA   = AlinhM(VSDGEMPRESA,4)
                                 VSDGNECF      = ""
                                 VSDGNSERIE    = ""
                                 VSDGNREINICIO = ""
                                 If Not SDCarrega_F1()
                                    Then MENSAGEM(MSG)
                                    Else Campo="TG_DTINI"
                                 EndIf   
                         EndIf 
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_CAMINHO"
                    Case Campo="TG_CAMINHO"    :
                         VSDGCAMINHO=ControlValue("TG_CAMINHO")
                         If IsBlanK(VSDGCAMINHO)
                            Then Campo="TG_CAMINHO"
                            Else Campo="TG_NECF"
                         EndIf
                    Case Campo="TG_NECF"       : Campo="TG_OPCOES"
                         VSDGNECF=ControlValue("TG_NECF")
                         If Not IsBlanK(VSDGNECF)
                            Then VSDGNECF=AlinhM(VSDGNECF,2)
                                 If Not SDCarrega_F1()
                                    Then MENSAGEM(MSG)
                                         Campo="TG_NECF"
                                    Else If Not Checa_Opcoes("ECF",VSDGNECF)
                                            Then VSDGNSERIE    = ""
                                                 VSDGNREINICIO = ""

                                                 VSDGCHAPA     = ""
                                                 VSDGNOMCHAPA  = ""

                                                 VSDGCONTA     = ""
                                                 VSDGNOMCONTA  = ""

                                                 MENSAGEM("Numero ECF n„o Cadastrado !")       
                                                 Campo="TG_NECF"
                                            else
                                                 VSDGNOMCHAPA  = ""
                                                 VSDGNOMCONTA  = ""

                                                 getrecord "\\sistemas\\cadastro\\usuarios" vsdgchapa to regusuarios
                                                 if retval
                                                    then 
                                                         VSDGNOMCHAPA=regusuarios["Nome"        ]
                                                         VSDGCONTA   =regusuarios["Conta Padrao"]

                                                         getrecord "\\sistemas\\ctacor\\conta" VSDGCONTA to regcontas   
                                                         if retval
                                                            then 
                                                                 VSDGNOMCONTA=regcontas["Descricao da Conta"]
                                                         endif   
                                                 endif   
                                         EndIf
                                 EndIf 
                           Else MENSAGEM("Numero ECF n„o Cadastrado !")
                                 Campo="TG_NECF"      
                         EndIf
                    Case Campo="TG_OPCOES"     :
                         If (VSDGOPCAO[1]=False) And
                            (VSDGOPCAO[2]=False)
                            Then Campo="TG_OPCOES"
                            Else Campo="YES"
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
 Case Campo="TG_EMPRESA" : MSG_CAMPO="Informe a Empresa"
 Case Campo="TG_CAMINHO" : MSG_CAMPO="Caminho a ser importado o arquivo.  Exemplo: C:\\OPAF\\MONITORA\\RETORNO"
 Case Campo="TG_OPCOES"  : MensagemCheckBoxes()
 Case Campo="TG_NECF"    : MSG_CAMPO="Informe o Numero do ECF e confira o Numero de Serie! " 
                           TECLA=TECLA+"F1=Consultar" 
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

LimpAguarde()

Array AICMS[10]
Array VIICMS[10]
Array BCICMS[10]
Array RICMS[10]

Array AISSQN[10]
Array BCISSQN[10]
Array VIISSQN[10]
           
Array APIS[10]
Array VIPIS[10]
Array BCPIS[10]

Array ACOFINS[10]
Array VICOFINS[10]
Array BCCOFINS[10]
           
Array VSDGOPCAO[2]
VSDGOPCAO[1]=True 
VSDGOPCAO[2]=True 

ConfOpcoes("Ler")

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()
VSDGHRINI  ="00:00"
VSDGHRFIM  ="24:00"
VSDGNECF   =""
VSDGNSERIE =""
VSDGCHAPA  =""
VSDGCONTA  =""

If Not Verifica_Empresa_OpafECF()
   Then Return
EndIf   

COR_MENSAGEM="1"
Mensagem("Antes de executar esta rotina, verifique se // o INTEGRADOR do OPAF esta carregado !")
Release Vars COR_MENSAGEM

While True
 ShowDialog "Importa‡Æo de dados do OPAF - VersÆo 6.1" Proc "SD_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC","F1",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 05,12 Height 17 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 04,00 "Caminho"  For "TG_CAMINHO"
    Accept @ 05,01 Width 33 "A37"  Picture "!*!" Tag "TG_CAMINHO" To VSDGCAMINHO

    Label  @ 06,00 "N§ ECF, N£mero de S‚rie"  For "TG_NECF"
    Accept @ 07,01 Width 07 "A2"  Picture "#*#" Tag "TG_NECF" To VSDGNECF

    Accept @ 07,09 Width 25 "A20"  Picture "#*#" Tag "TG_NSERIE" To VSDGNSERIE

    Label  @ 08,00 "Usu rio Vinculado"  For "TG_CHAPA"
    Accept @ 09,01 Width 07 "A4"  Picture "#*#" Tag "TG_CHAPA" To VSDGCHAPA
    Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCHAPA"  To VSDGNOMCHAPA

    Label  @ 10,00 "Conta Vinculada"  For "TG_CONTA"
    Accept @ 11,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 11,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 00,35 "Op‡oes " For "TG_OPCOES"
    CheckBoxes @1,35 Height 2 Width 15 Tag "TG_OPCOES"
    "Redu‡Æo Z  " to VSDGOPCAO[1],
    "Cupons     " to VSDGOPCAO[2]

    Pushbutton @ 13,22 width 13 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 13,36 width 13 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa inv lida !")
          Loop
  EndIf   
  If Direxists(VSDGCAMINHO)=0
     Then Mensagem("Caminho especificado n„o existe !")
          Loop
  EndIf

  If IsBlank(VSDGDTINI)  Or IsBlank(VSDGDTFIM)
     Then Mensagem("Data Invalida !")
          Loop
  EndIf
;  If IsBlank(VSDGHRINI)  Or IsBlank(VSDGHRFIM)
;     Then Mensagem("Hora Invalida !")
;          Loop
;  EndIf
  
  If IsBlank(VSDGNECF)
     Then Mensagem("Numero ECF Inv lido!")
          Loop
  EndIf  
  
  If Not VSDGOPCAO[1] And
     Not VSDGOPCAO[2]     
     Then Mensagem("Selecione uma das opcäes !")
          Loop
  EndIf

  If Not SDCarrega_F1()
     Then MENSAGEM(MSG)
          Loop
  EndIf           

  If SubStr(VSDGCAMINHO,Len(VSDGCAMINHO),1)="\\"
     Then VSDGCAMINHO=SubStr(VSDGCAMINHO,1,Len(VSDGCAMINHO)-1)
  EndIf

  ;*** Pega UF/Tipo Empresa Controle ***
  View "\\Sistemas\\Cadastro\\Empresas"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA
  If RetVal
     Then CNPJ_EMPR=[CGC Empresa      ]
           ATIVEMPR=[Atividade        ]
            UF_EMPR=[UF Empresa       ]
            TP_EMPR=[Tipo da Empresa  ]
     Else CNPJ_EMPR="??"
           ATIVEMPR="??"
            UF_EMPR="??"
            TP_EMPR="??"
  EndIf
  ClearAll
  
  View "P_Cupom"
  Moveto [Codigo_Empresa]
  Locate VSDGEMPRESA
  If RetVal
     Then VSDGCLIENTE  = [Codigo_Cliente        ]
          VSDGVENDEDOR = [Codigo_Vendedor       ]
          VSDGTRANSP   = [Codigo_Transportadora ]
          CODD         = [Codigo_Destinacao     ]
     Else Mensagem("Parametros n„o Cadastrado para esta Empresa !")
  EndIf       
  ClearAll

  If Not ArqRT()
     Then Loop
  EndIf   
  
  If IsEmpty("Opaf011") And IsEmpty("Opaf017")
     Then Mensagem("Nao existem dados a serem importados !")
          Loop
     Else If VSDGOPCAO[1] And Not IsEmpty("Opaf017") 
             Then ProcessaZ()
             Else If VSDGOPCAO[1] And IsEmpty("Opaf017") 
                     Then Mensagem("Nao existem mapas resumos a serem importados !") 
                  EndIf
          EndIf
          If VSDGOPCAO[2] And Not IsEmpty("Opaf011") 
             Then ProcessaC()
             Else If VSDGOPCAO[2] And IsEmpty("Opaf011") 
                     Then Mensagem("Nao existem cupons a serem importados !") 
                  EndIf
          EndIf
  EndIf
 
  ConfOpcoes("Gravar")

  COR_MENSAGEM="1"
  MSG="Opera‡Æo concluida!          // //"
  MSG=MSG+"Execute os passos abaixo para conferˆncia e seu correto controle:// //"
  MSG=MSG+"- Relat¢rio resumo de vendas ECF/Cupons por forma de pagamento  e//"
  MSG=MSG+"  produtos do dia, e confira com vendas l¡quidas da redu‡Æo 'Z'; // //"
  MSG=MSG+"- Confira mapa resumo com a redu‡Æo 'Z';                         // //"
  MSG=MSG+"- Reprocessamento do estoque para atualizar novas vendas;        // //"
  MSG=MSG+"- Gerar titulos a receber Prazo/Cartäes;                         // //"
  MSG=MSG+"- Exporta‡Æo de vendas a vista p/ caixa;                         "
  
  Mensagem(MSG)
  Release Vars COR_MENSAGEM

EndWhile
ClearAll
Release Vars All
Release Procs All
