;** Rm_0080 ********************************************************************
;*  Emissao dos Titulos a Receber por Cliente                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 17/02/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Mudan‡a Tabela Temporaria PrivDir()
;Ultima Alteracao: 13/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: TOTALIZA EMPRESAS
;Ultima Alteracao: 25/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Correcao Data de Vencimento em Branco
;Ultima Alteracao: 28/11/2011 por Karina Andrade
;Motivo Alteracao: Add op‡Æo ordem de impressÆo
;Ultima Alteracao: 18/12/2013 por Andrey Fillipe
;Motivo Alteracao: Inclusao de data media
;Ultima Alteracao: 21/01/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado Modelo Com Saldo anterior Report RM_1000a "2"
;Ultima Alteracao: 06/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 17/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_EMPRESATE                 
;Ultima Alteracao: 24/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: 16/05/2017 por Rafael Matos
;Motivo Alteracao: Ajustes Modelos de Relat¢rio e InclusÆo Modelo Ranking/Sint‚tico
;Ultima Alteracao: 17/05/2017 por Rafael Matos
;Motivo Alteracao: Ajustes Modelos de Relat¢rio e InclusÆo Modelo Ranking/Sint‚tico/Valor Original
;Ultima Alteracao: 19/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao filtro representante                   
;Ultima Alteracao: 07/07/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes se VSDGREPRESEN="" e/ou VSDGGERENCIA="", Sol. 30710
;                  Registros com representante em branco nÆo estavam sendo exibidos
;Ultima Alteracao: 04/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modelo analitico             
;Ultima Alteracao: 29/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()
;Ultima Alteracao: 27/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ask com representante nÆo cadastrado
;Ultima Alteracao: 12/12/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desfazer ask com representante nÆo cadastrado
;Ultima Alteracao: 31/01/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado processo para escolher mais de um tipo de carteira
;Ultima Alteracao: 04/02/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado proc ListaRegra_Funcao(), onde foi ajustado ListaRegra_TGAtivado
;Ultima Alteracao: 06/02/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes chamada principal RM_0087
 
;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc RM_0080A_Seleciona(PARAM)
Private PARAM
ClearAll

