;** FT_TRANS *******************************************************************
;*  Rotina de Transferencia entre Empresas                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 01/02/2001 por Anivel Augusto Rodrigues
;Ultima Alteracao: 19/02/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Quantidade Convertida
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Transferencia Custo Medio
;Ultima Alteracao: 11/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Item
;Ultima Alteracao: 16/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Item/Pega_CFOP
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 08/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes campos de tributa‡Æo
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            

;*******************************************************************************
;* Atualizacao Transferencias                                                  *
;*******************************************************************************
Proc TRANSFERENCIA()
Private NUMEROL, NE_ENCONTRADA, MES_EST, ANO_EST

If Search("TRANSF",[Descricao da Destinacao])=0
   Then Return
EndIf
If [FaturaC->Tipo]<>"E"
   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 da Empresa],
       NOTAFISC,SERIEFISC
If RetVal
   then NE_ENCONTRADA=True
   Else NE_ENCONTRADA=False
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 
                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"
                  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

                          [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[\Sistemas\Estoque\NotaEI->Quantidade ],3)
                          [Custo Total Atual]=NDecimal([Custo Total Atual]-([\Sistemas\Estoque\NotaEI->Custo Medio Unitario]*[\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
                  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"
While True
 End
 If [Numero do Lancamento]=""
    Then NUMEROL="000001"
    Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
 EndIf
 Down
 [Numero do Lancamento     ]=NUMEROL
 If Not IsLockRecord()
    Then QuitLoop
 EndIf
EndWhile
[Codigo da Empresa        ]=[FaturaC->Codigo]
[Codigo                   ]=[FaturaC->Codigo da Empresa]
[UF                       ]=[FaturaC->UF]
[Aliquota de ICMS         ]=[FaturaC->Aliquota de ICMS ]
[Numero do Documento      ]=NOTAFISC
[Codigo do Documento      ]=CODFISC
[Tipo de Operacao         ]="T"
If SubStr([FaturaC->CFO],1,1)="5"
   Then [CFO]="1152"
   Else [CFO]="2152"
EndIf
[Data de Emissao          ]=[FaturaC->Data de Emissao]
[Data de Entrada          ]=[FaturaC->Data de Saida]
[Tipo de Pagamento        ]="O"
[Codigo do Representante  ]=""
[Nome Fantasia Represent  ]=""
[Valor Mercadoria         ]=[FaturaC->Valor Mercadoria         ]
[Valor Servico            ]=[FaturaC->Valor Servico            ]
[Valor Desconto           ]=[FaturaC->Valor Desconto           ]
[Valor Mercadoria Liquido ]=[FaturaC->Valor Mercadoria Liquido ]
[Valor BCICMS             ]=[FaturaC->Valor BCICMS             ]
[Valor ICMS               ]=[FaturaC->Valor ICMS               ]
[Valor IPI                ]=[FaturaC->Valor IPI                ]
[Valor Nota Fiscal        ]=[FaturaC->Valor Nota Fiscal        ]
[Valor Despesas Acessorias]=[FaturaC->Valor Despesas Acessorias]
[Valor Substituicao ICMS  ]=[FaturaC->Valor Substituicao ICMS  ]
[Frete Incluso na Nota    ]=[FaturaC->Frete Incluso na Nota    ]
[Valor do Frete           ]=[FaturaC->Valor do Frete           ]
If [FaturaC->Aliquota BCICMS Frete]>0
   Then [Valor ICMS Frete]=NDecimal((([FaturaC->Valor do Frete]-(([FaturaC->Valor do Frete]*[FaturaC->Aliquota BCICMS Frete])/100))*[FaturaC->Aliquota de ICMS Frete])/100,2)
   Else [Valor ICMS Frete]=NDecimal(([FaturaC->Valor do Frete]*[FaturaC->Aliquota de ICMS Frete])/100,2)
EndIf
[Valor do Seguro          ]=[FaturaC->Valor do Seguro          ]
[Sistema Gerador          ]="NF"
Controle_Dia()
UnLockrecord

Moveto "FaturaI"
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 ]=[FaturaI->Item da OF]
  [Codigo da Empresa       ]=[FaturaC->Codigo]
  [Codigo do Item          ]=[FaturaI->Codigo do Item]
  [Tipo do Item            ]=[FaturaI->Tipo do Item]
  [Descricao do Item       ]=[FaturaI->Descricao do Item]
  [Codigo da Cor_Tecido    ]=[FaturaI->Codigo da Cor_Tecido]
  [Descricao da Cor_Tecido ]=[FaturaI->Descricao da Cor_Tecido]
  [Tamanho                 ]=[FaturaI->Tamanho]
  [Quantidade              ]=[FaturaI->Quantidade]
  [Unidade Fiscal          ]=[FaturaI->Unidade Fiscal]
  [Preco Unitario          ]=[FaturaI->Preco Unitario]
  [Taxa Desconto Unitario  ]=[FaturaI->Taxa Desconto Unitario]
  [Valor Desconto Unitario ]=[FaturaI->Valor Desconto Unitario]
  [Preco Total             ]=[FaturaI->Preco Total]
  [Preco Unitario Tabela   ]=[FaturaI->Preco Unitario Tabela]
  [Custo Medio Unitario    ]=[FaturaI->Preco Unitario]
;;;[Custo Medio Unitario    ]=[FaturaI->Custo Medio Unitario]
  [Valor Desconto Total    ] = NDecimal((([Preco Total]*TXDESCTO_TOTAL)/100),5)
;;; Falta Valor Acrescimo Total

  [Tributacao de IPI       ]=[FaturaI->Tributacao de IPI       ]
  [Aliquota Reduzida BCIPI ]=[FaturaI->Aliquota Reduzida BCIPI ]
  [Aliquota de IPI         ]=[FaturaI->Aliquota de IPI         ]
  [Valor do IPI            ]=[FaturaI->Valor do IPI            ]
  [IPI_CST                 ]=[FaturaI->IPI_CST                 ]
  [IPI_BC                  ]=[FaturaI->IPI_BC                  ]

  [Tributacao de ICMS      ]=[FaturaI->Tributacao de ICMS      ]
  [Aliquota Reduzida BCICMS]=[FaturaI->Aliquota Reduzida BCICMS]
  [Aliquota de ICMS        ]=[FaturaI->Aliquota de ICMS        ]
  [Valor do ICMS           ]=[FaturaI->Valor do ICMS           ]
  [ICMS_BC                 ]=[FaturaI->ICMS_BC                 ]
  [ICMS_ST_BC              ]=[FaturaI->ICMS_ST_BC              ]
  [ICMS_ST_Valor           ]=[FaturaI->ICMS_ST_Valor           ]
  [Tipo Tributacao         ]=[FaturaI->Tipo Tributacao         ]  
  [CSOSN                   ]=[FaturaI->CSOSN                   ]
  
  [Fator de Conversao      ]= 1
  [Quantidade Convertida   ]=[FaturaI->Quantidade]
  [Comissao do Item        ]=[FaturaI->Comissao do Item]

  ;* Seta Variaveis PegaCFOP
  Checa_CFOP      ="E"
  CFO_C           =[\Sistemas\Estoque\NotaEC->CFO       ]
  CFOP_TPITEM     =[Tipo do Item      ]
  CFOP_TRIBICMS   =[Tributacao de ICMS]
  CFOP_EMPRESA    =[\Sistemas\Estoque\NotaEC->Codigo da Empresa ]
  CFOP_ATIVEMPRESA=ATIVEMPR
  Play "\\Sistemas\\Exporta\\PegaCFOP"
  [CFO        ]=CFO_C

  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

  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [FaturaC->Codigo],
         [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then Cria_FichaTrf([FaturaC->Codigo],[FaturaI->Codigo do Item],False)
  EndIf
  While True
    If Not IsLockRecord()
       Then QuitLoop
    EndIf   
  EndWhile
  [Saldo Atual      ]=NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
  [Custo Total Atual]=NDecimal([Custo Total Atual]+([FaturaI->Quantidade]*[FaturaI->Preco Unitario]),2)
  If ([Custo Total Atual]/[Saldo Atual])>0
     Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  EndIf
  If [FaturaC->Data de Emissao]>=[Data do Preco de Custo]
     Then [Data do Preco de Custo]=[FaturaC->Data de Emissao]
          [Preco de Custo        ]=[FaturaI->Preco Unitario ]
	EndIf
  UnLockRecord

  Moveto "FaturaI"
  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 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 TRANSFERÒNICA "+Opcaoc+" "+NOTAFISC)
Transferencia()

Release Procs Transferencia, Cria_FichaTrf
