;** Rm_0241  *******************************************************************
;*  Posi‡Æo Conta/Carteira de Vencimentos/Recebimentos                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 08/06/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 22/06/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes novo report
;Ultima Alteracao: 26/06/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes novo report, totalizado por grupovencimento
;Ultima Alteracao: 06/11/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes data pagamento primeiro dia util                        
;Ultima Alteracao: 29/01/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado processo para escolher mais de um tipo de carteira

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona()
ClearAll

switch
  case VSDGOPDADOS="1":
    {Ask} {Dupbaixa}
    Moveto [Numero do Lancamento    ] Check Example "nlanc"
    Moveto [Data do Pagamento       ]       TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
    Do_It!
    ClearAll
    Adiciona_Indice("Answer","Numero do Lancamento")
           
    Tabela2=Cria_Temp(PrivDir())
    Rename "Answer" Tabela2
    
    {Ask} typein Tabela2 Enter 
    Moveto [Numero do Lancamento    ] Example "nlanc"
    {Ask} {Duplic}
    Moveto [Numero do Lancamento    ] Check Example "nlanc"
    Moveto [Codigo da Empresa       ] Check TypeIn "~VSDGEMPRESA.."
    Moveto [Nome Fantasia Empresa   ] Check
    Moveto [Data de Vencimento      ] Check 
    Moveto [Codigo da Conta         ] Check TypeIn "~VSDGCONTA.."
    Moveto [Descricao da Conta      ] Check
    Switch                                                                                                                       
      Case ListaRegra_VSDGTPCART_Ativo  : Moveto [Tipo do Lancamento] Check TypeIn ListaRegra_VSDGTPCART
      Otherwise                         : Moveto [Tipo do Lancamento] Check TypeIn "~VSDGTPCART.."
    EndSwitch  
    Moveto [Descricao do Lancamento ] Check
    Moveto [Valor do Documento      ] Check typein "as \"Valor Original\""
    Do_It!
    ClearAll
    
    Delete Tabela2

  otherwise           : 
    {Ask} {Duplic}
    Moveto [Numero do Lancamento    ] Check 
    Moveto [Codigo da Empresa       ] Check TypeIn "~VSDGEMPRESA.."
    Moveto [Nome Fantasia Empresa   ] Check
    Moveto [Data de Vencimento      ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
    Moveto [Codigo da Conta         ] Check TypeIn "~VSDGCONTA.."
    Moveto [Descricao da Conta      ] Check                    
    Switch                                                                                                                            ;Copiar e Ajsutar
      Case ListaRegra_VSDGTPCART_Ativo  : Moveto [Tipo do Lancamento] Check TypeIn ListaRegra_VSDGTPCART
      Otherwise                         : Moveto [Tipo do Lancamento] Check TypeIn "~VSDGTPCART.."
    EndSwitch
    Moveto [Descricao do Lancamento ] Check
    Moveto [Valor do Documento      ] Check typein "as \"Valor Original\""
    Do_It!
    ClearAll

endswitch

 Adiciona_Campo("Answer","GrupoVencimento(A50), NumeroDeTitulos(N), Valor Recebido($) , Valor Desconto($) , Valor JurosMulta($) ,"+ 
                "Valor TotalRecebido($) , Valor Atual($) , Valor BaixaDevolucao($) , Valor BaixaCancelado($) , Valor RecebidoOutraConta($)")
Adiciona_Indice("Answer","Numero do Lancamento")
       
Tabela=Cria_Temp(PrivDir())
Rename "Answer" Tabela

{Ask} typein Tabela Enter typein "Fast" 
Moveto [NumeroDeTitulos         ] typein "changeto 1"
Moveto [Valor Original          ] typein "_vro"
Moveto [Valor Atual             ] typein "changeto _vro"
Do_It!
ClearAll

{Ask} typein Tabela Enter 
Moveto [Numero do Lancamento    ] Example "nlanc"
{Ask} {Dupbaixa}
Moveto [Numero do Lancamento    ] Check Example "nlanc"
Moveto [Sequencia da Baixa      ] Check 
Moveto [Data do Pagamento       ] Check 
Moveto [Valor do Recebimento    ] Check
Moveto [Valor do Juros          ] Check
Moveto [Valor do Desconto       ] Check
Moveto [Tipo da Baixa           ] Check
Moveto [Codigo da Conta         ] Check
Do_It!                                                             
ClearAll 

If Not IsEmpty("Answer")
   Then 

        Sort "Answer" on "Numero do Lancamento","Data do Pagamento","Sequencia da Baixa"
        ClearAll
        
        NR=NRecords("Answer")

        View Tabela
        CoEdit "Answer"
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, processando "+BARRA_STRING)

          switch
            case VSDGOPDADOS="3":
              dtrefvencto=[Answer->Data de Vencimento]
              dtfimmes=Ultimo_Dia(AlinhM(StrVal(Month([Answer->Data de Vencimento])),2)+ 
                                  AlinhM(StrVal( Year([Answer->Data de Vencimento])),4))
          
              If [Data do Pagamento]>VSDGDTFIM
                 Then If (dtrefvencto=dtfimmes)    Or
                         (dtrefvencto=(dtfimmes-1))
                         Then 
                              Switch
                                Case DiaExt(dtrefvencto)="Sabado" : [Data do Pagamento]=[Data do Pagamento]-2
                                Case DiaExt(dtrefvencto)="Domingo": [Data do Pagamento]=[Data do Pagamento]-2
                              EndSwitch
                      EndIf
              EndIf
          endswitch

          if [Data do Pagamento]>VSDGDTFIM 
             then loop
          endif

          DOC_VR = ([Valor do Recebimento]+[Valor do Desconto])-[Valor do Juros]

          Moveto Tabela
          Moveto [Numero do Lancamento]
          Locate [Answer->Numero do Lancamento]
          If Retval
             Then
                  if [Answer->Data do Pagamento]<VSDGDTINI
                     then 
                          [Valor Original]=[Valor Original]-DOC_VR
                     else
                          switch
                            case [Codigo da Conta]<>[Answer->Codigo da Conta]:
                              [Valor RecebidoOutraConta]=[Valor RecebidoOutraConta]+DOC_VR
                          
                            case [Answer->Tipo da Baixa]="NORMAL":
                              [Valor Recebido          ]=[Valor Recebido          ]+DOC_VR

                            case [Answer->Tipo da Baixa]="CANCELADO":
                              [Valor BaixaCancelado    ]=[Valor BaixaCancelado    ]+DOC_VR

                            case [Answer->Tipo da Baixa]="DEVOLUCAO":
                              [Valor BaixaDevolucao   ]=[Valor BaixaDevolucao     ]+DOC_VR

                          endswitch
                          [Valor Desconto      ]=[Valor Desconto      ]+[Answer->Valor do Desconto   ]
                          [Valor JurosMulta    ]=[Valor JurosMulta    ]+[Answer->Valor do Juros      ]
                          [Valor TotalRecebido ]=[Valor TotalRecebido ]+[Answer->Valor do Recebimento]
                  endif
                  [Valor Atual         ]=[Valor Original      ]-([Valor Recebido      ]+[Valor RecebidoOutraConta]+
                                                                 [Valor BaixaCancelado]+[Valor BaixaDevolucao    ])
          EndIf
          
          Moveto "Answer"
        EndScan  
        Do_It!
        ClearAll
        
EndIf
   
EndProc ;Seleciona()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Processa()
Aguarde("Totalizando dados")

{Ask} typein Tabela Enter 
Moveto [Codigo da Empresa       ] Check 
Moveto [Nome Fantasia Empresa   ] Check
Moveto [Data de Vencimento      ] Check 
Moveto [Codigo da Conta         ] Check 
Moveto [Descricao da Conta      ] Check
Moveto [Tipo do Lancamento      ] Check 
Moveto [Descricao do Lancamento ] Check
Moveto [GrupoVencimento         ] Check
Moveto [NumeroDeTitulos         ]       typein "Calc Sum as \"NumeroDeTitulos\""
Moveto [Valor Original          ]       typein "Calc Sum as \"Valor Original\""
Moveto [Valor Recebido          ]       typein "Calc Sum as \"Valor Recebido\""
Moveto [Valor RecebidoOutraConta]       typein "Calc Sum as \"Valor RecebidoOutraConta\""
Moveto [Valor Desconto          ]       typein "Calc Sum as \"Valor Desconto\""
Moveto [Valor JurosMulta        ]       typein "Calc Sum as \"Valor JurosMulta\""
Moveto [Valor BaixaCancelado    ]       typein "Calc Sum as \"Valor BaixaCancelado\""
Moveto [Valor BaixaDevolucao    ]       typein "Calc Sum as \"Valor BaixaDevolucao\""
Moveto [Valor TotalRecebido     ]       typein "Calc Sum as \"Valor TotalRecebido\""
Moveto [Valor Atual             ]       typein "Calc Sum as \"Valor Atual\""
Do_It!
ClearAll

Delete Tabela

Rename "Answer" Tabela

switch
  case VSDGOPDADOS="1": 
   {Ask} typein Tabela Enter typein "Fast"
   Moveto [Data de Vencimento      ] TypeIn "<~VSDGDTINI"
   Moveto [GrupoVencimento         ] typein "changeto \"0-VENCIMENTO ANTES DE "+strval(VSDGDTINI)+"\""
   Do_It!
   ClearAll

   {Ask} typein Tabela Enter typein "Fast"
   Moveto [Data de Vencimento      ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
   Moveto [GrupoVencimento         ] typein "changeto \"1-VENCIMENTO DE "+strval(VSDGDTINI)+" ATE "+strval(VSDGDTFIM)+"\""
   Do_It!
   ClearAll

   {Ask} typein Tabela Enter typein "Fast"
   Moveto [Data de Vencimento      ] TypeIn ">~VSDGDTFIM"
   Moveto [GrupoVencimento         ] typein "changeto \"2-VENCIMENTO APOS "+strval(VSDGDTFIM)+"\""
   Do_It!
   ClearAll

   {Ask} typein Tabela Enter typein "Fast"
   Moveto [Data de Vencimento      ] typein "changeto blank"
   Do_It!
   ClearAll

    {Ask} typein Tabela Enter 
    Moveto [Codigo da Empresa       ] Check 
    Moveto [Nome Fantasia Empresa   ] Check
    Moveto [Data de Vencimento      ] Check 
    Moveto [Codigo da Conta         ] Check 
    Moveto [Descricao da Conta      ] Check
    Moveto [Tipo do Lancamento      ] Check 
    Moveto [Descricao do Lancamento ] Check
    Moveto [GrupoVencimento         ] Check
    Moveto [NumeroDeTitulos         ]       typein "Calc Sum as \"NumeroDeTitulos\""
    Moveto [Valor Original          ]       typein "Calc Sum as \"Valor Original\""
    Moveto [Valor Recebido          ]       typein "Calc Sum as \"Valor Recebido\""
    Moveto [Valor RecebidoOutraConta]       typein "Calc Sum as \"Valor RecebidoOutraConta\""
    Moveto [Valor Desconto          ]       typein "Calc Sum as \"Valor Desconto\""
    Moveto [Valor JurosMulta        ]       typein "Calc Sum as \"Valor JurosMulta\""
    Moveto [Valor BaixaCancelado    ]       typein "Calc Sum as \"Valor BaixaCancelado\""
    Moveto [Valor BaixaDevolucao    ]       typein "Calc Sum as \"Valor BaixaDevolucao\""
    Moveto [Valor TotalRecebido     ]       typein "Calc Sum as \"Valor TotalRecebido\""
    Moveto [Valor Atual             ]       typein "Calc Sum as \"Valor Atual\""
    Do_It!
    ClearAll
    
    Delete Tabela
    
    Rename "Answer" Tabela

Endswitch

endproc


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] = -60 Or     
          Evento["KeyCode"] = "F2" : If Campo="TG_TPCART"
                                        Then ListaRegra_F2() 
                                     EndIf     
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_TPCART"        : Campo="TG_CONTA"
            Case Campo="TG_OPDADOS"       : Campo="TG_TPCART"
            Case Campo="TG_DTINI"         : Campo="TG_OPDADOS"
            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_CONTA"
                    Case Campo="TG_CONTA"      : Campo="TG_TPCART"
                    Case Campo="TG_TPCART"     : Campo="TG_OPDADOS"
                    Case Campo="TG_OPDADOS"    : Campo="TG_DTINI"
                      VSDGOPDADOS=ControlValue("TG_OPDADOS")
                      switch
                        case VSDGOPDADOS="2": VSDGNOMOPDADOS="Vencto=Pagto"
                                              opdata1="** T¡tulos com Vencimentos      "
                                              opdata2="   e Recebimentos no per¡odo ** "
                                              opdata3=""

                        case VSDGOPDADOS="3": VSDGNOMOPDADOS="Vencto=Pagto1§DiaUtil"
                                              opdata1="** T¡tulos com Vencimentos      "
                                              opdata2="   e Recebimentos no per¡odo    "
                                              opdata3="   at‚ 1§ Dia £til/outro mˆs  **"

                        otherwise           : VSDGOPDADOS="1"
                                              VSDGNOMOPDADOS="Recebto/Vencto"
                                              opdata1="** T¡tulos com Recebimentos no  "
                                              opdata2="   periodo e seus Vencimentos **"
                                              opdata3=""

                      endswitch
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
       MSG_CAMPO=""
  Case Campo="TG_OPDADOS":
       MSG_CAMPO="1=Recebimentos/Vencto  2=Vencto/Pagamento  3=Vencto/Pagamento1§Diaétil"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

VSDGEMPRESA =""
VSDGCONTA   =""
VSDGTPCART  =""
VSDGOPDADOS =""
VSDGDTINI   =BlankDate()
VSDGDTFIM   =BlankDate()

ListaRegra_TGAtivado="[TG_TPCART]"

opdata1=""
opdata2=""
opdata3=""

While True
  ShowDialog "Posi‡Æo Conta/Carteira Vencimentos/Pagamentos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140, -60, "F2"    
   @ 05,12   Height 15 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_NOMEMP" 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 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 04,00 "Tipo de Carteira"  For "TG_TPCART"
    Accept @ 05,04 Width 04 "A1"  Picture "!" Tag "TG_TPCART"  To VSDGTPCART
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCART" To VSDGNOMCART

    Label  @ 06,00 "Op‡Æo de Dados"  For "TG_OPDADOS"
    Accept @ 07,04 Width 04 "A1"  Picture "1,2,3" Tag "TG_OPDADOS"  To VSDGOPDADOS
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMOPDADOS" To VSDGNOMOPDADOS

    Label  @ 08,00 "Per¡odo referente de " For "TG_DTINI"
    Accept @ 09,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,16 "at‚" For "TG_DTFIM"
    Accept @ 09,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    @ 01,35 ?? opdata1
    @ 02,35 ?? opdata2
    @ 03,35 ?? opdata3
                                
    Pushbutton @ 11,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 11,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf

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

  DISPOSITIVO()
  If OK="" Then Loop EndIf

  AGUARDE("Aguarde, Processando Dados")
  
  Seleciona()
  If not IsEmpty(Tabela)
     Then
          Processa()

          switch
            case VSDGOPDADOS="1": 
              CopyReport "\\Base\\Sistemas\\CtaRec\\RM_0241" "2" Tabela "R"
              Impressao_Orientacao="Paisagem"
              IMPRIREL(Tabela,"R")
        
            otherwise           : 
              CopyReport "\\Base\\Sistemas\\CtaRec\\RM_0241" "R" Tabela "R"
              Impressao_Orientacao="Paisagem"
              IMPRIREL(Tabela,"R")

          endswitch
     else MENSAGEM("N„o Existem Registros a Processar !")
  EndIf

  Delete Tabela

EndWhile
ClearAll
Release Vars All
Release Procs All