If IsTable("\\Sistemas\\Ctarec\\"+Dir_Trab+"Duplic")
   Then If CIDADE<>""  
           Then {Ask} {\\Sistemas\\Cadastro\\Destinat}
                Moveto [Codigo             ] Example "cod"
                Moveto [Cidade             ] TypeIn CIDADE
        EndIf
        If VSDGGERENCIA<>""
            Then {Ask} TypeIn "\\Sistemas\\Cadastro\\Represen" Enter
                 Moveto [Codigo do Representante] Example "crep"
                 Moveto [Codigo da Gerencia     ] TypeIn "~VSDGGERENCIA.."
        EndIf
        {Ask} TypeIn "\\Sistemas\\Ctarec\\"+Dir_Trab+"DupliC" Enter Check
        Moveto [Codigo da Empresa ] TypeIn "~VSDGEMPRESA2.."
        Switch
          Case CIDADE<>"" : Moveto [Codigo do Destinatario] Example "cod" TypeIn " ,~VSDGDESTINAT.."
          OtherWise       : Moveto [Codigo do Destinatario] TypeIn "~VSDGDESTINAT.."
        EndSwitch
        Switch
          Case VSDGGERENCIA<>"" : Moveto [Codigo do Representante] Example "crep" TypeIn ", ~VSDGREPRESEN.."
          Case VSDGREPRESEN<>"" : Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
        Endswitch  
        If PARAM = 2
           Then If Not IsBlank(VSDGDTINI)
                   Then Switch
                          Case VSDGOPDTEMISVENC="2": Moveto [Data de Emissao    ] TypeIn "<~VSDGDTINI"
                          Case VSDGOPDTEMISVENC="1": Moveto [Data de Vencimento ] TypeIn "<~VSDGDTINI"
                        EndSwitch
                EndIf
           Else Switch
                  Case VSDGOPDTEMISVENC="2": Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                  Case VSDGOPDTEMISVENC="1": Moveto [Data de Vencimento ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                EndSwitch
        EndIf
        Moveto [Saldo do Documento    ] TypeIn "> 0.01"
        Switch                                                                                                                            
          Case ListaRegra_VSDGTPCART_Ativo  : Moveto [Tipo do Lancamento] TypeIn ListaRegra_VSDGTPCART
          Otherwise                         : Moveto [Tipo do Lancamento] TypeIn "~VSDGTPCART.."
        EndSwitch
        Moveto [Codigo da Conta       ] TypeIn "~VSDGCONTA.."
        switch
          case ListaRegra_VSDGTPPAGTO_Ativo : Moveto [Tipo do Pagamento      ] TypeIn ListaRegra_VSDGTPPAGTO
          case VSDGTPPAGTO<>""              : Moveto [Tipo do Pagamento      ] TypeIn "~VSDGTPPAGTO.." 
        endswitch 
        Do_It!
        ClearAll
       
        If VSDGOPSITCLIE<>"1"
           Then {Ask} {\\Sistemas\\Cadastro\\Destinat}
                Moveto [Codigo                ] Example "cod"
                Moveto [Situacao do Cliente   ] 
                switch
                  case VSDGOPSITCLIE="3" : TypeIn "PESSIMO"       ; SEM PESSIMO 
                  case VSDGOPSITCLIE="2" : TypeIn "not PESSIMO"   ; Sã PESSIMO
                endswitch
                {Ask} {Answer} TypeIn "Fast Delete"
                Moveto [Codigo do Destinatario] Example "cod"
                Do_It!
                ClearAll
        EndIf
EndIf

If PARAM = 2 And Not IsEmpty("Answer") and VSDGCODMODELO="01E" 
   Then {Ask} TypeIn Tabela Enter
        Moveto [Valor da Comissao] TypeIn "Changeto 0.00"
        Do_It!
        ClearAll
   
        If Not IsBlank(VSDGDTINI)
           Then RM_0080A_Processa("Answer")
   
                {Ask} {Answer}
                Moveto [Codigo do Destinatario] Check
                Moveto [Valor do Documento    ] TypeIn "Calc Sum as Valor do Documento"
                Do_It!
                ClearAll
                
                {Ask} {Answer}
                Moveto [Codigo do Destinatario] Check Example "a"
                Moveto [Valor do Documento    ] Check
                {Ask} TypeIn Tabela Enter
                Moveto [Codigo do Destinatario] Example "a"
                Do_It!
                ClearAll
                
                
                View Tabela
                Coedit "Answer"
                Scan
                  COD = [Codigo do Destinatario]
                  
                  Moveto Tabela
                  Moveto [Codigo do Destinatario]
                  Locate COD
                  If RetVal
                     Then [Valor da Comissao] = [Answer->Valor do Documento]
                  EndIf    
                
                  Moveto "Answer"
                EndScan
                Do_It!
                ClearAll
        EndIf             
EndIf   

Release Vars PARAM
EndProc   ; (Seleciona)

;*******************************************************************************
;* Rotina p/ Selecionar os Vencimentos                                         *
;*******************************************************************************
Proc Selecionav_RM0080A()

{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa     ] Check
Moveto [Codigo do Destinatario] Check
Moveto [Data de Vencimento    ] TypeIn "Calc Average as Data de Vencimento"

Do_It!
ClearAll

View "Answer"
Coedit Tabela
Scan
  CODEMP = [Codigo da Empresa]
  CODDES = [Codigo do Destinatario]
  
  Moveto "Answer"
  Moveto [Codigo da Empresa]
  Locate CODEMP,CODDES
  If RetVal
     Then  Moveto Tabela 
           Moveto [Data Limite Desconto]
           []=[Answer->Data de Vencimento]
           UnLockRecord
  EndIf
EndScan
Do_It!
ClearAll

EndProc   ; (Selecionav_RM0080A)

;*******************************************************************************
;* Rotina p/ processar Db Temporaria                                           *
;*******************************************************************************
Proc RM_0080A_Processa(TabelaRef)
Private TabelaRef

;***** Ajusta Dados ************************************
If VSDGEMPRESA="0000"
   Then {Ask} TypeIn TabelaRef Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] TypeIn "changeto 0000"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto TOTALIZA EMPRESAS"
        Do_It!
        ClearAll
EndIf

Coedit TabelaRef
Scan For Not IsBlank([Data de Vencimento])
   If [Data de Vencimento]<Today()
      Then NDA=Today()-[Data de Vencimento]
           TXM=[Multa]
           [Observacoes]="Vencida"
      Else NDA=0
           TXM=0
           [Observacoes]=""
   EndIf
   If (Today()-[Data de Vencimento])>=NumVal(VSDGDDPROTESTO)
       Then If [Descricao do Lancamento]="PROTESTADA"
               Then [Observacoes]="Cartorio"
               Else [Observacoes]="Protestar"
            EndIf
   EndIf

   If [Data Limite Desconto]>=Today()
      Then VRDESCT=[Valor do Desconto]
      Else VRDESCT=0
   EndIf

   If [Taxa de Juros]>0
      Then TXJ=([Taxa de Juros]/[NDias Taxa de Juros])*NDA
           VRJUROS=Round((([Saldo do Documento]*TXJ)/100)+([Saldo do Documento]*TXM/100),2)
      Else VRJUROS=Round((([Valor de Juros]/[NDias Taxa de Juros])*NDA),2)
           VRJUROS=VRJUROS+Round((([Saldo do Documento]*TXM)/100),2)
   EndIf

   [Valor do Documento]=([Saldo do Documento]+VRJUROS)-VRDESCT
   [Valor do Desconto ]=VRJUROS+(VRDESCT*-1)

