;** FT_DEVOL *******************************************************************
;*  Rotina de Devolucoes                                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 18/05/2001 por Anivel Augusto Rodrigues
;Ultima Alteracao: 19/02/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Quantidade Convertida
;Ultima Alteracao: 03/09/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Localizar Nota
;Ultima Alteracao: 03/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Comissao do Representante
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Pecas Brasil Textil            
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 18/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 04/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dados notaec                            
;Ultima Alteracao: 23/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de tabela abertas no sistema                     
;Ultima Alteracao: 31/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes criar notaec                     
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 10/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao controle_Dia() NotaEC                   
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valor Devolucao
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 18/09/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TROCA documento referenciado e incluir itens devolu‡Æo de venda
;Ultima Alteracao: 09/04/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DEVOLUCOES()
;Ultima Alteracao: 09/04/2021 por Bruno Carvalhos
;Motivo Alteracao: Ajustes ao localizar a nota de entrada a partir do indice "NotaEc04" 

;*******************************************************************************
;* Atualizacao Devolucoes                                                      *
;*******************************************************************************
Proc DEVOLUCOES()
Private NUMEROL, NE_ENCONTRADA, MES_EST, ANO_EST, CUSTO
If Search("TROCA",[Descricao da Destinacao])=0
   Then Return
EndIf
;;;If [FaturaC->Tipo]<>"C"
;;;   Then Return
;;;EndIf
If [FaturaC->Tipo Movimento Estoque]<>"S"
   Then Return
EndIf
If [Codigo da Empresa]=[Codigo]
   Then Return
EndIf

{TableAdd} {\\Sistemas\\Estoque\\NotaEC}
{TableAdd} {\\Sistemas\\Estoque\\NotaEI}
{TableAdd} {\\Sistemas\\Estoque\\NotaER}

;---- Processo substituido em 12.04.2021 pela chave secund ria "NotaEC04" ------ 
;Moveto "\\Sistemas\\Estoque\\NotaEC"
;Moveto [Codigo]
;Locate IndexOrder By "NotaEC01" [FaturaC->Codigo],
;       NOTAFISC, SERIEFISC
;If RetVal
;   then If [Codigo da Empresa]=[FaturaC->Codigo da Empresa]
;           Then NE_ENCONTRADA=True
;           Else NE_ENCONTRADA=False
;        EndIf
;   Else NE_ENCONTRADA=False
;
;        Moveto [Numero do Documento]
;        Locate NOTAFISC
;        If RetVal
;           Then If [Codigo do Documento]=CODFISC And
;                   [Codigo da Empresa  ]=[FaturaC->Codigo da Empresa] And
;                   [Tipo de Operacao   ]="D"
;                   Then NE_ENCONTRADA=True
;                EndIf
;        EndIf
;EndIf          

NE_ENCONTRADA=False
Moveto "\\Sistemas\\Estoque\\NotaEC"
Moveto [Codigo da Empresa]
Locate IndexOrder By "NotaEC04" [FaturaC->Codigo da Empresa],"NF",CODFISC,NOTAFISC
If Retval
   Then NE_ENCONTRADA=True
EndIf
If NE_ENCONTRADA
   Then NUMEROL=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]

        Moveto "\\Sistemas\\Estoque\\NotaEI"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While True
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\NotaEC->Data de Entrada])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\NotaEC->Data de Entrada]))

                  While True
                    Moveto "\\Sistemas\\Estoque\\SdEstq"
                    Moveto [Codigo da Empresa]
                    Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa],
                           [\Sistemas\Estoque\NotaEI->Codigo do Item], ANO_EST, MES_EST
                    If RetVal
                       Then While True
                              If Not IsLockRecord()
                                 Then QuitLoop
                              EndIf
                            EndWhile
  
                            CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                            If CUSTO<=0
                               Then CUSTO=[Ultimo Custo Atual]
                            EndIf
                            [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[\Sistemas\Estoque\NotaEI->Quantidade ],3)
                            [Custo Total Atual]=NDecimal([Custo Total Atual]-(CUSTO*[\Sistemas\Estoque\NotaEI->Quantidade ]),2)
                            If ([Custo Total Atual]/[Saldo Atual])>0
                               Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                            EndIf
                            UnLockRecord
                            QuitLoop
                       Else Cria_FichaTrf([\Sistemas\Estoque\NotaEI->Codigo da Empresa],[\Sistemas\Estoque\NotaEI->Codigo do Item],False)
                    EndIf
                  EndWhile

                  Moveto "\\Sistemas\\Estoque\\NotaEI"
                  Del
                  If [Numero do Lancamento]<>NUMEROL
                     Then QuitLoop
                  EndIf
                EndWhile
        EndIf
        
        ;****** Excluir Notas Referenciadas se Existir *********************
        Moveto "\\Sistemas\\Estoque\\NotaER"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
          Then While True
                 Del
                 Locate Next NUMEROL
                 If Not RetVal
                    Then QuitLoop
                 EndIf
               EndWhile
        EndIf
        
        Moveto "\\Sistemas\\Estoque\\NotaEC"
        Del
