;** FT_ECH *********************************************************************
;*  Lancamento de Cheques - FATURAV                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 20/02/2016 por Anivel Augusto Rodrigues
;Ultima Alteracao: 24/10/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Existe_Cheque() para verificar a existncia de cheques j  lanados
;Ultima Alteracao: 24/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes conta corrente cheque            
;Ultima Alteracao: 31/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog            
;Ultima Alteracao: 27/12/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado mensagem onde  digitado o cądigo CMC7 na caixa de dialog ->
;                  De  "Digite ou use o leitor para o cądigo CMC7 !"  para  "Digite o cądigo CMC7 !"

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Cheques_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo, Campo, Evento, Elemento, SAIR_CHQ, Pode_Gravar, wok, wcp1, wcp2,
        numdias

Temp=True

If Disparo="OPEN"
   Then
        TiraSombraShowDialog()
EndIf        

If INICIO_DIALOG
   Then INICIO_DIALOG=False

        If Len(VSD_CBChq)=34
           Then AchouPessoa=true
                Campo ="TipoEmit"
           Else Campo ="CBChq"
        EnDIf   
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
           If Campo="CBanco" Or
              Campo="Cidade"
              Then 
                   Dynarray WinArray5[]
                   Window Handle Dialog to JANELA
                   Window GetAttributes JANELA To WinArray5
                   WinArray5["FLOATING"]=False
                   Window SetAttributes JANELA From WinArray5
                    
                   If Campo="CBanco"     Then Moveto [Codigo_Banco       ] EndIf
                   If Campo="Cidade"     Then Moveto [Cidade             ] EndIf
                    
                   If ConsultaF1() 
                      Then
                           If Campo="CBanco"
                              Then VSD_CBanco=Reg_ConsultaF1["Codigo_Banco"      ]
                                   VSD_NBanco=Reg_ConsultaF1["Nome_Banco"        ]
                           EndIf
                           If Campo="Cidade"
                              Then VSD_Cidade=Reg_ConsultaF1["Cidade"]
                                   VSD_UF    =Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf        

                   Window Select JANELA
                   WinArray5["FLOATING"]=True
                   Window SetAttributes JANELA From WinArray5

                   Echo Normal
                   Echo off

                   Moveto "FaturaV"
           EndIf

           If Campo="TipoEmit"
              Then ShowPopup " Emitente " @ 14,39
                      "~P~roprio" : " O Proprio Cliente" : "PROPRIO",
                      "~T~erceiro": " De Terceiro": "TERCEIRO"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then VSD_TipoEmit=MenuVar
                       EndIf
           EndIf
