;** Ft_Titul *******************************************************************
;*  Geracao de Titulos a Pagar                                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/11/2015 por Anivel Augusto Rodrigues
;Ultima Alteracao: 17/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes procedimentos              
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_titulo() em Carrega_Parametros()
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 25/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes plano de conta compra sucata Pralum         
;Ultima Alteracao: 19/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes entradas/compras a vista NP gerar a pagar  
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 12/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes plano conta 0395   
;Ultima Alteracao: 13/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modo ordem da duplicata numero/letra
;Ultima Alteracao: 20/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modo ordem da duplicata numero/letra pasta vendas
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 06/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: C¢pia dos ajustes [Tipo do Pagamento]="TC" p/ [Tipo do Pagamento]="RP" 

;*******************************************************************************
;* Exportacao p/ Contas a Pagar                                                *
;*******************************************************************************
Proc Atualiza_CP()
Private CHV_NUMERO_ORDEM, CP_LANC, CP_NDIAS, CP_DATA,   
        reg_tppagto, 
        PLCONTA
                         
switch
  case sys_modo_ordemdup="N":
    CHV_NUMERO_ORDEM=[\sistemas\vendas\NotaC->Numero do Documento]+"/"+strval(DP_CONTDP)
  
  otherwise                 :
    If DP_NPARC>1
       Then CHV_NUMERO_ORDEM=[\sistemas\vendas\NotaC->Numero do Documento]+"/"+CHR(65+(DP_CONTDP-1))
       Else CHV_NUMERO_ORDEM=[\sistemas\vendas\NotaC->Numero do Documento]
    EndIf

endswitch


PLCONTA = ""
GetRecord "\\Sistemas\\Cadastro\\Tppagto" [NotaV->Forma de Pagamento] To reg_tppagto 
If RetVal 
   Then PLCONTA = reg_tppagto["Plano de Conta"]
EndIf

Moveto "\\Sistemas\\CtaPag\\Titulos"
While True
  End
  Moveto [Numero do Lancamento]
  If Numero_Lancamento("Interno","Locked_Down")
     Then CP_LANC = PROXLANCTO_NLANC
          Release Vars PROXLANCTO_NLANC
          quitloop
  EndIf    
EndWhile

;While True
;  End
;  Moveto [Numero do Lancamento]
;  If Numero_Lancamento("Interno","")
;     Then CP_LANC = PROXLANCTO_NLANC
;          Release Vars PROXLANCTO_NLANC
;  EndIf
;  Locate CP_LANC
;  If Not Retval
;     Then End Down
;          [Numero do Lancamento ]=CP_LANC
;          If Not IsLockRecord()
;             Then QuitLoop
;             Else Del
;          EndIf
;  EndIf
;EndWhile