EndScan
Do_It!
ClearAll

Release Vars TabelaRef
EndProc     ; (Processa)

;*******************************************************************************
;* Rotina p/ Somar os Valores                                                  *
;*******************************************************************************
Proc SelecionaTot_RM0080A()

{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa      ] Check Example "codemp"
Moveto [Codigo do Destinatario ] Check
Moveto [Valor do Documento     ] TypeIn "Calc Sum as Valor do Documento"
Moveto [Saldo do Documento     ] TypeIn "Calc Sum as Saldo do Documento"
Moveto [Valor do Desconto      ] TypeIn "Calc Sum as Valor do Desconto"
{Ask} {\\sistemas\\cadastro\\destinat}
Moveto [Codigo                 ] Example "codemp"
Moveto [Razao Social           ] Check TypeIn "as Nome Fantasia Empresa"
Do_It!
ClearAll

{Ask} {Answer} Check
Moveto [Codigo do Destinatario] Example "cod"
{Ask} TypeIn "\\Sistemas\\Cadastro\\Destinat" Enter
Moveto [Codigo                 ] Example "cod"
Moveto [Razao Social           ] Check
Moveto [Codigo do Representante] Check
Moveto [Nome Fantasia Represent] Check
Moveto [Cidade                 ] Check
Moveto [UF                     ] Check
Do_It!
ClearAll
    
Delete Tabela

Rename "Answer" Tabela

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc RM_0080A_Principal()

AGUARDE("Aguarde, Processando Dados")
Tabela=Cria_Temp(PrivDir())

Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
While Novo_Dir_Trab()
  If IsTable("Answer")     Then Delete "Answer" EndIf
  RM_0080A_Seleciona(1)
  If Not IsTable("Answer") Then Loop EndIf
  If IsTable(Tabela)
     Then Add "Answer" Tabela
     Else Rename "Answer" Tabela
  EndIf
EndWhile

If Not IsEmpty(Tabela)
   Then RM_0080A_Processa(Tabela)
        Selecionav_RM0080A()
        
        If VSDGCODMODELO="01C" or  VSDGCODMODELO="01D"
           Then SelecionaTot_RM0080A()
        EndIf             
        
        If VSDGCODMODELO="01E"
           then RM_0080A_Seleciona(2)
        EndIf
                
        Switch
          Case VSDGCODMODELO="01A":
               CopyReport "\\Base\\Sistemas\\CtaRec\\Rm_1000" "12" Tabela "R"
               If VSDGOPRELCODALF="1"
                  Then Seta_Ordem_Report(Tabela,"R","Codigo do Destinatario","Codigo do Destinatario","") 
                  Else Seta_Ordem_Report(Tabela,"R","Codigo do Destinatario","Razao Social","") 
               EndIf
          Case VSDGCODMODELO="01B":
               If VSDGOPRELCODALF="1"
                  Then CopyReport "\\Base\\Sistemas\\CtaRec\\Rm_1001" "5"  Tabela "R"
                  Else CopyReport "\\Base\\Sistemas\\CtaRec\\Rm_1001" "14" Tabela "R"
               EndIf 
          Case VSDGCODMODELO="01C": CopyReport "\\Base\\Sistemas\\CtaRec\\Rm_1004" "1"  Tabela "R" 
                                    Sort Tabela On "Valor do Documento" D
          Case VSDGCODMODELO="01D": CopyReport "\\Base\\Sistemas\\CtaRec\\Rm_1004" "2"  Tabela "R" 
                                    Sort Tabela On "Saldo do Documento" D                      
          Case VSDGCODMODELO="01E": CopyReport "\\Base\\Sistemas\\CtaRec\\Rm_1000a" "2" Tabela "R" 
          
        EndSwitch
  
  
          
        IMPRIREL(Tabela,"R")
   Else MENSAGEM("N„o existem registros a processar")
EndIf

If IsTable(Tabela)   Then Delete Tabela   EndIf
If IsTable("Answer") Then Delete "Answer" EndIf

EndProc

;-- Chamada principal ----------------------------------------------------------
RM_0080A_Principal()

Release Vars Tabela
Release Procs RM_0080A_Principal, RM_0080A_Seleciona,  RM_0080A_Processa, SelecionaTot_RM0080A, Selecionav_RM0080A