EndIf

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

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

[Codigo da Empresa        ]=[FaturaC->Codigo da Empresa]
[Codigo                   ]=[FaturaC->Codigo]
[UF                       ]=[FaturaC->UF]
;[Aliquota de ICMS         ]=[FaturaC->Aliquota de ICMS ]
[Numero do Documento      ]=NOTAFISC
[Codigo do Documento      ]=CODFISC
[Tipo de Operacao         ]="D"
If SubStr([FaturaC->CFO],1,1)="5"
   Then [CFO]="1949"
   Else [CFO]="2949"
EndIf
[Data de Emissao          ]=[FaturaC->Data de Emissao]
[Data de Entrada          ]=[FaturaC->Data de Saida]
[Tipo de Pagamento        ]="O"
[Codigo do Representante  ]=[FaturaC->Codigo do Representante  ]
[Nome Fantasia Represent  ]=[FaturaC->Nome Fantasia Represent  ]
[Comissao do Representante]=[FaturaC->Comissao do Representante]
[Valor Mercadoria         ]=[FaturaC->Valor Devolucao          ]
[Valor Mercadoria Liquido ]=[FaturaC->Valor Devolucao          ]
[Valor BCICMS             ]=[FaturaC->Valor BCSubstituicao ICMS]
[Valor ICMS               ]=[FaturaC->Valor Substituicao ICMS  ]
[Valor Nota Fiscal        ]=[FaturaC->Valor Devolucao          ]
[Frete Incluso na Nota    ]=""
[Natureza do Frete        ]=""
[Tipo CTR                 ]="0"
[Recolhimento Substituicao]="0"
[Numero Nota Original     ]=NOTAFISC
[Serie Nota Original      ]=SERIEFISC
[Sistema Gerador          ]="NF"

Controle_Dia()
UnLockrecord

