;** GDPadr1 ********************************************************************
;*  Geracao de Duplicatas - Numero Duplicata=Numero Nota                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/06/1997 por Anivel Augusto Rodrigues
;Alterado em     : 16/02/2005 por Davi Pereira Carrano
;Motivo Alteracao: Gravar Origem dos Documento da Duplicata Gerada
;Alterado em     : 19/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS2 MinasLack
;Alterado em     : 03/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS1 Tecnomar
;Alterado em     : 16/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Credito/Troca
;Alterado em     : 19/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cupom        
;Ultima Alteracao: 05/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Doctos NF/ROM/DUP               
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 06/10/2010 por Karina
;Motivo Alteracao: Ajustes DUPLICATA() para Cupom
;Ultima Alteracao: 08/10/2010 por Karina
;Motivo Alteracao: Ajustes para Tipo de Documentos
;Ultima Alteracao: 20/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie Cupom Fiscal
;Ultima Alteracao: 13/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes X?-Cupom Fiscal para multiplos ECFïs

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc Seleciona()
AGUARDE("Aguarde, Processando Dados")
ClearAll

{Ask} {Destin}
Moveto [Codigo da Destinacao] Example "destin"
Moveto [Gera Duplicata      ] TypeIn "S"

{Ask} {NotaC} Check
Moveto [Codigo da Destinacao   ] Example "destin"
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Situacao               ] TypeIn "Not C"
Moveto [Forma de Pagamento     ] TypeIn "Not CT, Not CD"
Moveto [Tipo Movimento Estoque ] TypeIn "S"
If VSDGGVV="N"
   Then Moveto [Tipo de Pagamento] TypeIn "P"
EndIf
Do_It!
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf

View "DupNF"
CoEdit "Answer"
While Not RecordStatus("New")
  NF_EXISTE=False
  Moveto "DupNF"
  Moveto [Numero da Nota]
  Locate IndexOrder by "idupnf01" [Answer->Numero do Documento],[Answer->Serie do Documento],[Answer->Codigo da Empresa]
  If RetVal
     Then NF_EXISTE=True
  EndIf

  Moveto "Answer"
  If NF_EXISTE
     Then Del
          Loop
  EndIf
  Down
EndWhile
Do_It!
ClearAll

EndProc  ; (Seleciona)

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc GeraDup()
AGUARDE("Aguarde, Gerando Duplicatas")

ClearAll

Sort "Answer" On "Codigo da Empresa", "Numero do Documento", "Serie do Documento"

ClearAll

WC=0
View "DupC"
View "DupI"
View "DupNF"
View "FaturaC"
View "NotaV"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\End_cob"
Coedit "Answer"

Scan

  WC=WC+1
  DUPINI=[Answer->Numero do Documento]

  Switch
  	Case SubStr([Answer->Codigo do Documento],1,4)="NFE9":
      TPDOCTO="DPE9" 
      SERDUP ="900"
    Case SubStr([Answer->Codigo do Documento],1,3)="NFE1":
      TPDOCTO="DPE1" 
      SERDUP ="1"
    Case SubStr([Answer->Codigo do Documento],1,1)="X":
      TPDOCTO=[Answer->Codigo do Documento]
      SERDUP =[Answer->Serie do Documento ]
    Case SubStr([Answer->Tipo do Documento],1,3)="CUP":
      TPDOCTO="DUPC" 
      SERDUP =[Answer->Serie do Documento ]
    Case SubStr([Answer->Tipo do Documento],1,2)="NF": 
      TPDOCTO="DUP" ;PadrÆo
      SERDUP =""
    OtherWise:
      TPDOCTO=[Answer->Codigo do Documento]
      SERDUP =[Answer->Serie do Documento ]
  EndSwitch
 
  AGUARDE("Aguarde, Gerando Duplicata: "+DUPINI+" Total: "+StrVal(WC))

  Duplicata()
  Nota()
  Desdobra()
  Moveto "Answer"

EndScan
Do_It!
ClearAll

EndProc  ; (GeraDup)

;*******************************************************************************
;* Grava Duplicata                                                             *
;*******************************************************************************
Proc Duplicata()
OF_OK=False

If [Answer->Tipo do Documento]<>"CUP"
  Then Moveto "FaturaC"
       Moveto [Numero da OF]
       Locate [Answer->Numero da OF]
       If RetVal
         Then OF_OK=True
              If Search("TROCA",[Descricao da Destinacao])>0
                Then If [Valor IR]>=0
                        Then DUPLIC_OK=False
                             Return
                     EndIf
              EndIf
       EndIf
