;** EmitDup  *******************************************************************
;*  Emissao de Duplicatas                                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 12/04/1999 por Cl udio Ant“nio de Faria Santos
;Ultima Alteracao: 05/04/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Alterado em     : 29/06/2006 por Antonio Marcelo Alves
;Motivo Alteracao: Inclusao ImpriArq()
;Ultima Alteracao: 14/08/2007 por Antonio Marcelo Alves
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 27/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ImpressÆo    
;Ultima Alteracao: 06/04/2011 por Bruno Carvalho
;Motivo Alteracao: Variavel DUPC
;Ultima Alteracao: 13/09/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes para ImpressÆo de Duplicata em folhas A4 (2x por Folha) 
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Alterado o caminho da Imagem_Fundo
;Ultima Alteracao: 18/04/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ "DupI" [Codigo_Sacado]
;Ultima Alteracao: 07/11/2013 por Andrey Fillipe
;Motivo Alteracao: Inclusao impressÆo de Imagem_Fundo #0344#
;Ultima Alteracao: 23/12/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ impressÆo de duplicatas #0296# 
;Ultima Alteracao: 23/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Serie da Nota "SrNota"
;Ultima Alteracao: 29/04/2014 por Andrey Fillipe
;Motivo Alteracao: Inclusao impressÆo de Imagem_Fundo #0053#
;Ultima Alteracao: 03/06/2014 por Andrey Fillipe
;Motivo Alteracao: Inclusao impressÆo de Imagem_Fundo #0231#     
;Ultima Alteracao: 09/08/2016 por Bruno Carvalho
;Motivo Alteracao: Inclusao impressÆo de Imagem_Fundo #0296#
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog    
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes ShowDialog TG_DESTINAT               
;Ultima Alteracao: 30/05/2017 por Bruno Carvalho
;Motivo Alteracao: Inclus„o impressÆo de Imagem_Fundo #0377#
;Ultima Alteracao: 17/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dupnf codigo do documento,Tipo do Documento
;Ultima Alteracao: 21/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dupnf codigo do documento,Tipo do Documento
;Ultima Alteracao: 04/09/2019 por Bruno Carvalho
;Motivo Alteracao: Criado modelo gen‚rico "Ed_0000.jpg"
;Ultima Alteracao: 05/09/2019 por Bruno Carvalho
;Motivo Alteracao: InclusÆo impressÆo de Imagem_Fundo #0432#
;Ultima Alteracao: 16/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes localizar/criterio notac                   

;*******************************************************************************
;* Rotina p/ selecao de registros                                              *
;*******************************************************************************
Proc Seleciona()
AGUARDE("Aguarde, Selecionado Duplicatas")
ClearAll

{Ask} {DupC} Check
Moveto [Codigo da Empresa  ] Example "CodE" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento] Example "CodD"
Moveto [Serie do Documento ] Example "CodS"
Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Situacao           ] TypeIn "Not C"
Moveto [Numero_Carregamento] TypeIn "~VSDGNCARREG.."
Moveto [Duplicata Emitida  ] TypeIn "Not S"
Moveto [Codigo             ] Check
{Ask} {DupI} 
Moveto [Codigo da Empresa  ] Example "CodE"
Moveto [Numero do Documento] Example "CodD"
Moveto [Serie do Documento ] Example "CodS"
Moveto [Codigo_Sacado      ] Check TypeIn "~VSDGDESTINAT.. ,as Codigo"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then CopyForm "DupC" "F" "Answer" "F"
EndIf

EndProc                 

;*******************************************************************************
;* Seleciona Titulos para Baixa
;*******************************************************************************
Proc CHAVE()
While True
  End
  Down
  Moveto [Codigo da Empresa]                
  While True

    Prompt " Esc=Sair  F4=Imprimir  F5=Total  F7=Paginar  F8=Atualizar"

    Wait Field
         Until "ESC","ENTER","F7","HOME","UP","PGUP","F4","F5","F8"

    Switch
    Case RetVal="F5" And Field()="Codigo da Empresa":
         Moveto [Valor Nota Fiscal]
         VR=ImageCSum()
         Mensagem("Total = "+LTrim(Format("W13.2,EIC",VR)))
         Moveto [Codigo da Empresa]
    Case RetVal="F4" And Field()="Codigo da Empresa":
         Del
         Do_it!
         DispositivoI("FAT")
         Coeditkey
         If OK="" Then Loop EndIf
         IMPRIME()
         CHAVE=5
         QuitLoop
    Case RetVal="F8":
         CONFGERAL("Atualizar Duplicatas como emitidas ?")
         If OK="S"
            Then AtualizaDup()
                 CHAVE=9
                 Do_It!
                 ClearAll
                 Quitloop
         Endif
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Codigo da Empresa":
         While True
           PAGINA("Answer","MR")
           If EDITAR="S"
              Then CHAVE=0
                   Return
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then DEL
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
         EndWhile
         CHAVE=5
         QuitLoop
    Case Retval="ESC":
         If Field()="Codigo da Empresa"
            Then CHAVE=9
                 Do_It!
                 ClearAll
                 Quitloop
         EndIf
    EndSwitch
  EndWhile
  If CHAVE=0 OR CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
