;** Ft_Dupli *******************************************************************
;*  Geracao de Titulos a Receber                                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/06/2001 por Anivel Augusto Rodrigues
;Ultima Alteracao: 12/06/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Busca_Lookup
;Ultima Alteracao: 01/07/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem de Valores
;Ultima Alteracao: 07/11/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta Azevedo
;Ultima Alteracao: 19/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS2 MinasLack
;Ultima Alteracao: 03/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS1 Tecnomar
;Ultima Alteracao: 05/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Docto NF/ROM/DUP
;Ultima Alteracao: 07/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indice Inddup1/Duplic
;Ultima Alteracao: 16/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS1/NF2 INBEC
;Ultima Alteracao: 13/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Duplic
;Ultima Alteracao: 06/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPD/NFD Auditoria
;Ultima Alteracao: 02/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPD/NFD Auditoria
;Ultima Alteracao: 19/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carteira G CARTAO CRED/DEB
;Ultima Alteracao: 27/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Cartao
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 19/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VrOriginal/Cartao
;Ultima Alteracao: 24/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Observacao Duplic
;Ultima Alteracao: 22/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF-e                                       
;Ultima Alteracao: 18/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie NFe          
;Ultima Alteracao: 07/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo venctos com instru‡Æo de desconto ModaMil
;Ultima Alteracao: 11/04/2012 por Bruno Carvalho
;Motivo Alteracao: Add Codigo_Cobrador (Representante) se vier em branco do Cadastro 
;Ultima Alteracao: 11/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo venctos com instru‡Æo de desconto ModaMil
;Ultima Alteracao: 18/04/2012 por Bruno Carvalho
;Motivo Alteracao: Add valor em branco para variavel OPCAOC quando nÆo ‚ setada 
;Ultima Alteracao: 25/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Carrega_Parametros de acordo com a empresa
;Ultima Alteracao: 02/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor ir em branco caso troco gerando DupC c/ valor zerado
;Ultima Alteracao: 24/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor ir em branco caso troco gerando DupNF c/ valor zerado
;Ultima Alteracao: 29/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo fazer estorno do titulo se o mesmo ja estiver com conta de banco
;Ultima Alteracao: 25/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo fazer estorno do titulo se o mesmo ja estiver com conta de banco
;Ultima Alteracao: 18/04/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Desdobra_DP() e Atualiza_CR() 
;Ultima Alteracao: 06/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes locate notav + home
;Ultima Alteracao: 10/05/2013 por Bruno Carvalho
;Motivo Alteracao: Add "DupI" [Tipo de Pagamento] e [Sequencia Gerador Nota] 
;Ultima Alteracao: 23/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de tabela abertas no sistema                     
;Ultima Alteracao: 26/09/2013 por Karina Andrade
;Motivo Alteracao: Ajustes bloquear o Estorno do Titulo quando alterado CONTA e CARTEIRA
;Ultima Alteracao: 16/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Pl.Conta Debito/Credito
;Ultima Alteracao: 17/01/2014 por Bruno Carvalho
;Motivo Alteracao: Add rotina p/ buscar plano de conta nas formas de pagamento
;Ultima Alteracao: 24/06/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes quando forma de pagamento for cartÆo de debito "CD"
;Ultima Alteracao: 15/10/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes Obs do titulo quando FP = CT ou CD
;Ultima Alteracao: 27/10/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes na Proc Estorna_Lanctos_DPCR(), pra estornar quando for tipo de pagamento cartao
;Ultima Alteracao: 29/01/2015 por Luis Gustavo
;Motivo Alteracao: Ajustes na Proc Atualiza_CR(), para gravar o Codigo do Cliente quando a FP for Cartao
;Ultima Alteracao: 21/05/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes na Proc Atualiza_CR(), para estornar lan‡amentos quando a FP for Cartao
;Ultima Alteracao: 24/08/2015 por Andrey Fillipe 
;Motivo Alteracao: Altera‡Æo no processo dos Numero do Lan‡amento - Numero_Lancamento()
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes estorno com novo indice   
;Ultima Alteracao: 17/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes procedimentos   
;Ultima Alteracao: 22/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes gera‡Æo de movimentos de CF-e            
;Ultima Alteracao: 01/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desprezar TC utilizado 
;Ultima Alteracao: 12/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Forma PG = NP, nota promissoria sempre gera a receber
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Alterado NUM_LANCTO = PROXLANCTO_NLANC -> Padroniza‡Æo da rotina de Numero_Lancamento()
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Pega_Endereco() e ajustado dados do endere‡o de cobran‡a
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito]
;Ultima Alteracao: 23/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes conta usuario duplic
;Ultima Alteracao: 06/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes plano conta 
;Ultima Alteracao: 29/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes centro de custo - divina panela 
;Ultima Alteracao: 20/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes centro de custo - divina panela 
;Ultima Alteracao: 11/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes parametros                           
;Alterado em     : 17/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dupnf codigo do documento,Tipo do Documento
;Alterado em     : 20/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 