[Codigo da Conta         ]=CX_CONTA_CAIXA
[Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
[Nome Fantasia Empresa   ]=[NotaC->Nome Fantasia Empresa   ]
[Codigo do Documento     ]=[NotaC->Codigo do Documento     ]
[Numero do Documento     ]=CHV_NUMERO_ORDEM
[Codigo do Emitente      ]=[NotaC->Codigo                  ]
[Nome Fantasia EmitDest  ]=[NotaC->Nome Fantasia EmitDest  ]
[Data de Emissao         ]=[NotaC->Data de Emissao         ]
[Data de Vencimento      ]=[NotaV->Data                    ]
[Data a Pagar            ]=[NotaV->Data                    ]
[Data Competencia        ]=[NotaC->Data de Emissao         ]

Switch
   Case APLIC_ORIGEM="FATURA": [Sistema Gerador]="FT"
   Case APLIC_ORIGEM="BALCAO": [Sistema Gerador]="BA"
   Case APLIC_ORIGEM="TROCA" : [Sistema Gerador]="TR"
   Case APLIC_ORIGEM="NOTA"  : [Sistema Gerador]="DI"
EndSwitch
[Lancamento Gerador  ]=[NotaC->Numero do Documento]
[Sequencia Gerador   ]=NumVal([NotaV->Sequencia])
[Documento Referente ]=[NOTAC->Tipo do Documento]+"/"+[Lancamento Gerador]+"-"+StrVal([Sequencia Gerador])

While True
  CP_NDIAS=0
  If Dow([Data a Pagar])="Sat"
     Then CP_NDIAS=2
     Else If Dow([Data a Pagar])="Sun"
             Then CP_NDIAS=1
          EndIf
  EndIf
  CP_DATA = [Data a Pagar]
  Moveto "\\Sistemas\\Cadastro\\Feriados"
  Moveto [Data do Feriado]
  Locate CP_DATA
  If Retval
     Then If [Dias a Pagar]>0
             Then CP_NDIAS=[Dias a Pagar]
          EndIf
          UnLockRecord
  EndIf
  Moveto "\\Sistemas\\CtaPag\\Titulos"
  [Data a Pagar]=[Data a Pagar]+CP_NDIAS
  If CP_NDIAS=0
     Then QuitLoop
  EndIf
EndWhile

[Valor do Documento      ]=[NotaV->Valor                   ]
[Saldo do Documento      ]=[NotaV->Valor                   ]
[Observacoes             ]=[NotaC->Tipo do Documento]+"/"+
                           [NotaC->Numero do Documento]+
                           " * "+[NotaC->Descricao da Destinacao]

Switch           
  Case PLCONTA<>""                               : [Codigo Plano_Conta]=PLCONTA 
  Case ([Data de Emissao]=[Data de Vencimento]) Or
   (([Data de Emissao]+1)=[Data de Vencimento])  : [Codigo Plano_Conta]=PARAM_PLANO_CONTA_AVISTA  
  OtherWise                                      : [Codigo Plano_Conta]=PARAM_PLANO_CONTA_APRAZO
EndSwitch

[Tipo do Pagamento       ]=[NotaV->Forma de Pagamento      ]
[Tipo do Lancamento      ]="C"
[Descricao do Lancamento ]="FORNECEDORES"


If [Tipo do Pagamento]="TC" Or [Tipo do Pagamento]="RP" ; TITULO DE CREDITO
   Then
        [Tipo do Lancamento      ]="E"
        [Descricao do Lancamento ]="OUTROS PAGAMENTOS"
ENdIf   

Switch
   Case sys_Codigo_Cliente="0377":
     if [NotaC->Tipo Movimento Estoque]="E" and
        Search("COMPRA",[NotaC->Descricao da Destinacao])>0 and
        Search("SUCATA",[NotaC->Descricao da Destinacao])>0     
        then [Codigo Plano_Conta      ]="2.2.01.01.004"
     endif   
   Case sys_Codigo_Cliente="0395":
     if [NotaC->Tipo Movimento Estoque]="E" and
        Search("COMPRA",[NotaC->Descricao da Destinacao])>0 and
        Search("SUCATA",[NotaC->Descricao da Destinacao])>0     
        then [Codigo Plano_Conta      ]="2.2.01.01.004"
     endif   
EndSwitch

Controle_Dia()

UnLockRecord

EndProc

;*******************************************************************************
;* Elimina Lancamentos existentes ou regerados                                 *
;*******************************************************************************
Proc Estorna_CP()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO, ci

CHV_EMPRESA =[NotaC->Codigo da Empresa]
CHV_TPDOCTO =[NotaC->Codigo do Documento]
CHV_NUMERO  =[NotaC->Numero do Documento]
  
For ci From 1 to 2

  Moveto "\\Sistemas\\CtaPag\\Titulos"
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "Indtit30" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
  If RetVal
     Then While [Codigo da Empresa  ]=CHV_EMPRESA and
                [Codigo do Documento]=CHV_TPDOCTO and
                [Lancamento Gerador ]=CHV_NUMERO  and
                [Sequencia Gerador  ]>0
     
            If Format("W11.2,EIC",[Saldo do Documento])<>Format("W11.2,EIC",[Valor do Documento])
               Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Pagar,//"
                    MSG=MSG+"referente a este documento: "+
                        CHV_EMPRESA+" / "+
                        CHV_TPDOCTO+" / "+
                        CHV_NUMERO +"//"
                    MSG=MSG+"n„o foi efetuado, pois j  teve baixa(s) ! //"
                    MSG=MSG+"Verificar o documento "+[Codigo da Empresa]+" / "+[Codigo do Documento]+" / "+[Numero do Documento]+" no Contas a Pagar!"
                    Mensagem(MSG)
                    Return False
            EndIf
            
            if ci=2 
               then del 
               else Skip
            endif
            If EOT() Then QuitLoop EndIf
            Locate Next IndexOrder by "Indtit30" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
            
          EndWhile
  EndIf
EndFor

Return True
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(Opcaoc) Then Opcaoc="" EndIf

Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate EMPRESAFISC, NOTAFISC, SERIEFISC
if retval
   then
        Switch
          Case OP_MOVDP="ESTORNAR" or CANCELA_DUP:
               Aguarde("Efetuando Estorno CONTAS A PAGAR "+Opcaoc+" "+NOTAFISC)
               Estorno_CP_Ok=Estorna_CP() 
               
          Case OP_MOVDP="ATUALIZAR" or not CANCELA_DUP:
               Aguarde("Atualizando CONTAS A PAGAR "+Opcaoc+" "+NOTAFISC)

               DP_NPARC=0 ; numero de parcelas
               getsys_modo_ordemdup()
                              
               Moveto "NotaV"
               Moveto [Codigo da Empresa]
               Locate EMPRESAFISC, NOTAFISC, SERIEFISC
               If RetVal
                  Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
                             [Numero do Documento]=[NotaC->Numero do Documento] and
                             [Serie do Documento ]=[NotaC->Serie do Documento ]
                             
                         If [Data]>[NotaC->Data de Emissao] Or PARAM_AVISTADUPLIC="S" or
                            [Forma de Pagamento]="CD" or [Forma de Pagamento]="NP"
                            then DP_NPARC=DP_NPARC+1     
                         endif
                                 
                         Skip
                         If EOT() Then QuitLoop EndIf
                       EndWhile
               EndIf
        
               if DP_NPARC>0
                  then
                       PARAM_PLANO_CONTA_AVISTA =""
                       PARAM_PLANO_CONTA_APRAZO =""
                       If getp_titulo([NotaC->Codigo da Empresa])
                          Then PARAM_PLANO_CONTA_AVISTA =regp_titulo["Plano_Conta_AVista"]
                               PARAM_PLANO_CONTA_APRAZO =regp_titulo["Plano_Conta_APrazo"]
                       EndIf
                       
                       Moveto "NotaV"
                       Home
                       Moveto [Codigo da Empresa]
                       Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                       If RetVal
                          Then 
                               DP_CONTDP=0
                               Moveto "NotaV"
                               While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
                                     [Numero do Documento]=[NotaC->Numero do Documento] and
                                     [Serie do Documento ]=[NotaC->Serie do Documento ]
                                     
                                 If [Data]>[NotaC->Data de Emissao] Or PARAM_AVISTADUPLIC="S" or
                                    [Forma de Pagamento]="CD" or [Forma de Pagamento]="NP"
                                    then DP_CONTDP=DP_CONTDP+1
                                         Atualiza_CP()
                                 endif
                                 
                                 Moveto "NotaV"
                                 Skip
                                 If EOT() Then QuitLoop EndIf
                               EndWhile
                       EndIf
               EndIf
        EndSwitch
endif

Release Vars dp_nparc, dp_contdp,
             PARAM_PLANO_CONTA_AVISTA, PARAM_PLANO_CONTA_APRAZO
             
Release Procs Atualiza_CP, Estorna_CP