;    Case Evento["KeyCode"] = -46 or
;         Evento["KeyCode"] = 4  :
;         If COPIOU_REGISTRO And CHAVEV=1
;            Then copytoarray reg_Faturav
;                 CopyFromArray REGISTRO_FATURAV
;                 
;                 [Numero da OF      ]=regfaturav["Numero da OF"      ]
;                 [Sequencia         ]=regfaturav["Sequencia"         ]
;                 [Numero de Dias    ]=regfaturav["Numero de Dias"    ]
;                 [Data              ]=regfaturav["Data"              ] 
;                 [Valor             ]=regfaturav["Valor"             ]
;                 [Forma de Pagamento]=regfaturav["Forma de Pagamento"]
;                 Ler_Gravar_Cheque("Ler")
;         EndIf

      Case Evento["KeyCode"] = -81:
           VSD_CBanco   =ControlValue("CBanco")
           VSD_Agencia  =ControlValue("Agencia")
           VSD_CCorrente=ControlValue("CCorrente")
           VSD_NCheque  =ControlValue("NCheque")
           VSD_TipoEmit =ControlValue("TipoEmit")
           VSD_CPF      =ControlValue("CPF")
           VSD_Nome     =ControlValue("Nome")
           VSD_Cidade   =ControlValue("Cidade")
           VSD_UF       =ControlValue("UF")
           VSD_DataV    =ControlValue("DataV")
           VSD_Valor    =ControlValue("Valor")
           VSD_Obs      =ControlValue("Obs")

           Pode_Gravar=True
           If IsBlank(VSD_TipoEmit)
              Then Mensagem("Emitente Invalido !")
                   Pode_Gravar=False
           EndIf
           
           If IsBlank(VSD_DataV)
              Then Mensagem("Data Vencimento Invalida !")
                   Pode_Gravar=False                  
           EndIf        
                   
           If IsBlank(VSD_Valor)
              Then Mensagem("Valor Invalido !")
                   Pode_Gravar=False
           EndIf

           If Pode_Gravar
              Then AcceptDialog
           EndIf
           
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="CBanco" Or Campo="CBChq":  
               SAIR_CHQ=False
               If Campo="CBanco"
                  Then If Len(VSD_CBChq)=34
                          Then If CHAVEV=1
                                  Then Campo="CBChq"
                                  Else SAIR_CHQ=True
                               EndIf   
                          Else Campo="CBChq"
                       EndIf
                  Else SAIR_CHQ=True
               EndIf
               If SAIR_CHQ   
                  Then CancelDialog
               EndIf 
                  
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit" :
               If Len(VSD_CBChq)=34
                  Then If CHAVEV=1
                          then Campo="CBChq"
                          else CancelDialog      
                       endif   
                  Else Campo="NCheque"
               EndIf
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch

      Case Evento["KeyCode"] = 13:
           Switch
            Case Campo="CBChq" :
                 VSD_CBChq=ControlValue("CBChq")
                 If Len(VSD_CBChq)<>34 
                    Then Mensagem("Digite os 34 dĄgitos do Cądigo de Barra do Cheque !")
                         Campo="CBChq"
                    Else If Valida_Leitura_Cheque(VSD_CBChq)
                            Then VSD_CBChq="<"+SubStr(VSD_CBChq,02,08)+
                                           "<"+SubStr(VSD_CBChq,11,10)+
                                           ">"+SubStr(VSD_CBChq,22,12)+
                                           ":"

                                 VSD_CBanco    = SubStr(VSD_CBChq,2,3)
                                 VSD_Agencia   = RTRIM(SubStr(VSD_CBChq,5,4))
                                 VSD_CCorrente = RTRIM(SubStr(VSD_CBChq,23,10))
                                 VSD_NCheque   = RTRIM(SubStr(VSD_CBChq,14,6)) 
                                    
                                 getrecord "\\sistemas\\cheqrec\\banco" VSD_CBanco to regbanco
                                 if retval
                                    Then
                                         VSD_NBanco    =regbanco["Nome_Banco"]     
                                         
                                          wcp2       =VSD_CCORRENTE
                                          for wcp1 from 1 to 2
                                            getrecord "\\sistemas\\cheqrec\\CDPessoa" VSD_CBANCO, VSD_AGENCIA, wcp2 to regcdpessoa
                                            if retval
                                               Then 
                                                    AchouPessoa=True
                                                    VSD_CPF   =regcdpessoa["CPF"           ]
                                                    VSD_Nome  =regcdpessoa["Titular_Cheque"]
                                                    VSD_Cidade=regcdpessoa["Cidade"        ]
                                                    VSD_UF    =regcdpessoa["UF"            ]
                                                    If [Faturac->CGC]=VSD_CPF
                                                       Then VSD_TipoEmit="PROPRIO"
                                                       Else VSD_TIPOEmit="TERCEIRO"
                                                    EndIf
                                                    Campo="DataV"
                                                    quitloop
                                            EndIf           
                                            if wcp1=1 and len(VSD_CCORRENTE)=10
                                               then wcp2=substr(VSD_CCORRENTE,3,8)
                                               else 
                                                    AchouPessoa=false
                                                    Campo="TipoEmit"      
                                                    quitloop
                                            endif
                                          endfor  
                                     Else Mensagem("Banco no Cadastrado !")
                                          VSD_CBanco=""
                                          VSD_NBanco=""
                                 EndIf 
                            Else FastMsg("Cądigo inv lido! * Valor: "+VSD_CBChq)
                                 Campo="CBChq"
                         EndIf 
                         If Campo<>"CBChq"
                            Then If Existe_Cheque("FATURA")
                                    Then Campo="CBChq"
                                 EndIf    
                         EndIf                   
                  EndIf
             Case Campo="CBanco":
                  VSD_CBanco=ControlValue("CBanco")
                  If Not IsBlank(VSD_CBanco)
                     Then 
                          getrecord "\\sistemas\\cheqrec\\banco" VSD_CBanco to regbanco
                          if retval
                             Then VSD_NBanco    =regbanco["Nome_Banco"]     
                                  Campo="Agencia"
                             Else Mensagem("Banco no Cadastrado !")
                                  VSD_NBanco=""
                          EndIf
                  EndIf
             Case Campo="Agencia":
                  VSD_Agencia=ControlValue("Agencia")
                  Campo="CCorrente"
             Case Campo="CCorrente":
                  VSD_CCorrente=ControlValue("CCorrente")
                  Campo="NCheque"
                   
             Case Campo="NCheque":
                  VSD_NCheque=ControlValue("NCheque")
                  Campo="TipoEmit"
                  
                  If not AchouPessoa and CHAVEV=1 
                     then
                          wcp2       =VSD_CCORRENTE
                          for wcp1 from 1 to 2
                            getrecord "\\sistemas\\cheqrec\\CDPessoa" VSD_CBANCO, VSD_AGENCIA, wcp2 to regcdpessoa
                            if retval
                               Then 
                                    AchouPessoa=True
                                    VSD_CPF   =regcdpessoa["CPF"           ]
                                    VSD_Nome  =regcdpessoa["Titular_Cheque"]
                                    VSD_Cidade=regcdpessoa["Cidade"        ]
                                    VSD_UF    =regcdpessoa["UF"            ]
                                    If [Faturac->CGC]=VSD_CPF
                                       Then VSD_TipoEmit="PROPRIO"
                                       Else VSD_TIPOEmit="TERCEIRO"
                                    EndIf
                                    Campo="DataV"
                                    quitloop
                            EndIf           
                            if wcp1=1 and len(VSD_CCORRENTE)=10
                               then wcp2=substr(VSD_CCORRENTE,3,8)
                               else 
                                    quitloop
                            endif
                          endfor  
                  EndIf
                  If Existe_Cheque("FATURA")
                     Then Campo="NCheque"
                 EndIf                      
                   
             Case Campo="TipoEmit":
                  VSD_TipoEmit=ControlValue("TipoEmit")

                  If Not IsBlank(VSD_TipoEmit)
                     Then If VSD_Nome="" And VSD_TipoEmit="PROPRIO"
                             Then VSD_Nome  =[FaturaC->Razao Social]
                                  VSD_Cidade=[FaturaC->Cidade      ]
                                  VSD_UF    =[FaturaC->Uf          ]
                                  VSD_CPF   =[FaturaC->CGC         ]
                                  Campo="DataV"
                             Else Campo="CPF"
                          EndIf
                  Endif
             Case Campo="CPF":
                  VSD_CPF=ControlValue("CPF")
                  
                  If Tipo_CGC_CPF(VSD_CPF)<>"CGC" And
                     Tipo_CGC_CPF(VSD_CPF)<>"CPF"
                     Then Mensagem("CPF/CGC Invalido !")
                     else Campo="Nome"
                  EndIf
               
             Case Campo="Nome":
                  VSD_Nome=ControlValue("Nome")
                  Campo="Cidade"
             Case Campo="Cidade":
                  VSD_Cidade=ControlValue("Cidade")              
                  Campo="UF"     
             Case Campo="UF":
                  VSD_UF=ControlValue("UF")
                  
                  getrecord "\\sistemas\\cadastro\\cidades" VSD_Cidade, VSD_UF to regcidades
                  If RetVal
                     Then Campo="DataV" 
                     else Mensagem("Cidade/UF no Cadastrada !")
                          Campo="Cidade"
                  EndIf

             Case Campo="DataV":
                  VSD_DataV=ControlValue("DataV")
                  If Not IsBlank(VSD_DataV)
                     Then Campo="Valor"
                  EndIf
             Case Campo="Valor":
                  VSD_Valor=ControlValue("Valor")
                  If Not IsBlank(VSD_Valor)
                     Then Campo="Obs"
                  EndIf
             Case Campo="Obs":
                  VSD_Obs=ControlValue("Obs")

                  AcceptDialog
           EndSwitch  
              
   EndSwitch