;*******************************************************************************
;* Grava Duplicata                                                             *
;*******************************************************************************
Proc Duplicata_DP()

Moveto "Dupc"
While True
  End
  Down
  [Codigo da Empresa      ] = [NotaC->Codigo da Empresa]
  [Numero do Documento    ] = DP_NUMDOCTO
  [Codigo do Documento    ] = DP_CDDOCTO
  If IsLockRecord()
     Then Del
     Else QuitLoop
  EndIf
EndWhile

Moveto [Codigo da Empresa ]
Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If Not RetVal
   Then Return
EndIf

[Codigo da Conta          ] = CX_CONTA_CAIXA
[Codigo da Empresa        ] = [NotaC->Codigo da Empresa        ]
[Nome Fantasia Empresa    ] = [NotaC->Nome Fantasia Empresa    ]
[Data de Emissao          ] = [NotaC->Data de Emissao          ]
[Tipo                     ] = [NotaC->Tipo                     ]
If Substr([NotaC->Descricao Condpagto],1,6)="CONTRA"
   Then [Condicoes Especiais]=[NotaC->Descricao Condpagto]
EndIf
[Codigo                   ] = [NotaC->Codigo                   ]
[Nome Fantasia EmitDest   ] = [NotaC->Nome Fantasia EmitDest   ]

If APLIC_ORIGEM="FATURA" Or
   APLIC_ORIGEM="BALCAO" Or
   APLIC_ORIGEM="TROCA"
   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                     ]

        Pega_Endereco([FaturaC->Numero da OF])                                                                
        [Endereco de Cobranca     ]=VSD_C_Endereco
        [Bairro de Cobranca       ]=VSD_C_Bairro
        [CEP de Cobranca          ]=VSD_C_CEP
        [Cidade de Cobranca       ]=VSD_C_Cidade
        [UF de Cobranca           ]=VSD_C_UF
EndIf

If APLIC_ORIGEM="NOTA"
   Then
        [Razao Social Fatura      ] = [NotaC->Razao Social           ]
        [Endereco Fatura          ] = [NotaC->Endereco               ]
        [Bairro Fatura            ] = [NotaC->Bairro                 ]
        [CEP Fatura               ] = [NotaC->CEP                    ]
        [Cidade Fatura            ] = [NotaC->Cidade                 ]
        [UF Fatura                ] = [NotaC->UF                     ]
        [CGC Fatura               ] = [NotaC->CGC                    ]
        [IE Fatura                ] = [NotaC->IE                     ]

        GetRecord "\\Sistemas\\Cadastro\\End_cob" [DupC->Codigo] To reg_end_cob   
        If RetVal 
           Then [Endereco de Cobranca    ]=reg_end_cob["Endereco de Cobranca"]
                [Bairro de Cobranca      ]=reg_end_cob["Bairro de Cobranca"]
                [CEP de Cobranca         ]=reg_end_cob["CEP de Cobranca"]
                [Cidade de Cobranca      ]=reg_end_cob["Cidade de Cobranca"]
                [UF de Cobranca          ]=reg_end_cob["UF de Cobranca"]
                Release Vars reg_end_cob
        EndIf
EndIf