EndProc

;*******************************************************************************
;* Seleciona Registros para Atualizacao                                        *
;*******************************************************************************
Proc SELECIONAI()
Edit "Answer"
SetHighLight Current Record 23 Field 31
{Image} {KeepSet}
Do_It!
CoEdit "Answer"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
ClearAll
EndProc

;*******************************************************************************
;* Copia Imagem para Raiz                                                      *
;*******************************************************************************
Proc Copia_Imagem()
Private VSDGDRIVE,VSDGPASTA

VSDGDRIVE=SubStr(Directory(),1,2)
VSDGPASTA="\\Sistemas\\IMAGENS\\IMG_FUN\\"
IMAGEM_FUNDO="ed_"+SYS_CODIGO_CLIENTE

If IsFile(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG")
   Then Copia_Arquivo(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG c:\\vise\\"+IMAGEM_FUNDO+".JPG")
   Else IMAGEM_FUNDO="ed_0000"
        If IsFile(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG")
           Then Copia_Arquivo(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG c:\\vise\\"+IMAGEM_FUNDO+".JPG")
        EndIf   
EndIf    

EndProc ;Copia_Imagem()

;*******************************************************************************
;* Rotina de impress„o de duplicatas                                           *
;*******************************************************************************
Proc IMPRIME()
AGUARDE("Aguarde, Imprimindo Duplicatas")
Do_It!
ClearAll

DUPC = False

ArqImp=PrivDir()+"EmitDup.Txt"
If IsFile(ArqImp)
   Then Deleta_Arquivo(ARQIMP)
EndIf

TIPO="DUP"
If Not IsEmpty("Numerodp")
   Then View "Numerodp"
        Locate VSDGEMPRESA,TIPO
        MSGDUP=[Mensagem]
        ClearAll
   Else MSGDUP=""
EndIf

If SYS_CODIGO_CLIENTE="0274" Or
   SYS_CODIGO_CLIENTE="0344" Or
   SYS_CODIGO_CLIENTE="0377" Or
   SYS_CODIGO_CLIENTE="0296" Or
   SYS_CODIGO_CLIENTE="0053" Or
   SYS_CODIGO_CLIENTE="0231" Or
   SYS_CODIGO_CLIENTE="0432"
   Then Copia_Imagem()
EndIf

Array DiaNota[15]
Array NoNota[15]
Array SrNota[15]
Array VrNota[15]
Array Valor[36]
Array Vencimento[36]

For i from 1 to 36
  Valor[i]=""
  Vencimento[i]=BlankDate()
EndFor

Num_Copia=0

View "\\Sistemas\\Cadastro\\Destinat"
View "NotaC"
View "DupNF"
View "DupI"
CoEdit "Answer"
Scan

   Moveto "\\Sistemas\\Cadastro\\Destinat"               
   Moveto [Codigo]
   Locate [Answer->Codigo]
   If RetVal
      Then FONE         =[Telefone]
           CODIGO_ANTIGO=SubStr([Conta Contabil],1,7)
      Else FONE         =""
           CODIGO_ANTIGO=""
   EndIf

   For i from 1 to 15
      DiaNota[i] = " "
      NoNota[i]  = " "
      SrNota[1]  = " "
      VrNota[i]  = BlankNum()
   EndFor

   Moveto "DupNF"
   Moveto [Codigo da Empresa]
   Locate [Answer->Codigo da Empresa], [Answer->Numero do Documento],[Answer->Serie do Documento]
   If Retval
      Then wcn=1
           While [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                 [Numero do Documento]=[Answer->Numero do Documento] And
                 [Serie do Documento ]=[Answer->Serie do Documento ]

             DiaNota[wcn]=StrVal(Day([Answer->Data de Emissao]))

             switch
               case sys_codigo_cliente="0121":
                 NoNota[wcn] =[Codigo do Documento ]+"/"+[Numero da Nota]
           
               otherwise                     :
                 NoNota[wcn] =[Numero da Nota]

             endswitch

             SrNota[wcn] =[Serie da Nota       ]
             VrNota[wcn] =[Valor da Nota Fiscal]
             wcn=wcn+1
             
             VENDA_APRAZO=True
             Moveto "NotaC"
             Moveto [Codigo da Empresa]
             Locate [Answer->Codigo da Empresa],[DupNF->Numero da Nota],[DupNF->Serie da Nota]
             If Retval
                Then If [Tipo de Pagamento]="V" Then VENDA_APRAZO=False  EndIf
             EndIf
             
             Moveto "DupNF"
             Skip
             If EOT() Then QuitLoop EndIf
           EndWhile
      Else Moveto "Answer"
           Loop     
   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

   i=1
   NUMERO_PARCELAS=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 ]

          Valor[i]=StrVal([Valor Duplicata])
          Vencimento[i]=StrVal([Data Vencimento])
          i=i+1
          NUMERO_PARCELAS=NUMERO_PARCELAS+1
          Skip
          If EOT() Then QuitLoop EndIf
   EndWhile

   Moveto [Codigo da Empresa]
   Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento ]
   While  [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
          [Numero do Documento]=[Answer->Numero do Documento] And
          [Serie do Documento ]=[Answer->Serie do Documento ]

      AGUARDE("Aguarde, Imprimindo duplicata N§ " + [Answer->Codigo da Empresa] + " - " + [Answer->Numero do Documento])
      
      Num_Copia=Num_Copia+1
      Play PARAM_IMPRESSAO

      If IsAssigned(QUEBRA_PAGINA)                               
        Then If Num_Copia=2
                Then Print File ARQIMP "\f"
                     Num_Copia=0 
             EndIf
      EndIf

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

   EndWhile

   Moveto "Answer"
   [Duplicata Emitida]="S"
                                                              
                                                              
EndScan
Do_It!
ClearAll

If IsAssigned(QUEBRA_PAGINA)                               
   Then If Num_Copia=1
           Then Print File ARQIMP "\f"
        EndIf
EndIf

;---- Imprime Arquivo Impressao ------------------------------------------------
ImpriArq(ARQIMP)

CoEdit "Answer"
PickForm "F"
LIMPAGUARDE()
EndProc

;*******************************************************************************
;* Rotina p/ Atualizacao de duplicatas emitidas                                *
;*******************************************************************************
Proc AtualizaDup()
AGUARDE("Aguarde, Atualizando Duplicatas Emitidas")
Do_It!
ClearAll
View "DupC"
Coedit "Answer"
Scan For [Duplicata Emitida]="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 [Duplicata Emitida]="S"
                    UnLockRecord
                    QuitLoop
            EndIf
          EndFor
  EndIf

  Moveto "Answer"
EndScan
Do_It!
ClearAll

Mensagem("Atualiza‡„o concluida !")
LIMPAGUARDE()
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
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_DESTINAT"      : Campo="TG_EMPRESA"
            Case Campo="TG_NCARREG"       : Campo="TG_DESTINAT"
            Case Campo="TG_DTINI"         : Campo="TG_NCARREG"
            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" :
                         If IsBlank(VSDGEMPRESA)
                            Then VSDGNOMEMP=""
                            Else Campo="TG_DESTINAT"
                         EndIf
                    Case Campo="TG_DESTINAT": Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG" : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"   :Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
     MSG_CAMPO="Informe uma Empresa"
  Case Campo="TG_DTINI":
     MSG_CAMPO="Informe a Data Inicial"
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()

sys_Valor()

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

While True

  ShowDialog "Emiss„o de Duplicatas" 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 13 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_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST

    Label  @ 04,00 "Carregamento" For "TG_NCARREG"
    Accept @ 05,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG
                 
    Label  @ 06,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 07,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,16 "at‚" For "TG_DTFIM"
    Accept @ 07,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGDTINI)
     Then Mensagem("Data Inicial Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  View "P_Ed"
  Moveto [Codigo_Empresa]
  Locate VSDGEMPRESA
  If RetVal
     Then PARAM_IMPRESSAO=[Impressao_Duplicata]
     Else Mensagem("Parƒmetros n„o cadastrado para esta empresa!")
          Loop
  EndIf
  ClearAll

  MSGDUP=""
  View "DocMsg"
  Locate VSDGEMPRESA,"DUP"
  If RetVal
     Then MSGDUP=[Mensagem]
  EndIf
  ClearAll

  Seleciona()
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Duplicatas para Emitir!")
          Loop
  EndIf
  SelecionaI()
  Echo Normal
  Echo Off

  ClearAll
  Delete "Answer"

EndWhile
ClearAll
Release Vars All
Release Procs All