EndIf

SelectControl Campo

TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="Cidade"      Or
   Campo="TipoEmit"    
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

;If CHAVEV=1 And COPIOU_REGISTRO
;   Then TECLA=TECLA+"Alt+C=Copiar  PgDn=Finalizar  "    nÆo usar,  obrigatorio informar o CMC7 !!
;EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  Case Campo="CBanco":
       MSGCAMPO="Cądigo do Banco"
  Case Campo="CBChq":
       MSGCAMPO="Digite o cądigo CMC7 !"
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 23,0 ?? ">"+Format("W79,AL",MSGCAMPO)
PaintCanvas Attribute 30 23,0,23,79
          
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79

Mouse Hide
RefreshDialog
Return TEMP
EndProc     ;  (Geral_Dialog)

;*******************************************************************************
;* Ler ou Gravar Dados do Cheque                                               *
;*******************************************************************************
Proc Ler_Gravar_Cheque(Opcao)
Private Opcao, CDPessoaNova

Switch
  Case Opcao="Ler":
       VSD_CBChq    =[Codigo CMC7   ]
       VSD_CBanco   =[Codigo_Banco  ]
       VSD_NBanco   =[Nome_Banco    ]
       VSD_Agencia  =[Agencia       ]
       VSD_CCorrente=[Numero_Conta  ]
       VSD_NCheque  =[Numero_Cheque ]
       VSD_TipoEmit =[Tipo_Emitente ]
       VSD_CPF      =[CPF           ]
       VSD_Nome     =[Titular_Cheque]
       VSD_Cidade   =[Cidade        ]
       VSD_UF       =[UF            ]
       VSD_DataV    =[Data          ]
       VSD_Valor    =[Valor         ]
       VSD_Obs      =[Observacao    ]
       
  Case Opcao="Gravar":    
       If Len(VSD_CBChq)=34
          Then [Codigo CMC7 ]=VSD_CBChq
          Else [Codigo CMC7 ]=""
       EndIf   
       [Codigo_Banco  ]=VSD_CBanco
       [Nome_Banco    ]=VSD_NBanco
       [Agencia       ]=VSD_Agencia
       [Numero_Conta  ]=VSD_CCorrente
       [Numero_Cheque ]=VSD_NCheque
       [Tipo_Emitente ]=VSD_TipoEmit
       [CPF           ]=VSD_CPF
       [Titular_Cheque]=VSD_Nome
       [Cidade        ]=VSD_Cidade
       [UF            ]=VSD_UF
       [Data          ]=VSD_DataV
       [Valor         ]=VSD_Valor
       [Observacao    ]=VSD_Obs
   
       CopyToArray REGISTRO_FATURAV
       COPIOU_REGISTRO=True
       
       If not AchouPessoa
          then
               UnLockRecord
               Do_It!
               SaveTables
              
               CoEditKey                            
               FormKey  
        
        
               If Not IsBlank(VSD_Agencia) And
                  Not IsBlank(VSD_CCorrente) And
                  Not IsBlank(VSD_CPF) Then
                  For wi From 1 To 5
                    CDPessoaNova=False
                    
                    Moveto "\\Sistemas\\CheqRec\\CDPessoa"
                    Moveto [Codigo_Banco]
                    Locate VSD_CBANCO, VSD_AGENCIA, VSD_CCORRENTE
                    If Not RetVal
                       Then CDPessoaNova=True

                            if len(VSD_CCORRENTE)=10
                               then Locate VSD_CBANCO, VSD_AGENCIA, substr(VSD_CCORRENTE,3,8)
                                    if retval
                                       then while islockrecord() endwhile 
                                            [Numero_Conta        ]=VSD_CCorrente
                                            unlockrecord
                                            loop
                                    endif
                            endif
        
                            if CDPessoaNova
                               then
                                    End
                                    Down
                                    [Codigo_Banco        ]=VSD_CBanco
                                    [Agencia             ]=VSD_Agencia
                                    [Numero_Conta        ]=VSD_CCorrente
                            endif
                    EndIf                       
                    If IsLockRecord()
                       Then If CDPessoaNova
                               Then Del
                            EndIf
                            If wi=5 
                               Then QuitLoop
                               Else Loop 
                            EndIf
                    EndIF   
                    [CPF                 ]=VSD_CPF
                    [Titular_Cheque      ]=VSD_Nome
                    [Cidade              ]=VSD_Cidade
                    [UF                  ]=VSD_UF
                    [Numero_Cheque       ]=VSD_NCheque
                    [Data Vencimento     ]=VSD_DataV
                    UnLockRecord

                    QuitLoop
                  EndFor
               EndIf
        
               Moveto "FaturaC"
               UnLockRecord
               FormKey
              
               Moveto "FaturaV"
       endif