[Numero do Pedido         ] = [NotaC->Numero do Pedido         ]
[Numero_Carregamento      ] = [NotaC->Numero_Carregamento      ]
[Codigo da Destinacao     ] = [NotaC->Codigo da Destinacao     ]
[Descricao da Destinacao  ] = [NotaC->Descricao da Destinacao  ]
[Codigo do Representante  ] = [NotaC->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [NotaC->Nome Fantasia Represent  ]
[Comissao do Representante] = [NotaC->Comissao do Representante]
[Pedido Cliente           ] = [NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
If not IsBlank([NotaC->Valor DebitoCredito]) And [NotaC->Valor DebitoCredito]<0
   Then [Valor Nota Fiscal] = [NotaC->Valor DebitoCredito]*-1
   Else [Valor Nota Fiscal] = [NotaC->Valor Nota Fiscal        ]
EndIf

;*** Implementado em 15/10/2004 *****
[Duplicata Emitida  ]=""
[Promissoria Emitida]="S"
[Carne Emitido      ]="S"
[Boleta Emitida     ]="S"

If [NotaC->Forma de Pagamento]="BO"
   Then [Duplicata Emitida  ]="S"
        [Boleta Emitida     ]=""
EndIf
If [NotaC->Forma de Pagamento]="NP"
   Then [Duplicata Emitida  ]="S"
        [Promissoria Emitida]=""
EndIf
If [NotaC->Forma de Pagamento]="CR"
   Then [Duplicata Emitida  ]="S"
        [Carne Emitido      ]=""
EndIf
;************************************

[Cta Receber Atualizado   ]="S"

Switch
   Case APLIC_ORIGEM="FATURA": [Sistema Gerador]="FT"
   Case APLIC_ORIGEM="CFe"   : [Sistema Gerador]="CF"
   Case APLIC_ORIGEM="BALCAO": [Sistema Gerador]="BA"
   Case APLIC_ORIGEM="TROCA" : [Sistema Gerador]="TR"
   Case APLIC_ORIGEM="NOTA"  : [Sistema Gerador]="DI"
EndSwitch
[Tipo Docto Gerador  ]=[NotaC->Codigo do Documento]
[Numero Docto Gerador]=[NotaC->Numero do Documento]

Controle_Dia()
UnLockRecord

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Pega_Endereco(PARAM)
Private PARAM

VSD_E_Endereco=""
VSD_E_Bairro  =""
VSD_E_CEP     =""
VSD_E_Cidade  =""
VSD_E_UF      =""

VSD_C_Endereco=""
VSD_C_Bairro  =""
VSD_C_CEP     =""
VSD_C_Cidade  =""
VSD_C_UF      =""    

GetRecord "\\Sistemas\\Vendas\\FaturaCC" PARAM To REG_ENTCOB
If RetVal
   Then VSD_E_Endereco=REG_ENTCOB["Endereco de Entrega"]
        VSD_E_Bairro  =REG_ENTCOB["Bairro de Entrega"]
        VSD_E_CEP     =REG_ENTCOB["CEP de Entrega"]
        VSD_E_Cidade  =REG_ENTCOB["Cidade de Entrega"]
        VSD_E_UF      =REG_ENTCOB["UF de Entrega"]

        VSD_C_Endereco=REG_ENTCOB["Endereco de Cobranca"]
        VSD_C_Bairro  =REG_ENTCOB["Bairro de Cobranca"]
        VSD_C_CEP     =REG_ENTCOB["CEP de Cobranca"]
        VSD_C_Cidade  =REG_ENTCOB["Cidade de Cobranca"]
        VSD_C_UF      =REG_ENTCOB["UF de Cobranca"] 
EndIf   
 
EndProc ;Pega_Endereco() 


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

Moveto "DupNF"
While True
  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"
  If IsLockRecord()
     Then Del
     Else QuitLoop
  EndIf
EndWhile

Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa  ], DP_NUMDOCTO, DP_SRDOCTO, "01"
If Not RetVal
   Then Return
EndIf

[Codigo do Documento      ] = [NotaC->Codigo do Documento ]
[Tipo do Documento        ] = [NotaC->Tipo do Documento   ]

[Numero da Nota           ] = [NotaC->Numero do Documento ]
[Serie da Nota            ] = [NotaC->Serie do Documento  ]
If not IsBlank([NotaC->Valor DebitoCredito]) And [NotaC->Valor DebitoCredito]<0
   Then [Valor da Nota Fiscal        ] = [NotaC->Valor DebitoCredito]*-1
   Else [Valor da Nota Fiscal        ] = [NotaC->Valor Nota Fiscal  ]
EndIf
UnLockRecord

EndProc

;*******************************************************************************
;* Grava Desdobramentos                                                        *
;*******************************************************************************
Proc Desdobra_DP()
Private DP_ORDEM

If DP_NPARC=1
   Then DP_ORDEM=""
   Else DP_ORDEM=CHR(65+(DP_CONTDP-1))
EndIf

Moveto "DupI"
While True
  End
  Down
  [Codigo da Empresa     ] = [Dupc->Codigo da Empresa  ]
  [Numero do Documento   ] = [Dupc->Numero do Documento]
  [Serie do Documento    ] = [Dupc->Serie do Documento ]
  [Ordem do Documento    ] = DP_ORDEM
  If IsLockRecord()
     Then Del
     Else QuitLoop
  EndIf
EndWhile

Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa  ], DP_NUMDOCTO, DP_SRDOCTO, DP_ORDEM
If Not RetVal
   Then Return