EndIF

DUPLIC_OK=True
Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [Answer->Codigo da Empresa  ], DUPINI, SERDUP
If RetVal
   Then Mensagem("Duplicata: "+DUPINI+" j  Existe, Verificar !")
        DUPLIC_OK=False
        Return
EndIf
End Down
[Codigo da Conta          ] = VSDGCONTA
[Codigo da Empresa        ] = [Answer->Codigo da Empresa     ]
[Numero do Documento      ] = DUPINI
[Codigo do Documento      ] = TPDOCTO
[Serie do Documento       ] = SERDUP
[Nome Fantasia Empresa    ] = [Answer->Nome Fantasia Empresa ]
[Data de Emissao          ] = [Answer->Data de Emissao       ]
If Substr([Answer->Descricao Condpagto],1,6)="CONTRA"
   Then [Condicoes Especiais]=[Answer->Descricao Condpagto]
EndIf
[Tipo                     ] = [Answer->Tipo                  ]
[Codigo                   ] = [Answer->Codigo                ]
[Nome Fantasia EmitDest   ] = [Answer->Nome Fantasia EmitDest]

If OF_OK 
   Then [Razao Social Fatura      ]=[FaturaC->Razao Social             ]
        [Endereco Fatura          ]=[FaturaC->Endereco                 ]
        [Bairro Fatura            ]=[FaturaC->Bairro                   ]
        [CEP Fatura               ]=[FaturaC->CEP                      ]
        [Cidade Fatura            ]=[FaturaC->Cidade                   ]
        [UF Fatura                ]=[FaturaC->UF                       ]
        [CGC Fatura               ]=[FaturaC->CGC                      ]
        [IE Fatura                ]=[FaturaC->IE                       ]
        [Endereco de Cobranca     ]=[FaturaC->Endereco de Cobranca     ]
        [Bairro de Cobranca       ]=[FaturaC->Bairro de Cobranca       ]
        [CEP de Cobranca          ]=[FaturaC->CEP de Cobranca          ]
        [Cidade de Cobranca       ]=[FaturaC->Cidade de Cobranca       ]
        [UF de Cobranca           ]=[FaturaC->UF de Cobranca           ]
        [Numero do Pedido         ]=[FaturaC->Numero do Pedido         ]
Endif

If Not OF_OK Or IsBlank([Razao Social Fatura])
   Then Moveto "\\Sistemas\\Cadastro\\Destinat"
        Moveto [Codigo]
        Locate [Answer->Codigo]
        If RetVal
           Then Moveto "Dupc"
                [Razao Social Fatura]=[\Sistemas\Cadastro\Destinat->Razao Social]
                [Endereco Fatura    ]=[\Sistemas\Cadastro\Destinat->Endereco    ]
                [Bairro Fatura      ]=[\Sistemas\Cadastro\Destinat->Bairro      ]
                [CEP Fatura         ]=[\Sistemas\Cadastro\Destinat->CEP         ]
                [Cidade Fatura      ]=[\Sistemas\Cadastro\Destinat->Cidade      ]
                [UF Fatura          ]=[\Sistemas\Cadastro\Destinat->UF          ]
                [CGC Fatura         ]=[\Sistemas\Cadastro\Destinat->CGC         ]
                [IE Fatura          ]=[\Sistemas\Cadastro\Destinat->IE          ]
        EndIf

        Moveto "\\Sistemas\\Cadastro\\End_Cob"
        Moveto [Codigo]
        Locate [Answer->Codigo]
        If RetVal
           Then Moveto "Dupc"
                [Endereco de Cobranca]=[\Sistemas\Cadastro\End_Cob->Endereco de Cobranca]
                [Bairro de Cobranca  ]=[\Sistemas\Cadastro\End_Cob->Bairro de Cobranca  ]
                [CEP de Cobranca     ]=[\Sistemas\Cadastro\End_Cob->CEP de Cobranca     ]
                [Cidade de Cobranca  ]=[\Sistemas\Cadastro\End_Cob->Cidade de Cobranca  ]
                [UF de Cobranca      ]=[\Sistemas\Cadastro\End_Cob->UF de Cobranca      ]
        EndIf
        Moveto "DupC"
EndIf