EndSwitch
EndProc   ;  (Ler_Gravar_Cheque)

;*******************************************************************************
;* Digitacao de Cheques                                                        *
;*******************************************************************************
Proc Digita_Cheque()
INICIO_DIALOG=True

Echo Normal
Echo Off        

Ler_Gravar_Cheque("Ler")

VSDGU_USUARIO = ""
VSDGU_DATA    = ""
VSDGU_HORA    = ""
VSDGU_CONTROLE= ""
VSD_Lanctoch  = ""

AchouPessoa   =false

Showdialog "Dados do Cheque [      ]" Proc "Cheques_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP",-46, 4, -6, -147
     @ 09,0 height 14 width 80

;  Accept @ -01,42 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 0,00 "Cądigo CMC7" for "CBChq"
   Accept @ 1,01 Width 47 "A34"  Picture ";#########;###########;#############;#" Tag "CBChq" To VSD_CBChq

   Label  @ 2,00 "Banco" for "CBanco"
   Accept @ 3,01  Width 6 "A3" picture "!*!" Tag "CBanco" to VSD_CBanco
   Accept @ 3,06  Width 18 "A18" picture "!*!" Tag "NBanco" to VSD_NBanco

   Label  @ 2,24 "Agncia" for "Agencia"
   Accept @ 3,25  Width 9 "A6" picture "!*!" Tag "Agencia" to VSD_Agencia

   Label  @ 2,34 "C/C" for "CCorrente"
   Accept @ 3,35  Width 13 "A10" picture "!*!" Tag "CCorrente" to VSD_CCorrente

   Label  @ 2,48 "Cheque" for "NCheque"
   Accept @ 3,49 Width 14 "A9" picture "!*!" Tag "NCheque" to VSD_NCheque

   Label  @ 2,63 "Emitente" for "TipoEmit"
   Accept @ 3,64  Width 13 "A8" picture "PROPRIO,TERCEIRO" Tag "TipoEmit" to VSD_TipoEmit
   
   Label  @ 4,00 "CPF/CNPJ" for "CPF"
   Accept @ 5,01  Width 23 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "CPF" to VSD_CPF

   Label  @ 4,24 "Nome do Titular" for "Nome"
   Accept @ 5,25  Width 52 "A40" picture "!*!" Tag "Nome" to VSD_Nome

   Label  @ 6,00 "Cidade" for "Cidade"
   Accept @ 7,01  Width 23 "A20" picture "!*!" Tag "Cidade" to VSD_Cidade

   Label  @ 6,24 "UF" for "UF"
   Accept @ 7,25  Width 9  "A2" picture "!*!" Tag "UF" to VSD_UF

   Label  @ 6,34 "Dt.Vencimento" for "DataV"
   Accept @ 7,35  Width 13 "D" picture "#[#];.##;.##[##]" Tag "DataV" to VSD_DataV

   Label  @ 6,48 "Valor" for "Valor"
   Accept @ 7,49  Width 14 "$" picture "#*#.[##]" Tag "Valor" to VSD_Valor

   Label  @ 08,00 "Observao do Cheque" for "Obs"
   Accept @ 09,01  Width 76 "A70" picture "!*!" Tag "Obs" to VSD_Obs

   @ 11,00 ?? Format("W51,AL","[Usu rio: "+VSDGU_USUARIO+" "+Format("D13",VSDGU_DATA)+
              " "+VSDGU_HORA+" "+VSDGU_CONTROLE)+
              "Origem: "+Format("W18,AL","MA/"+VSD_Lanctoch)+"]"
   PaintCanvas Attribute 10 11, 01, 11, 76

Enddialog
if retval
   then Ler_Gravar_Cheque("Gravar")
endif   
 
Mouse Show
EndProc  ; (Digita_Cheque)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Digita_Cheque()

Release Vars AchouPessoa
;Release Procs Cheques_Dialog, Ler_Gravar_Cheque, Digita_Cheque