EndIf

[Data Vencimento       ] = [NotaV->Data ]
[Taxa de Juros         ] = PARAM_TXJUROS
[Tipo Taxa de Juros    ] = PARAM_FORMA_TXJUROS          
[Valor da Comissao     ] = [NotaV->Valor da Comissao]
[Forma de Pagamento    ] = [NotaV->Forma de Pagamento]
[Sequencia Gerador Nota] = [NotaV->Sequencia]

If PARAM_FORMA_TXJUROS="A" Then [NDias Taxa de Juros]=365 Endif
If PARAM_FORMA_TXJUROS="M" Then [NDias Taxa de Juros]=30  Endif
If PARAM_FORMA_TXJUROS="D" Then [NDias Taxa de Juros]=1   Endif

FPGTO  =[Forma de Pagamento]
NCARTAO=[NotaV->Nome do Cartao]
If (FPGTO="CT" Or FPGTO="CD" Or FPGTO="CL") And NCARTAO<>""
   Then 
        GetRecord "\\Sistemas\\Vendas\\P_cartao" [DupC->Codigo da Empresa],NCARTAO To reg_p_cartao  
        If RetVal 
           Then NC_COD   = reg_p_cartao["Codigo Destinat"         ]
                NC_NDV   = reg_p_cartao["Numero Dias Vencimento"  ]
                NC_ADM   = reg_p_cartao["Tx_Descto_Administradora"]
                NC_CTA   = reg_p_cartao["Codigo da Conta"         ]

                [Codigo_Sacado  ] = NC_COD
                [Codigo da Conta] = NC_CTA
                [Valor Duplicata] = [NotaV->Valor]-(([NotaV->Valor]*NC_ADM)/100)
               
                If [Data Vencimento]=[DupC->Data de Emissao]
                   Then [Data Vencimento]=[DupC->Data de Emissao]+NC_NDV
                EndIf               
               
                Release Vars FPGTO, NCARTAO, NC_COD, NC_NDV, NC_ADM, NC_CTA, reg_p_cartao   
           Else Mensagem("CartÆo: "+NCARTAO+", Paramˆtros nÆo cadastrado !")
        EndIf
   Else [Codigo_Sacado  ] = [DupC->Codigo         ]
        [Codigo da Conta] = [DupC->Codigo da Conta]
        [Valor Duplicata] = [NotaV->Valor         ]  
EndIf

If [NotaV->Duplicata_VrOriginal]>0
   Then [Valor Duplicata        ]=[NotaV->Duplicata_VrOriginal   ]
        [Valor do Desconto      ]=[NotaV->Duplicata_VrDesconto   ]
        [Data Limite Desconto   ]=[NotaV->Duplicata_DtLimDesconto]
EndIf
UnLockRecord

EndProc

;*******************************************************************************
;* Elimina Lancamentos existentes ou regerados                                 *
;*******************************************************************************
Proc Estorna_DP()

NF_EXISTE       =false
DP_NUMERO_GERADO=""

Moveto "DupNF"
Moveto [Numero da Nota]
Locate IndexOrder by "idupnf10" [NotaC->Numero do Documento],[NotaC->Serie do Documento],[NotaC->Codigo da Empresa],[NotaC->Codigo do Documento]
If RetVal
   Then NF_EXISTE       =true
        DP_NUMERO_GERADO=[Numero do Documento]

        DP_NUMDOCTO=[Numero do Documento]
        DP_SRDOCTO =[Serie do Documento ]
        
   Else 
        if PARAM_DUPLIC_NUMERO="D" ;**** Diferente ****
           Then DP_NUMDOCTO=""
                DP_SRDOCTO =""
                Return True
           else DP_NUMDOCTO=[NotaC->Numero do Documento]
                DP_SRDOCTO =[NotaC->Serie do Documento ]
        EndIf
EndIf

if Not CANCELA_DUP
   Then
        Moveto "DupI"
        Moveto [Codigo da Empresa]
        Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
        If RetVal
           Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
                      [Numero do Documento]=DP_NUMDOCTO and
                      [Serie do Documento ]=DP_SRDOCTO
        
                  Del
                  If EOT() Then QuitLoop EndIf
                EndWhile
        EndIf
        
        Moveto "DupNF"
        Moveto [Codigo da Empresa]
        Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
        If RetVal
           Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
                      [Numero do Documento]=DP_NUMDOCTO and
                      [Serie do Documento ]=DP_SRDOCTO
        
                  Del
                  If EOT() Then QuitLoop EndIf
                EndWhile
        EndIf