Moveto "FaturaID"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]

  Moveto "\\Sistemas\\Estoque\\NotaEI"
  End
  Down

  [Numero do Lancamento    ]=NUMEROL
  [Sequencia do Lancamento ]=[FaturaID->Item da OF]
  [Codigo da Empresa       ]=[FaturaC->Codigo da Empresa]
  [Codigo do Item          ]=[FaturaID->Codigo do Item]
  [Tipo do Item            ]=[FaturaID->Tipo do Item]
  [Descricao do Item       ]=[FaturaID->Descricao do Item]
  [Codigo da Cor_Tecido    ]=[FaturaID->Codigo da Cor_Tecido]
  [Descricao da Cor_Tecido ]=[FaturaID->Descricao da Cor_Tecido]
  [Tamanho                 ]=[FaturaID->Tamanho]
  [Quantidade              ]=[FaturaID->Quantidade]
  [Unidade Fiscal          ]=[FaturaID->Unidade Fiscal]
  [Preco Unitario          ]=[FaturaID->Preco Unitario]
  if [FaturaID->Tipo Desconto Item]="U"
     then [Taxa Desconto Unitario  ]=[FaturaID->Taxa Desconto Unitario]
          [Valor Desconto Unitario ]=[FaturaID->Valor Desconto Unitario]
  endif        
  [Preco Total             ]=[FaturaID->Preco Total]
  [Preco Unitario Tabela   ]=[FaturaID->Preco Unitario Tabela]
  [Custo Medio Unitario    ]=[FaturaID->Custo Medio Unitario]

  [Tributacao de IPI       ]=[FaturaID->Tributacao de IPI]
  [Aliquota Reduzida BCIPI ]=[FaturaID->Aliquota Reduzida BCIPI ]
  [Aliquota de IPI         ]=[FaturaID->Aliquota de IPI]
  [Valor do IPI            ]=[FaturaID->Valor do IPI      ]
  [Tributacao de ICMS      ]=[FaturaID->Tributacao de ICMS]
  [Aliquota Reduzida BCICMS]=[FaturaID->Aliquota Reduzida BCICMS]
  [Aliquota de ICMS        ]=[FaturaID->Aliquota de ICMS]
  [Valor do ICMS           ]=[FaturaID->Valor do ICMS]
  [Fator de Conversao      ]= 1
  [Quantidade Convertida   ]=[FaturaID->Quantidade]
  [Comissao do Item        ]=[FaturaID->Comissao do Item]
  UnLockrecord
  
  ;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
  Verifica_Emissao_Saida([FaturaC->Data de Emissao])
  Switch
    Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida]
                                         If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
    OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
  EndSwitch
  ;-------------------------------------------------------------------------------
  MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
  ANO_EST = StrVal(Year(AUX_DATA))
  
  While True
    Moveto "\\Sistemas\\Estoque\\SdEstq"
    Moveto [Codigo da Empresa]
    Locate [FaturaC->Codigo da Empresa],
           [FaturaID->Codigo do Item], ANO_EST, MES_EST
    If RetVal
       Then While True
              If Not IsLockRecord()
                 Then QuitLoop
              EndIf
            EndWhile

            CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
            If CUSTO<=0
               Then CUSTO=[Ultimo Custo Atual]
            EndIf
            [Saldo Atual      ]=NDecimal([Saldo Atual]+[FaturaID->Quantidade],3)
            [Custo Total Atual]=NDecimal([Custo Total Atual]+([FaturaID->Quantidade]*CUSTO),2)
            If ([Custo Total Atual]/[Saldo Atual])>0
               Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
            EndIf
            UnLockRecord
            QuitLoop
       Else Cria_FichaTrf([FaturaC->Codigo da Empresa],[FaturaID->Codigo do Item],False)
    EndIf
  EndWhile

  Moveto "FaturaID"
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaR"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]

  Moveto "\\Sistemas\\Estoque\\NotaER"
  End
  Down

  [Numero do Lancamento    ]=NUMEROL
  [Sequencia do Lancamento ]=[FaturaR->Sequencia     ]

  [Modelo_Documento   ]=[FaturaR->Modelo_Documento   ]
  [Data_Documento     ]=[FaturaR->Data_Documento     ]
  [Numero_Documento   ]=[FaturaR->Numero_Documento   ] 
  [Serie_Documento    ]=[FaturaR->Serie_Documento    ]
  [SubSerie_Documento ]=[FaturaR->SubSerie_Documento ]
  [Codigo_Participante]=[FaturaR->Codigo_Participante]
  [Nome_Participante  ]=[FaturaR->Nome_Participante  ]
  [UF                 ]=[FaturaR->UF                 ]
  [CNPJ_CPF           ]=[FaturaR->CNPJ_CPF           ]
  [IE                 ]=[FaturaR->IE                 ]
  [Chave_Acesso       ]=[FaturaR->Chave_Acesso       ]
  [Numero_ECF         ]=[FaturaR->Numero_ECF         ]
  [Numero_Serie_ECF   ]=[FaturaR->Numero_Serie_ECF   ]
  [Valor              ]=[FaturaR->Valor              ]
  [IND_EMIT           ]=[FaturaR->IND_EMIT           ]
  UnLockRecord

  Moveto "FaturaR"
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Do_It!
Moveto "\\Sistemas\\Estoque\\NotaEC"  ClearImage
Moveto "\\Sistemas\\Estoque\\NotaEI"  ClearImage
Moveto "\\Sistemas\\Estoque\\NotaER"  ClearImage

Moveto "FaturaC"
CoEditKey
EndProc

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_FichaTrf(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
ESTQ_MES = AlinhM(StrVal(Month(AUX_DATA)),2)
ESTQ_ANO = StrVal(Year(AUX_DATA))

MSG="N„o foi encontrada a ficha de estoque referente a "+ESTQ_MES+"/"+ESTQ_ANO+" !// //"
MSG=MSG+Format("W08,AL","Empresa")   +"| "+Format("W11,AL","Item")   +"//"
MSG=MSG+Format("W08,AL",ESTQ_EMPRESA)+"| "+Format("W11,AL",ESTQ_ITEM)+"//"
MSG=MSG+"Observacoes:                                                           //"
MSG=MSG+"1. Talvez n„o foi executada a transferˆncia de saldos do mˆs anterior; //"
If ESTQ_CONFIRMA
   Then MSG=MSG+"2. Se for criada agora o saldo inicial deste item ser  igual a 0.      //"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cria-la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
   Else MSG=MSG+"2. A ficha do item ser  criada com o saldo inicial igual a 0.          //"
;;;;    Mensagem(MSG)
EndIf

Moveto "\\Sistemas\\Estoque\\EstqPrm"
Moveto [Codigo da Empresa]
Locate ESTQ_EMPRESA, ESTQ_ITEM
If Not RetVal
   Then End Down
        [Codigo da Empresa   ]=ESTQ_EMPRESA
        [Codigo do Item      ]=ESTQ_ITEM
        UnLockRecord
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Aguarde("Atualizando DEVOLU€¶O "+Opcaoc+" "+NOTAFISC)
Devolucoes()

Release Procs Devolucoes, Cria_FichaTrf
