;** AtuaDup ********************************************************************
;*  Atualizacao de Duplictas p/ o Contas a Receber                             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 22/10/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 23/06/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 07/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indice Inddup1/Duplic
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 26/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Obs p/ Cartäes
;Ultima Alteracao: 11/04/2012 por Bruno Carvalho
;Motivo Alteracao: Add Codigo_Cobrador (Representante) se vier em branco do Cadastro 
;Ultima Alteracao: 03/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Codigo do Cobrador (Busca_Lookup) 
;Ultima Alteracao: 07/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Codigo do Cobrador (Busca_Lookup) sem mensagem
;Ultima Alteracao: 14/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Codigo do Cobrador="" e Codigo do Representante<>""
;Ultima Alteracao: 16/07/2012 por Karina Andrade
;Motivo Alteracao: Ajustes serie documento, X?-Cupom Fiscal para multiplos ECFïs
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tipo Carteira =G ="CARTAO CRED/DEB"

;*******************************************************************************
;* Rotina de Impressao de Duplicatas                                           *
;*******************************************************************************
Proc AtuaDup()
Aguarde("Aguarde, Atualizando Duplicatas")

ClearAll

{Ask} {DupC} Check
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Situacao              ] TypeIn "Not C"
Moveto [Cta Receber Atualizado] TypeIn "Not S"
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

Array NoNota[15]

NR = NRecords("Answer")