endif

Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then if Not CANCELA_DUP
           then del
           else For Icc From 1 to 3
                  If Not IsLockRecord()
                     Then [Situacao]="C"
                          UnLockRecord
                          QuitLoop
                  EndIf
                EndFor
        endif
EndIf

Return True
EndProc



;*******************************************************************************
;* Exportacao p/ Contas a Receber                                              *
;*******************************************************************************
Proc Atualiza_CR()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO_ORDEM, CR_LANC, CR_NDIAS, CR_DATA,
        FPGTO, NCARTAO, NC_COD, NC_NDV, NC_ADM, NC_CTA, VRLANC, PLCONTA, reg_tppagto,   
        contacaixa                 
        
CHV_EMPRESA=[DupC->Codigo da Empresa]
CHV_TPDOCTO=[DupC->Codigo do Documento]
If [DupI->Ordem do Documento]<>""
   Then CHV_NUMERO_ORDEM=[DupI->Numero do Documento]+"/"+[DupI->Ordem do Documento]
   Else CHV_NUMERO_ORDEM=[DupI->Numero do Documento]
EndIf

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

contacaixa=PegaContaCaixaUsuario()
[Codigo da Conta         ]=contacaixa
[Codigo da Empresa       ]=[DupC->Codigo da Empresa       ]
[Nome Fantasia Empresa   ]=[DupC->Nome Fantasia Empresa   ]
[Codigo do Documento     ]=[DupC->Codigo do Documento     ]
[Numero do Documento     ]=CHV_NUMERO_ORDEM
[Codigo do Destinatario  ]=[DupI->Codigo_Sacado           ]
[Nome Fantasia EmitDest  ]=[DupC->Nome Fantasia EmitDest  ]
[Data de Emissao         ]=[DupC->Data de Emissao         ]
[Data de Vencimento      ]=[DupI->Data Vencimento         ]
[Data a Receber          ]=[DupI->Data Vencimento         ]

Switch
   Case APLIC_ORIGEM="FATURA": [Sistema Gerador]="FT"
   Case APLIC_ORIGEM="CFe"   : [Sistema Gerador]="CF"
   Case APLIC_ORIGEM="BALCAO": [Sistema Gerador]="BA"
   Case APLIC_ORIGEM="TROCA" : [Sistema Gerador]="TR"
   Case APLIC_ORIGEM="NOTA"  : [Sistema Gerador]="DI"
EndSwitch
[Tipo Docto Gerador  ]=[NotaC->Codigo do Documento]
[Numero Docto Gerador]=[NotaC->Numero do Documento]
[Sequencia Gerador   ]=[NotaV->Sequencia]
[Documento Referente ]=[Tipo Docto Gerador]+"/"+[Numero Docto Gerador]+"-"+[Sequencia Gerador]

While True
  CR_NDIAS=0
  If Dow([Data a Receber])="Sat"
     Then CR_NDIAS=2
     Else If Dow([Data a Receber])="Sun"
             Then CR_NDIAS=1
          EndIf
  EndIf
  CR_DATA = [Data a Receber]
  Moveto "\\Sistemas\\Cadastro\\Feriados"
  Moveto [Data do Feriado]
  Locate CR_DATA
  If Retval
     Then If [Dias a Receber]>0
             Then CR_NDIAS=[Dias a Receber]
          EndIf
          UnLockRecord
  EndIf
  Moveto "\\Sistemas\\CtaRec\\Duplic"
  [Data a Receber]=[Data a Receber]+CR_NDIAS
  If CR_NDIAS=0
     Then QuitLoop
  EndIf
EndWhile

[Valor do Documento      ]=[DupI->Valor Duplicata         ]
[Saldo do Documento      ]=[DupI->Valor Duplicata         ]
[Valor do Desconto       ]=[DupI->Valor do Desconto       ]
[Data Limite Desconto    ]=[DupI->Data Limite Desconto    ]
[Taxa de Juros           ]=[DupI->Taxa de Juros           ]
[Tipo Taxa de Juros      ]=[DupI->Tipo Taxa de Juros      ]
[NDias Taxa de Juros     ]=[DupI->NDias Taxa de Juros     ]
[Tipo do Pagamento       ]=[DupI->Forma de Pagamento      ]
[Codigo do Representante ]=[DupC->Codigo do Representante ]
[Nome Fantasia Represent ]=[DupC->Nome Fantasia Represent ]
[Observacoes             ]=[NotaC->Tipo do Documento]+"/"+
                           [NotaC->Numero do Documento]+
                           " * "+[NotaC->Descricao da Destinacao]
