;** 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                            

;*******************************************************************************
;* 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

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

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

                  If PARAM_PECAS_ITEM="S" And 
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="T" 
                     Then While True
                           Moveto "\\Sistemas\\Estoque\\PecasSD"
                           Moveto [Codigo da Empresa]
                           Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa], [\Sistemas\Estoque\NotaEI->Codigo do Item], 0, ANO_EST, MES_EST
                           If RetVal
                              Then If IsLockRecord()
                                      Then Loop
                                   EndIf
                                   [Saldo Atual      ]=NDecimal([Saldo Atual]-[\Sistemas\Estoque\NotaEI->Quantidade],3)
                                   UnLockRecord
                                   QuitLoop
                              Else Cria_FichaTrf2([\Sistemas\Estoque\NotaEI->Codigo da Empresa],[\Sistemas\Estoque\NotaEI->Codigo do Item],False)
                           EndIf
                          EndWhile
                  EndIf
                  
                  Moveto "\\Sistemas\\Estoque\\NotaEI"
                  Del
                  If [Numero do Lancamento]<>NUMEROL
                     Then QuitLoop
                  EndIf
                EndWhile
        EndIf
        Moveto "\\Sistemas\\Estoque\\NotaEC"
        Del
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
End
If [Numero do Lancamento]=""
   Then NUMEROL="000001"
   Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
EndIf
Down
[Numero do Lancamento     ]=NUMEROL
[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 Servico            ]
[Valor Mercadoria Liquido ]=[FaturaC->Valor Servico            ]
[Valor BCICMS             ]=[FaturaC->Valor BCSubstituicao ICMS]
[Valor ICMS               ]=[FaturaC->Valor Substituicao ICMS  ]
[Valor Nota Fiscal        ]=[FaturaC->Valor Servico            ]
[Frete Incluso na Nota    ]=""
[Natureza do Frete        ]=""
[Tipo CTR                 ]="0"
[Recolhimento Substituicao]="0"
[Numero Nota Original     ]=NOTAFISC
[Serie Nota Original      ]=SERIEFISC
[Sistema Gerador          ]="NF"
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]
  [Taxa Desconto Unitario  ]=[FaturaID->Taxa Desconto Unitario]
  [Valor Desconto Unitario ]=[FaturaID->Valor Desconto Unitario]
  [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

  If Not IsBlank([FaturaC->Data de Saida])
     Then MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
          ANO_EST = StrVal(Year([FaturaC->Data de Saida]))
     Else MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
          ANO_EST = StrVal(Year([FaturaC->Data de Emissao]))
  EndIf

  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


  If PARAM_PECAS_ITEM="S" And 
     [FaturaID->Tipo do Item]="T" 
     Then While True
           Moveto "\\Sistemas\\Estoque\\PecasSD"
           Moveto [Codigo da Empresa]
           Locate [FaturaC->Codigo da Empresa], [FaturaID->Codigo do Item], 0, ANO_EST, MES_EST
           If RetVal
              Then If IsLockRecord()
                      Then Loop
                   EndIf
                   [Saldo Atual      ]=NDecimal([Saldo Atual]+[FaturaID->Quantidade],3)
                   If Not IsBlank([FaturaC->Data de Saida])
                      Then If [FaturaC->Data de Saida]>[Ultima_Entrada]
                              Then [Ultima_Entrada]=[FaturaC->Data de Saida]
                            EndIf
                       Else If [FaturaC->Data de Emissao]>[Ultima_Entrada]
                               Then [Ultima_Entrada]=[FaturaC->Data de Emissao]
                            EndIf
                   EndIf
                   UnLockRecord
                   QuitLoop
              Else Cria_FichaTrf2([FaturaC->Codigo da Empresa],[FaturaID->Codigo do Item],False)
           EndIf
          EndWhile
  EndIf
  
  Moveto "FaturaID"
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaC"
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

If Not IsBlank([FaturaC->Data de Saida])
   Then ESTQ_MES = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
        ESTQ_ANO = StrVal(Year([FaturaC->Data de Saida]))
   Else ESTQ_MES = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
        ESTQ_ANO = StrVal(Year([FaturaC->Data de Emissao]))
EndIf

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 mes 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 para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_FichaTrf2(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES

If Not IsBlank([FaturaC->Data de Saida])
   Then ESTQ_MES = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
        ESTQ_ANO = StrVal(Year([FaturaC->Data de Saida]))
   Else ESTQ_MES = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
        ESTQ_ANO = StrVal(Year([FaturaC->Data de Emissao]))
EndIf

Moveto "\\Sistemas\\Estoque\\PecasSD"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, 0, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Codigo da Peca      ]=0
          [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, Cria_FichaTrf2