[Codigo da Destinacao     ] = [Answer->Codigo da Destinacao     ]
[Descricao da Destinacao  ] = [Answer->Descricao da Destinacao  ]
[Codigo do Representante  ] = [Answer->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [Answer->Nome Fantasia Represent  ]
[Comissao do Representante] = [Answer->Comissao do Representante]
[Pedido Cliente           ] = "NF/"+[Answer->Numero do Documento]
[Valor Nota Fiscal        ] = [Answer->Valor Nota Fiscal        ]
[Numero do Pedido         ] = [Answer->Numero do Pedido         ]
[Numero_Carregamento      ] = [Answer->Numero_Carregamento      ]

;*** Implementado em 14/06/2004 *****
[Duplicata Emitida  ]="S"
[Boleta Emitida     ]="S"
[Promissoria Emitida]="S"
[Carne Emitido      ]="S"
Switch
  Case [Answer->Forma de Pagamento]="CR":
       [Carne Emitido      ]=""
  Case [Answer->Forma de Pagamento]="NP":
       [Promissoria Emitida]=""
  Case [Answer->Forma de Pagamento]="BO":
       [Duplicata Emitida  ]=""
       [Boleta Emitida     ]=""
  Case [Answer->Forma de Pagamento]="CO" Or
       [Answer->Forma de Pagamento]="DP":
       [Duplicata Emitida  ]=""
EndSwitch
;************************************

Controle_Dia()
EndProc  ; (Duplicata)

;*******************************************************************************
;* Grava Desdobramentos                                                        *
;*******************************************************************************
Proc Desdobra()

If Not DUPLIC_OK
   Then Return
EndIf

Moveto "NotaV"
Moveto [Codigo da Empresa]
Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento]
If Not RetVal
   Then Return
EndIf

NPARC=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]
      NPARC=NPARC+1
      Skip
      If EOT()
         Then QuitLoop
      Endif
EndWhile

i=0
Moveto "NotaV"
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]

   i=i+1
   Moveto "DupI"
   End
   Down
   [Codigo da Empresa        ] = [Dupc->Codigo da Empresa  ]
   [Numero do Documento      ] = [Dupc->Numero do Documento]
   [Serie do Documento       ] = [Dupc->Serie do Documento ]
   If NPARC=1
      Then [Ordem do Documento]=""
      Else [Ordem do Documento]=CHR(64+i)
   EndIf

   [Data Vencimento ]=[NotaV->Data ]
   [Valor Duplicata ]=[NotaV->Valor]

   [Taxa de Juros            ] = TAXA
   [Tipo Taxa de Juros       ] = VSDGFORMA

   If VSDGFORMA="A"
      Then [NDias Taxa de Juros]=365
   Endif
   If VSDGFORMA="M"
      Then [NDias Taxa de Juros]=30
   Endif
   If VSDGFORMA="D"
      Then [NDias Taxa de Juros]=1
   Endif
   [Valor da Comissao]=[NotaV->Valor da Comissao]
   UnLockRecord

   Moveto "NotaV"
   Skip
   If EOT()
      Then QuitLoop
   Endif

EndWhile
EndProc  ;  (Desdobra)

;*******************************************************************************
;* Grava Relacao de Notas                                                      *
;*******************************************************************************
Proc Nota()

If Not DUPLIC_OK
   Then Return
Endif

Moveto "DupNF"
End
Down
[Codigo da Empresa        ] = [Dupc->Codigo da Empresa    ]
[Numero do Documento      ] = [Dupc->Numero do Documento  ]
[Serie do Documento       ] = [Dupc->Serie do Documento   ]
[Sequencia                ] = "01"
[Numero da Nota           ] = [Answer->Numero do Documento]
[Serie da Nota            ] = [Answer->Serie do Documento ]
[Valor da Nota Fiscal     ] = [Answer->Valor Nota Fiscal  ]
UnLockRecord

EndProc  ; (Nota)