[Valor da Comissao       ]=[DupI->Valor da Comissao       ]
[Saldo da Comissao       ]=[DupI->Valor da Comissao       ]
[Data de Entrada         ]=Today()
[Numero_Carregamento_Orig]=[NotaC->Numero_Carregamento    ]

FPGTO  =[Tipo do Pagamento]
NCARTAO=[NotaV->Nome do Cartao]
If (FPGTO="CT" Or FPGTO="CD" Or FPGTO="CL") And NCARTAO<>""
   Then 
        GetRecord "\\Sistemas\\Vendas\\P_cartao" [DupC->Codigo da Empresa],NCARTAO To reg_p_cartao  
        If RetVal 
           Then NC_COD   = reg_p_cartao["Codigo Destinat"         ]
                NC_NDV   = reg_p_cartao["Numero Dias Vencimento"  ]
                NC_ADM   = reg_p_cartao["Tx_Descto_Administradora"]
                NC_CTA   = reg_p_cartao["Codigo da Conta"         ]

                [Observacoes             ]=[NotaC->Codigo]+" "+[NotaC->Razao Social]+" * "+
                                           [NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]+
                                           ", Vr: "+LTrim(Format("W10.2,EIC",[NotaV->Valor])) ; mostra valor original do titulo, sem taxa administ.
                                           
                [Codigo do Destinatario  ]=NC_COD
                [Codigo da Conta         ]=NC_CTA
                [Codigo da Empresa       ]=[DupC->Codigo da Empresa]
                [Codigo do Representante ]=[DupC->Codigo do Representante ]
                [Valor do Documento      ]=[Valor do Documento];-(([Valor do Documento]*NC_ADM)/100) ;*** Ajsutado na Rotina de Desdobramento 
                [Saldo do Documento      ]=[Valor do Documento]


                If [Data de Vencimento]=[Data de Emissao]
                   Then [Data de Vencimento]=[Data de Emissao]+NC_NDV
                        [Data a Receber    ]=[Data de Vencimento]
                EndIf

                Release Vars FPGTO, NCARTAO, NC_COD, NC_NDV, NC_ADM, NC_CTA, reg_p_cartao   
           Else Mensagem("CartÆo: "+NCARTAO+", Paramˆtros nÆo cadastrado !")
        EndIf
EndIf

If [Tipo do Pagamento]="CT" Or
   [Tipo do Pagamento]="CD" Or
   [Tipo do Pagamento]="CL"
   Then [Tipo do Lancamento      ]="G"
        [Descricao do Lancamento ]="CARTAO CRED/DEB"
   Else [Tipo do Lancamento      ]="E"
        [Descricao do Lancamento ]="CARTEIRA"
EndIf

;-- Centro de Custo ---------------------------------------------------------------------------
switch
  case sys_codigo_cliente="0294" : 
     If search("DUP",[Tipo do Documento])>0 or
        search("CUP",[Tipo do Documento])>0    
        then [Codigo CCusto]="001.001"
     endif

  otherwise:
  
endswitch

;-- Codigo do Cobrador do Cadastro de Representantes ------------------------------------------
If [Codigo do Cobrador]=""
   Then Moveto [Codigo do Representante]
        Busca_Lookup("Codigo do Representante",[\Sistemas\Ctarec\Duplic->Codigo do Representante],"")
        [Codigo do Cobrador   ]=REG_BUSCA_LOOKUP["Codigo_Cobrador"]
        [Descricao do Cobrador]=REG_BUSCA_LOOKUP["Descricao_Cobrador"]
EndIf   

;-- Plano de Conta ----------------------------------------------------------------------------
PLCONTA = "" 
GetRecord "\\Sistemas\\Cadastro\\Tppagto" [Tipo do Pagamento] To reg_tppagto        
If RetVal 
   Then PLCONTA = reg_tppagto["Plano de Conta"]
EndIf   

Switch           
  Case PLCONTA <> "****" And PLCONTA <> ""                               : [Codigo Plano_Conta]=PLCONTA 
  Case PARAM_PLANO_CONTA_DEBITO<>""  And [DupI->Forma de Pagamento]="CD" : [Codigo Plano_Conta]=PARAM_PLANO_CONTA_DEBITO
  Case PARAM_PLANO_CONTA_CREDITO<>"" And [DupI->Forma de Pagamento]="CT" : [Codigo Plano_Conta]=PARAM_PLANO_CONTA_CREDITO 
  Case PARAM_PLANO_CONTA_CREDITO<>"" And [DupI->Forma de Pagamento]="CL" : [Codigo Plano_Conta]=PARAM_PLANO_CONTA_CREDITO 
  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