View "\\Sistemas\\Cadastro\\Feriados"
View "NotaC"
View "NotaV"
View "DupNF"
View "DupI"
View "\\Sistemas\\Ctarec\\Duplic"
CoEdit "Answer"
WC=0
WE=0
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, Atualizando "+BARRA_STRING)

   WC=WC+1

   WI=0

   For i from 1 to 15
      NoNota[i]=" "
   EndFor

   Ok_DupNF=False
   Moveto "DupNF"
   Moveto [Codigo da Empresa]
   Locate [Answer->Codigo da Empresa  ],
          [Answer->Numero do Documento],
          [Answer->Serie do Documento ]
   If RetVal
      Then wcn=0
           While [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                 [Numero do Documento]=[Answer->Numero do Documento] And
                 [Serie do Documento ]=[Answer->Serie do Documento ]

               Ok_DupNF=True
               wcn=wcn+1
               NoNota[wcn]=[Numero da Nota]

               DOC_EMPRESA=[Codigo da Empresa]
               DOC_NUMERO =[Numero da Nota   ]
               DOC_SERIE  =[Serie da Nota    ]

               Skip
               If EOT() Then QuitLoop EndIf
           EndWhile
   EndIf

   Moveto "DupI"
   Moveto [Codigo da Empresa]
   Locate [Answer->Codigo da Empresa  ],
          [Answer->Numero do Documento],
          [Answer->Serie do Documento ]
   If Not RetVal
      Then MENSAGEM("Duplicata Sem Desdobramentos, N§ Duplicata "+[Answer->Codigo da Empresa]+"/"+[Answer->Numero do Documento])
           Moveto "Answer"
           Loop
   EndIf

   WSEQ=0
   While [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
         [Numero do Documento]=[Answer->Numero do Documento] And
         [Serie do Documento ]=[Answer->Serie do Documento ]
     WSEQ=WSEQ+1
     If [DupI->Ordem do Documento]<>""
        Then NUMERO_ORDEM=[DupI->Numero do Documento]+"/"+[DupI->Ordem do Documento]
        Else NUMERO_ORDEM=[DupI->Numero do Documento]
     EndIf

     Moveto "\\Sistemas\\CtaRec\\Duplic"

     CHV_EMPRESA     =[Answer->Codigo da Empresa  ]
     CHV_SERIE_DOCTO =[Answer->Serie do Documento ]
     CHV_TPDOCTO     =[Answer->Codigo do Documento]
     CHV_NUMERO_ORDEM=NUMERO_ORDEM

     Moveto [Codigo da Empresa]
     Locate IndexOrder by "IndDup24" CHV_EMPRESA,CHV_NUMERO_ORDEM, CHV_SERIE_DOCTO
     If RetVal
        Then MENSAGEM("Duplicata j  Exportada, N§ Duplicata "+[Answer->Codigo da Empresa]+"/"+[Answer->Numero do Documento]+"-"+[Answer->Serie do Documento ])
             Moveto "DupI"
             Skip
             If EOT()
                Then QuitLoop
                Else Loop
             EndIf
     EndIf

     While True
       End
       If IsBlank([Numero do Lancamento])
          Then NLANC=0
          Else NLANC=[Numero do Lancamento]
       EndIf
       NLANC=NumVal(NLANC)
       NLANC=NLANC+1
       NLANC=ALINHM(StrVal(NLANC),6)

       Moveto [Numero do Lancamento]
       Locate NLANC
       If Not Retval
          Then End Down
               [Numero do Lancamento ]=NLANC
               If Not IsLockRecord()
                  Then QuitLoop
               EndIf
       EndIf
     EndWhile

     [Codigo da Conta         ]=[Answer->Codigo da Conta         ]
     [Codigo da Empresa       ]=[Answer->Codigo da Empresa       ]
     [Nome Fantasia Empresa   ]=[Answer->Nome Fantasia Empresa   ]
     [Codigo do Documento     ]=[Answer->Codigo do Documento     ]
     [Serie do Documento      ]=[Answer->Serie do Documento      ]
     [Numero do Documento     ]=NUMERO_ORDEM

     [Codigo do Destinatario  ]=[Answer->Codigo                  ]
     [Nome Fantasia EmitDest  ]=[Answer->Nome Fantasia EmitDest  ]
     [Data de Emissao         ]=[Answer->Data de Emissao         ]
     [Data de Vencimento      ]=[DupI->Data Vencimento           ]
     [Data a Receber          ]=[DupI->Data Vencimento           ]
     [Documento no Banco      ]=[DupI->Documento no Banco        ]
     [Tipo do Lancamento      ]="E"
     [Descricao do Lancamento ]="CARTEIRA"

     While True
           NDIAS=0
           If Dow([Data a Receber])="Sat"
              Then NDIAS=2
              Else If Dow([Data a Receber])="Sun"
                      Then NDIAS=1
                   EndIf
           EndIf
           DIA = [Data a Receber]
           Moveto "\\Sistemas\\Cadastro\\Feriados"
           Moveto [Data do Feriado]
           Locate DIA
           If Retval
              Then If [Dias a Receber]>0
                      Then NDIAS=[Dias a Receber]
                   EndIf
                   UnLockRecord
           EndIf
           Moveto "\\Sistemas\\CtaRec\\Duplic"
           [Data a Receber]=[Data a Receber]+NDIAS
           If NDIAS=0
              Then QuitLoop
           EndIf
     EndWhile
     [Valor do Documento      ]=[DupI->Valor Duplicata         ]
     [Saldo do Documento      ]=[DupI->Valor Duplicata         ]
     [Valor do Desconto       ]=[DupI->Valor do Desconto       ]
     [Data Limite Desconto    ]=[DupI->Data Limite Desconto    ]
     [Taxa de Juros           ]=[DupI->Taxa de Juros           ]
     [Tipo Taxa de Juros      ]=[DupI->Tipo Taxa de Juros      ]
     [NDias Taxa de Juros     ]=[DupI->NDias Taxa de Juros     ]

     [Tipo do Pagamento       ]="DN"
     If Ok_DupNF
        Then Moveto "NotaV"
             Moveto [Codigo da Empresa]
             Locate DOC_EMPRESA,
                    DOC_NUMERO,
                    DOC_SERIE,
                    AlinhM(StrVal(WSEQ),2)
             If Retval
                Then Moveto "\\Sistemas\\CtaRec\\Duplic"
                     [Tipo do Pagamento       ]=[NotaV->Forma de Pagamento]
                     [Sequencia Gerador       ]=[NotaV->Sequencia]

                     If [Tipo do Pagamento]="CT" Or
                        [Tipo do Pagamento]="CD"
                        Then Moveto "NotaC"
                             Moveto [Codigo da Empresa]
                             Locate DOC_EMPRESA,
                                    DOC_NUMERO,
                                    DOC_SERIE 
                             If Retval
                                Then Moveto "\\Sistemas\\CtaRec\\Duplic"
                                    [Observacoes             ]=[NotaC->Razao Social]+" * "+
                                                               [NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]+
                                                               ", Vr: "+LTrim(Format("W10.2,EIC",[NotaV->Valor]))
                                Else Moveto "\\Sistemas\\CtaRec\\Duplic"
                             EndIf
                             [Tipo do Lancamento      ]="G"
                             [Descricao do Lancamento ]="CARTAO CRED/DEB"
                     EndIf
                Else Moveto "\\Sistemas\\CtaRec\\Duplic"
                     [Tipo do Pagamento       ]="DN"
             EndIf
     EndIf

     [Sistema Gerador         ]="GD"
     [Tipo Docto Gerador      ]=[Answer->Codigo do Documento]
     [Numero Docto Gerador    ]=[Answer->Numero do Documento]
     [Documento Referente     ]=[Tipo Docto Gerador]+"/"+[Numero Docto Gerador]+"-"+[Sequencia Gerador]

     [Codigo do Representante ]=[Answer->Codigo do Representante ]
     [Nome Fantasia Represent ]=[Answer->Nome Fantasia Represent ]

     If [Tipo do Pagamento]<>"CT" And
        [Tipo do Pagamento]<>"CD"
        Then
             wcn=1
             While NoNota[wcn]<>" "
               If wcn=1
                  Then [Observacoes]=NoNota[wcn]
                  Else [Observacoes]=[Observacoes]+"/"+NoNota[wcn]
               EndIf
               wcn=wcn+1
             EndWhile
             If wcn=1
                Then [Observacoes]="NF: "+[Observacoes]
                Else [Observacoes]="NF's: "+[Observacoes]
             EndIf
     EndIf

     [Valor da Comissao       ]=[DupI->Valor da Comissao       ]
     [Saldo da Comissao       ]=[DupI->Valor da Comissao       ]
     [Data de Entrada         ]=Today()
     Controle_Dia()

     WI = WI + 1
     WE = WE + 1
     
     ;Codigo do Cobrador do Cadastro de Representantes
     If [Codigo do Cobrador]="" And [Codigo do Representante]<>""
        Then Moveto [Codigo do Representante]
             If Busca_Lookup("Codigo do Representante",[\Sistemas\Ctarec\Duplic->Codigo do Representante],"SM")
                Then [Codigo do Cobrador   ]=REG_BUSCA_LOOKUP["Codigo_Cobrador"]
                     [Descricao do Cobrador]=REG_BUSCA_LOOKUP["Descricao_Cobrador"]
             EndIf
     EndIf   
     UnLockRecord

     Moveto "DupI"
     Skip
     If EOT() Then QuitLoop EndIf
    EndWhile

    Moveto "Answer"
    [Cta Receber Atualizado]="S"
    UnLockRecord

    SaveTables
EndScan
Do_It!
ClearAll

View "DupC"
Coedit "Answer"
Scan For [Cta Receber Atualizado]="S"
  Moveto "DupC"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento]
  If RetVal
     Then For i From 1 to 3
            If Not IsLockRecord()
               Then [Cta Receber Atualizado]="S"
                    UnLockRecord
                    QuitLoop
            EndIf
          EndFor
  EndIf

  Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc   ; (AtuaDup)

;*******************************************************************************
;* Rotina do ShowDialog                                                        *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     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="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" :
                         Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         Endif
                    Case Campo="TG_DTFIM"   :
                         If Not IsBlank(VSDGDTFIM)
                            Then Campo="YES"
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_DTFIM":
       MSG_CAMPO="Informe a Data Final"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc   ; (SD_Dialog)

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()

While True

  ShowDialog "Atualiza‡„o de Duplicatas p/ o Contas a Receber" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 09 Width 60

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

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

    Pushbutton @ 05,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 05,28 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGDTINI)
     Then Mensagem("Data Inicial Invalida !")
          Loop
  EndIf

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  AtuaDup()

  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar !")
          Loop
  EndIf

  Mensagem("Fim de Opera‡„o !")
  Delete "Answer"

EndWhile
ClearAll
Release Vars All
Release Procs All