;*******************************************************************************
;* 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_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTINI"         : Campo="TG_CONTA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_TAXA"          : Campo="TG_DTFIM"
            Case Campo="TG_FORMA"         : Campo="TG_TAXA"
            Case Campo="TG_GVV"           :
                 If IsBlank(VSDGTAXA)
                    Then Campo="TG_TAXA"
                    Else Campo="TG_FORMA"
                 EndIf
            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 Not IsBlank(VSDGEMPRESA)
                            Then View NoWindow "P_Fatura"
                                 Moveto [Codigo_Empresa]
                                 Locate VSDGEMPRESA
                                 If RetVal
                                    Then VSDGCONTA  =[Codigo_Conta_Caixa      ]
                                         VSDGTAXA   =[Duplicata_TxJuros       ]
                                         VSDGFORMA  =[Duplicata_Forma_TxJuros ]
                                         VSDGGVV    =[Gera_Duplicatas_AVista  ]
                                    Else Mensagem("N„o esta Configurado os Parametros para Empresa !")
                                 EndIf
                                 ClearImage
                         EndIf
                         Campo="TG_CONTA"
                    Case Campo="TG_CONTA":
                         If Not IsBlank(VSDGCONTA)
                            Then Campo="TG_DTINI"
                         EndIf
                    Case Campo="TG_DTINI"   :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         Endif
                    Case Campo="TG_DTFIM"   :
                         If Not IsBlank(VSDGDTFIM)
                            Then Campo="TG_TAXA"
                         EndIf
                    Case Campo="TG_TAXA":
                         VSDGTAXA=ControlValue("TG_TAXA")
                         If Not IsBlank(VSDGTAXA)
                            Then TAXA=NumVal(VSDGTAXA)
                                 Campo="TG_FORMA"
                            Else VSDGFORMA    =""
                                 VSDGDESCFORMA=""
                                  Campo="TG_GVV"
                         EndIf
                    Case Campo="TG_FORMA":
                         VSDGFORMA=ControlValue("TG_FORMA")
                         If Not IsBlank(VSDGFORMA)
                            Then Switch
                                   Case VSDGFORMA="D":
                                        VSDGDESCFORMA="Dia"
                                   Case VSDGFORMA="M":
                                        VSDGDESCFORMA="Mes"
                                   Case VSDGFORMA="A":
                                        VSDGDESCFORMA="Ano"
                                   OtherWise:
                                        VSDGFORMA    =""
                                        VSDGDESCFORMA=""
                                 EndSwitch
                                 Campo="TG_GVV"
                            Else VSDGDESCFORMA=""
                         EndIf
                    Case Campo="TG_GVV":
                         VSDGGVV=ControlValue("TG_GVV")
                         Switch
                           Case VSDGGVV="S":
                                VSDGDESCGVV="SIM"
                           Case VSDGGVV="N":
                                VSDGDESCGVV="NAO"
                           OtherWise:
                                VSDGGVV    ="N"
                                VSDGDESCGVV="NAO"
                         EndSwitch
                         Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe o Codigo da Empresa"
  Case Campo="TG_CONTA":
       MSG_CAMPO="Informe o Codigo da Conta"
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_DTFIM":
       MSG_CAMPO="Informe a Data Final"
  Case Campo="TG_TAXA":
       MSG_CAMPO="Branco=Nulo"
  Case Campo="TG_FORMA":
       MSG_CAMPO="D=Diario, M=Mensal, A=Anual"
  Case Campo="TG_GVV":
       MSG_CAMPO="Em Branco=N„o, S=Sim, N=N„o "
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
LimpAguarde()

VSDGDTINI    =BlankDate()
VSDGDTFIM    =BlankDate()
VSDGTAXA     =""
VSDGFORMA    =""
VSDGDESCFORMA=""
VSDGGVV      =""
VSDGDESCGVV  =""
TAXA         =BlankNum()
While True

  ShowDialog "Gerac„o de Duplicatas - N§.Duplicata=N§.Nota" 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 14 Width 54

    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 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA"    To VSDGCONTA
    Accept @ 03,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA

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

    Label  @ 06,00 "Taxa de Juros"  For "TG_TAXA"
    Accept @ 06,20 Width 09 "A7"  Picture "#*#.[##]" Tag "TG_TAXA"    To VSDGTAXA

    Label  @ 07,00 "Tipo Taxa de Juros"  For "TG_FORMA"
    Accept @ 07,20 Width 04 "A1"  Picture "D,M,A" Tag "TG_FORMA"    To VSDGFORMA
    Accept @ 07,24 Width 05 "A3"  Picture "!*!" Tag "TG_DESCFORMA"    To VSDGDESCFORMA

    Label  @ 08,00 "Gera Venda a Vista"  For "TG_GVV"
    Accept @ 08,20 Width 04 "A1"  Picture "S,N" Tag "TG_GVV"    To VSDGGVV
    Accept @ 08,24 Width 05 "A3"  Picture "!*!" Tag "TG_DESCGVV"    To VSDGDESCGVV

    Pushbutton @ 10,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 10,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

  Confirma()
  If OK=""  Then Loop EndIf

  Seleciona()

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

  Mensagem("Fim da Opera‡„o !")
  QuitLoop

EndWhile
ClearAll
Release Vars All
Release Procs All