;----------------------------------------------------------------------------------------------

Controle_Dia()
UnLockRecord

EndProc

;*******************************************************************************
;* Elimina Lancamentos existentes ou regerados                                 *
;*******************************************************************************
Proc Estorna_CR()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO, ci, icc, DP_NUMDOCTO, DP_SRDOCTO

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\\Ctarec\\Duplic"
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "Inddup30" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
  If RetVal
     Then While [Codigo da Empresa   ]=CHV_EMPRESA and
                [Tipo Docto Gerador  ]=CHV_TPDOCTO and
                [Numero Docto Gerador]=CHV_NUMERO  and
                [Sequencia Gerador   ]>""           
     
            If Format("W11.2,EIC",[Saldo do Documento])<>Format("W11.2,EIC",[Valor do Documento])
               Then MSG="O estorno ou atualiza‡„o no Contas a Receber,//"
                    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 Receber !"
                    Mensagem(MSG)
                    Return False
            EndIf

            GetRecord "\\Sistemas\\Cadastro\\Tppagto" [Codigo da Conta] To reg_conta   
            If RetVal 
               Then If reg_conta["Tipo da Conta"]="C" And [Tipo do Pagamento]<>"CT" And [Tipo do Pagamento]<>"CD"  And [Tipo do Pagamento]<>"CL"
                       Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                            MSG=MSG+"referente a este documento: "+
                                    CHV_EMPRESA+" / "+
                                    CHV_TPDOCTO+" / "+
                                    CHV_NUMERO +"//"
                            MSG=MSG+"n„o ser  efetuado, pois a CONTA do T¡tulo j  esta em Banco ! // //"
                            MSG=MSG+"Verificar o documento "+[Codigo da Empresa]+" / "+[Codigo do Documento]+" / "+[Numero do Documento]+" no Contas a Receber !"
                            Mensagem(MSG)
                            Return False
                    EndIf   
            endif    

            If [Tipo do Lancamento]<>"E" And [Tipo do Lancamento]<>"G" 
               Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                    MSG=MSG+"referente a este documento: "+
                            CHV_EMPRESA+" / "+
                            CHV_TPDOCTO+" / "+
                            CHV_NUMERO +"//"
                    MSG=MSG+"n„o ser  efetuado, pois a CARTEIRA do T¡tulo j  foi alterada ! // //"
                    MSG=MSG+"Verificar o documento "+[Codigo da Empresa]+" / "+[Codigo do Documento]+" / "+[Numero do Documento]+" no Contas a Receber !"
                    Mensagem(MSG)
                    Return False
            EndIf
               
            if ci=2 
               then del 
               else Skip
            endif
            If EOT() Then QuitLoop EndIf
            Locate Next IndexOrder by "Inddup30" 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 RECEBER "+Opcaoc+" "+NOTAFISC)
               Estorno_CR_Ok=Estorna_CR()
               Estorna_DP()
               
          Case OP_MOVDP="ATUALIZAR" and not CANCELA_DUP:
               Aguarde("Atualizando CONTAS A RECEBER "+Opcaoc+" "+NOTAFISC)
               DP_NPARC=0 ; numero de parcelas

               Switch
				         Case SubStr([NotaC->Codigo do Documento],1,3)="NFE":
				              DP_CDDOCTO=PARAM_DOC_DUPNFEN
				              DP_SRDOCTO=PARAM_SER_DUPNFEN
				
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NSE":
                      TPDOCTO=PARAM_DOC_DUPNSEN
                      SERDUP =PARAM_SER_DUPNSEN
				
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NF2":
                      DP_CDDOCTO="DPS1" ;PadrÆo
                      DP_SRDOCTO="DPS1"
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NFD":
                      DP_CDDOCTO="DPD" ;PadrÆo
                      DP_SRDOCTO="DPD"
                 Case SubStr([NotaC->Tipo do Documento],1,2)="NF":
                      DP_CDDOCTO="DUP" ;PadrÆo
                      DP_SRDOCTO=""
        
                      DP_CDDOCTO=PARAM_DOC_DUP
                      DP_SRDOCTO=PARAM_SER_DUP
                 OtherWise:
                      DP_CDDOCTO=[NotaC->Codigo do Documento]
                      DP_SRDOCTO=[NotaC->Serie do Documento ]
               EndSwitch
       
               While DP_GERA_DUPLICATA="S"
                 If PARAM_DUPLIC_NUMERO="D"    ;**** Diferente ****
                    Then
                         Procura_Proximo_Numero=True
                         If Not IsBlank(DP_NUMERO_GERADO)
                            Then DP_NUMDOCTO=DP_NUMERO_GERADO
                                 Procura_Proximo_Numero=False
                         EndIf

                         If Procura_Proximo_Numero
                            Then Moveto "NumeroDP"
                                 Moveto [Codigo da Empresa]
                                 Locate [NotaC->Codigo da Empresa], DP_CDDOCTO
                                 If Not RetVal
                                    Then Mensagem("Controle da numera‡„o p/ duplicatas ["+DP_CDDOCTO+"] n„o informado para Empresa !")
                                         DP_GERA_DUPLICATA="N"
                                         Loop
                                 EndIf
                                 While True
                                   If Not IsLockRecord()
                                      Then QuitLoop
                                   EndIf
                                 EndWhile
                                 DP_NUMDOCTO=AlinhM(StrVal([Proximo Numero]),6)
                         EndIf

                    Else DP_NUMDOCTO=NOTAFISC  ;**** Igual****
                 EndIf

                 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 
                                    If PARAM_TITCRED="T"         And
                                       [Forma de Pagamento]="TC" And
                                       [Numero do Cartao  ]<>"" 
                                       then
                                            ;nÆo soma, utilizando TC selecionado
                                       else 
                                            DP_NPARC=DP_NPARC+1     
                                    endif
                           endif
                                   
                           Skip
                           If EOT() Then QuitLoop EndIf
                         EndWhile
                 EndIf
        
                 if DP_NPARC>0
                    then
                         PARAM_PLANO_CONTA_AVISTA =""
                         PARAM_PLANO_CONTA_APRAZO =""
                         PARAM_PLANO_CONTA_DEBITO =""
                         PARAM_PLANO_CONTA_CREDITO=""
                         GetRecord "\\Sistemas\\Ctarec\\P_duplic" [NotaC->codigo da empresa] To reg_p_duplic   
                         If RetVal 
                            then PARAM_PLANO_CONTA_AVISTA =reg_p_duplic["Plano_Conta_AVista"  ]
                                 PARAM_PLANO_CONTA_APRAZO =reg_p_duplic["Plano_Conta_APrazo"  ]
                                 PARAM_PLANO_CONTA_DEBITO =reg_p_duplic["Plano_Conta_Debito"  ]
                                 PARAM_PLANO_CONTA_CREDITO=reg_p_duplic["Plano_Conta_Credito" ]
                         endif   
        
                         Duplicata_DP()
                         Nota_DP()
        
                         Moveto "NotaV"
                         Home
                         Moveto [Codigo da Empresa]
                         Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                         If RetVal
                            Then DP_CONTDP=0
                                 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 
                                           If PARAM_TITCRED="T"         And
                                              [Forma de Pagamento]="TC" And
                                              [Numero do Cartao  ]<>"" 
                                              then
                                                   ;nÆo soma, utilizando TC selecionado
                                              else 
                                                   DP_CONTDP=DP_CONTDP+1
                                                   Desdobra_DP()
                                                   Atualiza_CR()
                                           endif
                                   endif
                                   
                                   Moveto "NotaV"
                                   Skip
                                   If EOT() Then QuitLoop EndIf
                                 EndWhile
                         EndIf
        
                         If PARAM_DUPLIC_NUMERO="D" And          ;**** Diferente ****
                            Procura_Proximo_Numero
                            Then Moveto "NumeroDP"
                                 If not NF_EXISTE
                                    Then [Proximo Numero]=[Proximo Numero]+1
                                 EndIf
                                 UnLockRecord
                         EndIf
                 endif
                         
                 QuitLoop
               EndWhile
        EndSwitch
endif

Release Vars dp_numdocto, dp_srdocto, dp_cddocto, dp_nparc, dp_contdp,
             Procura_Proximo_Numero, 
             PARAM_PLANO_CONTA_AVISTA, 
             PARAM_PLANO_CONTA_APRAZO, 
             PARAM_PLANO_CONTA_DEBITO, 
             PARAM_PLANO_CONTA_CREDITO
              
Release Procs Atualiza_CR, Estorna_CR, Desdobra_DP, Nota_DP, Duplicata_DP, Estorna_DP
